fix(geom9 ch3): §10 и §11 — стороны/радиусы в реальных единицах
§10 IV1 «Теорема синусов»: убрал ремарку «(в пикселях SVG)», ввёл коэффициент K = 26 px/ед., теперь R ≈ 5, 2R ≈ 10 и стороны a, b, c показываются как 4..7 ед. (а не 100..130 px). §11 IV1 «Теорема косинусов»: было b=100, c=150 px — отображалось $a^2 = 10000 + 22500 - 30000·cos A$ — невменяемые числа. Стало b=4, c=6 ед., K=25 px/ед.: $a^2 = 16 + 36 - 48 cos A$. Подписи и формула в единицах, SVG-геометрия — та же. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -628,10 +628,13 @@ function buildP10(){
|
||||
svg.innerHTML=s;
|
||||
|
||||
const sinA=Math.sin(deg2rad(A))||1e-9;
|
||||
const ratio = 2*R; // в наших экранных единицах
|
||||
out.innerHTML = '$A = '+A+'°$, $B = '+B+'°$, $C = '+C+'°$<br>'
|
||||
+ '$\\dfrac{a}{\\sin A} = \\dfrac{b}{\\sin B} = \\dfrac{c}{\\sin C} = 2R = '+(2*R).toFixed(0)+'$ <span style="color:var(--muted);font-size:.85rem">(в пикселях SVG)</span><br>'
|
||||
+ '$a \\approx '+a.toFixed(1)+'$, $b \\approx '+b.toFixed(1)+'$, $c \\approx '+c.toFixed(1)+'$ · $a/\\sin A \\approx '+(a/sinA).toFixed(1)+'$';
|
||||
// R = 130 px ↔ R = 5 ед., коэффициент K = 26 px / ед.
|
||||
const K = 26;
|
||||
const Ru = R / K; // = 5
|
||||
const au = a / K, bu = b / K, cu = c / K;
|
||||
out.innerHTML = '$A = '+A+'°$, $B = '+B+'°$, $C = '+C+'°$ · $R = '+Ru.toFixed(2)+'$<br>'
|
||||
+ '$\\dfrac{a}{\\sin A} = \\dfrac{b}{\\sin B} = \\dfrac{c}{\\sin C} = 2R = '+(2*Ru).toFixed(2)+'$<br>'
|
||||
+ '$a \\approx '+au.toFixed(2)+'$, $b \\approx '+bu.toFixed(2)+'$, $c \\approx '+cu.toFixed(2)+'$ · $a/\\sin A \\approx '+(au/sinA).toFixed(2)+'$';
|
||||
renderMath(out);
|
||||
seen.add(A+'|'+B);
|
||||
if(seen.size>=4 && !seen.has('done')){ addXp(10,'p10-iv1'); bumpProgress('p10',15); seen.add('done'); }
|
||||
@@ -871,14 +874,17 @@ function buildP11(){
|
||||
const svg=document.getElementById('p11-iv1-svg');
|
||||
const out=document.getElementById('p11-iv1-out');
|
||||
const seen=new Set();
|
||||
const b=100, c=150;
|
||||
// Стороны зафиксированы: b = 4 ед., c = 6 ед. Масштаб K = 25 px/ед.
|
||||
const bU = 4, cU = 6, K = 25;
|
||||
const bPx = bU * K, cPx = cU * K;
|
||||
function draw(){
|
||||
const A=+sA.value; lA.textContent=A;
|
||||
// A_v в позиции (90, 240), B_v = A_v + (c, 0) = (240, 240). C_v под углом A от A_v на расстояние b.
|
||||
// A_v — вершина с углом A (низ-лево), B_v — на расстоянии c (низ-право), C_v — под углом A от A_v на расстояние b.
|
||||
const Av={x:90, y:240};
|
||||
const Bv={x:Av.x+c, y:Av.y};
|
||||
const Cv={x:Av.x+b*Math.cos(deg2rad(A)), y:Av.y-b*Math.sin(deg2rad(A))};
|
||||
const a=Math.hypot(Bv.x-Cv.x, Bv.y-Cv.y);
|
||||
const Bv={x:Av.x+cPx, y:Av.y};
|
||||
const Cv={x:Av.x+bPx*Math.cos(deg2rad(A)), y:Av.y-bPx*Math.sin(deg2rad(A))};
|
||||
const aPx=Math.hypot(Bv.x-Cv.x, Bv.y-Cv.y);
|
||||
const aU=aPx/K;
|
||||
let s='';
|
||||
s += '<rect x="0" y="0" width="400" height="320" fill="none"/>';
|
||||
// треугольник
|
||||
@@ -890,13 +896,13 @@ function buildP11(){
|
||||
if(Math.abs(A-90)<0.5){
|
||||
s += '<polyline points="'+rightAngleMark(Av, uAB, uAC, 14)+'" fill="none" stroke="#dc2626" stroke-width="2"/>';
|
||||
}
|
||||
// подписи сторон
|
||||
// подписи сторон в единицах
|
||||
const midAB={x:(Av.x+Bv.x)/2, y:(Av.y+Bv.y)/2};
|
||||
const midAC={x:(Av.x+Cv.x)/2, y:(Av.y+Cv.y)/2};
|
||||
const midBC={x:(Bv.x+Cv.x)/2, y:(Bv.y+Cv.y)/2};
|
||||
s += '<text x="'+midAB.x.toFixed(2)+'" y="'+(midAB.y+18).toFixed(2)+'" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#5b21b6">c = '+c+'</text>';
|
||||
s += '<text x="'+(midAC.x-18).toFixed(2)+'" y="'+midAC.y.toFixed(2)+'" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#5b21b6">b = '+b+'</text>';
|
||||
s += '<text x="'+(midBC.x+14).toFixed(2)+'" y="'+midBC.y.toFixed(2)+'" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#dc2626">a = '+a.toFixed(1)+'</text>';
|
||||
s += '<text x="'+midAB.x.toFixed(2)+'" y="'+(midAB.y+18).toFixed(2)+'" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#5b21b6">c = '+cU+'</text>';
|
||||
s += '<text x="'+(midAC.x-18).toFixed(2)+'" y="'+midAC.y.toFixed(2)+'" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#5b21b6">b = '+bU+'</text>';
|
||||
s += '<text x="'+(midBC.x+14).toFixed(2)+'" y="'+midBC.y.toFixed(2)+'" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#dc2626">a ≈ '+aU.toFixed(2)+'</text>';
|
||||
// подпись угла A
|
||||
s += '<text x="'+(Av.x+34).toFixed(2)+'" y="'+(Av.y-10).toFixed(2)+'" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#dc2626">A = '+A+'°</text>';
|
||||
// вершины
|
||||
@@ -908,9 +914,9 @@ function buildP11(){
|
||||
svg.innerHTML=s;
|
||||
|
||||
const cosA=Math.cos(deg2rad(A));
|
||||
const a2 = b*b + c*c - 2*b*c*cosA;
|
||||
let info = '$a^2 = b^2 + c^2 - 2bc \\cos A = '+(b*b)+' + '+(c*c)+' - '+(2*b*c)+' \\cdot \\cos '+A+'° \\approx '+a2.toFixed(1)+'$<br>'
|
||||
+ '$a \\approx '+Math.sqrt(a2).toFixed(2)+'$';
|
||||
const a2u = bU*bU + cU*cU - 2*bU*cU*cosA;
|
||||
let info = '$a^2 = b^2 + c^2 - 2bc \\cos A = '+(bU*bU)+' + '+(cU*cU)+' - '+(2*bU*cU)+' \\cdot \\cos '+A+'° \\approx '+a2u.toFixed(2)+'$<br>'
|
||||
+ '$a \\approx '+Math.sqrt(Math.max(0,a2u)).toFixed(2)+'$';
|
||||
if(Math.abs(A-90)<0.5) info += '<br><b style="color:#dc2626">✓ Прямой угол — это теорема Пифагора!</b>';
|
||||
out.innerHTML=info;
|
||||
renderMath(out);
|
||||
|
||||
Reference in New Issue
Block a user