fix(geom8 ch2): аудит §9-§15 + финал — 5 косяков
§9 Босс 2: в условии было h=12 см, но правильный ответ S=10 требует h=8 см. Подправлены число в условии и подсказка. §11 Теорема Пифагора: - Card 11.1: 'квадраты на сторонах' были нарисованы как тонкие прямоугольники (140×20 и 20×100). Заменены на настоящие квадраты 80×80 (a²) и 60×60 (b²). ViewBox увеличен до 200×255. - Интерактив 1 (слайдер катетов): sqAh=min(40,ax*0.4) и sqBw=min(40,bx*0.4) давали прямоугольники, не квадраты. Теперь квадраты ax×ax и bx×bx с динамическим viewBox. §12 Босс 3: в объекте задачи ans=144, но проверка использовала correct[2]=62 — противоречие. Исправлено ans=62 + чистая подсказка. Final2 Босс 1: маркер прямого угла в основании высоты H был ориентирован неправильно (вертикально вниз). Пересчитан через единичные векторы вдоль BC и перпендикуляра. Всего проверено 21 SVG, исправлено 5. Остальные §10, §13, §14, §15 — OK. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4323,7 +4323,7 @@ function buildP9(){
|
||||
(function(){
|
||||
const tasks=[
|
||||
{q:'<svg viewBox="0 0 200 130" style="display:block;max-width:210px;margin:0 auto 8px;background:#d1fae5;border:1px solid #6ee7b7;border-radius:8px"><polygon points="20,110 90,110 60,20" fill="rgba(16,185,129,.25)" stroke="#059669" stroke-width="2"/><polygon points="90,110 180,110 60,20" fill="rgba(13,148,136,.25)" stroke="#0d9488" stroke-width="2"/><text x="55" y="124" text-anchor="middle" font-size="9" font-weight="700" fill="#059669" font-family="JetBrains Mono,monospace">a₁=15</text><text x="135" y="124" text-anchor="middle" font-size="9" font-weight="700" fill="#0d9488" font-family="JetBrains Mono,monospace">a₂=25</text><text x="52" y="75" font-size="9" fill="#047857">S₁=60</text><text x="120" y="75" font-size="9" fill="#0f766e">S₂=?</text></svg>Основания 15 и 25, $S_1=60$. Найти $S_2$.', ans:100, hint:'S₂=60·25/15=100.'},
|
||||
{q:'Общая высота двух треугольников <b>h=12 см</b>. $S_1+S_2=100\\,\\text{см}^2$, $S_1:S_2=2:3$. Найти $a_1$.', ans:10, hint:'S₁=40, S₂=60. a₁=2S₁/h=80/12≈6,67... перепроверь: h=12, S₁=2·40/12=6,7. Нет: a₁=2·40/12=6,(6). Или: S₁=½a₁·12 → a₁=2·40/12=20/3≈6,7. Задача: a₁=20/3. Ответ 10 — h=8, S₁=40, a₁=2·40/8=10.', ans_actual:10},
|
||||
{q:'Общая высота двух треугольников <b>h=8 см</b>. $S_1+S_2=100\\,\\text{см}^2$, $S_1:S_2=2:3$. Найти $a_1$.', ans:10, hint:'S₁=40, S₂=60. a₁=2S₁/h=2·40/8=10.'},
|
||||
{q:'Точка $D$ на стороне $BC$ делит её так, что $BD:DC=4:6$. $S_{\\triangle ABD}=16\\,\\text{см}^2$. Найти $S_{\\triangle ADC}$.', ans:24, hint:'S₂=16·6/4=24.'},
|
||||
{q:'Два треугольника с общей высотой. Площади <b>36 и 54 см²</b>. Меньшее основание <b>6 см</b>. Большее основание?', ans:9, hint:'a₂=6·54/36=9.'},
|
||||
];
|
||||
@@ -4703,22 +4703,27 @@ function buildP11(){
|
||||
<p style="margin-top:8px">где $a$, $b$ — катеты, $c$ — гипотенуза.</p>
|
||||
<p style="margin-top:8px"><b>Важно:</b> гипотенуза — сторона, лежащая напротив прямого угла. Всегда наибольшая из трёх сторон.</p>
|
||||
<div style="display:flex;justify-content:center;margin-top:14px">
|
||||
<svg viewBox="0 0 280 200" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
|
||||
<!-- right triangle at (30,160) a-horiz b-vert -->
|
||||
<polygon points="30,160 170,160 30,60" fill="rgba(22,163,74,.18)" stroke="#16a34a" stroke-width="2.2"/>
|
||||
<!-- right angle at (30,160) -->
|
||||
<polyline points="44,160 44,146 30,146" fill="none" stroke="#16a34a" stroke-width="1.8"/>
|
||||
<!-- square on a: (30,160)-(170,160)-(170,180)-(30,180) -->
|
||||
<rect x="30" y="160" width="140" height="20" fill="rgba(22,163,74,.22)" stroke="#16a34a" stroke-width="1.5"/>
|
||||
<text x="100" y="176" text-anchor="middle" font-size="10" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">a²</text>
|
||||
<!-- square on b: (10,60)-(30,60)-(30,160)-(10,160) -->
|
||||
<rect x="10" y="60" width="20" height="100" fill="rgba(13,148,136,.22)" stroke="#0d9488" stroke-width="1.5"/>
|
||||
<text x="20" y="113" text-anchor="middle" dominant-baseline="middle" font-size="10" font-weight="700" fill="#0f766e" font-family="JetBrains Mono,monospace" transform="rotate(-90,20,113)">b²</text>
|
||||
<!-- hypotenuse label -->
|
||||
<text x="112" y="100" text-anchor="middle" font-size="11" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">c</text>
|
||||
<text x="100" y="190" text-anchor="middle" font-size="10" font-weight="700" fill="#15803d">a</text>
|
||||
<text x="14" y="160" font-size="10" font-weight="700" fill="#0f766e">b</text>
|
||||
<text x="150" y="50" text-anchor="middle" font-size="11" font-weight="800" fill="#15803d">a²+b²=c²</text>
|
||||
<svg viewBox="0 0 200 255" style="max-width:220px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
|
||||
<!-- right triangle: R=(65,150) B=(145,150) A=(65,90). a=80px horiz, b=60px vert -->
|
||||
<polygon points="65,150 145,150 65,90" fill="rgba(22,163,74,.18)" stroke="#16a34a" stroke-width="2.2"/>
|
||||
<!-- right angle at R=(65,150): arms along +x and -y -->
|
||||
<polyline points="79,150 79,136 65,136" fill="none" stroke="#16a34a" stroke-width="1.8"/>
|
||||
<!-- square on a (80x80) below base: x=65..145, y=150..230 -->
|
||||
<rect x="65" y="150" width="80" height="80" fill="rgba(22,163,74,.22)" stroke="#16a34a" stroke-width="1.5"/>
|
||||
<text x="105" y="194" text-anchor="middle" dominant-baseline="middle" font-size="11" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">a²</text>
|
||||
<!-- square on b (60x60) left of vertical leg: x=5..65, y=90..150 -->
|
||||
<rect x="5" y="90" width="60" height="60" fill="rgba(13,148,136,.22)" stroke="#0d9488" stroke-width="1.5"/>
|
||||
<text x="35" y="120" text-anchor="middle" dominant-baseline="middle" font-size="11" font-weight="700" fill="#0f766e" font-family="JetBrains Mono,monospace">b²</text>
|
||||
<!-- hypotenuse label midpoint: ((145+65)/2, (150+90)/2)=(105,120) -->
|
||||
<text x="116" y="114" text-anchor="middle" font-size="11" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">c</text>
|
||||
<!-- side labels -->
|
||||
<text x="105" y="245" text-anchor="middle" font-size="10" font-weight="700" fill="#15803d">a</text>
|
||||
<text x="58" y="122" text-anchor="end" font-size="10" font-weight="700" fill="#0f766e">b</text>
|
||||
<!-- vertex labels -->
|
||||
<text x="51" y="87" font-size="10" font-weight="700" fill="#15803d">A</text>
|
||||
<text x="51" y="163" font-size="10" font-weight="700" fill="#15803d">R</text>
|
||||
<text x="148" y="163" font-size="10" font-weight="700" fill="#15803d">B</text>
|
||||
<text x="105" y="20" text-anchor="middle" font-size="11" font-weight="800" fill="#15803d">a²+b²=c²</text>
|
||||
</svg>
|
||||
</div>`);
|
||||
|
||||
@@ -4893,30 +4898,35 @@ function buildP11(){
|
||||
document.getElementById('p11-sl-a-val').textContent=a;
|
||||
document.getElementById('p11-sl-b-val').textContent=b;
|
||||
const c=Math.sqrt(a*a+b*b);
|
||||
const scale=12; // px per unit
|
||||
// Dynamic scale: fit triangle + squares for side a (below) and side b (left)
|
||||
// Total width needed: bx(square-b) + ax(triangle) + margin
|
||||
// Total height needed: by(triangle) + ax(square-a) + margin
|
||||
const maxSide=Math.max(a,b);
|
||||
const scale=Math.min(9, Math.floor(160/maxSide));
|
||||
const ax=a*scale, bx=b*scale;
|
||||
const clen=+c.toFixed(3);
|
||||
// triangle: right angle at origin R=(80,220), B=(80+ax,220), A=(80,220-bx)
|
||||
const Rx=80, Ry=220;
|
||||
// Place right-angle vertex R so square-b (bx×bx) fits left and square-a (ax×ax) fits below
|
||||
// Rx=bx+20 ensures square-b starts at x=20; Ry=bx+20 gives apex A at y=20
|
||||
const Rx=bx+20, Ry=bx+20;
|
||||
const Bx=Rx+ax, By=Ry;
|
||||
const Ax=Rx, Ay=Ry-bx;
|
||||
let s='<svg viewBox="0 0 '+W+' '+H+'" style="width:100%;max-width:380px;background:var(--card);border:1px solid var(--border);border-radius:14px">';
|
||||
const Ax=Rx, Ay=Ry-bx; // vertical leg: A is bx above R
|
||||
const H_dyn=Ry+ax+30; // height: R + square-a height + label margin
|
||||
const W_dyn=Rx+ax+30; // width: R + hyp end + margin
|
||||
let s='<svg viewBox="0 0 '+W_dyn+' '+H_dyn+'" style="width:100%;max-width:380px;background:var(--card);border:1px solid var(--border);border-radius:14px">';
|
||||
// triangle
|
||||
s+='<polygon points="'+Rx+','+Ry+' '+Bx+','+By+' '+Ax+','+Ay+'" fill="rgba(22,163,74,.25)" stroke="#16a34a" stroke-width="2.5"/>';
|
||||
// right angle at R
|
||||
// right angle at R: arms +x and -y
|
||||
s+='<polyline points="'+(Rx+10)+','+Ry+' '+(Rx+10)+','+(Ry-10)+' '+Rx+','+(Ry-10)+'" fill="none" stroke="#16a34a" stroke-width="1.8"/>';
|
||||
// square on a (below triangle): R to B bottom side, extend down
|
||||
const sqAh=Math.max(16,Math.min(40,ax*0.4));
|
||||
s+='<rect x="'+Rx+'" y="'+Ry+'" width="'+ax+'" height="'+sqAh+'" fill="rgba(22,163,74,.22)" stroke="#16a34a" stroke-width="1.5"/>';
|
||||
s+='<text x="'+(Rx+ax/2)+'" y="'+(Ry+sqAh/2+4)+'" text-anchor="middle" dominant-baseline="middle" font-size="'+Math.max(9,Math.min(13,ax*0.18))+'" font-weight="700" fill="#15803d">a²='+a*a+'</text>';
|
||||
// square on b (left of triangle)
|
||||
const sqBw=Math.max(16,Math.min(40,bx*0.4));
|
||||
s+='<rect x="'+(Rx-sqBw)+'" y="'+Ay+'" width="'+sqBw+'" height="'+bx+'" fill="rgba(13,148,136,.22)" stroke="#0d9488" stroke-width="1.5"/>';
|
||||
s+='<text x="'+(Rx-sqBw/2)+'" y="'+(Ay+bx/2)+'" text-anchor="middle" dominant-baseline="middle" font-size="9" font-weight="700" fill="#0f766e" transform="rotate(-90,'+(Rx-sqBw/2)+','+(Ay+bx/2)+')">b²='+b*b+'</text>';
|
||||
// square on a (ax × ax) below base: R=(Rx,Ry)→B=(Bx,Ry), extend down
|
||||
s+='<rect x="'+Rx+'" y="'+Ry+'" width="'+ax+'" height="'+ax+'" fill="rgba(22,163,74,.22)" stroke="#16a34a" stroke-width="1.5"/>';
|
||||
s+='<text x="'+(Rx+ax/2)+'" y="'+(Ry+ax/2)+'" text-anchor="middle" dominant-baseline="middle" font-size="'+Math.max(8,Math.min(12,ax*0.14))+'" font-weight="700" fill="#15803d">a²='+a*a+'</text>';
|
||||
// square on b (bx × bx) left of vertical leg: A=(Rx,Ry-bx)→R=(Rx,Ry), extend left
|
||||
s+='<rect x="'+(Rx-bx)+'" y="'+(Ry-bx)+'" width="'+bx+'" height="'+bx+'" fill="rgba(13,148,136,.22)" stroke="#0d9488" stroke-width="1.5"/>';
|
||||
s+='<text x="'+(Rx-bx/2)+'" y="'+(Ry-bx/2)+'" text-anchor="middle" dominant-baseline="middle" font-size="'+Math.max(8,Math.min(12,bx*0.14))+'" font-weight="700" fill="#0f766e">b²='+b*b+'</text>';
|
||||
// labels
|
||||
s+='<text x="'+(Rx+ax/2)+'" y="'+(Ry+sqAh+14)+'" text-anchor="middle" font-size="11" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">a='+a+'</text>';
|
||||
s+='<text x="'+(Rx-sqBw-4)+'" y="'+(Ay+bx/2)+'" text-anchor="middle" dominant-baseline="middle" font-size="10" font-weight="700" fill="#0f766e" font-family="JetBrains Mono,monospace" transform="rotate(-90,'+(Rx-sqBw-4)+','+(Ay+bx/2)+')">b='+b+'</text>';
|
||||
s+='<text x="'+Math.round((Bx+Ax)/2+10)+'" y="'+Math.round((By+Ay)/2)+'" text-anchor="start" font-size="11" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">c='+clen+'</text>';
|
||||
s+='<text x="'+(Rx+ax/2)+'" y="'+(Ry+ax+14)+'" text-anchor="middle" font-size="11" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">a='+a+'</text>';
|
||||
s+='<text x="'+(Rx-bx-4)+'" y="'+(Ry-bx/2)+'" text-anchor="middle" dominant-baseline="middle" font-size="10" font-weight="700" fill="#0f766e" font-family="JetBrains Mono,monospace" transform="rotate(-90,'+(Rx-bx-4)+','+(Ry-bx/2)+')">b='+b+'</text>';
|
||||
s+='<text x="'+Math.round((Bx+Ax)/2+8)+'" y="'+Math.round((By+Ay)/2)+'" text-anchor="start" font-size="11" font-weight="700" fill="#15803d" font-family="JetBrains Mono,monospace">c='+clen+'</text>';
|
||||
s+='</svg>';
|
||||
document.getElementById('p11-sq-svg-wrap').innerHTML=s;
|
||||
document.getElementById('p11-sq-info').innerHTML=`
|
||||
@@ -5444,7 +5454,7 @@ function buildP12(){
|
||||
const tasks=[
|
||||
{q:'Сторона равностороннего треугольника $12$ см. Найти высоту (округли до целых).', ans:10, hint:'h=12√3/2=6√3≈10,39≈10.'},
|
||||
{q:'Периметр равностороннего треугольника $18$ см. Найти площадь $S$ (округли до целых).', ans:16, hint:'a=6, S=36√3/4=9√3≈15,6≈16.'},
|
||||
{q:'Высота равностороннего треугольника $h = 6\\sqrt{3}$ см. Найти его площадь (целое число).', ans:144, hint:'h=6√3 → a=12, S=144√3/4=36√3... нет: a=2h/√3=12√3/√3=12, S=12²√3/4=36√3≈62. Ответ: 62.'},
|
||||
{q:'Высота равностороннего треугольника $h = 6\\sqrt{3}$ см. Найти его площадь (целое число).', ans:62, hint:'h=6√3 → a=2h/√3=12, S=144√3/4=36√3≈62.'},
|
||||
{q:'Два равносторонних треугольника: стороны $4$ и $8$ см. Во сколько раз площадь большего больше меньшего?', ans:4, hint:'S∝a². (8/4)²=4.'},
|
||||
];
|
||||
const correct=[10,16,62,4];
|
||||
@@ -6815,8 +6825,9 @@ function buildFinal2(){
|
||||
<!-- height from C to hypotenuse CB foot H -->
|
||||
<!-- H on line BC: parametric. B=(200,155) C=(20,20). direction=(180,135). len=225. foot from A=(20,155): t=((20-200)*(180)+(155-155)*(135))/(180^2+135^2)=-32400/56025=-0.5784 => H=(200-0.5784*180, 155-0.5784*135)=(95.9,77.4) -->
|
||||
<line x1="20" y1="155" x2="96" y2="77" stroke="#8b5cf6" stroke-width="1.5" stroke-dasharray="4 2"/>
|
||||
<!-- right angle mark at H on hypotenuse: u = unit along BC = (180/225, 135/225)=(0.8, 0.6); w = perpendicular = (-0.6, 0.8); mark = H+8u, H+8u+8w, H+8w -->
|
||||
<path d="M102,83 L96,89 L90,83" fill="none" stroke="#8b5cf6" stroke-width="1.5"/>
|
||||
<!-- right angle mark at H=(96,77): u along CB=(0.8,0.6), w perp toward A=(-0.6,0.8), size=8 -->
|
||||
<!-- P1=H+8u=(102,82), corner=H+8u+8w=(98,88), P3=H+8w=(91,83) -->
|
||||
<path d="M102,82 L98,88 L91,83" fill="none" stroke="#8b5cf6" stroke-width="1.5"/>
|
||||
<circle cx="96" cy="77" r="3.5" fill="#8b5cf6" stroke="#fff" stroke-width="1.5"/>
|
||||
<!-- vertex dots -->
|
||||
<circle cx="20" cy="155" r="4" fill="#059669" stroke="#fff" stroke-width="1.5"/>
|
||||
|
||||
Reference in New Issue
Block a user