diff --git a/frontend/textbooks/physics_10_ch5.html b/frontend/textbooks/physics_10_ch5.html index cff47aa..c3f9e05 100644 --- a/frontend/textbooks/physics_10_ch5.html +++ b/frontend/textbooks/physics_10_ch5.html @@ -652,34 +652,755 @@ function wireReadBtn(paraId){ function build_p27(){ const box = document.getElementById('p27-body'); let html = ''; - html += makeCard('theory', "Магнитное поле тока", "§27", ` -

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

-

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

-

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

+ + /* THEORY 1 — Магнитное поле и опыт Эрстеда */ + html += makeCard('theory', "Магнитное поле и опыт Эрстеда", "§27", ` +

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

+

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

+

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

+

Главная мысль. Магнитное поле создаётся движущимися зарядами (током, движущимися частицами, постоянными магнитами) и действует на движущиеся заряды и магниты.

`); + + /* THEORY 2 — Источники и свойства поля */ + html += makeCard('rule', "Источники и свойства поля", "§27", ` +

Источники магнитного поля:

+ +

Главные свойства:

+ +

Сравни. Электрическое поле создают любые заряды (даже неподвижные). Магнитное — только движущиеся.

+ `); + + /* THEORY 3 — Взаимодействие проводников с током */ + html += makeCard('example', "Взаимодействие двух проводников с током", "§27", ` +

Опыт Ампера (1820): два параллельных проводника с током взаимодействуют.

+ +

Это противоположно зарядам! (Одноимённые заряды отталкиваются, одноимённо направленные токи — притягиваются.)

+

Объяснение. Первый проводник создаёт магнитное поле в области второго; это поле действует с силой на ток во втором проводнике. Эта сила называется силой Ампера (§29).

+

Определение Ампера через силу (СИ): $1$ А — сила тока, при которой два параллельных проводника длиной $1$ м, расположенные на расстоянии $1$ м, взаимодействуют с силой $F = 2 \\cdot 10^{-7}$ Н.

+ `); + + /* INTERACTIVE 1 — Опыт Эрстеда */ + html += `
+
ИНТЕРАКТИВ 1
Опыт Эрстеда: ток отклоняет стрелку
+
Переключай ток в проводнике и смотри, как ведёт себя магнитная стрелка под ним. Без тока — стрелка показывает на север.
+
+ + + +
+
+ +
+
+
`; + + /* INTERACTIVE 2 — Взаимодействие проводников */ + html += `
+
ИНТЕРАКТИВ 2
Два проводника: притяжение или отталкивание?
+
Переключай направление тока в каждом проводнике. Параллельные токи притягиваются, антипараллельные — отталкиваются.
+
+
$I_1$ (слева)
+ + +
+
$I_2$ (справа)
+ + +
+
+
+ +
+
+
`; + + /* INTERACTIVE 3 — Откуда берётся поле? */ + html += `
+
ИНТЕРАКТИВ 3
Откуда берётся магнитное поле?
+
Определи источник магнитного поля в каждой ситуации.
+
Задача 1 / 6Очки: 0 / 6
+
+
+
+
+
`; + + /* INTERACTIVE 4 — Тренажёр */ + html += `
+
ИНТЕРАКТИВ 4
Тренажёр: магнитное поле тока
+
5 вопросов на ключевые понятия §27.
+
Задача 1 / 5Очки: 0 / 5
+
+
+
+
+
`; + html += secNav(null, 'p28'); html += readButton('p27'); + box.innerHTML = html; renderMath(box); + + /* IV1 — Опыт Эрстеда */ + (function(){ + const svg = document.getElementById('p27-iv1-svg'); + const out = document.getElementById('p27-iv1-out'); + const bOff = document.getElementById('p27-iv1-off'); + const bR = document.getElementById('p27-iv1-right'); + const bL = document.getElementById('p27-iv1-left'); + const seen = new Set(); + let _done = false; + let state = 'right'; // 'off' | 'right' | 'left' + + function setState(s){ + state = s; + [bOff,bR,bL].forEach(b => b.classList.remove('primary')); + ({off:bOff, right:bR, left:bL}[s]).classList.add('primary'); + render(); + seen.add(s); + if(!_done && seen.size >= 3){ _done = true; addXp(10, 'p27-iv1'); bumpProgress('p27', 15); } + } + + function render(){ + const W = 480, H = 280; + let g = ''; + g += ''; + g += 'Опыт Эрстеда'; + + // Провод горизонтальный + const wireY = 110; + g += ''; + g += 'Проводник'; + + // Стрелка направления тока на проводе + if(state === 'right'){ + g += PHYS.drawArrow(180, wireY, 300, wireY, '#dc2626', 3, 14); + g += 'I →'; + } else if(state === 'left'){ + g += PHYS.drawArrow(300, wireY, 180, wireY, '#dc2626', 3, 14); + g += '← I'; + } else { + g += 'I = 0'; + } + + // Магнитная стрелка под проводом — крутится + const compassX = 240, compassY = 210; + const compassR = 42; + // По умолчанию (off) — север (вверх). При токе вправо — отклоняется влево (на нас, по правилу буравчика снизу). При токе влево — вправо. + let angle = 0; // 0 = север (вверх), измеряется по часовой стрелке + if(state === 'right') angle = -75; // отклонение влево + else if(state === 'left') angle = 75; // отклонение вправо + + // Корпус компаса + g += ''; + g += 'С'; + g += 'Ю'; + g += 'З'; + g += 'В'; + + // Стрелка компаса (вращается) + const rad = angle * Math.PI / 180; + const nx = compassX + Math.sin(rad) * (compassR - 6); + const ny = compassY - Math.cos(rad) * (compassR - 6); + const sx = compassX - Math.sin(rad) * (compassR - 6); + const sy = compassY + Math.cos(rad) * (compassR - 6); + g += ''; + // Северный конец — красный + g += ''; + // центр + g += ''; + + svg.innerHTML = g; + + let txt = ''; + if(state === 'off'){ + txt = 'Ток выключен. Стрелка показывает на север (магнитное поле Земли).'; + } else if(state === 'right'){ + txt = 'Ток вправо → стрелка отклонилась влево. Проводник создал магнитное поле, повернувшее стрелку.'; + } else { + txt = 'Ток влево → стрелка отклонилась вправо. Смена направления тока — смена направления поля.'; + } + out.innerHTML = txt; + } + + bOff.addEventListener('click', () => setState('off')); + bR.addEventListener('click', () => setState('right')); + bL.addEventListener('click', () => setState('left')); + setState('right'); + })(); + + /* IV2 — Взаимодействие проводников */ + (function(){ + const svg = document.getElementById('p27-iv2-svg'); + const out = document.getElementById('p27-iv2-out'); + const b1u = document.getElementById('p27-iv2-1up'); + const b1d = document.getElementById('p27-iv2-1dn'); + const b2u = document.getElementById('p27-iv2-2up'); + const b2d = document.getElementById('p27-iv2-2dn'); + const seen = new Set(); + let _done = false; + let I1 = 'up', I2 = 'up'; + + function setI1(v){ I1 = v; b1u.classList.toggle('primary', v==='up'); b1d.classList.toggle('primary', v==='dn'); render(); } + function setI2(v){ I2 = v; b2u.classList.toggle('primary', v==='up'); b2d.classList.toggle('primary', v==='dn'); render(); } + + function render(){ + const W = 480, H = 280; + let g = ''; + g += ''; + g += 'Два параллельных проводника'; + + // Два вертикальных провода + const x1 = 170, x2 = 310; + const yTop = 50, yBot = 230; + g += ''; + g += ''; + + // Стрелки токов + if(I1 === 'up'){ + g += PHYS.drawArrow(x1, yBot-20, x1, yTop+20, '#dc2626', 3, 12); + g += 'I₁ ↑'; + } else { + g += PHYS.drawArrow(x1, yTop+20, x1, yBot-20, '#dc2626', 3, 12); + g += 'I₁ ↓'; + } + if(I2 === 'up'){ + g += PHYS.drawArrow(x2, yBot-20, x2, yTop+20, '#dc2626', 3, 12); + g += 'I₂ ↑'; + } else { + g += PHYS.drawArrow(x2, yTop+20, x2, yBot-20, '#dc2626', 3, 12); + g += 'I₂ ↓'; + } + + // Силы взаимодействия + const sameDir = (I1 === I2); + const fY = 140; + if(sameDir){ + // Притяжение: стрелки направлены друг к другу + g += PHYS.drawArrow(x1+8, fY, x1+58, fY, '#7c3aed', 3, 12); + g += PHYS.drawArrow(x2-8, fY, x2-58, fY, '#7c3aed', 3, 12); + g += 'Притяжение'; + g += 'F'; + g += 'F'; + } else { + // Отталкивание: стрелки направлены в стороны + g += PHYS.drawArrow(x1+8, fY, x1-42, fY, '#0ea5e9', 3, 12); + g += PHYS.drawArrow(x2-8, fY, x2+42, fY, '#0ea5e9', 3, 12); + g += 'Отталкивание'; + g += 'F'; + g += 'F'; + } + + svg.innerHTML = g; + + let txt = ''; + if(sameDir){ + txt = 'Токи параллельны (в одну сторону) → проводники притягиваются.'; + } else { + txt = 'Токи антипараллельны (в разные стороны) → проводники отталкиваются.'; + } + out.innerHTML = txt; + + seen.add(I1+I2); + if(!_done && seen.size >= 4){ _done = true; addXp(10, 'p27-iv2'); bumpProgress('p27', 15); } + } + + b1u.addEventListener('click', () => setI1('up')); + b1d.addEventListener('click', () => setI1('dn')); + b2u.addEventListener('click', () => setI2('up')); + b2d.addEventListener('click', () => setI2('dn')); + render(); + })(); + + /* IV3 — Откуда берётся поле? */ + (function(){ + const OPTS = ['От постоянных магнитов','От движущихся зарядов','Не существует']; + const Q = [ + { q:'Возле железного магнита (на холодильнике).', ans:0, why:'Постоянный магнит — источник магнитного поля.' }, + { q:'Вокруг проводника, по которому течёт ток.', ans:1, why:'Ток — это движущиеся заряды, создающие поле.' }, + { q:'Возле неподвижного заряженного шарика в вакууме.', ans:2, why:'Неподвижный заряд создаёт только электрическое поле, магнитного нет.' }, + { q:'Вокруг Земли (геомагнитное поле).', ans:1, why:'Поле создаётся токами в жидком металлическом ядре Земли.' }, + { q:'Возле сверхпроводящего кольца без тока.', ans:2, why:'Без тока — нет движущихся зарядов, значит, нет и магнитного поля.' }, + { q:'Возле летящего на большой скорости протона.', ans:1, why:'Движущийся заряд — то же, что ток, и тоже создаёт магнитное поле.' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p27-iv3-q'); + const oEl = document.getElementById('p27-iv3-opts'); + const fb = document.getElementById('p27-iv3-fb'); + const iEl = document.getElementById('p27-iv3-i'); + const sEl = document.getElementById('p27-iv3-s'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + oEl.innerHTML = ''; + if(score === Q.length){ addXp(15, 'p27-iv3'); bumpProgress('p27', 25); } + else if(score >= 4){ addXp(8, 'p27-iv3'); bumpProgress('p27', 15); } + return; + } + iEl.textContent = (i+1); + sEl.textContent = score; + qEl.innerHTML = Q[i].q; + oEl.innerHTML = OPTS.map((t, k) => '').join(''); + fb.style.display = 'none'; + renderMath(qEl); + oEl.querySelectorAll('button').forEach(b => { + b.addEventListener('click', () => { + const v = +b.dataset.v; + if(v === Q[i].ans){ score++; feedback(fb, true, '✓ Верно! ' + Q[i].why + ' Дальше ▶'); } + else feedback(fb, false, '✗ Верно: ' + OPTS[Q[i].ans] + '. ' + Q[i].why + ' Дальше ▶'); + sEl.textContent = score; + oEl.querySelectorAll('button').forEach(x => x.disabled = true); + i++; + setTimeout(show, 1800); + }); + }); + } + document.getElementById('p27-iv3-restart').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + + /* IV4 — Тренажёр */ + (function(){ + const Q = [ + { q:'Магнитное поле создают:', opts:['любые заряды','движущиеся заряды','масса тел'], ans:1, why:'Только движущиеся заряды создают магнитное поле.' }, + { q:'Кто в 1820 году открыл связь электричества и магнетизма?', opts:['Ньютон','Эрстед','Фарадей'], ans:1, why:'Эрстед заметил отклонение магнитной стрелки возле проводника с током.' }, + { q:'Два параллельных проводника, токи в одну сторону. Что происходит?', opts:['притягиваются','отталкиваются','ничего'], ans:0, why:'Параллельные токи — притягиваются (опыт Ампера).' }, + { q:'Два проводника, токи в противоположных направлениях:', opts:['притягиваются','отталкиваются','ничего'], ans:1, why:'Антипараллельные токи — отталкиваются.' }, + { q:'Вектор магнитной индукции обозначается:', opts:['$\\vec{E}$','$\\vec{B}$','$\\vec{F}$'], ans:1, why:'$\\vec{E}$ — электрическое поле, $\\vec{F}$ — сила, $\\vec{B}$ — магнитная индукция.' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p27-iv4-q'); + const oEl = document.getElementById('p27-iv4-opts'); + const fb = document.getElementById('p27-iv4-fb'); + const iEl = document.getElementById('p27-iv4-i'); + const sEl = document.getElementById('p27-iv4-s'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + oEl.innerHTML = ''; + if(score === Q.length){ addXp(15, 'p27-iv4'); bumpProgress('p27', 25); } + else if(score >= 3){ addXp(8, 'p27-iv4'); bumpProgress('p27', 15); } + return; + } + iEl.textContent = (i+1); + sEl.textContent = score; + qEl.innerHTML = Q[i].q; + oEl.innerHTML = Q[i].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 === Q[i].ans){ score++; feedback(fb, true, '✓ Верно! ' + Q[i].why + ' Дальше ▶'); } + else feedback(fb, false, '✗ Верно: ' + Q[i].opts[Q[i].ans] + '. ' + Q[i].why + ' Дальше ▶'); + sEl.textContent = score; + oEl.querySelectorAll('button').forEach(x => x.disabled = true); + i++; + setTimeout(show, 1800); + }); + }); + } + document.getElementById('p27-iv4-restart').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + wireReadBtn('p27'); } function build_p28(){ const box = document.getElementById('p28-body'); let html = ''; - html += makeCard('theory', "Индукция магнитного поля", "§28", ` -

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

-

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

-

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

+ + /* THEORY 1 — Магнитная индукция */ + html += makeCard('theory', "Магнитная индукция $\\vec{B}$", "§28", ` +

Магнитная индукция $\\vec{B}$ — векторная характеристика магнитного поля. Определяет силу, действующую на движущуюся заряженную частицу или на проводник с током.

+

Единица в СИ — Тесла (Тл):

+

$$[B] = 1\\text{ Тл} = \\dfrac{1\\text{ Н}}{1\\text{ А}\\cdot 1\\text{ м}} = \\dfrac{1\\text{ кг}}{1\\text{ А}\\cdot 1\\text{ с}^2}$$

+

Порядки величин:

+
    +
  • Магнитное поле Земли: $\\sim 5\\cdot 10^{-5}$ Тл.
  • +
  • Магнит холодильника: $\\sim 5\\cdot 10^{-3}$ Тл.
  • +
  • Сильный электромагнит: $\\sim 1-2$ Тл.
  • +
  • Сверхпроводящий магнит МРТ: $\\sim 3$ Тл и выше.
  • +
+

Направление $\\vec{B}$: + в постоянном магните снаружи — от северного (N) к южному (S); внутри магнита — от S к N. Линии замкнуты!

`); + + /* THEORY 2 — Правило буравчика */ + html += makeCard('rule', "Правило буравчика (правой руки)", "§28", ` +

Правило буравчика определяет направление $\\vec{B}$ возле проводника с током.

+

Возьми проводник правой рукой так, чтобы большой палец указывал по направлению тока. Остальные пальцы покажут направление $\\vec{B}$ (закручивается вокруг проводника).

+

Альтернатива: представь штопор (буравчик), который вкручивается в направлении тока — ручка вращается в направлении $\\vec{B}$.

+

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

+

Свойства линий индукции:

+
    +
  1. Замкнуты — главное отличие от электрических линий (магнитных монополей не существует).
  2. +
  3. Не пересекаются.
  4. +
  5. Густота линий $\\propto B$ (чем гуще, тем сильнее поле).
  6. +
  7. Направлены от N к S снаружи магнита.
  8. +
+ `); + + /* THEORY 3 — Поле кругового тока и соленоида */ + html += makeCard('example', "Поле кругового тока и соленоида", "§28", ` +

Поле кругового тока (витка): линии индукции образуют картину, похожую на поле магнитного диполя. Виток ведёт себя как маленький магнит:

+
    +
  • Одна сторона — N (магнитные линии выходят).
  • +
  • Другая сторона — S (входят).
  • +
+

Соленоид — катушка из многих витков. Поле внутри:

+
    +
  • Почти однородное (одинаковое по величине и направлению).
  • +
  • Очень похоже на поле в постоянном магните.
  • +
  • Направление — правило правой руки для тока в витках.
  • +
+

Модуль индукции внутри длинного соленоида:

+

$$B = \\dfrac{\\mu_0 N I}{L}$$

+

где $N$ — число витков, $L$ — длина соленоида, $\\mu_0 = 4\\pi \\cdot 10^{-7}$ Тл·м/А — магнитная постоянная.

+

Электромагнит — соленоид + железный сердечник. Сердечник усиливает поле в сотни и тысячи раз. Применение: моторы, реле, динамики, МРТ-сканеры, ускорители частиц, левитирующие поезда.

+ `); + + /* INTERACTIVE 1 — Правило буравчика */ + html += `
+
ИНТЕРАКТИВ 1
Правило буравчика: $\\vec{B}$ возле проводника
+
Переключай направление тока. Смотри, как меняется направление линий $\\vec{B}$ (вид сверху, ток идёт сквозь экран).
+
+ + +
+
+ +
+
+
`; + + /* INTERACTIVE 2 — Соленоид */ + html += `
+
ИНТЕРАКТИВ 2
Магнитное поле соленоида
+
Меняй ток $I$ и число витков $N$. Длина соленоида $L = 0{,}1$ м. Формула: $B = \\mu_0 N I / L$.
+
+ + +
+
+ +
+
+
`; + + /* INTERACTIVE 3 — Куда направлено B? */ + html += `
+
ИНТЕРАКТИВ 3
Куда направлено $\\vec{B}$?
+
Выбери, как определяется (или существует ли вообще) магнитное поле в каждой ситуации.
+
Задача 1 / 6Очки: 0 / 6
+
+
+ +
+
`; + + /* INTERACTIVE 4 — Тренажёр */ + html += `
+
ИНТЕРАКТИВ 4
Тренажёр: индукция магнитного поля
+
5 вопросов на ключевые понятия §28.
+
Задача 1 / 5Очки: 0 / 5
+
+
+ +
+
`; + html += secNav('p27', 'p29'); html += readButton('p28'); + box.innerHTML = html; renderMath(box); + + /* IV1 — Правило буравчика */ + (function(){ + const svg = document.getElementById('p28-iv1-svg'); + const out = document.getElementById('p28-iv1-out-txt'); + const bOut = document.getElementById('p28-iv1-out'); + const bIn = document.getElementById('p28-iv1-in'); + const seen = new Set(); + let _done = false; + let dir = 'out'; // 'out' or 'in' + + function setDir(d){ + dir = d; + bOut.classList.toggle('primary', d==='out'); + bIn.classList.toggle('primary', d==='in'); + render(); + seen.add(d); + if(!_done && seen.size >= 2){ _done = true; addXp(10, 'p28-iv1'); bumpProgress('p28', 15); } + } + + function render(){ + const W = 480, H = 280; + let g = ''; + g += ''; + g += 'Поле прямого тока (вид вдоль проводника)'; + + // Центральный проводник + const cx = 240, cy = 150; + const wireColor = '#0f172a'; + + // Концентрические окружности — линии B + const rings = [40, 70, 100, 130]; + const Bcolor = '#7c3aed'; + rings.forEach(r => { + g += ''; + }); + + // Стрелки касательные к окружностям — направление B по правилу буравчика + // При токе ИЗ экрана (•) — B по часовой стрелке снизу? Нет: правая рука, большой палец на нас (out), пальцы — против часовой стрелки. + // Считаю: ток OUT (на наблюдателя) → B против часовой стрелки. + // ток IN (от наблюдателя) → B по часовой стрелке. + const ccw = (dir === 'out'); + const arrowAngles = [0, Math.PI/2, Math.PI, 3*Math.PI/2]; // 4 стрелки на каждой окружности + rings.forEach((r, idx) => { + if(idx % 2 !== 0) return; // только на двух окружностях + arrowAngles.forEach((a, k) => { + const ax = cx + r * Math.cos(a); + const ay = cy + r * Math.sin(a); + // Касательный вектор + const tx = -Math.sin(a) * (ccw ? -1 : 1); + const ty = Math.cos(a) * (ccw ? -1 : 1); + const len = 16; + const x2 = ax + tx * len; + const y2 = ay + ty * len; + g += PHYS.drawArrow(ax, ay, x2, y2, Bcolor, 2, 8); + }); + }); + + // Проводник в центре — крест или точка + g += ''; + if(dir === 'in'){ + // Крест × + g += ''; + g += ''; + } else { + // Точка • + g += ''; + } + + // Подпись + const lbl = dir === 'out' ? 'Ток I из экрана (•)' : 'Ток I в экран (×)'; + g += ''+lbl+''; + // Подпись B + g += 'B'; + + svg.innerHTML = g; + + let txt = ''; + if(dir === 'out'){ + txt = 'Ток направлен ИЗ экрана (на тебя). Правило буравчика: большой палец на тебя → линии $\\vec{B}$ против часовой стрелки.'; + } else { + txt = 'Ток направлен В экран (от тебя). Правило буравчика: большой палец от тебя → линии $\\vec{B}$ по часовой стрелке.'; + } + out.innerHTML = txt; + renderMath(out); + } + + bOut.addEventListener('click', () => setDir('out')); + bIn.addEventListener('click', () => setDir('in')); + setDir('out'); + })(); + + /* IV2 — Соленоид */ + (function(){ + const svg = document.getElementById('p28-iv2-svg'); + const out = document.getElementById('p28-iv2-out'); + const IS = document.getElementById('p28-iv2-I'); + const NS = document.getElementById('p28-iv2-N'); + const IL = document.getElementById('p28-iv2-IL'); + const NL = document.getElementById('p28-iv2-NL'); + const seen = new Set(); + let _done = false; + + function render(){ + const I = +IS.value, N = +NS.value; + IL.textContent = I.toFixed(1); + NL.textContent = N.toFixed(0); + const L = 0.1; // м + const mu0 = 4 * Math.PI * 1e-7; + const B = mu0 * N * I / L; + + const W = 480, H = 280; + let g = ''; + g += ''; + g += 'Соленоид: однородное поле внутри'; + + // Соленоид — нарисуем как ряд овалов (витков) горизонтально + const cy = 145; + const xL = 90, xR = 390; + const numVisible = Math.min(20, Math.max(5, Math.round(N/5))); + const stepX = (xR - xL) / (numVisible - 1); + const Bcolor = '#7c3aed'; + + // Корпус соленоида + g += ''; + + // Витки как петли + for(let i = 0; i < numVisible; i++){ + const x = xL + i * stepX; + g += ''; + // Точка на верхушке (ток на нас) или крест внизу (от нас) — упрощённо + g += ''; + // Крест внизу + g += ''; + g += ''; + } + + // Внутреннее поле — стрелки слева направо (зависит от направления намотки, считаем что N справа) + if(I > 0.01){ + const nArrows = 5; + for(let k = 0; k < nArrows; k++){ + const ax = xL + 30 + k * ((xR-xL-60)/(nArrows-1)); + const arrowLen = Math.min(50, 20 + (B * 1e3) * 8); + g += PHYS.drawArrow(ax - arrowLen/2, cy, ax + arrowLen/2, cy, Bcolor, 2.5, 10); + } + // Подписи полюсов + g += 'S'; + g += 'N'; + + // Линии поля снаружи (упрощённо — две дуги) + g += ''; + g += ''; + } else { + g += 'I = 0 → поля нет'; + } + + // Метка B + if(I > 0.01) g += 'B'; + + svg.innerHTML = g; + + out.innerHTML = '$B = \\dfrac{\\mu_0 N I}{L} = \\dfrac{4\\pi\\cdot 10^{-7}\\cdot '+N.toFixed(0)+'\\cdot '+I.toFixed(2)+'}{0{,}1} = '+B.toExponential(2).replace('e','\\cdot 10^{').replace('+','')+'}$ Тл'; + renderMath(out); + + seen.add(I.toFixed(1)+':'+N.toFixed(0)); + if(!_done && seen.size >= 4){ _done = true; addXp(10, 'p28-iv2'); bumpProgress('p28', 15); } + } + + IS.addEventListener('input', render); + NS.addEventListener('input', render); + render(); + })(); + + /* IV3 — Куда направлено B? */ + (function(){ + const OPTS = ['От N к S','По правилу буравчика','От заряда','$\\vec{B} = 0$']; + const Q = [ + { q:'Снаружи постоянного магнита (вне корпуса).', ans:0, why:'Снаружи магнита линии $\\vec{B}$ идут от северного полюса к южному.' }, + { q:'Возле прямого проводника с током.', ans:1, why:'Используем правило правой руки (буравчика).' }, + { q:'Внутри сверхпроводящего кольца без тока.', ans:3, why:'Нет тока — нет источника поля, $\\vec{B} = 0$.' }, + { q:'В вакууме вдали от любых источников.', ans:3, why:'Без источников $\\vec{B} = 0$.' }, + { q:'Внутри соленоида с током.', ans:1, why:'Направление определяется правилом правой руки для тока в витках.' }, + { q:'В точке посередине между двумя одинаковыми параллельными токами одного направления.', ans:3, why:'Поля от двух проводников в этой точке направлены противоположно и взаимно компенсируются.' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p28-iv3-q'); + const oEl = document.getElementById('p28-iv3-opts'); + const fb = document.getElementById('p28-iv3-fb'); + const iEl = document.getElementById('p28-iv3-i'); + const sEl = document.getElementById('p28-iv3-s'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + oEl.innerHTML = ''; + if(score === Q.length){ addXp(15, 'p28-iv3'); bumpProgress('p28', 25); } + else if(score >= 4){ addXp(8, 'p28-iv3'); bumpProgress('p28', 15); } + return; + } + iEl.textContent = (i+1); + sEl.textContent = score; + qEl.innerHTML = Q[i].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 === Q[i].ans){ score++; feedback(fb, true, '✓ Верно! ' + Q[i].why + ' Дальше ▶'); } + else feedback(fb, false, '✗ Верно: ' + OPTS[Q[i].ans] + '. ' + Q[i].why + ' Дальше ▶'); + sEl.textContent = score; + oEl.querySelectorAll('button').forEach(x => x.disabled = true); + i++; + setTimeout(show, 1800); + }); + }); + } + document.getElementById('p28-iv3-restart').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + + /* IV4 — Тренажёр */ + (function(){ + const Q = [ + { q:'Единица измерения магнитной индукции в СИ:', opts:['Тесла (Тл)','Вольт (В)','Ампер (А)'], ans:0, why:'$1$ Тл $= 1$ Н/(А·м).' }, + { q:'Магнитное поле Земли по порядку величины (в Тл):', opts:['$5\\cdot 10^{-5}$','$5\\cdot 10^{-2}$','$5\\cdot 10^{1}$'], ans:0, why:'Геомагнитное поле слабое: $\\sim 5\\cdot 10^{-5}$ Тл.' }, + { q:'Направление $\\vec{B}$ возле прямого проводника находят:', opts:['по закону Ома','по правилу буравчика','по второму закону Ньютона'], ans:1, why:'Правило правой руки (буравчика): большой палец — по току, пальцы — по $\\vec{B}$.' }, + { q:'Коэффициент $\\mu_0$ в формуле $B = \\mu_0 N I / L$ равен:', opts:['$4\\pi\\cdot 10^{-7}$ Тл·м/А','$8{,}85\\cdot 10^{-12}$ Ф/м','$9\\cdot 10^{9}$ Н·м²/Кл²'], ans:0, why:'$\\mu_0 = 4\\pi\\cdot 10^{-7}$ Тл·м/А — магнитная постоянная.' }, + { q:'Линии магнитной индукции замкнуты, потому что:', opts:['поле слабое','магнитных монополей не существует','так удобно рисовать'], ans:1, why:'В природе нет отдельных «северных» или «южных» зарядов, поэтому линии $\\vec{B}$ всегда замкнуты.' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p28-iv4-q'); + const oEl = document.getElementById('p28-iv4-opts'); + const fb = document.getElementById('p28-iv4-fb'); + const iEl = document.getElementById('p28-iv4-i'); + const sEl = document.getElementById('p28-iv4-s'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + oEl.innerHTML = ''; + if(score === Q.length){ addXp(15, 'p28-iv4'); bumpProgress('p28', 25); } + else if(score >= 3){ addXp(8, 'p28-iv4'); bumpProgress('p28', 15); } + return; + } + iEl.textContent = (i+1); + sEl.textContent = score; + qEl.innerHTML = Q[i].q; + oEl.innerHTML = Q[i].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 === Q[i].ans){ score++; feedback(fb, true, '✓ Верно! ' + Q[i].why + ' Дальше ▶'); } + else feedback(fb, false, '✗ Верно: ' + Q[i].opts[Q[i].ans] + '. ' + Q[i].why + ' Дальше ▶'); + sEl.textContent = score; + oEl.querySelectorAll('button').forEach(x => x.disabled = true); + i++; + setTimeout(show, 1800); + }); + }); + } + document.getElementById('p28-iv4-restart').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + wireReadBtn('p28'); }