From f9f6a04c8815890cb7411c828918a817f89f36bf Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Thu, 28 May 2026 14:55:00 +0300 Subject: [PATCH] =?UTF-8?q?fix(geom8=20ch3):=20=D0=B0=D1=83=D0=B4=D0=B8?= =?UTF-8?q?=D1=82=20=C2=A71,=20=C2=A73,=20=C2=A75,=20=C2=A76,=20=C2=A77=20?= =?UTF-8?q?=E2=80=94=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B3=D0=B5=D0=BE=D0=BC=D0=B5=D1=82=D1=80=D0=B8?= =?UTF-8?q?=D1=8F=20SVG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §1 Доказательство Фалеса: точки пересечения трёх параллельных секущих со второй стороной угла были заданы фиксированно (y=65/92/119), но по геометрии должны вычисляться из наклона второй стороны (slope=-80/230). Пересчитано во всех 5 шагах + добавлены метки точек, штрихи равенства параллельных отрезков, корректные подписи A'/B'/C'. Step 5: вертикальные линии заменены на отрезки между двумя секущими. §3 Card 3.1: треугольник A'B'C' не был подобен ABC (отношения сторон 1.59 vs 2.06). Пересчитан как точное масштабирование ABC с коэффициентом k=2 относительно якоря B. Также фикс баги 'a/a*k/k' (всегда =1) в подписи коэффициента. §5 Card 5.1: малый треугольник не подобен большому (отношения 1.71/2.03/1.88). Пересчитан с k=2 от якоря B. Босс задача 1: тоже не подобен — исправлен на k=3. Step 1 доказательства: тоже исправлен на k=5/3. §6 Card 6.1: треугольники имели разные углы ∠A (68.6° vs 50.8°) и непропорциональные стороны. Пересчитано с равными углами в A и пропорцией k=2. Босс задача 1: viewBox расширен, координаты исправлены на k=1.5. Step 1: исправлено на k=2. §7 Card 7.1: стороны не пропорциональны (2.68/1.68/1.80). Пересчитано с k=2.5 от якоря B. Step 1: исправлено на k=2. Интерактивные слайдеры (§3 k, §5 α/β/k, §6 SAS, §7 SSS) — проверены, они корректно вычисляют координаты по слайдерам. Всего: 18 статичных + 5 интерактивных SVG проверено, 12 исправлено. Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/textbooks/geometry_8_ch3.html | 232 +++++++++++++++---------- 1 file changed, 142 insertions(+), 90 deletions(-) diff --git a/frontend/textbooks/geometry_8_ch3.html b/frontend/textbooks/geometry_8_ch3.html index b765d68..97f27d1 100644 --- a/frontend/textbooks/geometry_8_ch3.html +++ b/frontend/textbooks/geometry_8_ch3.html @@ -659,38 +659,57 @@ function buildP1(){ const steps=[ {desc:'Шаг 1. Даны два луча из вершины O и три параллельные прямые, пересекающие их в точках A, B, C и A\', B\', C\'.', svg:()=>{ + // Ray 1: horizontal from O=(20,140) to (250,140) + // Ray 2: from O=(20,140) to (250,60), slope = (60-140)/(250-20) = -80/230 + // Parallel transversals at x=70,150,230 (vertical) + // Intersection with ray 2: y = 140 + (x-20)*(-80/230) + // x=70: y = 140 - 50*80/230 ≈ 123 + // x=150: y = 140 - 130*80/230 ≈ 95 + // x=230: y = 140 - 210*80/230 ≈ 67 const W=260,H=160,Ox=20,Oy=140; let s=``; s+=``; s+=``; - [[70,140,70,65],[150,140,150,92],[230,140,230,119]].forEach(([x1,y1,x2,y2])=>{ + // parallels: connect point on ray1 to correctly computed point on ray2 + [[70,140,70,123],[150,140,150,95],[230,140,230,67]].forEach(([x1,y1,x2,y2])=>{ s+=``; }); s+=`O`; ['A','B','C'].forEach((l,i)=>s+=`${l}`); - ['A\'','B\'','C\''].forEach((l,i)=>s+=`${l}`); + ['A\'','B\'','C\''].forEach((l,i)=>s+=`${l}`); s+='';return s;}}, {desc:'Шаг 2. Через точки A, B, C проводим прямые, параллельные второму лучу. Получаем параллелограммы.', svg:()=>{ + // Same geometry as step 1. Corrected y′ values on ray 2. + // Ray 2 direction vector: (230,-80). Auxiliary lines from A,B parallel to ray 2: + // From A=(70,140) in dir (230,-80) scaled: Δx=80 → Δy=-80*80/230≈-28 → meets x=150 at y≈112 + // From B=(150,140) in dir (230,-80): meets x=230 at y≈112 const W=260,H=160,Ox=20,Oy=140; let s=``; s+=``; s+=``; - [[70,140,70,65],[150,140,150,92],[230,140,230,119]].forEach(([x1,y1,x2,y2])=>{ + [[70,140,70,123],[150,140,150,95],[230,140,230,67]].forEach(([x1,y1,x2,y2])=>{ s+=``; }); - // вспомогательные параллельные линии через A, B - s+=``; - s+=``; - s+=`параллелограмм`; + // auxiliary lines from A and B parallel to ray 2 (direction (230,-80)) + s+=``; + s+=``; + s+=`параллелограмм`; s+='';return s;}}, {desc:'Шаг 3. В параллелограмме противоположные стороны равны: $A_1B_1 = AB_2 = AB$, поэтому параллельная прямая откладывает равные отрезки на обоих лучах (если исходные части равны).', svg:()=>{ + // Parallelogram: A=(70,140), B=(150,140) on ray1; A'=(70,123), aux=(150,112) from auxiliary line + // This forms parallelogram A-B-aux-A' with A'B' (on ray2) as the top side const W=260,H=160; let s=``; - s+=``; - s+=`Параллелограмм`; - s+=`AB = A'B'`; + s+=``; + // tick marks on parallel sides AB and A'B'' to show equality + s+=``; + s+=``; + s+=``; + s+=``; + s+=`Параллелограмм`; + s+=`AB = A\'B\' (пр. стор.)`; s+='';return s;}}, {desc:'Шаг 4. Если параллельные прямые делят луч на равные части, то и второй луч делится на равные части. Это и есть теорема Фалеса в классической форме.', svg:()=>{ @@ -698,23 +717,46 @@ function buildP1(){ let s=``; s+=``; s+=``; - [[70,140,70,65],[150,140,150,92],[230,140,230,119]].forEach(([x1,y1,x2,y2])=>{ + // corrected y′ values on ray2: y=140+(x-20)*(-80/230) + [[70,140,70,123],[150,140,150,95],[230,140,230,67]].forEach(([x1,y1,x2,y2])=>{ s+=``; }); - // равные отрезки - s+=`равно`; - s+=`равно`; + // равные отрезки — tick marks on ray1 segments + [[110,140],[190,140]].forEach(([x,y])=>{ + s+=``; + }); + // tick marks on ray2 segments + [[110,109],[190,81]].forEach(([x,y])=>{ + s+=``; + }); + s+=`AB=AB`; + s+=`BC=BC`; s+='';return s;}}, {desc:'Шаг 5. Обобщённая теорема Фалеса: при произвольных параллельных прямых (не обязательно с равными частями) отрезки на двух лучах всё равно пропорциональны: $\\dfrac{AB}{BC}=\\dfrac{A\'B\'}{B\'C\'}$. Доказано.', svg:()=>{ + // Ray1: O=(20,140) horizontal to (250,140) + // Ray2: O=(20,140) to (250,50), slope=-90/230 + // 2 parallel verticals at x=80 and x=170 + // Ray2 intersections: x=80 → y=140-60*90/230≈117; x=170 → y=140-150*90/230≈81 const W=260,H=160; let s=``; s+=``; s+=``; - s+=``; - s+=``; - s+=`AB/BC = A'B'/B'C'`; - s+=`QED`; + // parallel transversals from ray1 to ray2 (not full vertical lines - just the segments) + s+=``; + s+=``; + // dot intersections on both rays + s+=``; + s+=``; + s+=``; + s+=``; + s+=`A`; + s+=`B`; + s+=`A'`; + s+=`B'`; + s+=`O`; + s+=`AB/A'B' = OA/OA'`; + s+=`QED ∎`; s+='';return s;}}, ]; let step=0; @@ -1216,22 +1258,25 @@ function buildP3(){

где $k > 0$ — коэффициент подобия.

Обозначения: стороны треугольника: $a=BC$, $b=CA$, $c=AB$ и $a'=B'C'$, $b'=C'A'$, $c'=A'B'$.

- - - - A - B - C - - - A' - B' - C' - - k = a/a' = b/b' = c/c' + + + + + A + B + C + + + + + A' + B' + C' + + k=2: a/a'=b/b'=c/c'=2 - ∠B - ∠B' + ∠B + ∠B'
`); @@ -1372,7 +1417,7 @@ function buildP3(){ s+=`k = ${k.toFixed(1)}`; s+=''; svgWrap.innerHTML=s; - infoEl.innerHTML=`$k=${k.toFixed(1)}$: $a/a'=${fmt(a/a*k/k)} \\to a'=${fmt(a/10/k)}$, $b'=${fmt(b/10/k)}$, $c'=${fmt(c/10/k)}$. Углы всегда равны: $\\angle A=\\angle A', \\angle B=\\angle B', \\angle C=\\angle C'$.`; + infoEl.innerHTML=`$k=${k.toFixed(1)}$: $a/a'=k=${k.toFixed(1)} \\to a'=${fmt(a/10/k)}$, $b'=${fmt(b/10/k)}$, $c'=${fmt(c/10/k)}$. Углы всегда равны: $\\angle A=\\angle A', \\angle B=\\angle B', \\angle C=\\angle C'$.`; renderMath(infoEl); addXp(1,'p3-sim'); } @@ -1918,24 +1963,27 @@ function buildP5(){

Если $\\angle A = \\angle A'$ и $\\angle B = \\angle B'$, то $\\triangle ABC \\sim \\triangle A'B'C'$.

Почему достаточно двух углов? Сумма углов треугольника равна $180°$. Если два угла равны, третий автоматически тоже равен: $\\angle C = 180° - \\angle A - \\angle B = 180° - \\angle A' - \\angle B' = \\angle C'$.

- - - - A - B - C - - + + + + + A + B + C + + - - - A' - B' - C' - - - - ∠A=∠A', ∠B=∠B' → △ABC∼△A'B'C' + + + + + A' + B' + C' + + + + ∠A=∠A', ∠B=∠B' → △ABC∼△A'B'C', k=2
`); @@ -2146,7 +2194,7 @@ function buildP5(){ (function(){ const steps=[ {desc:'Шаг 1. Даны $\\triangle ABC$ и $\\triangle A\'B\'C\'$ с $\\angle A = \\angle A\'$ и $\\angle B = \\angle B\'$. Требуется доказать $\\triangle ABC \\sim \\triangle A\'B\'C\'$.', - svg:`ABCA'B'C'∠A=∠A', ∠B=∠B' — условие`}, + svg:`ABCA\'B\'C\'∠A=∠A\', ∠B=∠B\' — условие, k≈5/3`}, {desc:'Шаг 2. Из суммы углов треугольника: $\\angle C = 180° - \\angle A - \\angle B$ и $\\angle C\' = 180° - \\angle A\' - \\angle B\'$. Так как $\\angle A=\\angle A\'$ и $\\angle B=\\angle B\'$, получаем $\\angle C = \\angle C\'$.', svg:`∠A+∠B+∠C = 180°∠A'+∠B'+∠C' = 180°∠C = 180°−∠A−∠B = 180°−∠A'−∠B' = ∠C'`}, {desc:'Шаг 3. На луче $A\'B\'$ откладываем отрезок $A\'M = AB$. Через $M$ проводим прямую, параллельную $B\'C\'$ — она встречает $A\'C\'$ в точке $N$. По теореме §4: $\\triangle A\'MN \\sim \\triangle A\'B\'C\'$.', @@ -2301,7 +2349,7 @@ function buildP5(){ /* == INIT: Босс §5 == */ (function(){ const tasks=[ - {q:'ABCA\'B\'C\'∠A=∠A\'=60°, ∠B=∠B\'=80°$\\angle A=\\angle A\'=60°$, $\\angle B=\\angle B\'=80°$. $AB=15$, $A\'B\'=5$. Найди $k$.',ans:3,hint:'k=AB/A\'B\'=15/5=3.'}, + {q:'ABCA\'B\'C\'∠A=∠A\'=60°, ∠B=∠B\'=80°, k=3$\\angle A=\\angle A\'=60°$, $\\angle B=\\angle B\'=80°$. $AB=15$, $A\'B\'=5$. Найди $k$.',ans:3,hint:'k=AB/A\'B\'=15/5=3.'}, {q:'Два прямоугольных треугольника. Острый угол одного $42°$, другого $42°$. Подобны ли? Гипотенуза первого $13$, второго $6.5$. Найди $k$.',ans:2,hint:'Подобны (ДД). k=13/6.5=2.'}, {q:'$\\triangle ABC \\sim \\triangle A\'B\'C\'$ по ДД. $k=4$. Периметр $\\triangle A\'B\'C\'=18$. Найди периметр $\\triangle ABC$.',ans:72,hint:'P=k·P\'=4·18=72.'}, {q:'В $\\triangle ABC$ и $\\triangle DEF$: $\\angle A=\\angle D=55°$, $\\angle B=\\angle E=75°$. $BC=20$, $EF=8$. Найди $k=BC/EF$.',ans:2.5,hint:'k=20/8=2.5.'}, @@ -2337,29 +2385,31 @@ function buildP6(){

Если $\\dfrac{AB}{A'B'} = \\dfrac{AC}{A'C'} = k$ и $\\angle A = \\angle A'$, то $\\triangle ABC \\sim \\triangle A'B'C'$.

Это означает: двух пропорциональных сторон и равного угла между ними достаточно для подобия — третью сторону и остальные углы можно не проверять.

- - + + + - - + + - A - B - C - AB - AC - - - - - A' - B' - C' - A'B' - A'C' - - ∠A = ∠A' - AB/A'B' = AC/A'C' = k → △ABC∼△A'B'C' + A + B + C + AB + AC + + + + + + A' + B' + C' + A'B' + A'C' + + ∠A = ∠A' (равны) + AB/A'B' = AC/A'C' = k=2 → △ABC∼△A'B'C'
`); @@ -2563,7 +2613,7 @@ function buildP6(){ (function(){ const steps=[ {desc:'Шаг 1. Дано: $\\dfrac{AB}{A\'B\'} = \\dfrac{AC}{A\'C\'} = k$ и $\\angle A = \\angle A\'$. Нужно доказать: $\\triangle ABC \\sim \\triangle A\'B\'C\'$.', - svg:`ABCA'B'C'AB/A'B'=AC/A'C'=k, ∠A=∠A'`}, + svg:`ABCA\'B\'C\'AB/A\'B\'=AC/A\'C\'=k=2, ∠A=∠A\'`}, {desc:'Шаг 2. На луче $A\'B\'$ откладываем точку $M$ так, что $A\'M = AB$. Через $M$ проводим прямую $MN \\parallel B\'C\'$, где $N$ на луче $A\'C\'$.', svg:`A'B'C'MNA'M=AB, MN∥B'C'`}, {desc:'Шаг 3. По теореме о прямой, параллельной стороне (§4): $\\dfrac{A\'M}{A\'B\'} = \\dfrac{A\'N}{A\'C\'}$. Так как $A\'M = AB$ и $\\dfrac{AB}{A\'B\'} = k$, получаем $A\'N = A\'C\' \\cdot \\dfrac{AB}{A\'B\'}= AC$.', @@ -2699,7 +2749,7 @@ function buildP6(){ /* == INIT: Босс §6 == */ (function(){ const tasks=[ - {q:'ABCA\'B\'C\'AB=9, AC=12, A\'B\'=6, A\'C\'=8, ∠A=∠A\'$AB=9$, $AC=12$, $A\'B\'=6$, $A\'C\'=8$, $\\angle A=\\angle A\'$. Найди $k=AB/A\'B\'$.',ans:1.5,hint:'k=9/6=1.5. Проверь: 12/8=1.5. ✓ Признак СУС выполнен.'}, + {q:'ABCA\'B\'C\'AB=9,AC=12,A\'B\'=6,A\'C\'=8,∠A=∠A\',k=1.5$AB=9$, $AC=12$, $A\'B\'=6$, $A\'C\'=8$, $\\angle A=\\angle A\'$. Найди $k=AB/A\'B\'$.',ans:1.5,hint:'k=9/6=1.5. Проверь: 12/8=1.5. ✓ Признак СУС выполнен.'}, {q:'$\\triangle ABC \\sim \\triangle A\'B\'C\'$ по СУС, $k=4$. Стороны второго: $A\'B\'=3$, $A\'C\'=5$. Чему равно $AB+AC$?',ans:32,hint:'AB=4·3=12, AC=4·5=20. Сумма 32.'}, {q:'$AB=10$, $AC=15$, $\\angle A=60°$. По признаку СУС треугольник подобен другому с $k=2.5$. Найди $A\'B\'$.',ans:4,hint:'A\'B\'=AB/k=10/2.5=4.'}, {q:'Даны два треугольника: $AB=18$, $AC=12$, $A\'B\'=6$, $A\'C\'=4$, $\\angle A=\\angle A\'=75°$. Найди $BC$, если $B\'C\'=5$.',ans:15,hint:'k=18/6=3. BC=k·B\'C\'=3·5=15.'}, @@ -2737,26 +2787,28 @@ function buildP7(){

Здесь $a=BC$, $b=AC$, $c=AB$ и аналогично для второго треугольника. Это самый сильный признак — он не требует проверки углов.

- + + A B C - c=AB - a=BC - b=AC - - - A' - B' - C' + c=AB + a=BC + b=AC + + + + A' + B' + C' - c' - a' - b' + c' + a' + b' - a/a' = b/b' = c/c' = k → △ABC∼△A'B'C' + a/a'=b/b'=c/c'=k≈2.5 → △ABC∼△A'B'C'
`); @@ -2975,7 +3027,7 @@ function buildP7(){ (function(){ const steps=[ {desc:'Шаг 1. Дано: $\\dfrac{a}{a\'}=\\dfrac{b}{b\'}=\\dfrac{c}{c\'}=k$. Нужно доказать: $\\triangle ABC \\sim \\triangle A\'B\'C\'$.', - svg:`ABCA'B'C'a/a'=b/b'=c/c'=k — условие`}, + svg:`ABCA\'B\'C\'a/a\'=b/b\'=c/c\'=k (k≈2) — условие`}, {desc:'Шаг 2. На луче $A\'B\'$ откладываем $A\'M = AB = k \\cdot A\'B\'$. Через $M$ проводим $MN \\parallel B\'C\'$, $N$ на $A\'C\'$. По теореме §4: $\\triangle A\'MN \\sim \\triangle A\'B\'C\'$.', svg:`A'B'C'MNA'M=AB, MN∥B'C'`}, {desc:'Шаг 3. Поскольку $\\triangle A\'MN \\sim \\triangle A\'B\'C\'$ с коэффициентом $k$, все стороны $\\triangle A\'MN$ равны соответствующим сторонам $\\triangle ABC$: $A\'M=AB$, $MN=a$, $A\'N=b$.',