From 37274178102fcc4afcdac2960fe8a03240a202c6 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Fri, 29 May 2026 23:54:53 +0300 Subject: [PATCH] =?UTF-8?q?feat(phys8=20ch2):=20Phase=204=20Wave=202=20?= =?UTF-8?q?=E2=80=94=20=C2=A730=20=D0=AD=D1=80=D1=81=D1=82=D0=B5=D0=B4=20+?= =?UTF-8?q?=20=C2=A731=20=D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=B3=D0=BD=D0=B8=D1=82=20+=20=D0=A4=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=B3=D0=BB=D0=B0=D0=B2=D1=8B=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §30 Опыт Эрстеда: - 3 теории: открытие 1820, значение опыта, применения - IV-1: симуляция Эрстеда — провод + стрелка, slider'ы ключа и направления тока; без тока стрелка указывает на N (Землю), при включении тока отклоняется на 60° (по/против часовой в зависимости от направления) - IV-2: 5 вопросов о значимости опыта - IV-3: DnD 8 «есть/нет поля» (магниты, токи, нейтр. тела) - IV-4: 6 MCQ §31 Поле прямого провода + электромагнит: - 3 теории: окружности линий и правило правой руки, соленоид, электромагнит - IV-1: ГЛАВНЫЙ ВИЗУАЛ — электромагнит-конструктор: slider'ы I, N и dropdown сердечника (воздух/железо μ=500); катушка с витками, стержень, рассчитанный |B| и число поднимаемых скрепок - IV-2: 5 вопросов «правило правой руки» - IV-3: DnD 8 действий «усилит/ослабит поле» - IV-4: 6 MCQ ФИНАЛ ГЛАВЫ 2: - Шпаргалка из 12 формул и понятий - 10 интегрированных боссов: закон Ома, R=ρl/S, последов., параллельная, смешанная цепь, мощность, Джоуль-Ленц, кВт·ч за месяц, тариф, магистр электромагнетизма - Прогресс-бар + ачивка em_master (+50 XP) при 10/10 Глава 2 «Электромагнитные явления» (§§12-31, 20 параграфов) закончена. Co-Authored-By: Claude Opus 4.7 --- frontend/textbooks/physics_8_ch2.html | 608 +++++++++++++++++++++++++- 1 file changed, 598 insertions(+), 10 deletions(-) diff --git a/frontend/textbooks/physics_8_ch2.html b/frontend/textbooks/physics_8_ch2.html index 4fbee97..9e0a59f 100644 --- a/frontend/textbooks/physics_8_ch2.html +++ b/frontend/textbooks/physics_8_ch2.html @@ -303,7 +303,8 @@ const ACH_LABELS = { p29_done:"Магнитное поле освоен!", p30_done:"Магнитное поле тока освоен!", p31_done:"Магнитное поле прямого проводника и катушки с током. Электромагнит освоен!", - ch2_done:"Глава 2 пройдена!" + ch2_done:"Глава 2 пройдена!", + em_master:"Мастер электромагнетизма — все боссы главы 2 повержены!" }; const SIDEBARS = { @@ -436,9 +437,24 @@ const SIDEBARS = { ["Линии замкнуты","нет источника / стока"], ["Опилки","показывают линии $\\vec B$"] ]}, - p30:{title:"Шпаргалка § 30",rows:[["В разработке","Phase 4 Wave 2"]]}, - p31:{title:"Шпаргалка § 31",rows:[["В разработке","Phase 4 Wave 2"]]}, - final2:{title:"Шпаргалка ★",rows:[["В разработке","Phase 4 Wave 2"]]} + p30:{title:"Шпаргалка § 30",rows:[ + ["Опыт Эрстеда","1820 г"], + ["Вывод","ток создаёт магн. поле"], + ["Связь","электричество $\\leftrightarrow$ магнетизм"], + ["Стрелка над током","отклоняется"] + ]}, + p31:{title:"Шпаргалка § 31",rows:[ + ["Прямой проводник","линии — концентр. окружности"], + ["Правило прав. руки","большой палец = ток"], + ["Соленоид","как полосовой магнит"], + ["Электромагнит","катушка + сердечник"], + ["$|B|$ катушки","$\\propto I N$"] + ]}, + final2:{title:"Финал главы 2",rows:[ + ["§§12-31","электромагнитные явления"], + ["3 части","статика, ток, магнетизм"], + ["Награда","+50 XP + Мастер ЭМ"] + ]} }; const TIPS=[ @@ -460,9 +476,9 @@ const TIPS=[ {sec:'p27',html:"Счётчик в квартире меряет энергию в кВт·ч: 1 кВт·ч — это работа за 1 час мощностью 1 кВт. Стоимость = энергия × тариф. ТБ: розетка под 220 В может ударить смертельным током."}, {sec:'p28',html:"Два полюса магнита: N (север) и S (юг). Как и заряды: одноимённые отталкиваются, разноимённые притягиваются. Но в отличие от зарядов, разрезать магнит и получить «только N» нельзя — выскочат новые два полюса."}, {sec:'p29',html:"Вокруг магнита есть магнитное поле — оно действует на железные предметы и магнитные стрелки. Линии поля выходят из N и входят в S, и они замкнуты (в отличие от линий эл. поля). Опилки на бумаге над магнитом красиво «рисуют» эти линии."}, - {sec:'p30',html:"Параграф § 30 будет реализован в Phase 4 Wave 2. Используем хелперы из phys.js и optics.js."}, - {sec:'p31',html:"Параграф § 31 будет реализован в Phase 4 Wave 2. Используем хелперы из phys.js и optics.js."}, - {sec:'final2',html:"Параграф ★ будет реализован в Phase 4 Wave 2. Используем хелперы из phys.js и optics.js."} + {sec:'p30',html:"Великое открытие Эрстеда (1820): магнитная стрелка отклоняется около проводника с током. Значит, ток создаёт магнитное поле! Это первый «мост» между электричеством и магнетизмом."}, + {sec:'p31',html:"Линии поля вокруг прямого провода — концентрические окружности. Направление определяет правило правой руки. Катушка с током (соленоид) ведёт себя как полосовой магнит. Электромагнит = катушка + железный сердечник: сильный, управляемый магнит."}, + {sec:'final2',html:"Финал главы 2 — 10 интегрированных боссов по всей электротехнике 8 класса. Заряды, поле, ток, закон Ома, соединения, мощность, кВт·ч, магнетизм. +50 XP и ачивка «Мастер электромагнетизма»."} ]; const BUILDERS = { @@ -484,9 +500,9 @@ const BUILDERS = { p27: ()=>{ build_p27(); }, p28: ()=>{ build_p28(); }, p29: ()=>{ build_p29(); }, - p30: ()=>{ const box=document.getElementById('p30-body'); box.innerHTML = buildStub('p30', 'Магнитное поле тока', 'Phase 4 Wave 2') + secNavFor('p30') + readButton('p30'); renderMath(box); wireReadBtn('p30'); }, - p31: ()=>{ const box=document.getElementById('p31-body'); box.innerHTML = buildStub('p31', 'Магнитное поле прямого проводника и катушки с током. Электромагнит', 'Phase 4 Wave 2') + secNavFor('p31') + readButton('p31'); renderMath(box); wireReadBtn('p31'); }, - final2: ()=>{ const box=document.getElementById('final2-body'); box.innerHTML = buildStub('final2', 'Финал главы', 'Phase 4 Wave 2') + secNavFor('final2') + readButton('final2'); renderMath(box); wireReadBtn('final2'); } + p30: ()=>{ build_p30(); }, + p31: ()=>{ build_p31(); }, + final2: ()=>{ build_final2(); } }; function calcLevel(xp){ return Math.floor(Math.sqrt((xp||0)/100))+1; } @@ -4771,6 +4787,578 @@ function _initP29_mcq(){ render(); } +/* ====================================================================== + PHASE 4 · WAVE 2 — §30, §31, FINAL 2 + ====================================================================== */ + +/* ======== §30 — Магнитное поле тока. Опыт Эрстеда ======== */ +function build_p30(){ + const box = document.getElementById('p30-body'); + let h = ''; + + h += makeCard('theory', 'Опыт Эрстеда', '§ 30.1', + '

В 1820 году датский физик Ханс Эрстед сделал революционное открытие. Он расположил магнитную стрелку под прямым проводником и включил ток.

' + +'

Стрелка повернулась! Это значило: вокруг проводника с током есть магнитное поле.

' + +'

До этого считалось, что электричество и магнетизм — совершенно независимы. Опыт Эрстеда показал: это одно явление.

' + ); + h += makeCard('rule', 'Что говорит этот опыт', '§ 30.2', + '' + +'

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

' + ); + h += makeCard('example', 'Применения', '§ 30.3', + '' + ); + + /* IV1 — опыт Эрстеда */ + h += '
' + +'
IV-1
Опыт Эрстеда
' + +'
Включи ток — стрелка отклонится. Поменяй направление — стрелка повернётся в другую сторону.
' + +'
' + +'' + +'' + +'
' + +'' + +'
Стрелка отклонена на:
' + +'
'; + + /* IV2 — викторина «что произойдёт» */ + h += '
' + +'
IV-2
Что в опыте Эрстеда?
' + +'
Вопросы о значимости опыта.
' + +'
' + +'
' + +'
Раунд: 1 / 5Правильно: 0
' + +'
'; + + /* IV3 — DnD «где есть магн. поле» */ + h += '
' + +'
IV-3
Есть ли магнитное поле?
' + +'
Распредели ситуации.
' + +'
' + +'
' + +'
Есть поле
' + +'
Нет поля
' + +'
' + +'
' + +'' + +'
'; + + /* IV4 — MCQ */ + h += '
' + +'
IV-4
Тренажёр: 6 вопросов
' + +'
4+ — +15 XP.
' + +'
' + +'
Вопрос: 1 / 6Правильно: 0
' + +'
'; + + box.innerHTML = h + secNavFor('p30') + readButton('p30'); + renderMath(box); + wireReadBtn('p30'); + + _initP30_oersted(); + _initP30_quiz(); + _initP30_dnd(); + _initP30_mcq(); +} + +function _initP30_oersted(){ + const svg = document.getElementById('p30-sim'); if(!svg) return; + function draw(){ + const key = +document.getElementById('p30-key').value === 1; + const dir = +document.getElementById('p30-dir').value; + let s = ''; + /* провод горизонтальный */ + s += ''; + /* батарея слева, ключ */ + s += window.PHYS.batteryEMF(60, 130, '6 В', 'h'); + s += window.PHYS.wire(60, 112, 60, 60); + s += window.PHYS.wire(60, 148, 60, 170); + s += window.PHYS.wire(60, 170, 400, 170); + s += window.PHYS.wire(400, 170, 400, 60); + /* ключ на нижнем проводе */ + s += ''; + s += ''; + if(key) s += ''; + else s += ''; + /* стрелка тока на проводе */ + if(key){ + if(dir > 0) s += window.PHYS.drawArrow(200, 50, 260, 50, '#d97706', 2.2, 10); + else s += window.PHYS.drawArrow(260, 50, 200, 50, '#d97706', 2.2, 10); + s += 'I'; + } + /* магнитная стрелка под проводом */ + const cx = 230, cy = 100; + /* угол отклонения */ + let angle = 0; /* 0 — стрелка вдоль провода (на запад/восток... условно вверх в нашем рисунке: будет указывать на N=верх) */ + /* без тока: стрелка указывает «на север» — то есть направлена вверх (в нашей рисовке север = верх) */ + /* с током: отклоняется перпендикулярно проводу. + Эрстед: если ток слева направо (запад → восток), стрелка отклоняется по часовой стрелке (вид сверху, стрелка кажется поворачивается вправо). */ + if(key){ + angle = dir > 0 ? 60 : -60; /* 60° от исходного направления */ + } + /* нарисуем стрелку: длина 36, поворот на angle */ + const rad = angle * Math.PI / 180; + /* без поворота стрелка идёт вверх (от cx,cy+18 до cx,cy-18) */ + const lenH = 18; + const ex1 = cx + lenH * Math.sin(rad); + const ey1 = cy - lenH * Math.cos(rad); /* северный конец */ + const ex2 = cx - lenH * Math.sin(rad); + const ey2 = cy + lenH * Math.cos(rad); + s += ''; + s += ''; + s += ''; + s += ''; + /* подпись стрелки */ + s += 'N'; + /* отклонение */ + document.getElementById('p30-ang').textContent = Math.abs(angle).toFixed(0)+'°'; + svg.innerHTML = s; + } + document.getElementById('p30-key').addEventListener('change', draw); + document.getElementById('p30-dir').addEventListener('change', draw); + draw(); +} + +function _initP30_quiz(){ + const QS = [ + {q:'Что заметил Эрстед в опыте?', opts:['тёплый провод','отклонение стрелки около проводника с током','свечение проводника','ничего'], ans:1, why:'Магнитная стрелка отклонилась.'}, + {q:'Что доказывает опыт?', opts:['ток нагревает','ток создаёт магн. поле','магнит проводит ток','ничего'], ans:1, why:'Ток создаёт магнитное поле.'}, + {q:'В каком году провёл опыт?', opts:['1750','1820','1900','1950'], ans:1, why:'1820 год.'}, + {q:'Что произойдёт, если поменять направление тока?', opts:['стрелка не среагирует','стрелка повернётся в противоположную сторону','стрелка сломается','стрелка сделает оборот'], ans:1, why:'Направление поля зависит от направления тока.'}, + {q:'Без тока (ключ разомкнут) стрелка…', opts:['отклонена','указывает на север','вращается','не работает'], ans:1, why:'Под действием магнитного поля Земли указывает на N.'} + ]; + let i = 0, ok = 0; + function render(){ + const q = QS[i]; const wrap = document.getElementById('p30-quiz'); if(!wrap) return; + let html = '
Вопрос '+(i+1)+'. '+q.q+'
'; + q.opts.forEach((opt,k)=>{ html += ''; }); + html += '
'; + wrap.innerHTML = html; + document.getElementById('p30-quiz-r').textContent = (i+1); + document.getElementById('p30-quiz-ok').textContent = ok; + wrap.querySelectorAll('[data-k]').forEach(btn=>{ + btn.addEventListener('click', ()=>{ + if(btn.disabled) return; wrap.querySelectorAll('[data-k]').forEach(b=>b.disabled=true); + const k = +btn.dataset.k; const fb = document.getElementById('p30-quiz-fb'); + if(k===q.ans){ ok++; fb.className='feedback ok'; fb.innerHTML='✓ Верно. '+q.why; addXp(3,'p30-quiz'); bumpProgress('p30', 4); } + else { fb.className='feedback fail'; fb.innerHTML='✗ Не то. '+q.why; } + document.getElementById('p30-quiz-ok').textContent = ok; + }); + }); + } + document.getElementById('p30-quiz-next').addEventListener('click', ()=>{ i=(i+1)%QS.length; render(); }); + render(); +} + +function _initP30_dnd(){ + const items = [ + {id:'a', cat:'y', html:'постоянный магнит'}, + {id:'b', cat:'y', html:'провод с током'}, + {id:'c', cat:'y', html:'движущийся электрон'}, + {id:'d', cat:'y', html:'катушка под током'}, + {id:'e', cat:'n', html:'нейтральный кусок железа'}, + {id:'f', cat:'n', html:'разомкнутая цепь'}, + {id:'g', cat:'n', html:'покоящийся заряд'}, + {id:'h', cat:'n', html:'батарейка без провода'} + ]; + const dnd = setupSorter({ poolId:'p30-dnd-pool', scopeSelector:'#sec-p30', cats:['y','n'], items, columnLayout:false }); + document.getElementById('p30-dnd-check').addEventListener('click', ()=>{ + const fb = document.getElementById('p30-dnd-fb'); + let wrong = 0; items.forEach(it=>{ if(dnd.placed[it.id] !== it.cat) wrong++; }); + if(wrong===0){ fb.className='feedback ok'; fb.innerHTML='✓ Идеально! +15 XP. Магн. поле создают: магниты, токи и движ. заряды.'; addXp(15,'p30-dnd'); bumpProgress('p30', 20); } + else { fb.className='feedback fail'; fb.innerHTML='✗ Ошибок: '+wrong+'.'; } + }); + document.getElementById('p30-dnd-reset').addEventListener('click', ()=>{ dnd.reset(); const fb=document.getElementById('p30-dnd-fb'); fb.style.display='none'; }); +} + +function _initP30_mcq(){ + const QS = [ + {q:'Кто открыл связь электричества и магнетизма?', opts:['Вольт','Ампер','Эрстед','Ом'], ans:2, why:'Х. Эрстед, 1820 г.'}, + {q:'Какое поле создаёт ток?', opts:['электрическое','магнитное','гравитационное','тепловое'], ans:1, why:'Магнитное.'}, + {q:'От чего зависит сила магн. поля у провода?', opts:['от U','от I','от R','от температуры'], ans:1, why:'Чем больше $I$, тем сильнее поле.'}, + {q:'Как меняется поле, если ток развернуть?', opts:['исчезает','усиливается','меняет направление','удваивается'], ans:2, why:'Меняет знак (направление).'}, + {q:'Применение опыта Эрстеда?', opts:['лампы','электромоторы','чайники','компасы'], ans:1, why:'Все электромоторы используют взаимод. тока и магн. поля.'}, + {q:'Что объединил Эрстед?', opts:['теплоту и свет','электричество и магнетизм','гравитацию и свет','химию и физику'], ans:1, why:'Электричество ↔ магнетизм.'} + ]; + let i = 0, ok = 0, done = 0, awarded = false; + function render(){ + const q = QS[i]; const wrap = document.getElementById('p30-mcq'); if(!wrap) return; + let h = '
Вопрос '+(i+1)+'. '+q.q+'
'; + q.opts.forEach((opt,k)=>{ h += ''; }); + h += '
'; + wrap.innerHTML = h; + document.getElementById('p30-mcq-i').textContent = (i+1); + document.getElementById('p30-mcq-ok').textContent = ok; + wrap.querySelectorAll('[data-k]').forEach(btn=>{ + btn.addEventListener('click', ()=>{ + if(btn.disabled) return; wrap.querySelectorAll('[data-k]').forEach(b=>b.disabled=true); + const k = +btn.dataset.k; const fb = document.getElementById('p30-mcq-fb'); + if(k===q.ans){ ok++; done++; fb.className='feedback ok'; fb.innerHTML='✓ Верно. '+q.why; addXp(2,'p30-mcq'); bumpProgress('p30', 3); } + else { done++; fb.className='feedback fail'; fb.innerHTML='✗ Не то. '+q.why; } + document.getElementById('p30-mcq-ok').textContent = ok; + if(done >= QS.length && !awarded && ok >= 4){ awarded = true; setTimeout(()=>{ const wf=document.getElementById('p30-mcq-fb'); wf.className='feedback ok'; wf.innerHTML='✓ +15 XP — тренажёр пройден.'; addXp(15,'p30-mcq-bonus'); bumpProgress('p30', 15); }, 600); } + }); + }); + const nb = document.getElementById('p30-mcq-next'); if(nb) nb.addEventListener('click', ()=>{ i=(i+1)%QS.length; render(); }); + } + render(); +} + +/* ======== §31 — Поле прямого провода и катушки. Электромагнит ======== */ +function build_p31(){ + const box = document.getElementById('p31-body'); + let h = ''; + + h += makeCard('theory', 'Поле прямого провода', '§ 31.1', + '

Опыт с железными опилками показывает: линии магнитного поля вокруг прямого провода с током — концентрические окружности в плоскости, перпендикулярной проводу.

' + +'

Правило правой руки: если большой палец правой руки направить вдоль тока, то остальные пальцы покажут направление линий $\\vec B$.

' + ); + h += makeCard('rule', 'Катушка с током (соленоид)', '§ 31.2', + '

Если намотать провод спиралью и пропустить через него ток, получится соленоид. Его магнитное поле очень похоже на поле полосового магнита:

' + +'
    ' + +'
  • один торец становится «N» полюсом, другой — «S»;
  • ' + +'
  • линии $\\vec B$ выходят из N, входят в S, замыкаются;
  • ' + +'
  • сила поля растёт с током $I$ и числом витков $N$: $|B| \\propto I N$.
  • ' + +'
' + +'

Направление полюсов снова определяется правилом правой руки: пальцы — по витку с током, большой палец — в сторону северного полюса.

' + ); + h += makeCard('example', 'Электромагнит', '§ 31.3', + '

Если вставить внутрь катушки железный сердечник, поле резко усиливается (в 1000+ раз). Получается электромагнит.

' + +'

Его преимущества:

' + +'
    ' + +'
  • включается и выключается по желанию (через ключ);
  • ' + +'
  • сила управляется током $I$;
  • ' + +'
  • можно сделать очень сильным.
  • ' + +'
' + +'

Применения: дверные звонки, реле, грузоподъёмные краны, левитирующие поезда.

' + ); + + /* IV1 — электромагнит-конструктор */ + h += '
' + +'
IV-1
Электромагнит-конструктор
' + +'
Меняй ток и число витков — увидь, сколько скрепок поднимает электромагнит.
' + +'
' + +'' + +'' + +'' + +'
' + +'' + +'
' + +'$|B| \\propto I \\cdot N \\cdot \\mu$: 50 у.е.' + +'Поднимет скрепок: 2' + +'
' + +'
'; + + /* IV2 — викторина правило правой руки */ + h += '
' + +'
IV-2
Где северный полюс электромагнита?
' + +'
По направлению тока определи полюсы.
' + +'
' + +'
' + +'
Раунд: 1 / 5Правильно: 0
' + +'
'; + + /* IV3 — DnD «что усилит поле» */ + h += '
' + +'
IV-3
Что усилит поле электромагнита?
' + +'
Распредели действия.
' + +'
' + +'
' + +'
Усилит
' + +'
Ослабит
' + +'
' + +'
' + +'' + +'
'; + + /* IV4 — MCQ */ + h += '
' + +'
IV-4
Тренажёр: 6 вопросов
' + +'
4+ — +15 XP.
' + +'
' + +'
Вопрос: 1 / 6Правильно: 0
' + +'
'; + + box.innerHTML = h + secNavFor('p31') + readButton('p31'); + renderMath(box); + wireReadBtn('p31'); + + _initP31_emagnet(); + _initP31_quiz(); + _initP31_dnd(); + _initP31_mcq(); +} + +function _initP31_emagnet(){ + const svg = document.getElementById('p31-sim'); if(!svg) return; + function update(){ + const I = +document.getElementById('p31-i').value; + const N = +document.getElementById('p31-n').value; + const mu = +document.getElementById('p31-core').value; + document.getElementById('p31-iv').textContent = I.toFixed(1); + document.getElementById('p31-nv').textContent = N; + const B = I * N * mu / 100; /* условная единица */ + document.getElementById('p31-bval').textContent = B.toFixed(0); + const clips = Math.floor(B / 25); + document.getElementById('p31-clips').textContent = clips; + /* SVG: катушка + сердечник + поднятые скрепки */ + let s = ''; + /* батарея */ + s += window.PHYS.batteryEMF(50, 180, I.toFixed(1)+' А', 'h'); + /* провода */ + s += window.PHYS.wire(50, 162, 50, 100); + s += window.PHYS.wire(50, 100, 130, 100); + s += window.PHYS.wire(50, 198, 50, 200); + s += window.PHYS.wire(50, 200, 360, 200); + s += window.PHYS.wire(360, 200, 360, 100); + s += window.PHYS.wire(360, 100, 320, 100); + /* катушка — серия наклонных полудуг */ + const wireCount = Math.max(3, Math.min(20, Math.floor(N/10))); + const coilX1 = 130, coilX2 = 320; + const coilSpan = coilX2 - coilX1; + const coilCy = 100; + /* стержень-сердечник (если железо — заметнее) */ + if(mu > 1){ + s += ''; + } + for(let k=0; k'; + } + /* N и S */ + s += 'N'; + s += 'S'; + /* скрепки притянуты к N полюсу */ + for(let k=0;k'; + } + /* подпись */ + s += '|B| = '+B.toFixed(0)+', клипс: '+clips+''; + svg.innerHTML = s; + } + ['p31-i','p31-n','p31-core'].forEach(id => document.getElementById(id).addEventListener('input', update)); + document.getElementById('p31-core').addEventListener('change', update); + update(); +} + +function _initP31_quiz(){ + const QS = [ + {q:'Большой палец правой руки = ток. Куда направлены остальные пальцы?', opts:['от N','вдоль линий $\\vec B$','к S','перпендикулярно'], ans:1, why:'Правило правой руки: пальцы по $\\vec B$.'}, + {q:'У катушки — какой полюс там, куда «выходят» линии?', opts:['N','S','оба','никакой'], ans:0, why:'Линии выходят из N.'}, + {q:'Что усилит поле катушки сильнее всего?', opts:['+ток','+витки','+железный сердечник','любое'], ans:2, why:'Сердечник усиливает поле в сотни раз.'}, + {q:'Электромагнит работает на постоянном…', opts:['напряжении','токе','тепле','магните'], ans:1, why:'Нужен постоянный ток.'}, + {q:'Что произойдёт, если выключить ток?', opts:['поле остаётся','поле исчезает','поле растёт','полюса меняются'], ans:1, why:'Поле существует только при токе.'} + ]; + let i = 0, ok = 0; + function render(){ + const q = QS[i]; const wrap = document.getElementById('p31-quiz'); if(!wrap) return; + let html = '
Вопрос '+(i+1)+'. '+q.q+'
'; + q.opts.forEach((opt,k)=>{ html += ''; }); + html += '
'; + wrap.innerHTML = html; + document.getElementById('p31-quiz-r').textContent = (i+1); + document.getElementById('p31-quiz-ok').textContent = ok; + wrap.querySelectorAll('[data-k]').forEach(btn=>{ + btn.addEventListener('click', ()=>{ + if(btn.disabled) return; wrap.querySelectorAll('[data-k]').forEach(b=>b.disabled=true); + const k = +btn.dataset.k; const fb = document.getElementById('p31-quiz-fb'); + if(k===q.ans){ ok++; fb.className='feedback ok'; fb.innerHTML='✓ Верно. '+q.why; addXp(3,'p31-quiz'); bumpProgress('p31', 4); } + else { fb.className='feedback fail'; fb.innerHTML='✗ Не то. '+q.why; } + document.getElementById('p31-quiz-ok').textContent = ok; + renderMath(wrap); + }); + }); + renderMath(wrap); + } + document.getElementById('p31-quiz-next').addEventListener('click', ()=>{ i=(i+1)%QS.length; render(); }); + render(); +} + +function _initP31_dnd(){ + const items = [ + {id:'i', cat:'up', html:'увеличить ток $I$'}, + {id:'n', cat:'up', html:'добавить витков'}, + {id:'c', cat:'up', html:'вставить железный сердечник'}, + {id:'t', cat:'up', html:'намотать туже'}, + {id:'ki',cat:'dn', html:'уменьшить ток'}, + {id:'nn',cat:'dn', html:'убрать половину витков'}, + {id:'ne',cat:'dn', html:'вынуть сердечник'}, + {id:'op',cat:'dn', html:'разомкнуть цепь'} + ]; + const dnd = setupSorter({ poolId:'p31-dnd-pool', scopeSelector:'#sec-p31', cats:['up','dn'], items, columnLayout:false }); + document.getElementById('p31-dnd-check').addEventListener('click', ()=>{ + const fb = document.getElementById('p31-dnd-fb'); + let wrong = 0; items.forEach(it=>{ if(dnd.placed[it.id] !== it.cat) wrong++; }); + if(wrong===0){ fb.className='feedback ok'; fb.innerHTML='✓ Идеально! +15 XP. $|B| \\propto I N$ + сердечник усиливает в сотни раз.'; addXp(15,'p31-dnd'); bumpProgress('p31', 20); renderMath(fb); } + else { fb.className='feedback fail'; fb.innerHTML='✗ Ошибок: '+wrong+'.'; } + }); + document.getElementById('p31-dnd-reset').addEventListener('click', ()=>{ dnd.reset(); const fb=document.getElementById('p31-dnd-fb'); fb.style.display='none'; }); +} + +function _initP31_mcq(){ + const QS = [ + {q:'Линии $\\vec B$ вокруг прямого провода — это…', opts:['прямые','окружности','эллипсы','зигзаги'], ans:1, why:'Концентрические окружности перпендикулярно проводу.'}, + {q:'Что определяет правило правой руки?', opts:['знак заряда','направление $\\vec B$','напряжение','частоту'], ans:1, why:'Направление магнитного поля.'}, + {q:'Соленоид с током похож на…', opts:['прямой магнит','полосовой магнит','подковообразный','ничего'], ans:1, why:'Поле как у полосового магнита.'}, + {q:'Электромагнит = …', opts:['обычный магнит','катушка + сердечник','батарейка + лампа','любой провод'], ans:1, why:'Катушка с сердечником.'}, + {q:'Зачем сердечник?', opts:['для красоты','для прочности','для усиления магнитного поля','чтобы катушка не сгорала'], ans:2, why:'Железо концентрирует магнитное поле — усиливает в сотни раз.'}, + {q:'Где применяют электромагнит?', opts:['в МРТ','в кранах','в звонках, реле','везде перечисленное'], ans:3, why:'Все эти устройства!'} + ]; + let i = 0, ok = 0, done = 0, awarded = false; + function render(){ + const q = QS[i]; const wrap = document.getElementById('p31-mcq'); if(!wrap) return; + let h = '
Вопрос '+(i+1)+'. '+q.q+'
'; + q.opts.forEach((opt,k)=>{ h += ''; }); + h += '
'; + wrap.innerHTML = h; + document.getElementById('p31-mcq-i').textContent = (i+1); + document.getElementById('p31-mcq-ok').textContent = ok; + wrap.querySelectorAll('[data-k]').forEach(btn=>{ + btn.addEventListener('click', ()=>{ + if(btn.disabled) return; wrap.querySelectorAll('[data-k]').forEach(b=>b.disabled=true); + const k = +btn.dataset.k; const fb = document.getElementById('p31-mcq-fb'); + if(k===q.ans){ ok++; done++; fb.className='feedback ok'; fb.innerHTML='✓ Верно. '+q.why; addXp(2,'p31-mcq'); bumpProgress('p31', 3); } + else { done++; fb.className='feedback fail'; fb.innerHTML='✗ Не то. '+q.why; } + document.getElementById('p31-mcq-ok').textContent = ok; + renderMath(wrap); + if(done >= QS.length && !awarded && ok >= 4){ awarded = true; setTimeout(()=>{ const wf=document.getElementById('p31-mcq-fb'); wf.className='feedback ok'; wf.innerHTML='✓ +15 XP — тренажёр пройден.'; addXp(15,'p31-mcq-bonus'); bumpProgress('p31', 15); }, 600); } + }); + }); + const nb = document.getElementById('p31-mcq-next'); if(nb) nb.addEventListener('click', ()=>{ i=(i+1)%QS.length; render(); }); + renderMath(wrap); + } + render(); +} + +/* ======== ФИНАЛ ГЛАВЫ 2 — 10 интегрированных боссов ======== */ +function build_final2(){ + const box = document.getElementById('final2-body'); + let h = ''; + + /* Шпаргалка */ + h += '
' + +'
'+ICONS.rule+'
Шпаргалка главы 2
' + +'
' + +'
Заряд: $q = Ne$, $e = 1{,}6\\cdot10^{-19}$ Кл
' + +'
Поле: $\\vec E$, линии от + к −
' + +'
Напряжение: $U = A/q$, $A = qU$
' + +'
Ток: $I = q/t$, [А]
' + +'
Ом: $I = U/R$
' + +'
Сопротивление: $R = \\rho l/S$
' + +'
Последов.: $R = R_1+R_2$, $I=$const, $U=U_1+U_2$
' + +'
Паралл.: $1/R = 1/R_1+1/R_2$, $U=$const, $I=I_1+I_2$
' + +'
Мощность: $P = UI = I^2R = U^2/R$
' + +'
Джоуль-Ленц: $Q = I^2Rt$
' + +'
Энергия: $W = Pt$ кВт·ч; $1$ кВт·ч $= 3{,}6\\cdot10^6$ Дж
' + +'
Магниты: N, S; одноим. отталк., разноим. притяг.
' + +'
'; + + /* 10 интегрированных боссов */ + const BOSSES = [ + {n:1, title:'Закон Ома базовый', q:'$U = 36$ В, $R = 12$ Ом. Найди $I$ (А).', hint:'$I = U/R = 3$ А.', ans:3, tol:0.05, step:'0.01'}, + {n:2, title:'Сопротивление провода', q:'Медь $l = 50$ м, $S = 0{,}5$ мм². Найди $R$ (Ом). ($\\rho = 0{,}017$)', hint:'$R = \\rho l/S = 0{,}017\\cdot50/0{,}5 = 1{,}7$ Ом.', ans:1.7, tol:0.05, step:'0.01'}, + {n:3, title:'Послед. цепь', q:'$R_1 = 4$, $R_2 = 6$, $R_3 = 10$ Ом последовательно, $U = 40$ В. Найди $I$ (А).', hint:'$R = 20$, $I = 40/20 = 2$ А.', ans:2, tol:0.05, step:'0.01'}, + {n:4, title:'Паралл. цепь', q:'Два резистора $R_1 = R_2 = 12$ Ом параллельно. Найди $R_{общ}$ (Ом).', hint:'$R/2 = 6$ Ом.', ans:6, tol:0.1, step:'0.1'}, + {n:5, title:'Смешанная цепь', q:'$R_1 = 5$ Ом последовательно с параллельным блоком ($R_2 = R_3 = 10$ Ом каждый). $U = 20$ В. Найди общий $I$ (А).', hint:'$R_{пар} = 5$, $R = 10$, $I = 20/10 = 2$ А.', ans:2, tol:0.05, step:'0.01'}, + {n:6, title:'Мощность', q:'Чайник 1100 Вт работает при $U = 220$ В. Найди $I$ (А) и $R$ (Ом). Введи $R$.', hint:'$I = P/U = 5$ А, $R = U/I = 44$ Ом.', ans:44, tol:1, step:'1'}, + {n:7, title:'Джоуль-Ленц', q:'Спираль $R = 50$ Ом, $I = 4$ А, $t = 1$ мин. Сколько кДж выделится?', hint:'$Q = I^2Rt = 16\\cdot50\\cdot60 = 48\\,000$ Дж = $48$ кДж.', ans:48, tol:1, step:'1'}, + {n:8, title:'кВт·ч за месяц', q:'Холодильник 200 Вт работает 24 ч/день, 30 дней. Сколько кВт·ч за месяц?', hint:'$W = 0{,}2 \\cdot 24 \\cdot 30 = 144$ кВт·ч.', ans:144, tol:2, step:'1'}, + {n:9, title:'Стоимость энергии', q:'За месяц израсходовано 250 кВт·ч, тариф $0{,}25$ руб/(кВт·ч). Сколько руб?', hint:'$250 \\cdot 0{,}25 = 62{,}5$ руб.', ans:62.5, tol:0.5, step:'0.1'}, + {n:10, title:'Магистр электромагнетизма', q:'Электромагнит с $N = 200$ витками и $I = 1{,}5$ А. Поле в 10 раз сильнее, чем при $N = 50$ и $I = 0{,}6$ А. Во сколько раз поле сильнее в обычной катушке без сердечника, чем с железным сердечником (предположим, сердечник усиливает в 500 раз)? Введи число.', hint:'Сердечник увеличивает поле в 500 раз. Без сердечника поле в 500 раз слабее.', ans:500, tol:5, step:'1'} + ]; + + h += '
'+ICONS.example+'
10 боссов главы 2
' + +'
' + +'Боссов побеждено: 0 / 10' + +'
' + +'
' + +'
' + +'
' + +'
'; + + box.innerHTML = h + secNavFor('final2') + readButton('final2'); + renderMath(box); + wireReadBtn('final2'); + + _initFinal2_bosses(BOSSES); +} + +function _initFinal2_bosses(BOSSES){ + const KEY = 'physics8_ch2_bosses'; + function loadState(){ try { return JSON.parse(localStorage.getItem(KEY) || '{}') || {}; } catch(e){ return {}; } } + function saveState(s){ try { localStorage.setItem(KEY, JSON.stringify(s)); } catch(e){} } + function updateBar(){ + const s = loadState(); + let won = 0; for(const k in s) if(s[k]) won++; + document.getElementById('f2-won').textContent = won; + document.getElementById('f2-bar').style.width = Math.round(won*100/BOSSES.length)+'%'; + if(won >= BOSSES.length && !STATE.achievements.has('em_master')){ + addXp(50, 'em-master'); + achievement('em_master'); + } + return won; + } + function renderAll(){ + const cont = document.getElementById('f2-bosses'); + const state = loadState(); + let html = ''; + BOSSES.forEach(b=>{ + const solved = state[b.n]; + html += '
' + +'
Босс '+b.n+''+b.title+'
' + +'
'+b.q+'
' + +'
' + +'' + +'' + +'' + +'
' + +'' + +'
'+(solved?'✓ Победа! +10 XP. Босс повержен.':'')+'
' + +'
'; + }); + cont.innerHTML = html; + BOSSES.forEach(b=>{ + const go = document.getElementById('f2-b'+b.n+'-go'); + const inp = document.getElementById('f2-b'+b.n+'-inp'); + const fb = document.getElementById('f2-b'+b.n+'-fb'); + const ht = document.getElementById('f2-b'+b.n+'-ht'); + const hintBtn = document.getElementById('f2-b'+b.n+'-hint'); + if(hintBtn) hintBtn.addEventListener('click', ()=>{ ht.style.display = ht.style.display==='block'?'none':'block'; }); + if(!go || go.disabled) return; + go.addEventListener('click', ()=>{ + const v = parseFloat((inp.value || '').replace(',','.')); + if(isNaN(v)){ fb.style.display='block'; fb.className='feedback fail'; fb.innerHTML='Введите число.'; return; } + if(Math.abs(v - b.ans) < b.tol){ + fb.style.display='block'; fb.className='feedback ok'; fb.innerHTML='✓ Победа! +10 XP. '+b.hint; + go.disabled = true; inp.disabled = true; + document.getElementById('f2-boss-'+b.n).classList.add('solved'); + const s = loadState(); + if(!s[b.n]){ s[b.n]=true; saveState(s); addXp(10,'f2-boss-'+b.n); bumpProgress('final2', 12); } + updateBar(); + renderMath(fb); + } else { + fb.style.display='block'; fb.className='feedback fail'; fb.innerHTML='✗ Не то. Перепроверь и попробуй снова.'; + } + }); + inp.addEventListener('keydown', e=>{ if(e.key === 'Enter') go.click(); }); + }); + renderMath(cont); + updateBar(); + } + renderAll(); +} + function init(){ loadProgress(); initTheme(); initSidebarToggle(); initSearch(); buildParaSelector(); refreshProgressUI(); loadServerReadState(); goTo(PARAS[0].id);