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(){
Меняй катеты ползунками — гипотенуза, $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'); }