diff --git a/frontend/textbooks/physics_10_ch3.html b/frontend/textbooks/physics_10_ch3.html index c845b30..1b33912 100644 --- a/frontend/textbooks/physics_10_ch3.html +++ b/frontend/textbooks/physics_10_ch3.html @@ -3494,35 +3494,600 @@ function build_p23(){ function build_p24(){ const box = document.getElementById('p24-body'); let html = ''; - html += makeCard('theory', "Энергия поля конденсатора", "§24", ` -

Энергия поля конденсатора — этот параграф в разработке (Phase 1+).

-

Здесь появятся: теория, формулы, разобранные примеры и 3–4 интерактива в стиле «алгебры 11» — таблицы, симуляции, ползунки, drag-and-drop и автопроверяемые тренажёры.

-

- Phase 0: создан скелет учебника. Phase 3+: наполнение этого § содержанием по учебнику «Физика 10» (Беларусь, 2019). -

+ + /* THEORY 1 — Энергия заряженного конденсатора */ + html += makeCard('theory', "Энергия заряженного конденсатора", "§24", ` +

Заряженный конденсатор обладает запасённой энергией. Чтобы зарядить конденсатор, источник тока совершает работу — переносит заряды с одной обкладки на другую против сил электрического поля.

+

Если рассчитать эту работу через интегрирование, получим, что энергия конденсатора равна:

+

$$W = \\dfrac{CU^2}{2}$$

+

Используя соотношение $q = CU$ ($C = q/U$, $U = q/C$), эту формулу можно переписать ещё двумя способами:

+

$$W = \\dfrac{q^2}{2C} = \\dfrac{qU}{2}$$

+

Все три формулы эквивалентны — выбирай удобную в зависимости от того, какие величины даны в задаче:

+ +

Единица энергии: Джоуль (Дж). На практике в электронике: мДж $= 10^{-3}$ Дж, мкДж $= 10^{-6}$ Дж.

`); + + /* THEORY 2 — Где запасена энергия */ + html += makeCard('rule', "Где запасена энергия. Плотность энергии поля", "§24", ` +

Где же находится энергия конденсатора? Не на пластинах и не в зарядах. Энергия запасена в электрическом поле между обкладками.

+

Это глубокий вывод: электрическое поле — носитель энергии, как и материя. Энергию можно вычислить через характеристики самого поля.

+

Объёмная плотность энергии — энергия в единице объёма поля:

+

$$w = \\dfrac{\\varepsilon \\varepsilon_0 E^2}{2}$$

+ +

Полная энергия поля в объёме $V$:

+

$$W = w \\cdot V$$

+

Проверка: для плоского конденсатора $E = U/d$, $V = Sd$, $C = \\varepsilon\\varepsilon_0 S/d$. Подставив, получаем $W = \\varepsilon\\varepsilon_0 (U/d)^2 \\cdot Sd / 2 = (\\varepsilon\\varepsilon_0 S/d)\\cdot U^2/2 = CU^2/2$. То же самое!

+ `); + + /* THEORY 3 — Применение */ + html += makeCard('example', "Применение энергии конденсатора", "§24", ` +

Запасание энергии в конденсаторах используется в технике и медицине очень широко:

+ +

Пример (фотовспышка). $C = 1000$ мкФ $= 10^{-3}$ Ф, $U = 300$ В.

+

$$W = \\dfrac{CU^2}{2} = \\dfrac{10^{-3} \\cdot 90\\,000}{2} = 45 \\text{ Дж}$$

+

Это много! Если разряд происходит за $\\Delta t = 1$ мс $= 10^{-3}$ с, мощность вспышки:

+

$$P = \\dfrac{W}{\\Delta t} = \\dfrac{45}{10^{-3}} = 45\\,000 \\text{ Вт} = 45 \\text{ кВт}$$

+

Поэтому фотовспышка такая яркая.

+ `); + + /* INTERACTIVE 1 — Энергия от C и U */ + html += `
+
ИНТЕРАКТИВ 1
Энергия конденсатора от $C$ и $U$
+
Меняй ёмкость $C$ и напряжение $U$. Наблюдай $W = CU^2/2$ и заряд $q = CU$. «Заряжённость» обкладок видна по числу значков «+» и «−».
+
+ + +
+
+ +
+
+
`; + + /* INTERACTIVE 2 — Калькулятор энергии */ + html += `
+
ИНТЕРАКТИВ 2
Калькулятор энергии: 3 формулы
+
Выбери формулу, подставь данные, получи $W$. Попробуй все три варианта.
+
+ + + +
+
+
+ +
+
+
`; + + /* INTERACTIVE 3 — Как изменится энергия? */ + html += `
+
ИНТЕРАКТИВ 3
Как изменится энергия конденсатора?
+
Опираясь на формулы $W = CU^2/2 = q^2/(2C) = qU/2$, выбери, как изменится энергия.
+
Задача 1 / 6Очки: 0 / 6
+
+
+
+
+
`; + + /* INTERACTIVE 4 — Тренажёр энергии */ + html += `
+
ИНТЕРАКТИВ 4
Тренажёр энергии конденсатора
+
5 задач. Допуск $\\pm 5\\%$. Внимательно следи за единицами (мкФ, нФ, мкКл, мДж).
+
Задача 1 / 5Очки: 0 / 5
+
+
+ ответ = + + + +
+
+
`; + html += secNav('p23', 'final3'); html += readButton('p24'); + box.innerHTML = html; renderMath(box); + + /* IV1 — Энергия конденсатора (C, U) */ + (function(){ + const CS = document.getElementById('p24-iv1-C'); + const US = document.getElementById('p24-iv1-U'); + const CL = document.getElementById('p24-iv1-CL'); + const UL = document.getElementById('p24-iv1-UL'); + const svg = document.getElementById('p24-iv1-svg'); + const out = document.getElementById('p24-iv1-out'); + const seen = new Set(); + let _done = false; + + function render(){ + const C_uF = +CS.value; // мкФ + const U = +US.value; // В + const C = C_uF * 1e-6; // Ф + const W = C * U * U / 2; // Дж + const q = C * U; // Кл + CL.textContent = C_uF; + UL.textContent = U; + + // SVG: два прямоугольника-обкладки с зарядами + const W_svg = 480, H_svg = 260, cx = W_svg/2, cy = H_svg/2; + const plateW = 280, plateH = 14; + const gap = 90; + const xL = cx - plateW/2; + const yTop = cy - gap/2 - plateH; + const yBot = cy + gap/2; + // Число значков пропорционально q (норм. к диапазону ~ q_max = 1000e-6 * 500 = 0.5 Кл; logarithmically scale) + const qMax = 1000e-6 * 500; + const ratio = Math.min(1, Math.sqrt(q / qMax)); + const nSign = Math.max(3, Math.round(3 + ratio * 17)); // 3..20 + + let g = ''; + g += ''; + g += 'Заряд на обкладках'; + // Поле (стрелки между пластинами) + const yMid = (yTop+plateH + yBot)/2; + for(let i = 0; i < 5; i++){ + const x = xL + 30 + i*(plateW-60)/4; + g += ''; + g += ''; + } + // Верхняя обкладка (+) + g += ''; + // Нижняя обкладка (−) + g += ''; + // Значки + сверху + for(let i = 0; i < nSign; i++){ + const x = xL + 14 + i*(plateW-28)/(nSign-1 || 1); + g += '+'; + } + // Значки − снизу + for(let i = 0; i < nSign; i++){ + const x = xL + 14 + i*(plateW-28)/(nSign-1 || 1); + g += ''; + } + // Подписи U и q + g += '+q'; + g += '−q'; + g += 'U'; + + svg.innerHTML = g; + + // Вывод + let WStr; + if(W >= 1) WStr = W.toFixed(2) + ' Дж'; + else if(W >= 1e-3) WStr = (W*1e3).toFixed(2) + ' мДж'; + else WStr = (W*1e6).toFixed(2) + ' мкДж'; + let qStr; + if(q >= 1e-3) qStr = (q*1e3).toFixed(2) + ' мКл'; + else qStr = (q*1e6).toFixed(2) + ' мкКл'; + + out.innerHTML = '$W = \\dfrac{CU^2}{2} = \\dfrac{'+C_uF+'\\cdot 10^{-6} \\cdot '+U+'^2}{2} \\approx$ '+WStr+'
$q = CU = $ '+qStr+''; + renderMath(out); + + seen.add(C_uF+':'+U); + if(!_done && seen.size >= 4){ _done = true; addXp(10, 'p24-iv1'); bumpProgress('p24', 15); } + } + CS.addEventListener('input', render); + US.addEventListener('input', render); + render(); + })(); + + /* IV2 — Калькулятор энергии (3 формулы) */ + (function(){ + let mode = 'CU'; + const mCU = document.getElementById('p24-iv2-mCU'); + const mqC = document.getElementById('p24-iv2-mqC'); + const mqU = document.getElementById('p24-iv2-mqU'); + const inputs = document.getElementById('p24-iv2-inputs'); + const out = document.getElementById('p24-iv2-out'); + const seen = new Set(); + let _done = false; + + function setMode(m){ + mode = m; + [mCU,mqC,mqU].forEach(b => b.classList.remove('primary')); + if(m === 'CU') mCU.classList.add('primary'); + else if(m === 'qC') mqC.classList.add('primary'); + else mqU.classList.add('primary'); + render(); + } + function render(){ + if(mode === 'CU'){ + inputs.innerHTML = '' + + ''; + } else if(mode === 'qC'){ + inputs.innerHTML = '' + + ''; + } else { + inputs.innerHTML = '' + + ''; + } + renderMath(inputs); + out.innerHTML = 'Введи значения и нажми «Вычислить $W$».'; + renderMath(out); + } + function calc(){ + let W = 0, html = ''; + if(mode === 'CU'){ + const Cuf = parseFloat(document.getElementById('p24-iv2-C').value) || 0; + const U = parseFloat(document.getElementById('p24-iv2-U').value) || 0; + const C = Cuf * 1e-6; + W = C * U * U / 2; + html = '$W = \\dfrac{CU^2}{2} = \\dfrac{'+Cuf+'\\cdot 10^{-6} \\cdot '+U+'^2}{2} = '+W.toExponential(3)+'$ Дж'; + } else if(mode === 'qC'){ + const quc = parseFloat(document.getElementById('p24-iv2-q').value) || 0; + const Cuf = parseFloat(document.getElementById('p24-iv2-C').value) || 0; + const q = quc * 1e-6, C = Cuf * 1e-6; + W = (C > 0) ? (q*q / (2*C)) : 0; + html = '$W = \\dfrac{q^2}{2C} = \\dfrac{('+quc+'\\cdot 10^{-6})^2}{2 \\cdot '+Cuf+'\\cdot 10^{-6}} = '+W.toExponential(3)+'$ Дж'; + } else { + const quc = parseFloat(document.getElementById('p24-iv2-q').value) || 0; + const U = parseFloat(document.getElementById('p24-iv2-U').value) || 0; + const q = quc * 1e-6; + W = q * U / 2; + html = '$W = \\dfrac{qU}{2} = \\dfrac{'+quc+'\\cdot 10^{-6} \\cdot '+U+'}{2} = '+W.toExponential(3)+'$ Дж'; + } + // Дополнительный перевод в удобные единицы + let extra = ''; + if(W >= 1) extra = '$\\approx '+W.toFixed(3)+'$ Дж'; + else if(W >= 1e-3) extra = '$\\approx '+(W*1e3).toFixed(3)+'$ мДж'; + else if(W > 0) extra = '$\\approx '+(W*1e6).toFixed(3)+'$ мкДж'; + out.innerHTML = html + (extra ? '
'+extra+'' : ''); + renderMath(out); + seen.add(mode); + if(!_done && seen.size >= 3){ _done = true; addXp(10, 'p24-iv2'); bumpProgress('p24', 15); } + } + mCU.addEventListener('click', () => setMode('CU')); + mqC.addEventListener('click', () => setMode('qC')); + mqU.addEventListener('click', () => setMode('qU')); + document.getElementById('p24-iv2-go').addEventListener('click', calc); + setMode('CU'); + })(); + + /* IV3 — Как изменится энергия? (6 заданий, 4 варианта) */ + (function(){ + const OPTS = ['увеличится в 2 раза', 'уменьшится в 2 раза', 'увеличится в 4 раза', 'не изменится']; + // ans: 0 = увеличится в 2 раза, 1 = уменьшится в 2 раза, 2 = увеличится в 4 раза, 3 = не изменится + const Q = [ + { q:'Удвоили $U$ при том же $C$. Как изменится $W$?', ans:2, why:'$W = CU^2/2$: $U$ удваивается $\\Rightarrow W$ растёт в $2^2 = 4$ раза.' }, + { q:'Удвоили $C$ при том же $U$. Как изменится $W$?', ans:0, why:'$W = CU^2/2$: $C$ удваивается $\\Rightarrow W$ растёт в 2 раза.' }, + { q:'Удвоили заряд $q$ при том же $C$. Как изменится $W$?', ans:2, why:'$W = q^2/(2C)$: $q$ удваивается $\\Rightarrow W$ растёт в $2^2 = 4$ раза.' }, + { q:'Уменьшили $C$ в 2 раза при том же заряде $q$. Как изменится $W$?', ans:0, why:'$W = q^2/(2C)$: $C$ в знаменателе уменьшается в 2 раза $\\Rightarrow W$ растёт в 2 раза.' }, + { q:'Уменьшили $U$ в 2 раза, а $C$ увеличили в 4 раза. Как изменится $W$?', ans:3, why:'$W = CU^2/2$: $U^2$ упало в 4 раза, $C$ выросло в 4 раза $\\Rightarrow$ $W$ не меняется.' }, + { q:'Зарядили конденсатор с 100 В до 200 В при том же $C$. Как изменилась $W$?', ans:2, why:'$W \\propto U^2$: $(200/100)^2 = 4$ — $W$ увеличилась в 4 раза.' }, + ]; + + let i = 0, score = 0; + const qEl = document.getElementById('p24-iv3-q'); + const oEl = document.getElementById('p24-iv3-opts'); + const fb = document.getElementById('p24-iv3-fb'); + const iEl = document.getElementById('p24-iv3-i'); + const sEl = document.getElementById('p24-iv3-s'); + // Update score-display total to actual length + const total = Q.length; + document.querySelector('#p24-iv3 .score-display').innerHTML = + 'Задача 1 / '+total+'Очки: 0 / '+total+''; + const iEl2 = document.getElementById('p24-iv3-i'); + const sEl2 = document.getElementById('p24-iv3-s'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + oEl.innerHTML = ''; + if(score === Q.length){ addXp(15, 'p24-iv3'); bumpProgress('p24', 25); } + else if(score >= 4){ addXp(8, 'p24-iv3'); bumpProgress('p24', 15); } + return; + } + iEl2.textContent = (i+1); + sEl2.textContent = score; + const item = Q[i]; + qEl.innerHTML = item.q; + oEl.innerHTML = OPTS.map((t, k) => '').join(''); + fb.style.display = 'none'; + renderMath(qEl); renderMath(oEl); + oEl.querySelectorAll('button').forEach(b => { + b.addEventListener('click', () => { + const v = +b.dataset.v; + if(v === item.ans){ score++; feedback(fb, true, '✓ Верно! ' + item.why + ' Дальше ▶'); } + else feedback(fb, false, '✗ Неверно. ' + item.why + ' Дальше ▶'); + sEl2.textContent = score; + oEl.querySelectorAll('button').forEach(x => x.disabled = true); + i++; + setTimeout(show, 2000); + }); + }); + } + document.getElementById('p24-iv3-restart').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + + /* IV4 — Тренажёр энергии */ + (function(){ + const Q = [ + { q:'$C = 100$ мкФ, $U = 100$ В. Найди $W$ в Дж (до сотых).', ans:0.5, tol:0.03, hint:'$W = CU^2/2 = 10^{-4}\\cdot 10^4/2 = 0{,}5$ Дж.' }, + { q:'$C = 1000$ мкФ, $U = 300$ В (фотовспышка). Найди $W$ в Дж.', ans:45, tol:2.5, hint:'$W = CU^2/2 = 10^{-3}\\cdot 9\\cdot 10^4/2 = 45$ Дж.' }, + { q:'$q = 10$ мкКл, $U = 200$ В. Найди $W$ в мДж.', ans:1, tol:0.06, hint:'$W = qU/2 = 10^{-5}\\cdot 200/2 = 10^{-3}$ Дж $= 1$ мДж.' }, + { q:'$q = 20$ мкКл, $C = 200$ нФ. Найди $W$ в мДж.', ans:1, tol:0.06, hint:'$W = q^2/(2C) = (2\\cdot 10^{-5})^2/(2\\cdot 2\\cdot 10^{-7}) = 4\\cdot 10^{-10}/(4\\cdot 10^{-7}) = 10^{-3}$ Дж $= 1$ мДж.' }, + { q:'Если удвоить $U$ конденсатора при $C = $ const, во сколько раз вырастет $W$?', ans:4, tol:0.1, hint:'$W \\propto U^2$: $(2U)^2/U^2 = 4$.' } + ]; + let i = 0, score = 0; + function show(){ + if(i >= Q.length){ + document.getElementById('p24-iv4-q').innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + if(score === Q.length){ addXp(15, 'p24-iv4'); bumpProgress('p24', 25); } + else if(score >= 3){ addXp(8, 'p24-iv4'); bumpProgress('p24', 15); } + return; + } + document.getElementById('p24-iv4-i').textContent = (i+1); + document.getElementById('p24-iv4-s').textContent = score; + document.getElementById('p24-iv4-q').innerHTML = Q[i].q; + document.getElementById('p24-iv4-ans').value = ''; + renderMath(document.getElementById('p24-iv4-q')); + document.getElementById('p24-iv4-fb').style.display = 'none'; + } + function go(){ + if(i >= Q.length) return; + const fb = document.getElementById('p24-iv4-fb'); + const raw = document.getElementById('p24-iv4-ans').value.replace(',', '.'); + const ans = parseFloat(raw); + if(isNaN(ans)){ feedback(fb, false, '✗ Введи число.'); return; } + if(Math.abs(ans - Q[i].ans) <= Q[i].tol + 0.001){ score++; feedback(fb, true, '✓ Верно! '+Q[i].hint+' Дальше ▶'); } + else feedback(fb, false, '✗ Неверно. Ответ: $'+Q[i].ans+'$. '+Q[i].hint+' Дальше ▶'); + document.getElementById('p24-iv4-s').textContent = score; + i++; + setTimeout(show, 1800); + } + document.getElementById('p24-iv4-go').addEventListener('click', go); + document.getElementById('p24-iv4-ans').addEventListener('keydown', e => { if(e.key === 'Enter') go(); }); + document.getElementById('p24-iv4-start').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + wireReadBtn('p24'); } function build_final3(){ const box = document.getElementById('final3-body'); let html = ''; - html += makeCard('theory', "Финал главы 3", "★", ` -

Финал главы 3 — этот параграф в разработке (Phase 1+).

-

Здесь появятся: теория, формулы, разобранные примеры и 3–4 интерактива в стиле «алгебры 11» — таблицы, симуляции, ползунки, drag-and-drop и автопроверяемые тренажёры.

-

- Phase 0: создан скелет учебника. Phase 3+: наполнение этого § содержанием по учебнику «Физика 10» (Беларусь, 2019). -

- `); + + /* Часть А — Шпаргалка главы (9 mini-карточек) */ + const SHEET = [ + { t:'§ 16 · Заряд', icon:'+', body:'$q = ne$, $e = 1{,}6 \\cdot 10^{-19}$ Кл. Закон сохранения: $\\sum q = $ const.' }, + { t:'§ 17 · Кулон', icon:'', body:'$F = k\\dfrac{q_1 q_2}{r^2}$, $k = 9\\cdot 10^9$ Н·м²/Кл². В среде: $F = F_0/\\varepsilon$.' }, + { t:'§ 18 · Поле', icon:'', body:'Создаётся неподвижными зарядами, действует на заряды. Пробный заряд $q_0$ — для измерения.' }, + { t:'§ 19 · Напряжённость', icon:'', body:'$\\vec{E} = \\vec{F}/q$. Точечный: $E = kq/r^2$. Принцип суперпозиции — векторно.' }, + { t:'§ 20 · Линии', icon:'', body:'Касательны к $\\vec{E}$. От + к −, не пересекаются. Густота = $E$. Однородное поле — параллельные линии.' }, + { t:'§ 21 · Работа · потенциал', icon:'', body:'$A = qEd\\cos\\alpha = q(\\varphi_1-\\varphi_2)$. $\\varphi = kq/r$. Работа не зависит от траектории.' }, + { t:'§ 22 · Напряжение', icon:'', body:'$U = \\varphi_1 - \\varphi_2$ [В]. В однородном: $U = Ed$. Эквипотенциальные поверхности $\\perp \\vec{E}$.' }, + { t:'§ 23 · Конденсаторы', icon:'', body:'$C = q/U$ [Ф]. Плоский: $C = \\varepsilon\\varepsilon_0 S/d$. $\\parallel$: $\\sum C$. Последов.: $\\sum 1/C$.' }, + { t:'§ 24 · Энергия', icon:'', body:'$W = \\dfrac{CU^2}{2} = \\dfrac{q^2}{2C} = \\dfrac{qU}{2}$. Хранится в поле.' }, + ]; + + html += `
+
+ ${ICONS.theory} + Шпаргалка главы 3 — Электростатика + Итог +
+
+

Ключевые формулы и идеи всех 9 параграфов главы — повтори перед битвой с боссами.

+
+ ${SHEET.map(s => `
+
+ ${s.icon} +
${s.t}
+
+
${s.body}
+
`).join('')} +
+
+
`; + + /* Часть Б — 7 боссов intro */ + html += `
+
+ ${ICONS.rule} + Боссы главы 3 + 7 +
+
+

7 интегрированных задач по §§16–24. За каждого побеждённого босса: +10 XP, +14% к прогрессу. Победишь всех — ачивка «Мастер электростатики» и +50 XP бонус.

+

Константы: $k = 9 \\cdot 10^9$ Н·м²/Кл², $e = 1{,}6 \\cdot 10^{-19}$ Кл, $\\varepsilon_0 = 8{,}85 \\cdot 10^{-12}$ Ф/м. Допуск $\\pm 5\\%$.

+
+
`; + + html += '
'; + + html += `
+
Прогресс по боссам
+
0 / 7 боссов побеждено
+
+
+
+ +
`; + html += secNav('p24', null); - html += readButton('final3'); + box.innerHTML = html; renderMath(box); - wireReadBtn('final3'); + + /* Боссы главы 3 */ + const BOSSES = [ + { + n:1, color:'#dc2626', + title:'Хранитель Заряда', + tag:'§ 16', + q:'Сколько электронов в заряде модулем $|q| = 3{,}2$ нКл? Введи коэффициент $a$ в записи $n = a \\cdot 10^{10}$.', + ans:2, tol:0.1, + hint:'$n = |q|/e = 3{,}2 \\cdot 10^{-9} / (1{,}6 \\cdot 10^{-19}) = 2 \\cdot 10^{10}$.' + }, + { + n:2, color:'#7c3aed', + title:'Дракон Кулона', + tag:'§ 17', + q:'Два заряда по $+2$ мкКл в воздухе на $r = 0{,}3$ м. Найди модуль силы Кулона $F$ в Н (до сотых).', + ans:0.4, tol:0.025, + hint:'$F = k\\dfrac{q_1 q_2}{r^2} = 9\\cdot 10^9 \\cdot \\dfrac{4 \\cdot 10^{-12}}{0{,}09} = 0{,}4$ Н.' + }, + { + n:3, color:'#f59e0b', + title:'Стражник Напряжённости', + tag:'§ 19', + q:'$E$ на расстоянии $r = 0{,}2$ м от точечного заряда $q = +5$ нКл. Ответ в В/м.', + ans:1125, tol:60, + hint:'$E = kq/r^2 = 9\\cdot 10^9 \\cdot 5\\cdot 10^{-9}/0{,}04 = 1125$ В/м.' + }, + { + n:4, color:'#8b5cf6', + title:'Сторож Потенциала', + tag:'§ 21 + § 22', + q:'Заряд $q = +2$ мкКл перенесли между точками с $\\varphi_1 = 200$ В и $\\varphi_2 = 50$ В. Работа поля $A$ в мкДж?', + ans:300, tol:15, + hint:'$A = q(\\varphi_1 - \\varphi_2) = 2\\cdot 10^{-6} \\cdot 150 = 3\\cdot 10^{-4}$ Дж $= 300$ мкДж.' + }, + { + n:5, color:'#0891b2', + title:'Капитан Конденсатор', + tag:'§ 23', + q:'Плоский конденсатор: $S = 0{,}02$ м², $d = 0{,}001$ м, воздух ($\\varepsilon = 1$). Найди $C$ в пФ.', + ans:177, tol:9, + hint:'$C = \\varepsilon\\varepsilon_0 S/d = 8{,}85\\cdot 10^{-12}\\cdot 0{,}02/0{,}001 = 1{,}77\\cdot 10^{-10}$ Ф $= 177$ пФ.' + }, + { + n:6, color:'#dc2626', + title:'Энергетический Левиафан', + tag:'§ 24', + q:'$C = 500$ мкФ, $U = 100$ В. Найди энергию $W$ конденсатора в Дж (до десятых).', + ans:2.5, tol:0.15, + hint:'$W = CU^2/2 = 5\\cdot 10^{-4}\\cdot 10^4/2 = 2{,}5$ Дж.' + }, + { + n:7, color:'#a78bfa', + title:'Магистр Электростатики', + tag:'§ 16 + § 17', + q:'Два одинаковых металлических шара с зарядами $+8$ нКл и $-4$ нКл соприкоснулись и были разведены на $r = 0{,}2$ м. Найди модуль силы между ними в мкН (до десятых).', + ans:0.9, tol:0.06, + hint:'После касания: $(8 + (-4))/2 = +2$ нКл на каждом. $F = k q^2/r^2 = 9\\cdot 10^9 \\cdot (2\\cdot 10^{-9})^2/0{,}04 = 9\\cdot 10^{-7}$ Н $= 0{,}9$ мкН.' + }, + ]; + + const cont = document.getElementById('ch3-bosses-container'); + const STATE_KEY = 'physics10_ch3_bosses'; + const BOSS_STATE = (function(){ + try{ const s = localStorage.getItem(STATE_KEY); if(s){ const p = JSON.parse(s); if(Array.isArray(p) && p.length === BOSSES.length) return p; } }catch(e){} + return BOSSES.map(()=>({defeated:false})); + })(); + function saveBosses(){ try{ localStorage.setItem(STATE_KEY, JSON.stringify(BOSS_STATE)); }catch(e){} } + + cont.innerHTML = BOSSES.map((b)=>{ + return '
' + +'
' + +'' + +'
Босс '+b.n+': '+b.title+'
' + +'
'+b.tag+'
' + +'
' + +'
'+b.q+'
' + +'
' + +'ответ =' + +'' + +'' + +'' + +'
' + +'' + +'
'; + }).join(''); + renderMath(cont); + + function refreshOverall(){ + const won = BOSS_STATE.filter(s => s.defeated).length; + const txt = document.getElementById('ch3-boss-overall'); + const fill = document.getElementById('ch3-boss-overall-fill'); + if(txt) txt.textContent = won + ' / ' + BOSSES.length + ' боссов побеждено'; + if(fill) fill.style.width = (won * 100 / BOSSES.length) + '%'; + if(won >= BOSSES.length){ + const reward = document.getElementById('ch3-final-reward'); + if(reward && reward.style.display === 'none'){ + reward.style.display = 'block'; + if(!STATE.achievements.has('ch3_done')){ + achievement('ch3_done','Мастер электростатики'); + addXp(50, 'ch3-bonus'); + bumpProgress('final3', 30); + if(window.confetti){ try{ confetti(); }catch(e){} } + } + } + } + } + + BOSSES.forEach((b, idx)=>{ + const card = document.getElementById('boss3-'+b.n+'-card'); + const goBtn = document.getElementById('boss3-'+b.n+'-go'); + const hintBtn = document.getElementById('boss3-'+b.n+'-hint'); + const ansInp = document.getElementById('boss3-'+b.n+'-ans'); + if(BOSS_STATE[idx].defeated){ + card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; + card.classList.add('glow'); + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + ansInp.disabled = true; + } + goBtn.addEventListener('click', ()=>{ + if(BOSS_STATE[idx].defeated) return; + const fb = document.getElementById('boss3-'+b.n+'-fb'); + const raw = ansInp.value.replace(',', '.'); + const val = parseFloat(raw); + if(isNaN(val)){ feedback(fb, false, '✗ Введи число.'); return; } + const tol = (typeof b.tol === 'number') ? b.tol : Math.max(0.05 * Math.abs(b.ans), 0.05); + if(Math.abs(val - b.ans) < tol + 0.001){ + BOSS_STATE[idx].defeated = true; saveBosses(); + feedback(fb, true, '✓ Босс '+b.n+' повержен! +10 XP. '+b.hint); + addXp(10, 'boss-ch3-'+b.n); + bumpProgress('final3', 14); + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + ansInp.disabled = true; + card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; + card.classList.add('glow','pulse'); + setTimeout(()=>card.classList.remove('pulse'), 900); + refreshOverall(); + } else { + feedback(fb, false, '✗ Промах. Попробуй ещё. Подсказка доступна.'); + } + }); + hintBtn.addEventListener('click', ()=>{ + const fb = document.getElementById('boss3-'+b.n+'-fb'); + fb.className = 'feedback ok'; + fb.innerHTML = 'Подсказка: '+b.hint; + fb.style.display = 'block'; + fb.style.background = 'var(--warn-bg)'; + fb.style.color = '#92400e'; + fb.style.borderLeftColor = 'var(--warn)'; + renderMath(fb); + }); + ansInp.addEventListener('keydown', e=>{ if(e.key === 'Enter') goBtn.click(); }); + }); + + refreshOverall(); } /* ===== Search ===== */