From 7cea060179cc13912662736c676609427b5441c0 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Thu, 28 May 2026 20:59:44 +0300 Subject: [PATCH] =?UTF-8?q?fix(geom8=20ch4):=20=C2=A712=20=D0=BC=D0=B0?= =?UTF-8?q?=D0=BB=D0=B0=D1=8F=20=D0=B4=D1=83=D0=B3=D0=B0=20=D0=B2=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=BE?= =?UTF-8?q?=D0=B9=20+=20=C2=A716=20=D1=81=D0=BB=D0=B0=D0=B9=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=20=D0=B8=20=D0=BA=D0=B0=D0=BB=D1=8C=D0=BA=D1=83=D0=BB?= =?UTF-8?q?=D1=8F=D1=82=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §12 Card 12.1, 12.3 (угол между касательной и хордой): - Дуга AB рисовалась с sweep=1 — это ДЛИННАЯ дуга через левую сторону (250°). Но теорема говорит про малую дугу 'внутри угла' между касательной и хордой, которая на ПРАВОЙ стороне (~110°). - Изменено на sweep=0 — теперь рисуется правильная малая дуга справа, та самая что 'inside the angle'. §16 Интерактив 1 'PT² = PA·PB': - Слайдер угла секущей имел range 5..60° но математически возможен только до asin(R/PO)=asin(62/147)≈25°. При угле > 25° секущая пролетает мимо окружности (disc<0), SVG не рендерится — пользователь видел пустой блок. - Range изменён на 2..22° (с запасом). Default value 12°. Теперь всегда рендерится корректный SVG с касательной + секущей. §16 Интерактив 3 'Калькулятор': - В результате 'PT = \u221a(PA\u00b7PB)' писались литеральные unicode-escape строки (двойные backslash в template literal становятся одиночными в строке, но \u221a не trigger escape → литеральная строка '\u221a'). Заменено на настоящие символы √ и · в коде. - Добавлен SVG слева от калькулятора с диаграммой PT²=PA·PB (касательная PT, секущая PAB из внешней точки P). Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/textbooks/geometry_8_ch4.html | 53 +++++++++++++++++++------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/frontend/textbooks/geometry_8_ch4.html b/frontend/textbooks/geometry_8_ch4.html index 0d0b1c4..3e4e655 100644 --- a/frontend/textbooks/geometry_8_ch4.html +++ b/frontend/textbooks/geometry_8_ch4.html @@ -4790,8 +4790,8 @@ function buildP12(){ - - + + @@ -4840,8 +4840,8 @@ function buildP12(){ - - + + @@ -6494,8 +6494,8 @@ function buildP16(){
ИНТЕРАКТИВ 1
PT² = PA · PB (живая демонстрация)
Меняй положение секущей слайдером. PT² всегда равно PA·PB.
-
@@ -6518,14 +6518,39 @@ function buildP16(){ html+=`
ИНТЕРАКТИВ 3
Калькулятор: PT² = PA · PB
Выбери что искать: PT, PA или PB.
-
- - - +
+ + + + + + + + + + + + T + A + B + P + O + PT + PA + PB + PT² = PA · PB + +
+
+ + + +
+
+ + +
-
- -
`; /* ИНТЕРАКТИВ 4 — тренажёр */ @@ -6715,7 +6740,7 @@ function buildP16(){ const out=document.getElementById('p16-calc-out'); const modes={ pt:{label:'Найти PT',fields:[['PA','p16-cpa','4'],['PB','p16-cpb','9']], - calc:()=>{const pa=parseFloat(document.getElementById('p16-cpa').value),pb=parseFloat(document.getElementById('p16-cpb').value);if(isNaN(pa)||isNaN(pb)||pa<=0||pb<=0||pa>=pb)return{err:'PA и PB > 0, PA < PB'};const pt=Math.sqrt(pa*pb);return{ok:'PT = \\u221a(PA\\u00b7PB) = \\u221a('+pa+'\\u00b7'+pb+') = '+pt.toFixed(4)};}}, + calc:()=>{const pa=parseFloat(document.getElementById('p16-cpa').value),pb=parseFloat(document.getElementById('p16-cpb').value);if(isNaN(pa)||isNaN(pb)||pa<=0||pb<=0||pa>=pb)return{err:'PA и PB > 0, PA < PB'};const pt=Math.sqrt(pa*pb);return{ok:'PT = √(PA·PB) = √('+pa+'·'+pb+') = '+pt.toFixed(4)};}}, pa:{label:'Найти PA',fields:[['PT','p16-cpt2','6'],['PB','p16-cpb2','9']], calc:()=>{const pt=parseFloat(document.getElementById('p16-cpt2').value),pb=parseFloat(document.getElementById('p16-cpb2').value);if(isNaN(pt)||isNaN(pb)||pt<=0||pb<=0||pt*pt>=pb*pb)return{err:'PT и PB > 0, PT < PB'};const pa=pt*pt/pb;return{ok:'PA = PT²/PB = '+pt+'²/'+pb+' = '+pa.toFixed(4)};}}, pb:{label:'Найти PB',fields:[['PT','p16-cpt3','6'],['PA','p16-cpa3','4']],