From 8b8616e1de2bb32adf44639989ffc87227fe6fe1 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Fri, 29 May 2026 10:57:58 +0300 Subject: [PATCH] =?UTF-8?q?fix(geom9=20ch2):=20R,=20r=20=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D1=82=D1=8B=20=D0=B2=20=D1=80=D0=B5=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=B5=D0=B4=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D1=86=D0=B0=D1=85=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=B8=D0=BA=D1=81=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §7 IV1 «Описанная и вписанная окружности»: - было: R ≈ 73.8, r ≈ 21.5 — числа в SVG-пикселях - стало: коэффициент px/единица = 17 (twoR=170px → 2R=10), выводятся R ≈ 4.34, r ≈ 1.26 в учебных единицах §8 IV1 «Окружности прямоугольного треугольника»: - было: слайдеры катетов 40..160, подписи a=120, b=90, гипотенуза c=150 — пиксели, выглядит как абсурдные длины - стало: слайдеры 2..8 ед. с шагом 0.1, K=30 px/ед., всё показывается в единицах. Формулы $c = \sqrt{6^2+4.5^2}$ и $R, r$ — нормальные геометрические числа Co-Authored-By: Claude Haiku 4.5 --- frontend/textbooks/geometry_9_ch2.html | 53 ++++++++++++++++---------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/frontend/textbooks/geometry_9_ch2.html b/frontend/textbooks/geometry_9_ch2.html index 9c420ad..3ceea07 100644 --- a/frontend/textbooks/geometry_9_ch2.html +++ b/frontend/textbooks/geometry_9_ch2.html @@ -652,7 +652,11 @@ function buildP7(){ svg.innerHTML = s; const place = P.kind==='in' ? 'внутри треугольника' : (P.kind==='hyp' ? 'на гипотенузе' : 'снаружи треугольника'); - out.innerHTML = 'Углы: '+Ad+'°, '+Bd+'°, '+Cd+'°  ·  $R \\approx '+R.toFixed(1)+'$  ·  $r \\approx '+r.toFixed(1)+'$
Центр $O$ находится '+place+'.'; + // twoR = 170 px соответствует 2R = 10 ед. → коэффициент px / ед. = 17 + const pxPerUnit = 17; + const Ru = R / pxPerUnit; + const ru = r / pxPerUnit; + out.innerHTML = 'Углы: '+Ad+'°, '+Bd+'°, '+Cd+'°  ·  $R \\approx '+Ru.toFixed(2)+'$  ·  $r \\approx '+ru.toFixed(2)+'$
Центр $O$ находится '+place+'.'; renderMath(out); seen.add(idx); if(seen.size>=4 && !seen.has('done')){ addXp(10,'p7-iv1'); bumpProgress('p7',15); seen.add('done'); } @@ -805,8 +809,8 @@ function buildP8(){
ИНТЕРАКТИВ 1
Окружности прямоугольного треугольника
Меняй катеты ползунками — гипотенуза, $R$ и $r$ пересчитаются. Заметь: центр описанной — посередине гипотенузы.
- - + +
@@ -873,30 +877,38 @@ function buildP8(){ const out=document.getElementById('p8-iv1-out'); const seen=new Set(); function draw(){ + // a, b — катеты в единицах (диапазон 2..8). Для отрисовки умножаем на K. const a=+aS.value, b=+bS.value; - aL.textContent=a; bL.textContent=b; - // Вершины: C = прямой угол (нижний-левый), B = (a, 0) — катет a по горизонтали, A = (0, -b) + aL.textContent=a.toFixed(1); bL.textContent=b.toFixed(1); + const K=30; // px на единицу + const aPx=a*K, bPx=b*K; + // Вершины (в SVG-координатах): + // C — прямой угол, нижний-левый. + // B — нижний-правый (горизонтальный катет от C, длиной a). + // A — верхний-левый (вертикальный катет от C, длиной b). const margin=40; - const C={x:margin, y:margin+b}; - const B={x:margin+a, y:margin+b}; + const C={x:margin, y:margin+bPx}; + const B={x:margin+aPx, y:margin+bPx}; const A={x:margin, y:margin}; - const c=Math.hypot(a,b); - const R=c/2; - const r=(a+b-c)/2; + const c=Math.hypot(a,b); // в единицах + const cPx=Math.hypot(aPx,bPx); // в пикселях + const R=c/2; // в единицах + const r=(a+b-c)/2; // в единицах + const RPx=cPx/2; + const rPx=(aPx+bPx-cPx)/2; // Центр описанной — середина гипотенузы AB const O={x:(A.x+B.x)/2, y:(A.y+B.y)/2}; - // Центр вписанной: на (r, r) от вершины прямого угла внутрь. - // C — нижний-левый; внутрь треугольника направление: +x (к B), -y (к A) - const I={x:C.x+r, y:C.y-r}; + // Центр вписанной — на (r, r) от прямого угла C внутрь треугольника + const I={x:C.x+rPx, y:C.y-rPx}; const uCA=unitVec(C,A); const uCB=unitVec(C,B); let s=''; s += ''; // Описанная окружность - s += ''; + s += ''; // Вписанная - s += ''; + s += ''; // Треугольник s += ''; // Прямой угол в C @@ -913,15 +925,14 @@ function buildP8(){ s += 'A'; s += 'B'; s += 'C'; - // Подписи сторон - s += 'a='+a+''; - s += 'b='+b+''; - // Гипотенуза + // Подписи сторон — в единицах + s += 'a='+a.toFixed(1)+''; + s += 'b='+b.toFixed(1)+''; const midAB={x:(A.x+B.x)/2, y:(A.y+B.y)/2}; - s += 'c='+c.toFixed(1)+''; + s += 'c='+c.toFixed(2)+''; svg.innerHTML = s; - out.innerHTML = '$c = \\sqrt{'+(a*a)+'+'+(b*b)+'} \\approx '+c.toFixed(2)+'$  ·  $R = c/2 \\approx '+R.toFixed(2)+'$  ·  $r = (a+b-c)/2 \\approx '+r.toFixed(2)+'$
Диаметр описанной = гипотенуза $c$.'; + out.innerHTML = '$c = \\sqrt{'+a.toFixed(1)+'^2+'+b.toFixed(1)+'^2} \\approx '+c.toFixed(2)+'$  ·  $R = c/2 \\approx '+R.toFixed(2)+'$  ·  $r = (a+b-c)/2 \\approx '+r.toFixed(2)+'$
Диаметр описанной $= c$ (гипотенуза).'; renderMath(out); seen.add(a+'-'+b); if(seen.size>=4 && !seen.has('done')){ addXp(10,'p8-iv1'); bumpProgress('p8',15); seen.add('done'); }