diff --git a/frontend/textbooks/geometry_8_ch4.html b/frontend/textbooks/geometry_8_ch4.html
index 651240e..746e77c 100644
--- a/frontend/textbooks/geometry_8_ch4.html
+++ b/frontend/textbooks/geometry_8_ch4.html
@@ -359,7 +359,7 @@ const PARAS=[
function buildParaSelector(){const g=document.getElementById('psel-grid');g.innerHTML='';PARAS.forEach(p=>{const card=document.createElement('div');card.className='psel-card'+(p.final?' final':'');card.dataset.id=p.id;card.dataset.progCard=p.id;card.innerHTML=`
${p.num}
${p.name}
`;card.addEventListener('click',()=>goTo(p.id));g.appendChild(card);});}
const BUILT=new Set();
-const BUILDERS={p1:()=>buildP1(),p2:()=>buildP2(),p3:()=>buildP3(),p4:()=>buildP4(),p5:()=>buildP5(),p6:()=>buildP6(),p7:()=>buildP7(),p8:()=>buildP8stub(),p9:()=>buildP9stub(),p10:()=>buildP10stub(),p11:()=>buildP11stub(),p12:()=>buildP12stub(),p13:()=>buildP13stub(),p14:()=>buildP14stub(),p15:()=>buildP15stub(),p16:()=>buildP16stub(),final4:()=>buildFinal4stub()};
+const BUILDERS={p1:()=>buildP1(),p2:()=>buildP2(),p3:()=>buildP3(),p4:()=>buildP4(),p5:()=>buildP5(),p6:()=>buildP6(),p7:()=>buildP7(),p8:()=>buildP8(),p9:()=>buildP9(),p10:()=>buildP10(),p11:()=>buildP11(),p12:()=>buildP12stub(),p13:()=>buildP13stub(),p14:()=>buildP14stub(),p15:()=>buildP15stub(),p16:()=>buildP16stub(),final4:()=>buildFinal4stub()};
function ensureBuilt(id){if(BUILT.has(id))return;const fn=BUILDERS[id];if(fn){fn();BUILT.add(id);}}
function goTo(id){STATE.current=id;ensureBuilt(id);document.querySelectorAll('.sec').forEach(s=>s.classList.remove('active'));const el=document.getElementById('sec-'+id);if(el)el.classList.add('active');document.querySelectorAll('.psel-card').forEach(c=>c.classList.toggle('active',c.dataset.id===id));buildSidebar(id);window.scrollTo({top:0,behavior:'smooth'});if((STATE.progress[id]||0)<10)bumpProgress(id,10);if(window.renderMathInElement)setTimeout(()=>renderMath(el),0);setTimeout(()=>{try{wrapGlossary(el);}catch(e){}},60);markLastPara(id);}
@@ -3045,10 +3045,1499 @@ function buildP7(){
if(window.renderMathInElement) try{renderMath(cont);}catch(e){}
})();
}
-function buildP8stub(){ document.getElementById('p8-body').innerHTML='§8 — Волна 1 : содержимое появится в следующем обновлении.
'+secNav('p7','p9'); }
-function buildP9stub(){ document.getElementById('p9-body').innerHTML='§9 — Волна 1 : содержимое появится в следующем обновлении.
'+secNav('p8','p10'); }
-function buildP10stub(){ document.getElementById('p10-body').innerHTML='§10 — Волна 1 : содержимое появится в следующем обновлении.
'+secNav('p9','p11'); }
-function buildP11stub(){ document.getElementById('p11-body').innerHTML='§11 — Волна 1 : содержимое появится в следующем обновлении.
'+secNav('p10','p12'); }
+function buildP8(){
+ const box=document.getElementById('p8-body');
+ let html='';
+
+ html+=makeCard('theory','Центральный угол и градусная мера дуги','8.1',`
+ Определение. Центральный угол — угол с вершиной в центре окружности, стороны которого являются радиусами.
+ Градусная мера дуги равна градусной мере центрального угла, опирающегося на эту дугу.
+
+ Полная окружность содержит 360° .
+ Полуокружность (диаметр делит окружность) — 180° .
+ Если центральный угол $\alpha$, то дуга $\smile AC = \alpha°$.
+
+
+
+
+
+
+
+
+
+ O
+ A
+ C
+ α
+ дуга AC = α°
+
+
`);
+
+ html+=makeCard('theory','Вписанный угол','8.2',`
+ Определение. Вписанный угол — угол, вершина которого лежит на окружности, а обе стороны являются хордами.
+ Вписанный угол опирается на дугу , заключённую между его сторонами (дугу, не содержащую вершину угла).
+
+
+
+
+
+
+
+
+
+
+ O
+ A
+ C
+ B
+ дуга AC
+ ∠ABC
+
+
`);
+
+ html+=makeCard('rule','Формула длины дуги','8.3',`
+ Длина дуги через центральный угол $\alpha$ (в градусах) и радиус $R$:
+ $$\ell = \dfrac{\alpha}{360°} \cdot 2\pi R$$
+ Примеры: при $\alpha=90°$ дуга $= \dfrac{\pi R}{2}$; при $\alpha=180°$ дуга $= \pi R$.
+
+
+
+
+
+
+
+
+ O
+ A
+ C
+ α
+ ℓ = α/360·2πR
+ R
+
+
`);
+
+ /* ИНТЕРАКТИВ 1 — слайдер центрального угла */
+ html+=`
+
+
Двигай слайдер — наблюдай, как изменяется центральный угол и подсвеченная дуга.
+
+ Центральный угол $\alpha$ = 90 °
+
+
+
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 2 — слайдер положения вершины вписанного угла */
+ html+=`
+
+
Двигай слайдер — смотри, как меняется положение вершины $B$ вписанного угла $\angle ABC$.
+
+ Положение $B$ (угол от оси) = 210 °
+
+
+
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 3 — DnD-сортер */
+ html+=`
+
+
Перетащи каждую карточку в нужную корзину: центральный, вписанный или ни тот ни другой.
+
+
+
Проверить Сбросить
+
+
`;
+
+ /* ИНТЕРАКТИВ 4 — калькулятор длины дуги */
+ html+=`
+
+
Введи радиус $R$ и центральный угол $\alpha$ — получи длину дуги по формуле $\ell = \dfrac{\alpha}{360} \cdot 2\pi R$.
+
+ R =
+ α (°) =
+ Вычислить
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 5 — Тренажёр */
+ html+=`
+
+
5 задач на центральный и вписанный углы, градусную меру дуги.
+
Задача 1 / 5 Очки: 0
+
+
+
+ Проверить
+ Начать заново
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 6 — Босс §8 */
+ html+=`
+
+
4 задачи повышенной сложности — каждая верная даёт +5 XP.
+
+
`;
+
+ html+=`
+
+
+ Я прочитал §8 (+10 XP)
+
+
`;
+ html+=secNav('p7','p9');
+ box.innerHTML=html;
+ if(window.renderMathInElement) setTimeout(()=>renderMath(box),0);
+
+ /* === INIT 1: слайдер центрального угла === */
+ (function(){
+ const sl=document.getElementById('p8-ca-sl');
+ const valEl=document.getElementById('p8-ca-val');
+ const svgWrap=document.getElementById('p8-ca-svg');
+ const info=document.getElementById('p8-ca-info');
+ const R=70, cx=130, cy=100, W=260, H=200;
+ function draw(){
+ const alpha=+sl.value;
+ valEl.textContent=alpha;
+ const a1=-Math.PI/2;
+ const a2=a1+(alpha*Math.PI/180);
+ const x1=cx+R*Math.cos(a1), y1=cy+R*Math.sin(a1);
+ const x2=cx+R*Math.cos(a2), y2=cy+R*Math.sin(a2);
+ const large=alpha>180?1:0;
+ const angMid=a1+(alpha*Math.PI/360);
+ const labR=R+14;
+ const labX=cx+labR*Math.cos(angMid), labY=cy+labR*Math.sin(angMid);
+ const ax1=cx+18*Math.cos(a1), ay1=cy+18*Math.sin(a1);
+ const ax2=cx+18*Math.cos(a2), ay2=cy+18*Math.sin(a2);
+ svgWrap.innerHTML=`
+
+
+
+
+
+
+
+
+
+ O
+ A
+ C
+ ${alpha}°
+ `;
+ info.textContent='Центральный угол AOC = '+alpha+'° → Дуга AC = '+alpha+'°';
+ }
+ sl.addEventListener('input',draw);
+ draw();
+ })();
+
+ /* === INIT 2: вписанный угол === */
+ (function(){
+ const sl=document.getElementById('p8-ins-sl');
+ const valEl=document.getElementById('p8-ins-val');
+ const svgWrap=document.getElementById('p8-ins-svg');
+ const info=document.getElementById('p8-ins-info');
+ const R=68, cx=130, cy=95, W=260, H=190;
+ const aA=(-80)*Math.PI/180;
+ const aC=(40)*Math.PI/180;
+ const arcDeg=((40-(-80))+360)%360; // arc from A to C going clockwise... let's use fixed A=−80°, C=40°
+ function draw(){
+ const bDeg=+sl.value;
+ valEl.textContent=bDeg;
+ const aB=bDeg*Math.PI/180;
+ const Ax=cx+R*Math.cos(aA), Ay=cy+R*Math.sin(aA);
+ const Ccx=cx+R*Math.cos(aC), Ccy=cy+R*Math.sin(aC);
+ const Bx=cx+R*Math.cos(aB), By=cy+R*Math.sin(aB);
+ // arc A to C not through B (short arc, 120°)
+ const insAngle=(function(){
+ const v1x=Ax-Bx, v1y=Ay-By;
+ const v2x=Ccx-Bx, v2y=Ccy-By;
+ const dot=v1x*v2x+v1y*v2y;
+ const m1=Math.sqrt(v1x*v1x+v1y*v1y), m2=Math.sqrt(v2x*v2x+v2y*v2y);
+ return Math.round(Math.acos(Math.max(-1,Math.min(1,dot/(m1*m2))))*180/Math.PI);
+ })();
+ svgWrap.innerHTML=`
+
+
+
+
+
+
+
+
+ A
+ C
+ B
+ O
+ `;
+ info.textContent='Вписанный угол ∠ABC = '+insAngle+'° (вершина B на окружности, стороны — хорды BA и BC)';
+ }
+ sl.addEventListener('input',draw);
+ draw();
+ })();
+
+ /* === INIT 3: DnD-сортер === */
+ (function(){
+ const items=[
+ {label:'Вершина угла — центр окружности, стороны — радиусы',cat:'ca'},
+ {label:'Вершина на окружности, стороны — хорды',cat:'ins'},
+ {label:'Вершина внутри окружности, стороны — хорды',cat:'none'},
+ {label:'Угол ∠AOC, O — центр',cat:'ca'},
+ {label:'Угол ∠ABC, B на окружности',cat:'ins'},
+ {label:'Угол между двумя касательными из внешней точки',cat:'none'},
+ ];
+ const pool=document.getElementById('p8-dnd-pool');
+ const boxes={ca:document.getElementById('p8-drop-ca-items'),ins:document.getElementById('p8-drop-ins-items'),none:document.getElementById('p8-drop-none-items')};
+ const fb=document.getElementById('p8-dnd-fb');
+ let placed={};
+ function reset(){
+ pool.innerHTML='';placed={};
+ Object.values(boxes).forEach(b=>b.innerHTML='');
+ fb.style.display='none';
+ items.forEach((it,i)=>{
+ const chip=document.createElement('div');
+ chip.className='dnd-chip';chip.dataset.i=i;chip.textContent=it.label;
+ chip.addEventListener('click',()=>chip.classList.toggle('armed'));
+ Object.entries(boxes).forEach(([cat,box])=>{
+ box.parentElement.addEventListener('click',()=>{
+ if(!chip.classList.contains('armed'))return;
+ chip.classList.remove('armed');
+ if(placed[i]!==undefined) boxes[placed[i]].removeChild(chip);
+ placed[i]=cat;
+ box.appendChild(chip);
+ });
+ });
+ pool.appendChild(chip);
+ });
+ }
+ document.getElementById('p8-dnd-check').addEventListener('click',()=>{
+ let ok=0;
+ items.forEach((it,i)=>{if(placed[i]===it.cat)ok++;});
+ feedback(fb,ok===items.length,'Верно: '+ok+'/'+items.length+(ok===items.length?'. Отлично!':'. Попробуй ещё.'));
+ if(ok===items.length){addXp(8,'p8-dnd');bumpProgress('p8',15);}
+ });
+ document.getElementById('p8-dnd-reset').addEventListener('click',reset);
+ reset();
+ })();
+
+ /* === INIT 4: калькулятор дуги === */
+ (function(){
+ document.getElementById('p8-arc-btn').addEventListener('click',()=>{
+ const R=parseFloat(document.getElementById('p8-cr').value);
+ const alpha=parseFloat(document.getElementById('p8-ca-inp').value);
+ const out=document.getElementById('p8-arc-out');
+ out.style.display='block';
+ if(isNaN(R)||isNaN(alpha)||R<=0||alpha<=0||alpha>360){out.style.background='#fee2e2';out.style.color='#7f1d1d';out.textContent='Введите корректные значения (R > 0, 0 < α ≤ 360).';return;}
+ const L=(alpha/360)*2*Math.PI*R;
+ out.style.background='var(--sec-acc-soft,#cffafe)';out.style.color='var(--sec-acc-d,#0e7490)';
+ out.innerHTML='ℓ = '+alpha+'/360 · 2π · '+R+' = '+L.toFixed(4)+' ≈ '+L.toFixed(2)+' ';
+ });
+ })();
+
+ /* === INIT 5: тренажёр === */
+ (function(){
+ const tasks=[
+ {q:'Центральный угол $\\angle AOC = 72°$. Чему равна градусная мера дуги $AC$?',a:72,hint:'Дуга = центральный угол = 72°'},
+ {q:'Дуга равна $150°$. Найди центральный угол, опирающийся на эту дугу.',a:150,hint:'Центральный угол = градусная мера дуги = 150°'},
+ {q:'Радиус $R = 10$ см, центральный угол $\\alpha = 90°$. Найди длину дуги (округли до сотых).',a:15.71,hint:'ℓ = 90/360 · 2π · 10 = π·5 ≈ 15,71'},
+ {q:'Дуга $AC = 240°$. Найди дугу $CA$ (меньшую дугу).',a:120,hint:'Полная окружность 360°. Меньшая дуга = 360 − 240 = 120°'},
+ {q:'Радиус $R = 6$, длина дуги $\\ell = 2\\pi$. Найди центральный угол $\\alpha$ (в градусах).',a:60,hint:'2π = α/360 · 2π · 6 → α = 360 · 2π / (12π) = 60°'},
+ ];
+ let cur=0, score=0;
+ const iEl=document.getElementById('p8-tr-i'), scEl=document.getElementById('p8-tr-score');
+ const taskEl=document.getElementById('p8-tr-task'), ansEl=document.getElementById('p8-tr-ans');
+ const goBtn=document.getElementById('p8-tr-go'), startBtn=document.getElementById('p8-tr-start');
+ const fb=document.getElementById('p8-tr-fb');
+ function showTask(){
+ if(cur>=tasks.length){taskEl.innerHTML='Тренажёр завершён! Очки: '+score+'/'+tasks.length+' ';ansEl.style.display='none';goBtn.style.display='none';addXp(score*4,'p8-trainer');bumpProgress('p8',20);return;}
+ taskEl.innerHTML=tasks[cur].q;iEl.textContent=cur+1;ansEl.value='';fb.style.display='none';
+ if(window.renderMathInElement) try{renderMath(taskEl);}catch(e){}
+ }
+ goBtn.addEventListener('click',()=>{
+ const ans=parseFloat(ansEl.value.replace(',','.'));
+ const ok=Math.abs(ans-tasks[cur].a)<0.05;
+ feedback(fb,ok,ok?'Верно!':'Неверно. Подсказка: '+tasks[cur].hint);
+ if(ok){score++;scEl.textContent=score;cur++;setTimeout(showTask,900);}
+ });
+ startBtn.addEventListener('click',()=>{cur=0;score=0;scEl.textContent=0;ansEl.style.display='';goBtn.style.display='';showTask();});
+ showTask();
+ })();
+
+ /* === INIT 6: Босс §8 === */
+ (function(){
+ const tasks=[
+ {q:'Центральный угол $\\angle AOC = 140°$. Найди меньшую дугу $AC$.',
+ opts:['140°','70°','220°'],cor:0,
+ exp:'Дуга = центральный угол. Меньшая дуга $AC = 140°$.'},
+ {q:'Полуокружность имеет градусную меру:',
+ opts:['90°','180°','360°'],cor:1,
+ exp:'Полуокружность — половина окружности: $360°/2 = 180°$.'},
+ {q:'Радиус $R = 5$, угол $\\alpha = 120°$. Длина дуги:',
+ opts:['$\\dfrac{10\\pi}{3}$','$\\dfrac{5\\pi}{3}$','$5\\pi$'],cor:0,
+ exp:'$\\ell = \\dfrac{120}{360}\\cdot 2\\pi\\cdot 5 = \\dfrac{1}{3}\\cdot 10\\pi = \\dfrac{10\\pi}{3}$.'},
+ {q:'Дуга $AB = 80°$, дуга $BC = 130°$. Найди дугу $CA$ (большую).',
+ opts:['150°','50°','210°'],cor:0,
+ exp:'$360° - 80° - 130° = 150°$.'},
+ ];
+ const cont=document.getElementById('p8-boss-tasks');
+ let bhtml='';
+ tasks.forEach((t,i)=>{
+ bhtml+=`
+
${i+1}. ${t.q}
+
+ ${t.opts.map((o,j)=>`${o} `).join('')}
+
+
+
`;
+ });
+ cont.innerHTML=bhtml;
+ if(window.renderMathInElement) try{renderMath(cont);}catch(e){}
+ })();
+}
+function buildP9(){
+ const box=document.getElementById('p9-body');
+ let html='';
+
+ html+=makeCard('rule','Теорема о вписанном угле','9.1',`
+ Теорема. Вписанный угол равен половине центрального угла, опирающегося на ту же дугу.
+ $$\angle ABC = \dfrac{1}{2}\,\angle AOC = \dfrac{1}{2}\,\smile AC$$
+ Здесь $O$ — центр, $A$, $C$ — точки на окружности, $B$ — другая точка на окружности.
+
+
+
+
+
+
+
+
+
+
+
+
+ O
+ A
+ C
+ B
+ ∠AOC
+ ∠ABC = ½∠AOC
+
+
`);
+
+ html+=makeCard('theory','Доказательство (три случая)','9.2',`
+ Доказательство рассматривает три случая расположения центра $O$ относительно вписанного угла $\angle ABC$:
+
+ Центр лежит на стороне угла ($O$ — на $AB$): треугольник $OBC$ — равнобедренный, внешний угол при $B$ даёт $\angle AOC = 2\angle ABC$.
+ Центр внутри угла : проводим диаметр через $B$, применяем случай 1 дважды и складываем.
+ Центр вне угла : аналогично — вычитаем.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ O
+ B
+ A
+ C
+ диаметр
+
+
`);
+
+ html+=makeCard('example','Применение теоремы','9.3',`
+ Задача. Центральный угол $\angle AOC = 110°$. Найди вписанный угол $\angle ABC$, опирающийся на ту же дугу.
+ Решение. По теореме: $\angle ABC = \dfrac{1}{2} \cdot 110° = 55°$.
+ Задача 2. Вписанный угол $\angle ABC = 38°$. Найди центральный угол.
+ Решение. $\angle AOC = 2 \cdot 38° = 76°$.
`);
+
+ /* ИНТЕРАКТИВ 1 — слайдер с обоими углами */
+ html+=`
+
+
Двигай слайдер — наблюдай: вписанный угол всегда равен половине центрального.
+
+ Центральный угол $\alpha$ = 100 °
+
+
+
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 2 — пошаговое доказательство */
+ html+=`
+
+
Нажимай «Далее» — каждый шаг раскрывает ключевую идею доказательства.
+
+
+
+ Далее
+ Сначала
+
+
`;
+
+ /* ИНТЕРАКТИВ 3 — калькулятор */
+ html+=`
+
+
Введи один из углов — получи второй.
+
+ Центральный (°):
+ → вписанный
+ Вписанный (°):
+ → центральный
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 4 — DnD верно/неверно */
+ html+=`
+
+
Рассортируй утверждения о вписанном угле.
+
+
+
Проверить Сбросить
+
+
`;
+
+ /* ИНТЕРАКТИВ 5 — Тренажёр */
+ html+=`
+
+
5 задач на свойство вписанного угла.
+
Задача 1 / 5 Очки: 0
+
+
+
+ Проверить
+ Начать заново
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 6 — Босс §9 */
+ html+=`
+
+
4 задачи повышенной сложности — каждая верная даёт +5 XP.
+
+
`;
+
+ html+=`
+
+
+ Я прочитал §9 (+10 XP)
+
+
`;
+ html+=secNav('p8','p10');
+ box.innerHTML=html;
+ if(window.renderMathInElement) setTimeout(()=>renderMath(box),0);
+
+ /* === INIT 1: слайдер обоих углов === */
+ (function(){
+ const sl=document.getElementById('p9-alpha-sl');
+ const valEl=document.getElementById('p9-alpha-val');
+ const svgWrap=document.getElementById('p9-dual-svg');
+ const info=document.getElementById('p9-dual-info');
+ const R=68, cx=130, cy=95, W=260, H=190;
+ function draw(){
+ const alpha=+sl.value;
+ valEl.textContent=alpha;
+ const beta=alpha/2;
+ const a1=(-100)*Math.PI/180;
+ const a2=a1+(alpha*Math.PI/180);
+ const Ax=cx+R*Math.cos(a1), Ay=cy+R*Math.sin(a1);
+ const Ccx=cx+R*Math.cos(a2), Ccy=cy+R*Math.sin(a2);
+ const aBmid=a2+((2*Math.PI-(alpha*Math.PI/180))/2);
+ const Bx=cx+R*Math.cos(aBmid), By=cy+R*Math.sin(aBmid);
+ const large=alpha>180?1:0;
+ svgWrap.innerHTML=`
+
+
+
+
+
+
+
+
+
+
+ O
+ A
+ C
+ B
+ ∠AOC=${alpha}°
+ ∠ABC=${Math.round(beta)}°
+ `;
+ info.textContent='Центральный ∠AOC = '+alpha+'° → Вписанный ∠ABC = '+Math.round(beta)+'° (= '+alpha+'°/2)';
+ }
+ sl.addEventListener('input',draw);
+ draw();
+ })();
+
+ /* === INIT 2: пошаговое доказательство === */
+ (function(){
+ const R=58, cx=115, cy=80, W=260, H=165;
+ const aBval=(-90)*Math.PI/180;
+ const Bx=cx+R*Math.cos(aBval), By=cy+R*Math.sin(aBval);
+ const Ax=cx-R, Ay=cy;
+ const Ccx=cx+R*Math.cos(30*Math.PI/180), Ccy=cy+R*Math.sin(30*Math.PI/180);
+ const steps=[
+ {text:'Дано: окружность с центром $O$. Вершина вписанного угла $B$ лежит так, что $O$ лежит на $AB$. Угол $\\angle ABC$ — вписанный, $\\angle AOC$ — центральный. Нужно доказать: $\\angle ABC = \\dfrac{1}{2}\\angle AOC$.'},
+ {text:'Шаг 1. Соединим $O$ с $B$. Так как $OB = OC = R$ (радиусы), треугольник $OBC$ — равнобедренный. Поэтому $\\angle OBC = \\angle OCB$.'},
+ {text:'Шаг 2. Угол $\\angle AOC$ — внешний угол треугольника $OBC$ при вершине $O$. По теореме о внешнем угле: $\\angle AOC = \\angle OBC + \\angle OCB = 2\\angle OBC$.'},
+ {text:'Шаг 3. Следовательно, $\\angle OBC = \\dfrac{1}{2}\\angle AOC$. Но $\\angle OBC = \\angle ABC$ (т.к. $O$ лежит на луче $AB$). Значит, $\\angle ABC = \\dfrac{1}{2}\\angle AOC$. ч.т.д. '},
+ ];
+ let step=0;
+ const svgEl=document.getElementById('p9-proof-svg'), txtEl=document.getElementById('p9-proof-text');
+ function draw(){
+ let ex='';
+ if(step>=1){
+ ex+=` `;
+ ex+=`OB=R `;
+ ex+=` `;
+ ex+=`OC=R `;
+ }
+ if(step>=2){
+ ex+=`∠AOC = внеш. угол △OBC `;
+ }
+ svgEl.innerHTML=`
+
+
+
+
+
+
+
+ O
+ B
+ A
+ C
+ ${ex}
+ `;
+ txtEl.innerHTML=steps[step].text;
+ if(window.renderMathInElement) try{renderMath(txtEl);}catch(e){}
+ document.getElementById('p9-proof-next').textContent=step>=steps.length-1?'Готово':'Далее';
+ }
+ document.getElementById('p9-proof-next').addEventListener('click',()=>{if(step{step=0;draw();});
+ draw();
+ })();
+
+ /* === INIT 3: калькулятор === */
+ (function(){
+ document.getElementById('p9-c2i-btn').addEventListener('click',()=>{
+ const v=parseFloat(document.getElementById('p9-cinp').value);
+ const out=document.getElementById('p9-calc-out');
+ out.style.display='block';
+ if(isNaN(v)||v<=0||v>360){out.style.background='#fee2e2';out.style.color='#7f1d1d';out.textContent='Введите угол от 1 до 360.';return;}
+ out.style.background='var(--sec-acc-soft,#a5f3fc)';out.style.color='var(--sec-acc-d,#0891b2)';
+ out.textContent='Центральный '+v+'° → Вписанный = '+v+'/2 = '+(v/2)+'°';
+ });
+ document.getElementById('p9-i2c-btn').addEventListener('click',()=>{
+ const v=parseFloat(document.getElementById('p9-iinp').value);
+ const out=document.getElementById('p9-calc-out');
+ out.style.display='block';
+ if(isNaN(v)||v<=0||v>180){out.style.background='#fee2e2';out.style.color='#7f1d1d';out.textContent='Введите вписанный угол от 1 до 180.';return;}
+ out.style.background='var(--sec-acc-soft,#a5f3fc)';out.style.color='var(--sec-acc-d,#0891b2)';
+ out.textContent='Вписанный '+v+'° → Центральный = 2·'+v+' = '+(2*v)+'°';
+ });
+ })();
+
+ /* === INIT 4: DnD верно/неверно === */
+ (function(){
+ const items=[
+ {label:'Вписанный угол = ½ центрального на той же дуге',cat:'true'},
+ {label:'Вписанный угол = центральному углу',cat:'false'},
+ {label:'Центральный угол = 2 · вписанного на той же дуге',cat:'true'},
+ {label:'Вписанный угол всегда тупой',cat:'false'},
+ {label:'Дуга 100° → вписанный угол 50°',cat:'true'},
+ {label:'Вписанный угол может быть больше 180°',cat:'false'},
+ ];
+ const pool=document.getElementById('p9-dnd-pool');
+ const boxes={true:document.getElementById('p9-drop-true-items'),false:document.getElementById('p9-drop-false-items')};
+ const fb=document.getElementById('p9-dnd-fb');
+ let placed={};
+ function reset(){
+ pool.innerHTML='';placed={};
+ Object.values(boxes).forEach(b=>b.innerHTML='');
+ fb.style.display='none';
+ items.forEach((it,i)=>{
+ const chip=document.createElement('div');
+ chip.className='dnd-chip';chip.dataset.i=i;chip.textContent=it.label;
+ chip.addEventListener('click',()=>chip.classList.toggle('armed'));
+ Object.entries(boxes).forEach(([cat,box])=>{
+ box.parentElement.addEventListener('click',()=>{
+ if(!chip.classList.contains('armed'))return;
+ chip.classList.remove('armed');
+ if(placed[i]!==undefined) boxes[placed[i]].removeChild(chip);
+ placed[i]=cat;
+ box.appendChild(chip);
+ });
+ });
+ pool.appendChild(chip);
+ });
+ }
+ document.getElementById('p9-dnd-check').addEventListener('click',()=>{
+ let ok=0;
+ items.forEach((it,i)=>{if(placed[i]===it.cat)ok++;});
+ feedback(fb,ok===items.length,'Верно: '+ok+'/'+items.length+(ok===items.length?'. Отлично!':'. Попробуй ещё.'));
+ if(ok===items.length){addXp(8,'p9-dnd');bumpProgress('p9',15);}
+ });
+ document.getElementById('p9-dnd-reset').addEventListener('click',reset);
+ reset();
+ })();
+
+ /* === INIT 5: тренажёр === */
+ (function(){
+ const tasks=[
+ {q:'Центральный угол $\\angle AOC = 80°$. Найди вписанный угол $\\angle ABC$.',a:40,hint:'∠ABC = 80°/2 = 40°'},
+ {q:'Вписанный угол $\\angle ABC = 65°$. Найди центральный угол.',a:130,hint:'∠AOC = 2·65° = 130°'},
+ {q:'Дуга $AC = 200°$. Найди вписанный угол, опирающийся на эту дугу.',a:100,hint:'∠ABC = 200°/2 = 100°'},
+ {q:'Вписанный угол $= 45°$. Найди дугу, на которую он опирается.',a:90,hint:'Дуга = 2·45° = 90°'},
+ {q:'Центральный угол $= 176°$. Найди вписанный угол (в градусах).',a:88,hint:'∠вп = 176°/2 = 88°'},
+ ];
+ let cur=0, score=0;
+ const iEl=document.getElementById('p9-tr-i'), scEl=document.getElementById('p9-tr-score');
+ const taskEl=document.getElementById('p9-tr-task'), ansEl=document.getElementById('p9-tr-ans');
+ const goBtn=document.getElementById('p9-tr-go'), startBtn=document.getElementById('p9-tr-start');
+ const fb=document.getElementById('p9-tr-fb');
+ function showTask(){
+ if(cur>=tasks.length){taskEl.innerHTML='Тренажёр завершён! Очки: '+score+'/'+tasks.length+' ';ansEl.style.display='none';goBtn.style.display='none';addXp(score*4,'p9-trainer');bumpProgress('p9',20);return;}
+ taskEl.innerHTML=tasks[cur].q;iEl.textContent=cur+1;ansEl.value='';fb.style.display='none';
+ if(window.renderMathInElement) try{renderMath(taskEl);}catch(e){}
+ }
+ goBtn.addEventListener('click',()=>{
+ const ans=parseFloat(ansEl.value.replace(',','.'));
+ const ok=Math.abs(ans-tasks[cur].a)<0.5;
+ feedback(fb,ok,ok?'Верно!':'Неверно. Подсказка: '+tasks[cur].hint);
+ if(ok){score++;scEl.textContent=score;cur++;setTimeout(showTask,900);}
+ });
+ startBtn.addEventListener('click',()=>{cur=0;score=0;scEl.textContent=0;ansEl.style.display='';goBtn.style.display='';showTask();});
+ showTask();
+ })();
+
+ /* === INIT 6: Босс §9 === */
+ (function(){
+ const tasks=[
+ {q:'Вписанный угол $\\angle ABC = 55°$. Центральный угол на той же дуге:',
+ opts:['110°','55°','27,5°'],cor:0,
+ exp:'$\\angle AOC = 2 \\cdot 55° = 110°$.'},
+ {q:'Центральный угол равен 180° (диаметр). Вписанный угол равен:',
+ opts:['180°','90°','45°'],cor:1,
+ exp:'$\\angle вп = 180°/2 = 90°$. Это теорема Фалеса (§11).'},
+ {q:'Дуга $AC = 130°$, вершина $B$ на другой дуге. Угол $\\angle ABC$:',
+ opts:['65°','130°','260°'],cor:0,
+ exp:'$\\angle ABC = \\dfrac{1}{2} \\cdot 130° = 65°$.'},
+ {q:'Вписанный угол $\\angle ABC = 90°$. Найди дугу $AC$.',
+ opts:['180°','90°','270°'],cor:0,
+ exp:'Дуга $= 2 \\cdot 90° = 180°$ — полуокружность, то есть $AC$ — диаметр.'},
+ ];
+ const cont=document.getElementById('p9-boss-tasks');
+ let bhtml='';
+ tasks.forEach((t,i)=>{
+ bhtml+=`
+
${i+1}. ${t.q}
+
+ ${t.opts.map((o,j)=>`${o} `).join('')}
+
+
+
`;
+ });
+ cont.innerHTML=bhtml;
+ if(window.renderMathInElement) try{renderMath(cont);}catch(e){}
+ })();
+}
+function buildP10(){
+ const box=document.getElementById('p10-body');
+ let html='';
+
+ html+=makeCard('rule','Следствие: вписанные углы на одной дуге','10.1',`
+ Следствие из теоремы §9. Все вписанные углы, опирающиеся на одну и ту же дугу, равны между собой.
+ $$\angle AB_1C = \angle AB_2C = \angle AB_3C = \dfrac{1}{2}\,\smile AC$$
+ Почему? Каждый вписанный угол равен половине центрального, опирающегося на дугу $AC$. Центральный угол для данной дуги один и тот же — поэтому все вписанные углы равны.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+ C
+ B₁
+ B₂
+ B₃
+ O
+
+
`);
+
+ html+=makeCard('theory','Доказательство следствия','10.2',`
+ Пусть $B_1$ и $B_2$ — две точки на окружности, лежащие на одной стороне от хорды $AC$. Тогда:
+
+ По теореме §9: $\angle AB_1C = \dfrac{1}{2}\angle AOC$
+ По теореме §9: $\angle AB_2C = \dfrac{1}{2}\angle AOC$
+ Следовательно: $\angle AB_1C = \angle AB_2C$. ч.т.д.
+ `);
+
+ html+=makeCard('example','Пример','10.3',`
+ Задача. Дуга $AC = 80°$. Три точки $B_1, B_2, B_3$ лежат на большей дуге. Найди все три вписанных угла.
+ Решение. Каждый вписанный угол = $80°/2 = 40°$. Все три угла равны $40°$.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+ C
+ B₁=40°
+ B₂=40°
+ B₃=40°
+ O
+
+
`);
+
+ /* ИНТЕРАКТИВ 1 — несколько вершин на одной дуге */
+ html+=`
+
+
Двигай слайдер — дуга $AC$ меняется. Углы $B_1, B_2, B_3$ остаются равными между собой.
+
+ Дуга $AC$ = 80 °
+
+
+
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 2 — пошаговое доказательство */
+ html+=`
+
+
Нажимай «Далее» для пошагового объяснения.
+
+
+
+ Далее
+ Сначала
+
+
`;
+
+ /* ИНТЕРАКТИВ 3 — калькулятор проверки равенства */
+ html+=`
+
+
Введи градусную меру дуги $AC$ — получи величину всех вписанных углов на ней.
+
+ Дуга AC (°):
+ Вычислить
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 4 — DnD: равные углы */
+ html+=`
+
+
Перетащи утверждения: «Равны» или «Не обязательно равны».
+
+
+
Проверить Сбросить
+
+
`;
+
+ /* ИНТЕРАКТИВ 5 — Тренажёр */
+ html+=`
+
+
5 задач на равенство вписанных углов одной дуги.
+
Задача 1 / 5 Очки: 0
+
+
+
+ Проверить
+ Начать заново
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 6 — Босс §10 */
+ html+=`
+
+
4 задачи повышенной сложности — каждая верная даёт +5 XP.
+
+
`;
+
+ html+=`
+
+
+ Я прочитал §10 (+10 XP)
+
+
`;
+ html+=secNav('p9','p11');
+ box.innerHTML=html;
+ if(window.renderMathInElement) setTimeout(()=>renderMath(box),0);
+
+ /* === INIT 1: многие вершины === */
+ (function(){
+ const sl=document.getElementById('p10-arc-sl');
+ const valEl=document.getElementById('p10-arc-val');
+ const svgWrap=document.getElementById('p10-multi-svg');
+ const info=document.getElementById('p10-multi-info');
+ const R=68, cx=130, cy=88, W=260, H=178;
+ function draw(){
+ const arcDeg=+sl.value;
+ valEl.textContent=arcDeg;
+ const ins=arcDeg/2;
+ const aA=(-60-arcDeg/2)*Math.PI/180;
+ const aC=(-60+arcDeg/2)*Math.PI/180;
+ const Ax=cx+R*Math.cos(aA), Ay=cy+R*Math.sin(aA);
+ const Ccx=cx+R*Math.cos(aC), Ccy=cy+R*Math.sin(aC);
+ // three B points on opposite arc
+ const bAngles=[130,180,230];
+ const bColors=['#dc2626','#10b981','#7c3aed'];
+ let bLines='', bDots='', bLabels='';
+ bAngles.forEach((bd,k)=>{
+ const bRad=bd*Math.PI/180;
+ const Bx=cx+R*Math.cos(bRad), By=cy+R*Math.sin(bRad);
+ bLines+=` `;
+ bLines+=` `;
+ bDots+=` `;
+ const lx=Bx+(Bx>cx?8:-16), ly=By+(By>cy?16:-4);
+ bLabels+=`B${k+1} `;
+ bLabels+=`${Math.round(ins)}° `;
+ });
+ svgWrap.innerHTML=`
+
+
+ ${bLines}
+
+
+
+ ${bDots}
+ A
+ C
+ O
+ ${bLabels}
+ `;
+ info.textContent='Дуга AC = '+arcDeg+'° → Все вписанные углы = '+Math.round(ins)+'° (равны!)';
+ }
+ sl.addEventListener('input',draw);
+ draw();
+ })();
+
+ /* === INIT 2: доказательство по шагам === */
+ (function(){
+ const R=55, cx=110, cy=78, W=220, H=160;
+ const aA=(-80)*Math.PI/180, aC=(20)*Math.PI/180;
+ const Ax=cx+R*Math.cos(aA), Ay=cy+R*Math.sin(aA);
+ const Ccx=cx+R*Math.cos(aC), Ccy=cy+R*Math.sin(aC);
+ const aB1=150*Math.PI/180, aB2=200*Math.PI/180;
+ const B1x=cx+R*Math.cos(aB1), B1y=cy+R*Math.sin(aB1);
+ const B2x=cx+R*Math.cos(aB2), B2y=cy+R*Math.sin(aB2);
+ const steps=[
+ {text:'Дано: Дуга $AC$ фиксирована. Точки $B_1$ и $B_2$ лежат на дуге, не содержащей $AC$. Нужно доказать: $\\angle AB_1C = \\angle AB_2C$.'},
+ {text:'Шаг 1. По теореме §9: $\\angle AB_1C = \\dfrac{1}{2}\\angle AOC$ (центральный угол на дуге $AC$).'},
+ {text:'Шаг 2. Аналогично: $\\angle AB_2C = \\dfrac{1}{2}\\angle AOC$.'},
+ {text:'Шаг 3. Правые части равны, значит $\\angle AB_1C = \\angle AB_2C$. ч.т.д. '},
+ ];
+ let step=0;
+ const svgEl=document.getElementById('p10-proof-svg'), txtEl=document.getElementById('p10-proof-text');
+ function draw(){
+ let ex='';
+ if(step>=1){
+ ex+=` `;
+ ex+=` `;
+ ex+=`∠B₁=${Math.round(50)}° `;
+ }
+ if(step>=2){
+ ex+=` `;
+ ex+=` `;
+ ex+=`∠B₂=${Math.round(50)}° `;
+ }
+ if(step>=1){
+ ex+=` `;
+ ex+=` `;
+ ex+=`∠AOC `;
+ }
+ svgEl.innerHTML=`
+
+
+
+
+
+
+
+ O
+ A
+ C
+ B₁
+ B₂
+ ${ex}
+ `;
+ txtEl.innerHTML=steps[step].text;
+ if(window.renderMathInElement) try{renderMath(txtEl);}catch(e){}
+ document.getElementById('p10-proof-next').textContent=step>=steps.length-1?'Готово':'Далее';
+ }
+ document.getElementById('p10-proof-next').addEventListener('click',()=>{if(step{step=0;draw();});
+ draw();
+ })();
+
+ /* === INIT 3: калькулятор === */
+ (function(){
+ document.getElementById('p10-calc-btn').addEventListener('click',()=>{
+ const arc=parseFloat(document.getElementById('p10-darc').value);
+ const out=document.getElementById('p10-calc-out');
+ out.style.display='block';
+ if(isNaN(arc)||arc<=0||arc>=360){out.style.background='#fee2e2';out.style.color='#7f1d1d';out.textContent='Введите дугу от 1 до 358°.';return;}
+ out.style.background='var(--sec-acc-soft,#e0f2fe)';out.style.color='var(--sec-acc-d,#0369a1)';
+ const ins=arc/2;
+ out.textContent='Дуга AC = '+arc+'° → Все вписанные углы на этой дуге = '+ins+'°';
+ });
+ })();
+
+ /* === INIT 4: DnD === */
+ (function(){
+ const items=[
+ {label:'∠AB₁C и ∠AB₂C, оба B на большей дуге AC',cat:'eq'},
+ {label:'∠AB₁C и ∠AB₂C, B₁ и B₂ по разные стороны AC',cat:'ne'},
+ {label:'Все вписанные углы на одной полуокружности',cat:'eq'},
+ {label:'Вписанные углы на разных дугах одной хорды',cat:'ne'},
+ {label:'∠AB₁C = ∠AB₃C, все три на одной дуге AC',cat:'eq'},
+ ];
+ const pool=document.getElementById('p10-dnd-pool');
+ const boxes={eq:document.getElementById('p10-drop-eq-items'),ne:document.getElementById('p10-drop-ne-items')};
+ const fb=document.getElementById('p10-dnd-fb');
+ let placed={};
+ function reset(){
+ pool.innerHTML='';placed={};
+ Object.values(boxes).forEach(b=>b.innerHTML='');
+ fb.style.display='none';
+ items.forEach((it,i)=>{
+ const chip=document.createElement('div');
+ chip.className='dnd-chip';chip.dataset.i=i;chip.textContent=it.label;
+ chip.addEventListener('click',()=>chip.classList.toggle('armed'));
+ Object.entries(boxes).forEach(([cat,box])=>{
+ box.parentElement.addEventListener('click',()=>{
+ if(!chip.classList.contains('armed'))return;
+ chip.classList.remove('armed');
+ if(placed[i]!==undefined) boxes[placed[i]].removeChild(chip);
+ placed[i]=cat;
+ box.appendChild(chip);
+ });
+ });
+ pool.appendChild(chip);
+ });
+ }
+ document.getElementById('p10-dnd-check').addEventListener('click',()=>{
+ let ok=0;
+ items.forEach((it,i)=>{if(placed[i]===it.cat)ok++;});
+ feedback(fb,ok===items.length,'Верно: '+ok+'/'+items.length+(ok===items.length?'. Отлично!':'. Попробуй ещё.'));
+ if(ok===items.length){addXp(8,'p10-dnd');bumpProgress('p10',15);}
+ });
+ document.getElementById('p10-dnd-reset').addEventListener('click',reset);
+ reset();
+ })();
+
+ /* === INIT 5: тренажёр === */
+ (function(){
+ const tasks=[
+ {q:'Дуга $AC = 110°$. Три точки $B_1, B_2, B_3$ на другой дуге. Чему равен $\\angle AB_1C$?',a:55,hint:'∠AB₁C = 110°/2 = 55°'},
+ {q:'Вписанный угол $\\angle AB_1C = 35°$. Чему равен $\\angle AB_2C$, если $B_2$ на той же дуге?',a:35,hint:'Все вписанные углы на одной дуге равны, значит ∠AB₂C = 35°'},
+ {q:'Дуга $AC = 160°$. Найди все вписанные углы на другой дуге.',a:80,hint:'80° = 160°/2'},
+ {q:'Вписанный угол $= 70°$. Найди дугу, на которую он опирается.',a:140,hint:'Дуга = 2·70° = 140°'},
+ {q:'Дуга $AC = 90°$, $B_1$ и $B_2$ на большей дуге. Сумма $\\angle AB_1C + \\angle AB_2C = ?°$',a:90,hint:'Каждый = 45°, сумма = 90°'},
+ ];
+ let cur=0, score=0;
+ const iEl=document.getElementById('p10-tr-i'), scEl=document.getElementById('p10-tr-score');
+ const taskEl=document.getElementById('p10-tr-task'), ansEl=document.getElementById('p10-tr-ans');
+ const goBtn=document.getElementById('p10-tr-go'), startBtn=document.getElementById('p10-tr-start');
+ const fb=document.getElementById('p10-tr-fb');
+ function showTask(){
+ if(cur>=tasks.length){taskEl.innerHTML='Тренажёр завершён! Очки: '+score+'/'+tasks.length+' ';ansEl.style.display='none';goBtn.style.display='none';addXp(score*4,'p10-trainer');bumpProgress('p10',20);return;}
+ taskEl.innerHTML=tasks[cur].q;iEl.textContent=cur+1;ansEl.value='';fb.style.display='none';
+ if(window.renderMathInElement) try{renderMath(taskEl);}catch(e){}
+ }
+ goBtn.addEventListener('click',()=>{
+ const ans=parseFloat(ansEl.value.replace(',','.'));
+ const ok=Math.abs(ans-tasks[cur].a)<0.5;
+ feedback(fb,ok,ok?'Верно!':'Неверно. Подсказка: '+tasks[cur].hint);
+ if(ok){score++;scEl.textContent=score;cur++;setTimeout(showTask,900);}
+ });
+ startBtn.addEventListener('click',()=>{cur=0;score=0;scEl.textContent=0;ansEl.style.display='';goBtn.style.display='';showTask();});
+ showTask();
+ })();
+
+ /* === INIT 6: Босс §10 === */
+ (function(){
+ const tasks=[
+ {q:'Вписанные углы $\\angle AB_1C$ и $\\angle AB_2C$ опираются на одну дугу $AC = 120°$. Их сумма:',
+ opts:['120°','60°','240°'],cor:0,
+ exp:'Каждый = $60°$, сумма = $120°$.'},
+ {q:'Дуга $AC = 180°$ (диаметр). Все вписанные углы на другой полуокружности равны:',
+ opts:['90°','60°','45°'],cor:0,
+ exp:'$180°/2 = 90°$. Это следствие §11.'},
+ {q:'Точки $B_1$ и $B_2$ по разные стороны хорды $AC$. Их вписанные углы:',
+ opts:['Равны','В сумме дают 180°','Не связаны'],cor:1,
+ exp:'Вписанные углы $\\angle AB_1C$ (на меньшей дуге) и $\\angle AB_2C$ (на большей дуге) дополняют друг друга до $180°$.'},
+ {q:'Дуга $AC = 70°$. Сколько вписанных углов можно провести через $A$ и $C$ со значением $35°$?',
+ opts:['Один','Два','Бесконечно много'],cor:2,
+ exp:'Любая точка большей дуги даёт угол $35°$ — таких точек бесконечно много.'},
+ ];
+ const cont=document.getElementById('p10-boss-tasks');
+ let bhtml='';
+ tasks.forEach((t,i)=>{
+ bhtml+=`
+
${i+1}. ${t.q}
+
+ ${t.opts.map((o,j)=>`${o} `).join('')}
+
+
+
`;
+ });
+ cont.innerHTML=bhtml;
+ if(window.renderMathInElement) try{renderMath(cont);}catch(e){}
+ })();
+}
+function buildP11(){
+ const box=document.getElementById('p11-body');
+ let html='';
+
+ html+=makeCard('rule','Вписанный угол на диаметре','11.1',`
+ Следствие (Теорема Фалеса). Вписанный угол, опирающийся на диаметр, равен $90°$.
+ $$AB \text{ — диаметр} \implies \angle ACB = 90°$$
+ Почему? Диаметр стягивает полуокружность $= 180°$. По теореме §9: вписанный угол $= 180°/2 = 90°$.
+
+
+
+
+
+
+
+
+
+
+
+ A
+ B
+ C
+ O
+ ∠ACB = 90°
+
+
`);
+
+ html+=makeCard('theory','Доказательство','11.2',`
+ Пусть $AB$ — диаметр, $C$ — точка на окружности ($C \neq A, B$).
+
+ Полуокружность $AC$ (меньшая): $\smile AB = 180°$ (диаметр).
+ По теореме §9: $\angle ACB = \dfrac{1}{2} \cdot 180° = 90°$.
+
+ ч.т.д.
+ Следствие: в прямоугольном треугольнике $ACB$ с прямым углом при $C$ гипотенуза $AB$ является диаметром описанной окружности.
`);
+
+ html+=makeCard('example','Применение','11.3',`
+ Задача. Диаметр $AB = 10$, $AC = 6$. Найди $BC$.
+ Решение. $\angle ACB = 90°$ (вписанный угол на диаметре). По теореме Пифагора:
+ $$BC = \sqrt{AB^2 - AC^2} = \sqrt{100 - 36} = \sqrt{64} = 8$$
+
+
+
+
+
+
+
+
+
+
+
+ A
+ B
+ C
+ AC=6
+ BC=8
+ AB=10
+
+
`);
+
+ /* ИНТЕРАКТИВ 1 — слайдер положения C */
+ html+=`
+
+
Двигай слайдер — перемещай точку $C$ по окружности. Угол $\angle ACB$ всегда остаётся прямым!
+
+ Положение $C$ = 100 °
+
+
+
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 2 — пошаговое доказательство */
+ html+=`
+
+
Нажимай «Далее» для пошагового объяснения.
+
+
+
+ Далее
+ Сначала
+
+
`;
+
+ /* ИНТЕРАКТИВ 3 — калькулятор Пифагора */
+ html+=`
+
+
Диаметр = гипотенуза. Введи диаметр $AB$ и один катет — найди второй.
+
+ Диаметр AB:
+ Катет AC:
+ Найти BC
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 4 — Тренажёр */
+ html+=`
+
+
5 задач на вписанный угол на диаметре и теорему Пифагора.
+
Задача 1 / 5 Очки: 0
+
+
+
+ Проверить
+ Начать заново
+
+
+
`;
+
+ /* ИНТЕРАКТИВ 5 — DnD верно/неверно */
+ html+=`
+
+
Рассортируй утверждения о вписанном угле на диаметре.
+
+
+
Проверить Сбросить
+
+
`;
+
+ /* ИНТЕРАКТИВ 6 — Босс §11 */
+ html+=`
+
+
4 задачи повышенной сложности — каждая верная даёт +5 XP.
+
+
`;
+
+ html+=`
+
+
+ Я прочитал §11 (+10 XP)
+
+
`;
+ html+=secNav('p10','p12');
+ box.innerHTML=html;
+ if(window.renderMathInElement) setTimeout(()=>renderMath(box),0);
+
+ /* === INIT 1: слайдер положения C === */
+ (function(){
+ const sl=document.getElementById('p11-c-sl');
+ const valEl=document.getElementById('p11-c-val');
+ const svgWrap=document.getElementById('p11-diam-svg');
+ const info=document.getElementById('p11-diam-info');
+ const R=68, cx=130, cy=95, W=260, H=192;
+ const Ax=cx-R, Ay=cy;
+ const Bx=cx+R, By=cy;
+ function draw(){
+ const cDeg=+sl.value;
+ valEl.textContent=cDeg;
+ const cRad=cDeg*Math.PI/180;
+ const Ccx=cx+R*Math.cos(cRad-Math.PI/2), Ccy=cy+R*Math.sin(cRad-Math.PI/2);
+ // right angle marker at C
+ const u={x:(Ax-Ccx), y:(Ay-Ccy)};
+ const un=Math.sqrt(u.x*u.x+u.y*u.y);
+ const ux=u.x/un, uy=u.y/un;
+ const w={x:(Bx-Ccx), y:(By-Ccy)};
+ const wn=Math.sqrt(w.x*w.x+w.y*w.y);
+ const wx=w.x/wn, wy=w.y/wn;
+ const s=9;
+ const m1x=Ccx+s*ux, m1y=Ccy+s*uy;
+ const m2x=m1x+s*wx, m2y=m1y+s*wy;
+ const m3x=Ccx+s*wx, m3y=Ccy+s*wy;
+ svgWrap.innerHTML=`
+
+
+
+
+
+
+
+
+
+ A
+ B
+ C
+ O
+ `;
+ info.textContent='Положение C = '+cDeg+'°. Угол ∠ACB = 90° (всегда!)';
+ }
+ sl.addEventListener('input',draw);
+ draw();
+ })();
+
+ /* === INIT 2: пошаговое доказательство === */
+ (function(){
+ const R=55, cx=110, cy=80, W=230, H=165;
+ const Ax=cx-R, Ay=cy;
+ const Bx=cx+R, By=cy;
+ const cRad=(-60)*Math.PI/180;
+ const Ccx=cx+R*Math.cos(cRad), Ccy=cy+R*Math.sin(cRad);
+ const steps=[
+ {text:'Дано: $AB$ — диаметр окружности, $C$ — точка на окружности, $C \\neq A, C \\neq B$. Доказать: $\\angle ACB = 90°$.'},
+ {text:'Шаг 1. $AB$ — диаметр, значит центральный угол $\\angle AOB = 180°$ (развёрнутый). Дуга $ACB = 180°$ (полуокружность).'},
+ {text:'Шаг 2. Вписанный угол $\\angle ACB$ опирается на дугу $AB = 180°$ (дугу, не содержащую $C$).'},
+ {text:'Шаг 3. По теореме §9: $\\angle ACB = \\dfrac{1}{2} \\cdot 180° = 90°$. ч.т.д. '},
+ ];
+ let step=0;
+ const svgEl=document.getElementById('p11-proof-svg'), txtEl=document.getElementById('p11-proof-text');
+ function draw(){
+ let ex='';
+ if(step>=1){
+ ex+=`∠AOB=180° `;
+ ex+=` `;
+ }
+ if(step>=2){
+ ex+=` `;
+ ex+=` `;
+ }
+ if(step>=3){
+ const u={x:(Ax-Ccx),y:(Ay-Ccy)},w={x:(Bx-Ccx),y:(By-Ccy)};
+ const un=Math.sqrt(u.x*u.x+u.y*u.y),wn=Math.sqrt(w.x*w.x+w.y*w.y);
+ const ux=u.x/un,uy=u.y/un,wx=w.x/wn,wy=w.y/wn;
+ const s=8;
+ ex+=` `;
+ ex+=`90° `;
+ }
+ svgEl.innerHTML=`
+
+
+
+
+
+
+ A
+ B
+ C
+ O
+ ${ex}
+ `;
+ txtEl.innerHTML=steps[step].text;
+ if(window.renderMathInElement) try{renderMath(txtEl);}catch(e){}
+ document.getElementById('p11-proof-next').textContent=step>=steps.length-1?'Готово':'Далее';
+ }
+ document.getElementById('p11-proof-next').addEventListener('click',()=>{if(step{step=0;draw();});
+ draw();
+ })();
+
+ /* === INIT 3: калькулятор Пифагора === */
+ (function(){
+ document.getElementById('p11-pyth-btn').addEventListener('click',()=>{
+ const d=parseFloat(document.getElementById('p11-diam').value);
+ const a=parseFloat(document.getElementById('p11-leg').value);
+ const out=document.getElementById('p11-pyth-out');
+ out.style.display='block';
+ if(isNaN(d)||isNaN(a)||d<=0||a<=0){out.style.background='#fee2e2';out.style.color='#7f1d1d';out.textContent='Введите положительные значения.';return;}
+ if(a>=d){out.style.background='#fee2e2';out.style.color='#7f1d1d';out.textContent='Катет должен быть меньше диаметра (гипотенузы).';return;}
+ const bc=Math.sqrt(d*d-a*a);
+ out.style.background='var(--sec-acc-soft,#dbeafe)';out.style.color='var(--sec-acc-d,#1d4ed8)';
+ out.innerHTML='BC = √(AB²−AC²) = √('+d+'²−'+a+'²) = √'+((d*d-a*a).toFixed(2))+' = '+bc.toFixed(4)+' ';
+ });
+ })();
+
+ /* === INIT 4: тренажёр === */
+ (function(){
+ const tasks=[
+ {q:'$AB$ — диаметр, $C$ на окружности. Чему равен $\\angle ACB$?',a:90,hint:'По теореме: вписанный угол на диаметре = 90°'},
+ {q:'Диаметр $AB = 13$, катет $AC = 5$. Найди $BC$.',a:12,hint:'BC = √(169−25) = √144 = 12'},
+ {q:'$\\angle ACB = 90°$, $BC = 8$, $AC = 6$. Найди диаметр $AB$.',a:10,hint:'AB = √(64+36) = √100 = 10'},
+ {q:'Диаметр $AB = 2R = 20$, катет $BC = 16$. Найди $AC$.',a:12,hint:'AC = √(400−256) = √144 = 12'},
+ {q:'Вписанный угол $\\angle ACB$, $AB$ — диаметр. Треугольник $ACB$ — прямоугольный. Верно ли это? (1 — да, 0 — нет)',a:1,hint:'Да, ∠ACB=90° означает прямоугольный треугольник'},
+ ];
+ let cur=0, score=0;
+ const iEl=document.getElementById('p11-tr-i'), scEl=document.getElementById('p11-tr-score');
+ const taskEl=document.getElementById('p11-tr-task'), ansEl=document.getElementById('p11-tr-ans');
+ const goBtn=document.getElementById('p11-tr-go'), startBtn=document.getElementById('p11-tr-start');
+ const fb=document.getElementById('p11-tr-fb');
+ function showTask(){
+ if(cur>=tasks.length){taskEl.innerHTML='Тренажёр завершён! Очки: '+score+'/'+tasks.length+' ';ansEl.style.display='none';goBtn.style.display='none';addXp(score*4,'p11-trainer');bumpProgress('p11',20);return;}
+ taskEl.innerHTML=tasks[cur].q;iEl.textContent=cur+1;ansEl.value='';fb.style.display='none';
+ if(window.renderMathInElement) try{renderMath(taskEl);}catch(e){}
+ }
+ goBtn.addEventListener('click',()=>{
+ const ans=parseFloat(ansEl.value.replace(',','.'));
+ const ok=Math.abs(ans-tasks[cur].a)<0.5;
+ feedback(fb,ok,ok?'Верно!':'Неверно. Подсказка: '+tasks[cur].hint);
+ if(ok){score++;scEl.textContent=score;cur++;setTimeout(showTask,900);}
+ });
+ startBtn.addEventListener('click',()=>{cur=0;score=0;scEl.textContent=0;ansEl.style.display='';goBtn.style.display='';showTask();});
+ showTask();
+ })();
+
+ /* === INIT 5: DnD верно/неверно === */
+ (function(){
+ const items=[
+ {label:'Вписанный угол на диаметре = 90°',cat:'true'},
+ {label:'Вписанный угол на диаметре = 180°',cat:'false'},
+ {label:'Гипотенуза прямоугольного треугольника — диаметр описанной окружности',cat:'true'},
+ {label:'Диаметр всегда является вписанным углом',cat:'false'},
+ {label:'Если ∠ACB = 90°, то AB — диаметр',cat:'true'},
+ {label:'Вписанный угол на диаметре может быть тупым',cat:'false'},
+ ];
+ const pool=document.getElementById('p11-dnd-pool');
+ const boxes={true:document.getElementById('p11-drop-true-items'),false:document.getElementById('p11-drop-false-items')};
+ const fb=document.getElementById('p11-dnd-fb');
+ let placed={};
+ function reset(){
+ pool.innerHTML='';placed={};
+ Object.values(boxes).forEach(b=>b.innerHTML='');
+ fb.style.display='none';
+ items.forEach((it,i)=>{
+ const chip=document.createElement('div');
+ chip.className='dnd-chip';chip.dataset.i=i;chip.textContent=it.label;
+ chip.addEventListener('click',()=>chip.classList.toggle('armed'));
+ Object.entries(boxes).forEach(([cat,box])=>{
+ box.parentElement.addEventListener('click',()=>{
+ if(!chip.classList.contains('armed'))return;
+ chip.classList.remove('armed');
+ if(placed[i]!==undefined) boxes[placed[i]].removeChild(chip);
+ placed[i]=cat;
+ box.appendChild(chip);
+ });
+ });
+ pool.appendChild(chip);
+ });
+ }
+ document.getElementById('p11-dnd-check').addEventListener('click',()=>{
+ let ok=0;
+ items.forEach((it,i)=>{if(placed[i]===it.cat)ok++;});
+ feedback(fb,ok===items.length,'Верно: '+ok+'/'+items.length+(ok===items.length?'. Отлично!':'. Попробуй ещё.'));
+ if(ok===items.length){addXp(8,'p11-dnd');bumpProgress('p11',15);}
+ });
+ document.getElementById('p11-dnd-reset').addEventListener('click',reset);
+ reset();
+ })();
+
+ /* === INIT 6: Босс §11 === */
+ (function(){
+ const tasks=[
+ {q:'$AB$ — диаметр, $C$ на окружности. Треугольник $ACB$ является:',
+ opts:['Прямоугольным с катетами $AC$, $BC$','Равнобедренным','Остроугольным'],cor:0,
+ exp:'$\\angle ACB = 90°$ — прямой, значит $ACB$ прямоугольный, $AB$ — гипотенуза.'},
+ {q:'Диаметр $AB = 26$, $AC = 10$. Найди $BC$.',
+ opts:['24','16','12'],cor:0,
+ exp:'$BC = \\sqrt{26^2 - 10^2} = \\sqrt{676-100} = \\sqrt{576} = 24$.'},
+ {q:'$\\angle ACB = 90°$, $AC = BC = 5$. Диаметр $AB = ?$',
+ opts:['$5\\sqrt{2}$','$10$','$5$'],cor:0,
+ exp:'$AB = \\sqrt{AC^2 + BC^2} = \\sqrt{25+25} = 5\\sqrt{2}$.'},
+ {q:'Радиус $R = 7$. Сколько различных прямоугольных треугольников можно вписать в эту окружность с гипотенузой = диаметру?',
+ opts:['Один','Бесконечно много','Четыре'],cor:1,
+ exp:'Вершина $C$ может быть любой точкой окружности (кроме концов диаметра) — бесконечно много треугольников.'},
+ ];
+ const cont=document.getElementById('p11-boss-tasks');
+ let bhtml='';
+ tasks.forEach((t,i)=>{
+ bhtml+=`
+
${i+1}. ${t.q}
+
+ ${t.opts.map((o,j)=>`${o} `).join('')}
+
+
+
`;
+ });
+ cont.innerHTML=bhtml;
+ if(window.renderMathInElement) try{renderMath(cont);}catch(e){}
+ })();
+}
function buildP12stub(){ document.getElementById('p12-body').innerHTML='§12 — Волна 1 : содержимое появится в следующем обновлении.
'+secNav('p11','p13'); }
function buildP13stub(){ document.getElementById('p13-body').innerHTML='§13 — Волна 1 : содержимое появится в следующем обновлении.
'+secNav('p12','p14'); }
function buildP14stub(){ document.getElementById('p14-body').innerHTML='§14 — Волна 1 : содержимое появится в следующем обновлении.
'+secNav('p13','p15'); }