diff --git a/frontend/textbooks/geometry_9_ch4.html b/frontend/textbooks/geometry_9_ch4.html index c7f1717..8908ba3 100644 --- a/frontend/textbooks/geometry_9_ch4.html +++ b/frontend/textbooks/geometry_9_ch4.html @@ -501,8 +501,607 @@ function _stubBuilder(paraId, num, name, prev, next){ if(window.renderMathInElement) renderMath(body); } -function buildP15(){ _stubBuilder('p15', '§15', 'Треугольник, квадрат, шестиугольник', 'p14', 'p16'); } -function buildP16(){ _stubBuilder('p16', '§16', 'Длина окружности и площадь круга', 'p15', 'final4'); } +/* ===== §15 Треугольник, квадрат, шестиугольник ===== */ +function buildP15(){ + const box = document.getElementById('p15-body'); + let html = ''; + + html += makeCard('theory', 'Эталонные значения для $n=3,4,6$', '15.1', ` +

Из общей формулы $\\dfrac{a}{2} = R\\sin\\dfrac{180^\\circ}{n}$ (§14) для трёх «именных» правильных многоугольников получаются красивые ответы.

+

Равносторонний треугольник ($n = 3$, $180^\\circ/3 = 60^\\circ$):

+

$a = 2R\\sin 60^\\circ = R\\sqrt{3}$,  $r = R\\cos 60^\\circ = \\dfrac{R}{2}$,  $S = \\dfrac{3\\sqrt{3}}{4} R^2$.

+

Квадрат ($n = 4$, $180^\\circ/4 = 45^\\circ$):

+

$a = 2R\\sin 45^\\circ = R\\sqrt{2}$,  $r = R\\cos 45^\\circ = R\\dfrac{\\sqrt{2}}{2}$,  $S = 2R^2$.

+

Правильный шестиугольник ($n = 6$, $180^\\circ/6 = 30^\\circ$):

+

$a = 2R\\sin 30^\\circ = R$,  $r = R\\cos 30^\\circ = R\\dfrac{\\sqrt{3}}{2}$,  $S = \\dfrac{3\\sqrt{3}}{2} R^2$.

+
Откуда $S$?
+ Берём $S = \\tfrac{1}{2} n R^2 \\sin\\dfrac{360^\\circ}{n}$. Для $n=3$: $S = \\tfrac{3}{2} R^2 \\sin 120^\\circ = \\tfrac{3}{2}\\cdot\\tfrac{\\sqrt{3}}{2} R^2 = \\tfrac{3\\sqrt{3}}{4} R^2$. Для $n=4$: $S = 2 R^2 \\sin 90^\\circ = 2R^2$. Для $n=6$: $S = 3 R^2 \\sin 60^\\circ = \\tfrac{3\\sqrt{3}}{2} R^2$. +
`); + + html += makeCard('rule', 'Как это запомнить', '15.2', ` +

Сторона выражается через $R$ корнем (или без него) — главное правило главы:

+ +

Совет: запомни только эти три случая — на ЦТ/экзамене они встречаются чаще всего, и формулы для них короче «общих».

`); + + html += makeCard('example', 'Обратные формулы (от $a$ к $R$)', '15.3', ` +

Если дана сторона $a$, радиус описанной окружности находится так:

+ +
А апофема $r$?
+ Для треугольника $r = R/2 = \\dfrac{a}{2\\sqrt{3}} = \\dfrac{a\\sqrt{3}}{6}$. Для квадрата $r = R\\dfrac{\\sqrt{2}}{2} = \\dfrac{a}{2}$ — апофема квадрата равна половине стороны. Для шестиугольника $r = R\\dfrac{\\sqrt{3}}{2} = \\dfrac{a\\sqrt{3}}{2}$. +
`); + + /* IV1 — Три эталонных многоугольника */ + html += `
+
ИНТЕРАКТИВ 1
Три эталонных многоугольника
+
Меняй радиус $R$ — увидишь сразу 3 правильных многоугольника с одинаковой описанной окружностью.
+
+ +
+
+ +
+
+
`; + + /* IV2 — Калькулятор для эталонов */ + html += `
+
ИНТЕРАКТИВ 2
Калькулятор для эталонов
+
Выбери многоугольник, введи радиус $R$ — получишь $a$, $r$, $S$ по «короткой» формуле.
+
+ + + +
+
+ $R$ = + + +
+
+
+
`; + + /* IV3 — Какая сторона? */ + html += `
+
ИНТЕРАКТИВ 3
Какая сторона?
+
Выбери правильную формулу для стороны $a$ через радиус $R$.
+
Задача 1 / 6Очки: 0 / 6
+
+
+ + + +
+
+
`; + + /* IV4 — Тренажёр */ + html += `
+
ИНТЕРАКТИВ 4
Тренажёр эталонных формул
+
Реши задачу и введи число (округли до двух знаков, допуск 0.05).
+
Задача 1 / 6Очки: 0 / 6
+
+
+ ответ = + + + +
+
+
`; + + html += readButton('p15'); + html += secNav('p14', 'p16'); + + box.innerHTML = html; + renderMath(box); + + /* IV1 — три эталонных */ + (function(){ + const sl = document.getElementById('p15-iv1-r'); + const lab = document.getElementById('p15-iv1-rval'); + const svg = document.getElementById('p15-iv1-svg'); + const out = document.getElementById('p15-iv1-out'); + const seen = new Set(); + const centers = [{x:120, y:130, n:3, label:'3-угольник', aStr:'R\\sqrt{3}'}, + {x:350, y:130, n:4, label:'Квадрат', aStr:'R\\sqrt{2}'}, + {x:580, y:130, n:6, label:'6-угольник', aStr:'R'}]; + function draw(){ + const R = +sl.value; + lab.textContent = R; + let s = ''; + centers.forEach(c=>{ + const pts = regularPoly(c.x, c.y, R, c.n); + // описанная окр + s += ''; + // многоугольник + s += ''; + // одна сторона (выделим) + const P0 = pts[0], P1 = pts[1]; + s += ''; + // центр + s += ''; + // подпись названия снизу + s += ''+c.label+''; + s += 'a = '+c.aStr+''; + }); + svg.innerHTML = s; + const a3 = R*Math.sqrt(3), a4 = R*Math.sqrt(2), a6 = R; + const r3 = R/2, r4 = R*Math.sqrt(2)/2, r6 = R*Math.sqrt(3)/2; + const S3 = 3*Math.sqrt(3)/4*R*R, S4 = 2*R*R, S6 = 3*Math.sqrt(3)/2*R*R; + out.innerHTML = + '' + +'' + +'' + +'' + +'' + +'
$n$$a$$r$$S$
3$R\\sqrt{3} \\approx '+a3.toFixed(2)+'$$R/2 = '+r3.toFixed(2)+'$$\\tfrac{3\\sqrt{3}}{4} R^2 \\approx '+S3.toFixed(2)+'$
4$R\\sqrt{2} \\approx '+a4.toFixed(2)+'$$R\\tfrac{\\sqrt{2}}{2} \\approx '+r4.toFixed(2)+'$$2R^2 = '+S4.toFixed(2)+'$
6$R = '+a6.toFixed(2)+'$$R\\tfrac{\\sqrt{3}}{2} \\approx '+r6.toFixed(2)+'$$\\tfrac{3\\sqrt{3}}{2} R^2 \\approx '+S6.toFixed(2)+'$
'; + renderMath(out); + seen.add(R); + if(seen.size >= 4 && !seen.has('_done')){ addXp(10,'p15-iv1'); bumpProgress('p15', 15); seen.add('_done'); } + } + sl.addEventListener('input', draw); + draw(); + })(); + + /* IV2 — Калькулятор для эталонов */ + (function(){ + const modes = document.querySelectorAll('#p15-iv2-modes button'); + const inpR = document.getElementById('p15-iv2-r'); + const go = document.getElementById('p15-iv2-go'); + const out = document.getElementById('p15-iv2-out'); + const fb = document.getElementById('p15-iv2-fb'); + let mode = 3; + let solved = 0; + function calc(){ + const R = parseFloat(inpR.value); + if(isNaN(R) || R <= 0){ feedback(fb, false, '✗ Введи положительное $R$.'); return; } + let a, r, S, formA, formR, formS; + if(mode === 3){ + a = R*Math.sqrt(3); r = R/2; S = 3*Math.sqrt(3)/4*R*R; + formA = 'a = R\\sqrt{3} = '+R+'\\sqrt{3} \\approx '+a.toFixed(3); + formR = 'r = R/2 = '+r.toFixed(3); + formS = 'S = \\dfrac{3\\sqrt{3}}{4} R^2 \\approx '+S.toFixed(3); + } else if(mode === 4){ + a = R*Math.sqrt(2); r = R*Math.sqrt(2)/2; S = 2*R*R; + formA = 'a = R\\sqrt{2} = '+R+'\\sqrt{2} \\approx '+a.toFixed(3); + formR = 'r = R\\dfrac{\\sqrt{2}}{2} \\approx '+r.toFixed(3); + formS = 'S = 2R^2 = '+S.toFixed(3); + } else { + a = R; r = R*Math.sqrt(3)/2; S = 3*Math.sqrt(3)/2*R*R; + formA = 'a = R = '+a.toFixed(3); + formR = 'r = R\\dfrac{\\sqrt{3}}{2} \\approx '+r.toFixed(3); + formS = 'S = \\dfrac{3\\sqrt{3}}{2} R^2 \\approx '+S.toFixed(3); + } + out.innerHTML = '$'+formA+'$
$'+formR+'$
$'+formS+'$'; + renderMath(out); + feedback(fb, true, '✓ Готово.'); + solved++; + if(solved === 1){ addXp(10,'p15-iv2'); bumpProgress('p15', 10); } + } + modes.forEach(b=>{ + b.addEventListener('click', ()=>{ + mode = +b.dataset.m; + modes.forEach(x=>{ x.classList.remove('primary'); x.classList.add('btn'); }); + b.classList.remove('btn'); b.classList.add('btn','primary'); + out.innerHTML = ''; fb.style.display = 'none'; + }); + }); + go.addEventListener('click', calc); + inpR.addEventListener('keydown', e=>{ if(e.key==='Enter') calc(); }); + calc(); + })(); + + /* IV3 — Какая сторона? */ + (function(){ + const Q = [ + { q:'Равносторонний треугольник', ans:3, why:'$a = R\\sqrt{3}$ (n = 3)' }, + { q:'Квадрат', ans:2, why:'$a = R\\sqrt{2}$ (n = 4)' }, + { q:'Правильный 6-угольник', ans:1, why:'$a = R$ (n = 6)' }, + { q:'Правильный 3-угольник', ans:3, why:'Это равносторонний: $a = R\\sqrt{3}$' }, + { q:'4-угольник правильный', ans:2, why:'Это квадрат: $a = R\\sqrt{2}$' }, + { q:'Гексагон (6-угольник)', ans:1, why:'$a = R$ — шестиугольник = радиус' }, + ]; + let i = 0, score = 0; + function show(){ + if(i >= Q.length){ + document.getElementById('p15-iv3-q').innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + if(score === Q.length){ addXp(15,'p15-iv3'); bumpProgress('p15', 25); } + else if(score >= Q.length - 1){ addXp(8,'p15-iv3'); bumpProgress('p15', 15); } + return; + } + document.getElementById('p15-iv3-i').textContent = (i+1); + document.getElementById('p15-iv3-s').textContent = score; + document.getElementById('p15-iv3-q').innerHTML = 'Какая формула для стороны $a$ через $R$?
'+Q[i].q+''; + renderMath(document.getElementById('p15-iv3-q')); + document.getElementById('p15-iv3-fb').style.display = 'none'; + } + function answer(a){ + if(i >= Q.length) return; + const fb = document.getElementById('p15-iv3-fb'); + if(+a === Q[i].ans){ score++; feedback(fb, true, '✓ Верно! '+Q[i].why+'. Дальше'); } + else feedback(fb, false, '✗ Нет. '+Q[i].why+'. Дальше'); + document.getElementById('p15-iv3-s').textContent = score; + i++; + setTimeout(show, 1100); + } + ['1','2','3'].forEach(k=>{ + const b = document.getElementById('p15-iv3-a'+k); if(b) b.addEventListener('click', ()=>answer(k)); + }); + show(); + })(); + + /* IV4 — Тренажёр */ + (function(){ + const Q = [ + { q:'Равносторонний треугольник с $R = 4$. Найди сторону $a$.', + ans:6.93, hint:'$a = R\\sqrt{3} = 4\\sqrt{3} \\approx 6{,}93$' }, + { q:'Квадрат с $R = 5$. Найди сторону $a$.', + ans:7.07, hint:'$a = R\\sqrt{2} = 5\\sqrt{2} \\approx 7{,}07$' }, + { q:'Правильный 6-угольник с $R = 7$. Найди сторону $a$.', + ans:7, hint:'$a = R = 7$ (шестиугольник = радиус)' }, + { q:'Квадрат со стороной $a = 6$. Найди радиус описанной окружности $R$.', + ans:4.24, hint:'$R = a/\\sqrt{2} = 6/\\sqrt{2} = 3\\sqrt{2} \\approx 4{,}24$' }, + { q:'Равносторонний треугольник со стороной $a = 9$. Найди $R$.', + ans:5.20, hint:'$R = a/\\sqrt{3} = 9/\\sqrt{3} = 3\\sqrt{3} \\approx 5{,}20$' }, + { q:'Правильный 6-угольник со стороной $a = 8$. Найди $R$.', + ans:8, hint:'$R = a = 8$' }, + ]; + let i = 0, score = 0; + function show(){ + if(i >= Q.length){ + document.getElementById('p15-iv4-q').innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + if(score === Q.length){ addXp(15,'p15-iv4'); bumpProgress('p15', 25); } + else if(score >= 4){ addXp(8,'p15-iv4'); bumpProgress('p15', 15); } + return; + } + document.getElementById('p15-iv4-i').textContent = (i+1); + document.getElementById('p15-iv4-s').textContent = score; + document.getElementById('p15-iv4-q').innerHTML = Q[i].q; + document.getElementById('p15-iv4-ans').value = ''; + renderMath(document.getElementById('p15-iv4-q')); + document.getElementById('p15-iv4-fb').style.display = 'none'; + } + function go(){ + if(i >= Q.length) return; + const fb = document.getElementById('p15-iv4-fb'); + const ans = parseFloat(document.getElementById('p15-iv4-ans').value); + if(isNaN(ans)){ feedback(fb, false, '✗ Введи число.'); return; } + if(Math.abs(ans - Q[i].ans) < 0.05){ score++; feedback(fb, true, '✓ Верно! '+Q[i].hint+'. Дальше'); } + else feedback(fb, false, '✗ Неверно. Ответ: '+Q[i].ans+' ('+Q[i].hint+'). Дальше'); + document.getElementById('p15-iv4-s').textContent = score; + i++; + setTimeout(show, 1300); + } + document.getElementById('p15-iv4-go').addEventListener('click', go); + document.getElementById('p15-iv4-ans').addEventListener('keydown', e=>{ if(e.key==='Enter') go(); }); + document.getElementById('p15-iv4-start').addEventListener('click', ()=>{ i=0; score=0; show(); }); + show(); + })(); + + wireReadBtn('p15'); +} + +/* ===== §16 Длина окружности и площадь круга ===== */ +function buildP16(){ + const box = document.getElementById('p16-body'); + let html = ''; + + html += makeCard('theory', 'Длина окружности', '16.1', ` +

Длина окружности радиуса $R$ (диаметр $d = 2R$):

+

$$C = 2\\pi R = \\pi d$$

+

Число $\\pi$ (отношение длины окружности к её диаметру) — иррациональное:

+

$\\pi \\approx 3{,}14159265\\ldots$  (для оценок берут $\\pi \\approx 3{,}14$ или $\\pi \\approx \\dfrac{22}{7}$).

+

Примеры:

+
    +
  • $R = 5$: $C = 10\\pi \\approx 31{,}4$.
  • +
  • $d = 10$: $C = 10\\pi \\approx 31{,}4$ (тот же ответ, т.к. $d = 2R$).
  • +
  • $R = 1$: $C = 2\\pi \\approx 6{,}28$ — длина единичной окружности.
  • +
`); + + html += makeCard('rule', 'Площадь круга', '16.2', ` +

Круг — это вся часть плоскости, ограниченная окружностью (плюс сама окружность). Его площадь:

+

$$S = \\pi R^2$$

+

Через диаметр: $S = \\pi \\left(\\dfrac{d}{2}\\right)^2 = \\dfrac{\\pi d^2}{4}$.

+

Примеры:

+
    +
  • $R = 4$: $S = 16\\pi \\approx 50{,}24$.
  • +
  • $d = 10$: $S = \\dfrac{\\pi \\cdot 100}{4} = 25\\pi \\approx 78{,}5$.
  • +
  • $R = 1$: $S = \\pi \\approx 3{,}14$ — площадь единичного круга.
  • +
+
Откуда $S = \\pi R^2$?
+ «Разрежем» круг на много узких секторов и сложим их в прямоугольник: ширина $\\approx R$, длина $\\approx \\tfrac{1}{2} \\cdot 2\\pi R = \\pi R$. Площадь $\\approx R \\cdot \\pi R = \\pi R^2$. В пределе (бесконечно тонкие секторы) — точное равенство. +
`); + + html += makeCard('example', 'Дуга и сектор', '16.3', ` +

Дуге, на которую опирается центральный угол $\\alpha^\\circ$, соответствует доля $\\dfrac{\\alpha}{360^\\circ}$ всей окружности. Поэтому:

+

$$\\ell = 2\\pi R \\cdot \\dfrac{\\alpha}{360^\\circ} = \\dfrac{\\pi R \\alpha}{180^\\circ}$$

+

Сектор с углом $\\alpha^\\circ$ занимает ту же долю круга:

+

$$S_{\\text{сек}} = \\pi R^2 \\cdot \\dfrac{\\alpha}{360^\\circ} = \\dfrac{\\pi R^2 \\alpha}{360^\\circ}$$

+

Примеры:

+
    +
  • Длина дуги четверти круга радиуса $R = 2$: $\\ell = \\dfrac{\\pi \\cdot 2 \\cdot 90}{180} = \\pi \\approx 3{,}14$.
  • +
  • Площадь сектора $60^\\circ$ в круге радиуса $6$: $S = \\dfrac{\\pi \\cdot 36 \\cdot 60}{360} = 6\\pi \\approx 18{,}85$.
  • +
`); + + /* IV1 — Slider R и сектор */ + html += `
+
ИНТЕРАКТИВ 1
Окружность, круг и сектор
+
Меняй радиус $R$ и угол сектора $\\alpha$ — следи за длиной окружности, площадью круга, длиной дуги и площадью сектора.
+
+ + +
+
+ +
+
+
`; + + /* IV2 — Калькулятор C и S */ + html += `
+
ИНТЕРАКТИВ 2
Калькулятор: $C$, $S$, дуга, сектор
+
Выбери, что дано ($R$ или $d$). Введи значение — посчитаем $C$ и $S$ круга, а также длину дуги и площадь сектора для угла $\\alpha$.
+
+ + +
+
+ $R$ = + + $\\alpha$ = + ° + +
+
+ +
`; + + /* IV3 — Какая формула? */ + html += `
+
ИНТЕРАКТИВ 3
Какая формула?
+
Выбери формулу, которая подходит под описание.
+
Задача 1 / 6Очки: 0 / 6
+
+
+ + + + +
+ +
`; + + /* IV4 — Тренажёр */ + html += `
+
ИНТЕРАКТИВ 4
Тренажёр окружности и круга
+
Для всех задач используй $\\pi \\approx 3{,}14$. Ответы округляй до двух знаков (допуск 0.05).
+
Задача 1 / 6Очки: 0 / 6
+
+
+ ответ = + + + +
+ +
`; + + html += readButton('p16'); + html += secNav('p15', 'final4'); + + box.innerHTML = html; + renderMath(box); + + /* IV1 — Slider R + сектор */ + (function(){ + const slR = document.getElementById('p16-iv1-r'); + const slA = document.getElementById('p16-iv1-a'); + const labR = document.getElementById('p16-iv1-rval'); + const labA = document.getElementById('p16-iv1-aval'); + const svg = document.getElementById('p16-iv1-svg'); + const out = document.getElementById('p16-iv1-out'); + const seen = new Set(); + const cx = 200, cy = 200; + function draw(){ + const R = +slR.value, alpha = +slA.value; + labR.textContent = R; labA.textContent = alpha; + let s = ''; + // основная окружность (контур) + s += ''; + // сектор — рисуем path + if(alpha > 0){ + if(alpha >= 360){ + // целый круг + s += ''; + } else { + const rad = alpha * Math.PI / 180; + const x1 = cx + R, y1 = cy; + const x2 = cx + R*Math.cos(rad), y2 = cy + R*Math.sin(rad); + const large = alpha > 180 ? 1 : 0; + s += ''; + } + } + // радиус (на 0°) + s += ''; + // радиус на углу alpha + const ax = cx + R*Math.cos(alpha*Math.PI/180), ay = cy + R*Math.sin(alpha*Math.PI/180); + s += ''; + // центр O + s += ''; + s += 'O'; + // подпись R + s += 'R'; + svg.innerHTML = s; + const PI = Math.PI; + const C = 2*PI*R; + const Scircle = PI*R*R; + const L = PI*R*alpha/180; + const Ssec = PI*R*R*alpha/360; + out.innerHTML = + '$R = '+R+'$,  $\\alpha = '+alpha+'^\\circ$
' + +'$C = 2\\pi R \\approx '+C.toFixed(2)+'$,  $S_{\\text{круга}} = \\pi R^2 \\approx '+Scircle.toFixed(2)+'$
' + +'$\\ell_{\\text{дуги}} = \\dfrac{\\pi R \\alpha}{180} \\approx '+L.toFixed(2)+'$,  $S_{\\text{сектора}} = \\dfrac{\\pi R^2 \\alpha}{360} \\approx '+Ssec.toFixed(2)+'$'; + renderMath(out); + seen.add(R+'_'+alpha); + if(seen.size >= 5 && !seen.has('_done')){ addXp(10,'p16-iv1'); bumpProgress('p16', 15); seen.add('_done'); } + } + slR.addEventListener('input', draw); + slA.addEventListener('input', draw); + draw(); + })(); + + /* IV2 — Калькулятор C, S, дуга, сектор */ + (function(){ + const modes = document.querySelectorAll('#p16-iv2-modes button'); + const inpV = document.getElementById('p16-iv2-val'); + const inpA = document.getElementById('p16-iv2-a'); + const lab = document.getElementById('p16-iv2-lab'); + const go = document.getElementById('p16-iv2-go'); + const out = document.getElementById('p16-iv2-out'); + const fb = document.getElementById('p16-iv2-fb'); + let mode = 'R'; + let solved = 0; + function updateLabel(){ + lab.innerHTML = mode === 'R' ? '$R$ =' : '$d$ ='; + renderMath(lab); + } + function calc(){ + const v = parseFloat(inpV.value); + const alpha = parseFloat(inpA.value); + if(isNaN(v) || v <= 0){ feedback(fb, false, '✗ Введи положительное значение.'); return; } + if(isNaN(alpha) || alpha < 0 || alpha > 360){ feedback(fb, false, '✗ Угол $\\alpha$ — от 0° до 360°.'); return; } + const R = mode === 'R' ? v : v/2; + const d = 2*R; + const PI = Math.PI; + const C = 2*PI*R; + const S = PI*R*R; + const L = PI*R*alpha/180; + const Ss = PI*R*R*alpha/360; + out.innerHTML = + '$R = '+R.toFixed(3)+'$, $d = '+d.toFixed(3)+'$
' + +'$C = 2\\pi R \\approx '+C.toFixed(3)+'$
' + +'$S_{\\text{круга}} = \\pi R^2 \\approx '+S.toFixed(3)+'$
' + +'$\\ell_{\\text{дуги}}('+alpha+'^\\circ) = \\dfrac{\\pi R \\alpha}{180} \\approx '+L.toFixed(3)+'$
' + +'$S_{\\text{сектора}}('+alpha+'^\\circ) = \\dfrac{\\pi R^2 \\alpha}{360} \\approx '+Ss.toFixed(3)+'$'; + renderMath(out); + feedback(fb, true, '✓ Готово.'); + solved++; + if(solved === 1){ addXp(10,'p16-iv2'); bumpProgress('p16', 10); } + } + modes.forEach(b=>{ + b.addEventListener('click', ()=>{ + mode = b.dataset.m; + modes.forEach(x=>{ x.classList.remove('primary'); x.classList.add('btn'); }); + b.classList.remove('btn'); b.classList.add('btn','primary'); + updateLabel(); + out.innerHTML = ''; fb.style.display = 'none'; + }); + }); + go.addEventListener('click', calc); + inpV.addEventListener('keydown', e=>{ if(e.key==='Enter') calc(); }); + inpA.addEventListener('keydown', e=>{ if(e.key==='Enter') calc(); }); + updateLabel(); calc(); + })(); + + /* IV3 — Какая формула? */ + (function(){ + const Q = [ + { q:'Длина окружности', ans:'C', why:'$C = 2\\pi R$' }, + { q:'Площадь круга', ans:'S', why:'$S = \\pi R^2$' }, + { q:'Длина дуги, на которую опирается угол $\\alpha$', ans:'L', why:'$\\ell = \\dfrac{\\pi R \\alpha}{180}$' }, + { q:'Площадь сектора с углом $\\alpha$', ans:'Ss', why:'$S_{\\text{сек}} = \\dfrac{\\pi R^2 \\alpha}{360}$' }, + { q:'Половина окружности (дуга с углом 180°)', ans:'L', why:'Это $\\ell = \\dfrac{\\pi R \\alpha}{180}$ при $\\alpha = 180^\\circ$, выходит $\\pi R$' }, + { q:'Четверть круга (сектор с углом 90°)', ans:'Ss', why:'Это $S_{\\text{сек}} = \\dfrac{\\pi R^2 \\alpha}{360}$ при $\\alpha = 90^\\circ$, выходит $\\pi R^2 / 4$' }, + ]; + let i = 0, score = 0; + function show(){ + if(i >= Q.length){ + document.getElementById('p16-iv3-q').innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + if(score === Q.length){ addXp(15,'p16-iv3'); bumpProgress('p16', 25); } + else if(score >= Q.length - 1){ addXp(8,'p16-iv3'); bumpProgress('p16', 15); } + return; + } + document.getElementById('p16-iv3-i').textContent = (i+1); + document.getElementById('p16-iv3-s').textContent = score; + document.getElementById('p16-iv3-q').innerHTML = 'Какая формула?
'+Q[i].q+''; + renderMath(document.getElementById('p16-iv3-q')); + document.getElementById('p16-iv3-fb').style.display = 'none'; + } + function answer(a){ + if(i >= Q.length) return; + const fb = document.getElementById('p16-iv3-fb'); + if(a === Q[i].ans){ score++; feedback(fb, true, '✓ Верно! '+Q[i].why+'. Дальше'); } + else feedback(fb, false, '✗ Нет. '+Q[i].why+'. Дальше'); + document.getElementById('p16-iv3-s').textContent = score; + i++; + setTimeout(show, 1200); + } + ['C','S','L','Ss'].forEach(k=>{ + const b = document.getElementById('p16-iv3-a'+k); if(b) b.addEventListener('click', ()=>answer(k)); + }); + show(); + })(); + + /* IV4 — Тренажёр (π = 3.14) */ + (function(){ + const PI = 3.14; + const Q = [ + { q:'Длина окружности с $R = 5$. ($\\pi \\approx 3{,}14$)', + ans: 10*PI, hint:'$C = 2\\pi R = 10\\pi \\approx 31{,}4$' }, + { q:'Площадь круга с $R = 4$. ($\\pi \\approx 3{,}14$)', + ans: 16*PI, hint:'$S = \\pi R^2 = 16\\pi \\approx 50{,}24$' }, + { q:'Длина окружности с $d = 10$. ($\\pi \\approx 3{,}14$)', + ans: 10*PI, hint:'$C = \\pi d = 10\\pi \\approx 31{,}4$' }, + { q:'Длина дуги: $R = 6$, $\\alpha = 90^\\circ$. ($\\pi \\approx 3{,}14$)', + ans: 3*PI, hint:'$\\ell = \\dfrac{\\pi R \\alpha}{180} = \\dfrac{\\pi \\cdot 6 \\cdot 90}{180} = 3\\pi \\approx 9{,}42$' }, + { q:'Площадь сектора: $R = 4$, $\\alpha = 90^\\circ$. ($\\pi \\approx 3{,}14$)', + ans: 4*PI, hint:'$S = \\dfrac{\\pi R^2 \\alpha}{360} = \\dfrac{\\pi \\cdot 16 \\cdot 90}{360} = 4\\pi \\approx 12{,}56$' }, + { q:'Площадь круга с $d = 10$. ($\\pi \\approx 3{,}14$)', + ans: 25*PI, hint:'$S = \\dfrac{\\pi d^2}{4} = \\dfrac{100\\pi}{4} = 25\\pi \\approx 78{,}5$' }, + ]; + let i = 0, score = 0; + function show(){ + if(i >= Q.length){ + document.getElementById('p16-iv4-q').innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + if(score === Q.length){ addXp(15,'p16-iv4'); bumpProgress('p16', 25); } + else if(score >= 4){ addXp(8,'p16-iv4'); bumpProgress('p16', 15); } + return; + } + document.getElementById('p16-iv4-i').textContent = (i+1); + document.getElementById('p16-iv4-s').textContent = score; + document.getElementById('p16-iv4-q').innerHTML = Q[i].q; + document.getElementById('p16-iv4-ans').value = ''; + renderMath(document.getElementById('p16-iv4-q')); + document.getElementById('p16-iv4-fb').style.display = 'none'; + } + function go(){ + if(i >= Q.length) return; + const fb = document.getElementById('p16-iv4-fb'); + const ans = parseFloat(document.getElementById('p16-iv4-ans').value); + if(isNaN(ans)){ feedback(fb, false, '✗ Введи число.'); return; } + if(Math.abs(ans - Q[i].ans) < 0.05){ score++; feedback(fb, true, '✓ Верно! '+Q[i].hint+'. Дальше'); } + else feedback(fb, false, '✗ Неверно. Ответ: '+Q[i].ans.toFixed(2)+' ('+Q[i].hint+'). Дальше'); + document.getElementById('p16-iv4-s').textContent = score; + i++; + setTimeout(show, 1400); + } + document.getElementById('p16-iv4-go').addEventListener('click', go); + document.getElementById('p16-iv4-ans').addEventListener('keydown', e=>{ if(e.key==='Enter') go(); }); + document.getElementById('p16-iv4-start').addEventListener('click', ()=>{ i=0; score=0; show(); }); + show(); + })(); + + wireReadBtn('p16'); +} /* ===== §13 Правильные многоугольники ===== */ function buildP13(){