From 9b6a9adaf9ca7ed3858c858a58c3513d63613063 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Thu, 28 May 2026 20:15:22 +0300 Subject: [PATCH] =?UTF-8?q?fix(geom8=20ch4):=20=D0=B0=D1=83=D0=B4=D0=B8?= =?UTF-8?q?=D1=82=20=C2=A712-=C2=A716=20=E2=80=94=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D1=8B=D0=B5=20=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D1=81=D0=B5=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=85=D0=BE?= =?UTF-8?q?=D1=80=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Найдено 6 геометрических SVG-фиксов (LaTeX везде чист): §13 Card 13.1 (две хорды): точки A,B,C,D были смещены от окружности, точка P не лежала на обеих хордах. Пересчитаны через (cx+R·cos θ, cy+R·sin θ) с r=65; P=(126,74) — настоящее пересечение хорд AB и CD. §13 Proof: углы 210°/290°/350°/70° давали хорды AC и BD которые НЕ пересекались внутри окружности. Изменены на 220°/10°/130°/300° — P=(119,71) внутри. §14 Card 14.1: точки секущих не лежали на окружности и линии от P не проходили через обе точки пересечения. Пересчитаны как реальные пересечения секущих с окружностью при углах ±20°/-10°. §14 Proof: A,B,C,D построены как окружностные точки без проверки коллинеарности с P. Заменены на построение через хелпер _sec() с углами ±15° от P. §15 Card 15.1: P=(116,87) но хорды пересекались в (114.7,88.1) — 2px разница. P сдвинут на (114,88); концы хорд пересчитаны точно на окружность r=65. §16 Card 16.1: T не была настоящей точкой касания (OT⊥PT нарушено). T пересчитана как настоящая касательная из P через asin(R/|OP|); добавлен маркер прямого угла; A,B заменены на реальные пересечения секущей. KaTeX-эскейпы в §12-§16 проверены — все \angle, \dfrac и т.п. корректно удвоены. Математика в задачах проверена выборочно — без ошибок. Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/textbooks/geometry_8_ch4.html | 116 +++++++++++++------------ 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/frontend/textbooks/geometry_8_ch4.html b/frontend/textbooks/geometry_8_ch4.html index 418b6fd..32880e2 100644 --- a/frontend/textbooks/geometry_8_ch4.html +++ b/frontend/textbooks/geometry_8_ch4.html @@ -5150,21 +5150,21 @@ function buildP13(){ - - - - - - - - - - A - C - B - D - P - ½(⌢AC+⌢BD) + + + + + + + + + + A + B + C + D + P + ½(⌢AC+⌢BD) `); @@ -5326,8 +5326,8 @@ function buildP13(){ /* === INIT 2: пошаговое доказательство === */ (function(){ const R=55, cx=115, cy=85, W=250, H=175; - const aA=210*Math.PI/180, aC=290*Math.PI/180; - const aB=350*Math.PI/180, aD=70*Math.PI/180; + const aA=220*Math.PI/180, aC=10*Math.PI/180; + const aB=130*Math.PI/180, aD=300*Math.PI/180; const Ax=cx+R*Math.cos(aA), Ay=cy+R*Math.sin(aA); const Ccx=cx+R*Math.cos(aC), Ccy=cy+R*Math.sin(aC); const Bx=cx+R*Math.cos(aB), By=cy+R*Math.sin(aB); @@ -5533,19 +5533,19 @@ function buildP14(){ - - - - - - - - + + + + + + + + P - C - A - D - B + C + A + D + B ∠P = ½(⌢AB − ⌢CD) `); @@ -5704,10 +5704,15 @@ function buildP14(){ (function(){ const R=52, cx=105, cy=80, W=260, H=165; const Px=242, Py=80; - const Ax=cx+R*Math.cos(Math.PI+60*Math.PI/180), Ay=cy+R*Math.sin(Math.PI+60*Math.PI/180); - const Bx=cx+R*Math.cos(Math.PI-60*Math.PI/180), By=cy+R*Math.sin(Math.PI-60*Math.PI/180); - const Ccx=cx+R*Math.cos(Math.PI+25*Math.PI/180), Ccy=cy+R*Math.sin(Math.PI+25*Math.PI/180); - const Dx=cx+R*Math.cos(Math.PI-25*Math.PI/180), Dy=cy+R*Math.sin(Math.PI-25*Math.PI/180); + // Secants from P: computed as actual intersections with the circle + const _base=Math.atan2(cy-Py,cx-Px); + function _sec(offDeg){const a=_base+offDeg*Math.PI/180,dx=Math.cos(a),dy=Math.sin(a),b=2*((Px-cx)*dx+(Py-cy)*dy),c=(Px-cx)**2+(Py-cy)**2-R*R,d=b*b-4*c,t1=(-b-Math.sqrt(d))/2,t2=(-b+Math.sqrt(d))/2;return[{x:Px+t1*dx,y:Py+t1*dy},{x:Px+t2*dx,y:Py+t2*dy}];} + const _s1=_sec(15), _s2=_sec(-15); + // s1: near=C, far=A; s2: near=D, far=B + const Ccx=_s1[0].x, Ccy=_s1[0].y; + const Ax=_s1[1].x, Ay=_s1[1].y; + const Dx=_s2[0].x, Dy=_s2[0].y; + const Bx=_s2[1].x, By=_s2[1].y; const steps=[ {text:'Дано: Из точки $P$ вне окружности проведены две секущие. Одна пересекает в $C, A$ ($C$ ближе к $P$), другая — в $D, B$ ($D$ ближе к $P$). Доказать: $\\angle P = \\dfrac{1}{2}(\\smile AB - \\smile CD)$.'}, {text:'Шаг 1. Соединим точки $A$ и $D$. Рассмотрим треугольник $\\triangle PAD$.'}, @@ -5904,19 +5909,19 @@ function buildP15(){ - - - - - - - - A - B - C - D - P - PA·PB = PC·PD + + + + + + + + A + B + C + D + P + PA·PB = PC·PD `); @@ -6306,16 +6311,17 @@ function buildP16(){ - - - - - - + + + + + + + P - T - A - B + T + A + B O PT PA · PB