diff --git a/frontend/textbooks/physics_10_ch6.html b/frontend/textbooks/physics_10_ch6.html index d62db79..8ce6010 100644 --- a/frontend/textbooks/physics_10_ch6.html +++ b/frontend/textbooks/physics_10_ch6.html @@ -634,34 +634,779 @@ function wireReadBtn(paraId){ function build_p34(){ const box = document.getElementById('p34-body'); let html = ''; - html += makeCard('theory', "Ток в металлах. Сверхпроводимость", "§34", ` -

Ток в металлах. Сверхпроводимость — этот параграф в разработке (Phase 1+).

-

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

-

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

+ + /* THEORY 1 — Природа тока в металлах */ + html += makeCard('theory', "Природа тока в металлах", "§34", ` +

В металлах свободными носителями заряда являются электроны проводимости — внешние электроны атомов, не связанные с конкретным узлом решётки.

+

Концентрация свободных электронов огромна: $n \\sim 10^{29}$ в м³.

+

Кристаллическая решётка металла состоит из положительных ионов в узлах. Между ними движется «электронный газ» — почти свободные электроны.

+

Без электрического поля: электроны движутся хаотически со скоростями $\\sim 10^5 - 10^6$ м/с. Средняя скорость направленного движения равна нулю — тока нет.

+

В электрическом поле $\\vec{E}$: на хаотическое движение накладывается дрейфовое движение в сторону, противоположную $\\vec{E}$ (так как заряд электрона отрицательный). Средняя дрейфовая скорость очень мала: $v_{др} \\sim 10^{-3} - 10^{-5}$ м/с.

+

Парадокс. Дрейф электронов очень медленный, но ток в проводнике включается «мгновенно» — электрическое поле в проводнике устанавливается со скоростью света $c \\approx 3\\cdot 10^8$ м/с.

`); + + /* THEORY 2 — Сопротивление и температура */ + html += makeCard('rule', "Сопротивление и зависимость от температуры", "§34", ` +

Сопротивление однородного проводника:

+

$$R = \\rho\\,\\dfrac{L}{S}$$

+ +

Зависимость от температуры для металлов — линейная:

+

$$\\rho(t) = \\rho_0\\,(1 + \\alpha t)$$

+

где $\\rho_0$ — удельное сопротивление при $0°$C, $t$ — температура в $°$C, $\\alpha$ — температурный коэффициент сопротивления (К$^{-1}$).

+

Эталонные значения $\\alpha$:

+ +

С нагревом сопротивление металлов увеличивается: атомы решётки сильнее колеблются и чаще «мешают» электронам дрейфовать.

+ `); + + /* THEORY 3 — Сверхпроводимость */ + html += makeCard('example', "Сверхпроводимость", "§34", ` +

Сверхпроводимость — явление полного исчезновения сопротивления у некоторых металлов при температурах ниже критической $T_c$.

+

Открыта в 1911 году для ртути ($T_c = 4{,}2$ К — близко к абсолютному нулю).

+

Критические температуры:

+ +

В сверхпроводнике ток может циркулировать бесконечно долго без потерь.

+

Применение:

+ + `); + + /* INTERACTIVE 1 — Симуляция дрейфа электронов */ + html += `
+
ИНТЕРАКТИВ 1
Симуляция дрейфа электронов
+
При $U = 0$ — электроны движутся хаотически, тока нет. При $U > 0$ — на хаос накладывается медленный дрейф в сторону, противоположную $\\vec{E}$. Дрейф $\\Rightarrow$ ток.
+
+ +
+
+ +
+
+
`; + + /* INTERACTIVE 2 — Температурная зависимость */ + html += `
+
ИНТЕРАКТИВ 2
Сопротивление: график $R(t)$
+
Для металлов: $R(t) = R_0(1 + \\alpha t)$ — прямая линия. Сверхпроводники имеют скачок до $R = 0$ при $T < T_c$.
+
+ + +
+
+ +
+
+
`; + + /* INTERACTIVE 3 — Носители заряда в разных средах */ + html += `
+
ИНТЕРАКТИВ 3
Кто переносит ток?
+
В каждой среде свои носители заряда — определи правильно.
+
Задача 1 / 6Очки: 0 / 6
+
+
+
+
+
`; + + /* INTERACTIVE 4 — Тренажёр сопротивления */ + html += `
+
ИНТЕРАКТИВ 4
Тренажёр: сопротивление и сверхпроводимость
+
5 задач. Допуск $\\pm 5\\%$. Формулы: $R = \\rho L/S$, $R(t) = R_0(1+\\alpha t)$.
+
Задача 1 / 5Очки: 0 / 5
+
+
+ + +
+
+
+
`; + html += secNav(null, 'p35'); html += readButton('p34'); + box.innerHTML = html; renderMath(box); + + /* IV1 — Дрейф электронов */ + (function(){ + const svg = document.getElementById('p34-iv1-svg'); + const out = document.getElementById('p34-iv1-out'); + const UI = document.getElementById('p34-iv1-U'), UL = document.getElementById('p34-iv1-UL'); + const W = 380, H = 240; + // Решётка ионов: сетка + const ions = []; + for(let r=0; r<4; r++){ + for(let c=0; c<7; c++){ + ions.push({x: 40 + c*48, y: 50 + r*48}); + } + } + // Электроны + const N = 22; + const els = []; + for(let k=0; k0) + els.forEach(e => { + // случайные толчки от ионов + e.vx += (Math.random()-0.5)*0.45; + e.vy += (Math.random()-0.5)*0.45; + // ограничение + const sp = Math.hypot(e.vx, e.vy); + if(sp > 2.4){ e.vx *= 2.4/sp; e.vy *= 2.4/sp; } + e.x += e.vx + drift; + e.y += e.vy; + // отскок от границ + if(e.x < 16){ e.x = 364; } + if(e.x > 364){ e.x = 16; } + if(e.y < 16){ e.y = 16; e.vy = Math.abs(e.vy); } + if(e.y > 220){ e.y = 220; e.vy = -Math.abs(e.vy); } + }); + draw(); + rafId = requestAnimationFrame(step); + } + + function draw(){ + const U = +UI.value; + UL.textContent = U.toFixed(1); + let g = ''; + g += ''; + // рамка проводника + g += ''; + // подпись E + if(U > 0){ + g += PHYS.drawArrow(40, 8, 90, 8, '#dc2626', 2, 8); + g += 'E'; + } + // ионы (большие красные +) + ions.forEach(io => { + g += ''; + g += '+'; + }); + // электроны + els.forEach(e => { + g += ''; + // вектор скорости + if(U > 0){ + const sx = e.x, sy = e.y; + const ex = sx + 6, ey = sy; + g += ''; + } + }); + svg.innerHTML = g; + + const vDrift = U > 0 ? (U * 0.0002).toFixed(4) : '0'; + out.innerHTML = U === 0 + ? 'При $U = 0$ электроны движутся хаотически — тока нет.' + : '$U = '+U.toFixed(1)+'$ В $\\Rightarrow$ дрейф электронов вправо, $v_{др} \\sim '+vDrift+'$ м/с (примерная оценка).'; + renderMath(out); + } + + UI.addEventListener('input', ()=>{ + configsSeen.add(UI.value); + if(!_done && configsSeen.size >= 4){ _done = true; addXp(15, 'p34-iv1'); bumpProgress('p34', 20); } + }); + draw(); + rafId = requestAnimationFrame(step); + })(); + + /* IV2 — R(t) график */ + (function(){ + const svg = document.getElementById('p34-iv2-svg'); + const out = document.getElementById('p34-iv2-out'); + const MI = document.getElementById('p34-iv2-M'), ML = document.getElementById('p34-iv2-ML'); + const RI = document.getElementById('p34-iv2-R'), RL = document.getElementById('p34-iv2-RL'); + const MATS = [ + { name:'Медь', alpha:0.0043, color:'#b45309', sc:false }, + { name:'Алюминий', alpha:0.0042, color:'#64748b', sc:false }, + { name:'Железо', alpha:0.0066, color:'#374151', sc:false }, + { name:'Свинец (сверхпр. при $T<7{,}2$ К)', alpha:0.0042, color:'#7c3aed', sc:true, Tc:7.2 } + ]; + let switched = new Set(), _done = false; + + function draw(){ + const m = MATS[Math.min(3, Math.max(0, +MI.value))]; + const R0 = +RI.value; + ML.innerHTML = m.name; + RL.textContent = R0.toFixed(1); + renderMath(MI.parentNode); + + // Оси: t от -50 до 500 °C; R от 0 до примерно R0*(1+alpha*500) + const Rmax = R0 * (1 + m.alpha * 500) * 1.1; + const Wd = 380, Hd = 260, pad = 38; + const tmin = -50, tmax = 500; + const ux = (Wd - 2*pad) / (tmax - tmin); + const uy = (Hd - 2*pad) / (Rmax - 0); + const toX = t => pad + (t - tmin) * ux; + const toY = R => Hd - pad - R * uy; + + let g = ''; + g += ''; + // сетка + g += ''; + for(let t=0; t<=500; t+=100){ + const x = toX(t); + g += ''; + } + g += ''; + // оси + g += ''; + g += ''; + g += 't, °C'; + g += 'R, Ом'; + + // tick labels + g += ''; + for(let t=0; t<=500; t+=100){ + g += ''+t+''; + } + g += ''+R0.toFixed(1)+''; + g += ''; + + // Линия R(t) + let path = ''; + for(let i=0; i<=80; i++){ + const t = tmin + (tmax - tmin)*i/80; + const Rv = R0 * (1 + m.alpha * t); + path += (i===0 ? 'M' : 'L') + toX(t).toFixed(1) + ',' + toY(Math.max(0,Rv)).toFixed(1) + ' '; + } + g += ''; + + // Если сверхпроводник — вертикальный скачок до 0 при T=Tc + if(m.sc){ + // Tc в °C + const tcC = m.Tc - 273.15; + // отметим линию + const xTc = toX(tcC); + if(xTc > pad && xTc < Wd - pad){ + g += ''; + g += 'T_c'; + } + g += 'Слева от $T_c$ — сверхпроводимость: $R = 0$'; + } + + // Точка R при t=100 + const t100 = 100; + const R100 = R0 * (1 + m.alpha * t100); + g += ''; + g += 'R(100°C) = '+R100.toFixed(2)+''; + + svg.innerHTML = g; + + out.innerHTML = '$\\alpha = '+m.alpha.toFixed(4)+'$ К$^{-1}$   $R(100°C) = '+R0.toFixed(2)+'\\cdot(1+'+m.alpha.toFixed(4)+'\\cdot 100) = '+R100.toFixed(3)+'$ Ом'; + renderMath(out); + } + + MI.addEventListener('input', ()=>{ + switched.add(MI.value); + draw(); + if(!_done && switched.size >= 3){ _done = true; addXp(15, 'p34-iv2'); bumpProgress('p34', 20); } + }); + RI.addEventListener('input', draw); + draw(); + })(); + + /* IV3 — Носители заряда */ + (function(){ + const OPTS = ['Электроны', 'Ионы', 'Электроны + ионы']; + const Q = [ + { q:'В металлах ток переносят…', ans:0, why:'Свободные электроны проводимости (~$10^{29}$ в м³). Ионы решётки неподвижны.' }, + { q:'В электролитах (раствор соли) ток переносят…', ans:1, why:'Положительные катионы и отрицательные анионы движутся к электродам.' }, + { q:'В газах при электрическом разряде ток переносят…', ans:2, why:'Электроны (ионизированные при разряде) и положительные ионы.' }, + { q:'В вакуумной электронной лампе ток переносят…', ans:0, why:'Только электроны, испускаемые горячим катодом (термоэлектронная эмиссия).' }, + { q:'В сверхпроводнике (металл при $Tбез сопротивления — куперовские пары не рассеиваются на решётке.' }, + { q:'В полупроводнике ток переносят…', ans:2, why:'Электроны проводимости и «дырки» (положительные носители) — оба типа.' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p34-iv3-q'); + const oEl = document.getElementById('p34-iv3-opts'); + const fb = document.getElementById('p34-iv3-fb'); + const iEl = document.getElementById('p34-iv3-i'); + const sEl = document.getElementById('p34-iv3-s'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + oEl.innerHTML = ''; + if(score === Q.length){ addXp(15, 'p34-iv3'); bumpProgress('p34', 25); } + else if(score >= 4){ addXp(8, 'p34-iv3'); bumpProgress('p34', 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, 1900); + }); + }); + } + document.getElementById('p34-iv3-restart').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + + /* IV4 — Тренажёр */ + (function(){ + const Q = [ + { q:'Медь: $\\rho = 1{,}7\\cdot 10^{-8}$ Ом·м. Провод $L = 10$ м, сечение $S = 1$ мм² $= 10^{-6}$ м². Найди $R$ (Ом).', ans:0.17, tol:0.01, why:'$R = \\rho L/S = 1{,}7\\cdot 10^{-8}\\cdot 10 / 10^{-6} = 0{,}17$ Ом.' }, + { q:'Медь: $R_0 = 1$ Ом при $0°$C, $\\alpha = 0{,}0043$ К$^{-1}$. Найди $R$ при $100°$C (Ом).', ans:1.43, tol:0.05, why:'$R = R_0(1 + \\alpha t) = 1\\cdot(1 + 0{,}0043\\cdot 100) = 1{,}43$ Ом.' }, + { q:'Сверхпроводимость — это явление, когда $R$… (1=максимально, 2=равно нулю, 3=пропорц. $T$). Введи номер.', ans:2, tol:0.1, why:'При $Tравно нулю.' }, + { q:'Первая критическая температура сверхпроводимости ртути (в кельвинах). Введи число.', ans:4.2, tol:0.3, why:'Камерлинг-Оннес, 1911: $T_c({Hg}) = 4{,}2$ К.' }, + { q:'Алюминий ($\\alpha = 0{,}0042$ К$^{-1}$). $R_0 = 5$ Ом при $0°$C. Найди $R$ при $50°$C (Ом).', ans:6.05, tol:0.2, why:'$R = 5(1 + 0{,}0042\\cdot 50) = 5\\cdot 1{,}21 = 6{,}05$ Ом.' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p34-iv4-q'); + const fb = document.getElementById('p34-iv4-fb'); + const iEl = document.getElementById('p34-iv4-i'); + const sEl = document.getElementById('p34-iv4-s'); + const inp = document.getElementById('p34-iv4-inp'); + const bGo = document.getElementById('p34-iv4-go'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + inp.disabled = true; bGo.disabled = true; + if(score === Q.length){ addXp(15, 'p34-iv4'); bumpProgress('p34', 25); } + else if(score >= 3){ addXp(8, 'p34-iv4'); bumpProgress('p34', 15); } + return; + } + iEl.textContent = (i+1); + sEl.textContent = score; + qEl.innerHTML = Q[i].q; + fb.style.display = 'none'; + inp.value = ''; inp.disabled = false; bGo.disabled = false; inp.focus(); + renderMath(qEl); + } + function check(){ + if(inp.disabled) return; + const v = parseFloat(inp.value.replace(',','.')); + if(!isFinite(v)){ feedback(fb, false, 'Введи число.'); return; } + const tol = Math.max(Q[i].tol, Math.abs(Q[i].ans)*0.05); + const ok = Math.abs(v - Q[i].ans) <= tol; + if(ok){ score++; feedback(fb, true, '✓ Верно! '+Q[i].why+' Дальше ▶'); } + else feedback(fb, false, '✗ Верно: '+Q[i].ans+'. '+Q[i].why+' Дальше ▶'); + sEl.textContent = score; + inp.disabled = true; bGo.disabled = true; + i++; + setTimeout(show, 1900); + } + bGo.addEventListener('click', check); + inp.addEventListener('keydown', e => { if(e.key==='Enter') check(); }); + document.getElementById('p34-iv4-restart').addEventListener('click', () => { i = 0; score = 0; inp.disabled=false; bGo.disabled=false; show(); }); + show(); + })(); + wireReadBtn('p34'); } function build_p35(){ const box = document.getElementById('p35-body'); let html = ''; - html += makeCard('theory', "Ток в электролитах", "§35", ` -

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

-

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

-

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

+ + /* THEORY 1 — Электролиты и ионная проводимость */ + html += makeCard('theory', "Электролиты и ионная проводимость", "§35", ` +

Электролиты — вещества, проводящие электрический ток в растворе или расплаве за счёт движения ионов:

+
    +
  • Растворы солей, кислот, щелочей в воде;
  • +
  • Расплавы солей.
  • +
+

В электролите присутствуют свободные ионы — продукт диссоциации молекул электролита:

+
    +
  • Катионы ($+$): Na$^+$, K$^+$, Cu$^{2+}$, Fe$^{2+}$, H$^+$ и др.;
  • +
  • Анионы ($-$): Cl$^-$, SO$_4^{2-}$, NO$_3^-$, OH$^-$ и др.
  • +
+

В электрическом поле ионы движутся к электродам:

+
    +
  • Катионы $(+)$ — к катоду $(-$ электрод);
  • +
  • Анионы $(-)$ — к аноду $(+$ электрод).
  • +
+

Главное отличие от металлов: в электролите переносится не только заряд, но и вещество — на электродах идут химические реакции. Это явление называется электролизом.

`); + + /* THEORY 2 — Законы Фарадея */ + html += makeCard('rule', "Законы Фарадея для электролиза", "§35", ` +

Первый закон Фарадея: масса вещества, выделившегося на электроде, прямо пропорциональна заряду, прошедшему через электролит:

+

$$m = k\\,I\\,t = k\\,q$$

+
    +
  • $m$ — масса вещества (кг);
  • +
  • $I$ — сила тока (А);
  • +
  • $t$ — время (с);
  • +
  • $k$ — электрохимический эквивалент вещества (кг/Кл).
  • +
+

Второй закон Фарадея: электрохимический эквивалент пропорционален молярной массе и обратно пропорционален валентности:

+

$$k = \\dfrac{M}{F\\,n}$$

+
    +
  • $M$ — молярная масса (кг/моль);
  • +
  • $n$ — валентность иона;
  • +
  • $F = N_A\\,e \\approx 96\\,500$ Кл/моль — постоянная Фарадея.
  • +
+

Объединённый закон Фарадея:

+

$$m = \\dfrac{M}{F\\,n}\\,I\\,t$$

+

Физический смысл $F$: это заряд $\\sim 1$ моль однозарядных ионов, $F = N_A\\,e \\approx 6{,}022\\cdot 10^{23}\\cdot 1{,}6\\cdot 10^{-19} \\approx 96\\,500$ Кл.

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

Промышленные применения:

+
    +
  • Электролиз алюминия — основной способ его получения из боксита. Огромные ванны рядом с электростанциями.
  • +
  • Электрометаллургия меди: получение чистой меди электролизом раствора CuSO$_4$.
  • +
  • Производство хлора и каустической соды — электролиз раствора NaCl.
  • +
  • Гальванопластика: точные металлические копии скульптур, форм для печати — осаждение металла на форму.
  • +
  • Гальваностегия: декоративные и защитные покрытия — хромирование, золочение, никелирование.
  • +
  • Зарядка аккумуляторов — процесс, обратный разрядке (тоже электролиз).
  • +
+

Пример расчёта. Сколько меди ($M = 64$ г/моль, $n = 2$) выделится на катоде при $I = 5$ А за $t = 1$ ч?

+

$m = \\dfrac{M I t}{F n} = \\dfrac{0{,}064 \\cdot 5 \\cdot 3600}{96\\,500 \\cdot 2} \\approx 5{,}97$ г

+

Серебро $(M = 108$ г/моль, $n = 1)$ при тех же условиях:

+

$m = \\dfrac{0{,}108 \\cdot 5 \\cdot 3600}{96\\,500 \\cdot 1} \\approx 20{,}15$ г — почти в 4 раза больше!

+ `); + + /* INTERACTIVE 1 — Симуляция электролиза */ + html += `
+
ИНТЕРАКТИВ 1
Симуляция электролиза
+
Положительные катионы (красные) движутся к катоду (слева, $-$). Отрицательные анионы (синие) — к аноду (справа, $+$). Скорость пропорциональна току $I$.
+
+ +
+
+ +
+
+
`; + + /* INTERACTIVE 2 — Калькулятор электролиза */ + html += `
+
ИНТЕРАКТИВ 2
Калькулятор массы вещества при электролизе
+
Формула: $m = \\dfrac{M\\,I\\,t}{F\\,n}$, $F = 96\\,500$ Кл/моль.
+
+ + + +
+
+
+
`; + + /* INTERACTIVE 3 — Куда движется ион? */ + html += `
+
ИНТЕРАКТИВ 3
Куда движется ион?
+
Катионы $(+)$ → к катоду $(-)$. Анионы $(-)$ → к аноду $(+)$.
+
Задача 1 / 6Очки: 0 / 6
+
+
+ +
+
`; + + /* INTERACTIVE 4 — Тренажёр электролиза */ + html += `
+
ИНТЕРАКТИВ 4
Тренажёр: электролиз
+
5 задач. $F = 96\\,500$ Кл/моль. Допуск $\\pm 5\\%$.
+
Задача 1 / 5Очки: 0 / 5
+
+
+ + +
+ +
+
`; + html += secNav('p34', 'p36'); html += readButton('p35'); + box.innerHTML = html; renderMath(box); + + /* IV1 — Симуляция электролиза */ + (function(){ + const svg = document.getElementById('p35-iv1-svg'); + const out = document.getElementById('p35-iv1-out'); + const II = document.getElementById('p35-iv1-I'), IL = document.getElementById('p35-iv1-IL'); + const W = 380, H = 280; + // Ионы: красные катионы (+) и синие анионы (-) + const NCat = 12, NAn = 12; + const cats = [], ans = []; + for(let k=0; k { + p.x -= v; // катионы влево (к катоду) + p.vy += (Math.random()-0.5)*0.4; + if(Math.abs(p.vy) > 1.4) p.vy *= 0.7; + p.y += p.vy; + if(p.x < 75){ p.x = 295; } + if(p.y < 80){ p.y = 80; p.vy = Math.abs(p.vy); } + if(p.y > 240){ p.y = 240; p.vy = -Math.abs(p.vy); } + }); + ans.forEach(p => { + p.x += v; // анионы вправо (к аноду) + p.vy += (Math.random()-0.5)*0.4; + if(Math.abs(p.vy) > 1.4) p.vy *= 0.7; + p.y += p.vy; + if(p.x > 305){ p.x = 85; } + if(p.y < 80){ p.y = 80; p.vy = Math.abs(p.vy); } + if(p.y > 240){ p.y = 240; p.vy = -Math.abs(p.vy); } + }); + draw(); + rafId = requestAnimationFrame(step); + } + + function draw(){ + const I = +II.value; + IL.textContent = I.toFixed(1); + let g = ''; + g += ''; + // ванна с электролитом + g += ''; + g += 'Электролит (раствор)'; + // катод (слева, минус) + g += ''; + g += 'К ('+'−'+')'; + // анод (справа, плюс) + g += ''; + g += 'А (+)'; + + // батарея внизу + g += 'Источник тока'; + g += PHYS.batteryEMF(190, 270, undefined, 'h'); + + // провода + g += PHYS.wire(77, 257, 77, 270); + g += PHYS.wire(77, 270, 175, 270); + g += PHYS.wire(205, 270, 303, 270); + g += PHYS.wire(303, 270, 303, 257); + + // ионы — катионы (красные, +) + cats.forEach(p => { + g += ''; + g += '+'; + }); + // анионы (синие, -) + ans.forEach(p => { + g += ''; + g += ''+'−'+''; + }); + + // стрелка направления для катионов и анионов + if(I > 0){ + g += PHYS.drawArrow(200, 50, 130, 50, '#dc2626', 1.6, 7); + g += 'катионы'; + g += PHYS.drawArrow(180, 30, 250, 30, '#1d4ed8', 1.6, 7); + g += 'анионы'; + } + + svg.innerHTML = g; + out.innerHTML = I === 0 + ? 'При $I = 0$ ионы движутся хаотически (тока нет).' + : '$I = '+I.toFixed(1)+'$ А — катионы дрейфуют к катоду ($-$), анионы к аноду ($+$).'; + renderMath(out); + } + + II.addEventListener('input', ()=>{ + configs.add(II.value); + if(!_done && configs.size >= 4){ _done = true; addXp(15, 'p35-iv1'); bumpProgress('p35', 20); } + }); + draw(); + rafId = requestAnimationFrame(step); + })(); + + /* IV2 — Калькулятор */ + (function(){ + const out = document.getElementById('p35-iv2-out'); + const sub = document.getElementById('p35-iv2-sub'); + const iI = document.getElementById('p35-iv2-I'); + const iT = document.getElementById('p35-iv2-t'); + const bGo = document.getElementById('p35-iv2-calc'); + const SUBS = [ + { name:'Cu (медь)', M:0.064, n:2 }, + { name:'Ag (серебро)', M:0.108, n:1 }, + { name:'Al (алюминий)', M:0.027, n:3 }, + { name:'Fe (железо)', M:0.056, n:2 }, + { name:'H (водород)', M:0.001, n:1 } + ]; + const F = 96500; + let count = 0, _done = false; + + function calc(){ + const s = SUBS[+sub.value]; + const I = +iI.value, t = +iT.value; + if(![I,t].every(isFinite) || I < 0 || t < 0){ + out.innerHTML = 'Проверь ввод: $I \\ge 0$, $t \\ge 0$.'; + renderMath(out); + return; + } + const m_kg = (s.M * I * t) / (F * s.n); + const m_g = m_kg * 1000; + let html = ''; + html += ''+s.name+': $M = '+(s.M*1000)+'$ г/моль, $n = '+s.n+'$
'; + html += '$m = \\dfrac{M\\,I\\,t}{F\\,n} = \\dfrac{'+s.M+'\\cdot '+I+'\\cdot '+t+'}{'+F+'\\cdot '+s.n+'}$
'; + html += '$m \\approx $ '+m_g.toFixed(3)+' г ($'+m_kg.toExponential(3)+'$ кг)'; + out.innerHTML = html; + renderMath(out); + count++; + if(!_done && count >= 3){ _done = true; addXp(10, 'p35-iv2'); bumpProgress('p35', 15); } + } + bGo.addEventListener('click', calc); + [iI, iT].forEach(x => x.addEventListener('keydown', e => { if(e.key==='Enter') calc(); })); + sub.addEventListener('change', calc); + })(); + + /* IV3 — Куда движется ион */ + (function(){ + const OPTS = ['К катоду (−)', 'К аноду (+)']; + const Q = [ + { q:'Ион меди Cu$^{2+}$ движется…', ans:0, why:'Катион (+) → к катоду ($-$). На катоде восстанавливается до Cu.' }, + { q:'Ион SO$_4^{2-}$ движется…', ans:1, why:'Анион ($-$) → к аноду (+).' }, + { q:'Ион натрия Na$^+$ движется…', ans:0, why:'Катион → к катоду.' }, + { q:'Ион хлора Cl$^-$ движется…', ans:1, why:'Анион → к аноду. На аноде окисляется до Cl$_2$.' }, + { q:'Ион водорода H$^+$ движется…', ans:0, why:'Катион → к катоду. На катоде восстанавливается до H$_2$.' }, + { q:'Ион гидроксила OH$^-$ движется…',ans:1, why:'Анион → к аноду. На аноде окисляется (выделяется O$_2$).' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p35-iv3-q'); + const oEl = document.getElementById('p35-iv3-opts'); + const fb = document.getElementById('p35-iv3-fb'); + const iEl = document.getElementById('p35-iv3-i'); + const sEl = document.getElementById('p35-iv3-s'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + oEl.innerHTML = ''; + if(score === Q.length){ addXp(15, 'p35-iv3'); bumpProgress('p35', 25); } + else if(score >= 4){ addXp(8, 'p35-iv3'); bumpProgress('p35', 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, 1900); + }); + }); + } + document.getElementById('p35-iv3-restart').addEventListener('click', () => { i = 0; score = 0; show(); }); + show(); + })(); + + /* IV4 — Тренажёр */ + (function(){ + const Q = [ + { q:'$I = 2$ А, $t = 30$ мин $= 1800$ с. Медь (Cu, $M = 64$ г/моль, $n = 2$), $F = 96\\,500$ Кл/моль. Найди $m$ (в граммах).', ans:1.19, tol:0.06, why:'$m = MIt/(Fn) = 64\\cdot 2\\cdot 1800/(96\\,500\\cdot 2) \\approx 1{,}19$ г.' }, + { q:'$I = 5$ А, $t = 1$ ч $= 3600$ с. Медь ($M=64$, $n=2$). Найди $m$ (г).', ans:5.97, tol:0.3, why:'$m = 64\\cdot 5\\cdot 3600/(96\\,500\\cdot 2) \\approx 5{,}97$ г.' }, + { q:'Серебро ($M = 108$ г/моль, $n = 1$). $I = 1$ А, $t = 3600$ с. Найди $m$ (г).', ans:4.03, tol:0.2, why:'$m = 108\\cdot 1\\cdot 3600/(96\\,500\\cdot 1) \\approx 4{,}03$ г.' }, + { q:'К какому электроду движутся катионы? (1 = анод, 2 = катод). Введи номер.', ans:2, tol:0.1, why:'Катионы $(+)$ движутся к катоду $(-)$.' }, + { q:'Постоянная Фарадея $F$ в Кл/моль (округлённое значение). Введи число.', ans:96500, tol:500, why:'$F = N_A \\cdot e \\approx 96\\,500$ Кл/моль.' } + ]; + let i = 0, score = 0; + const qEl = document.getElementById('p35-iv4-q'); + const fb = document.getElementById('p35-iv4-fb'); + const iEl = document.getElementById('p35-iv4-i'); + const sEl = document.getElementById('p35-iv4-s'); + const inp = document.getElementById('p35-iv4-inp'); + const bGo = document.getElementById('p35-iv4-go'); + + function show(){ + if(i >= Q.length){ + qEl.innerHTML = 'Готово! Результат: ' + score + ' / ' + Q.length; + inp.disabled = true; bGo.disabled = true; + if(score === Q.length){ addXp(15, 'p35-iv4'); bumpProgress('p35', 25); } + else if(score >= 3){ addXp(8, 'p35-iv4'); bumpProgress('p35', 15); } + return; + } + iEl.textContent = (i+1); + sEl.textContent = score; + qEl.innerHTML = Q[i].q; + fb.style.display = 'none'; + inp.value = ''; inp.disabled = false; bGo.disabled = false; inp.focus(); + renderMath(qEl); + } + function check(){ + if(inp.disabled) return; + const v = parseFloat(inp.value.replace(',','.')); + if(!isFinite(v)){ feedback(fb, false, 'Введи число.'); return; } + const tol = Math.max(Q[i].tol, Math.abs(Q[i].ans)*0.05); + const ok = Math.abs(v - Q[i].ans) <= tol; + if(ok){ score++; feedback(fb, true, '✓ Верно! '+Q[i].why+' Дальше ▶'); } + else feedback(fb, false, '✗ Верно: '+Q[i].ans+'. '+Q[i].why+' Дальше ▶'); + sEl.textContent = score; + inp.disabled = true; bGo.disabled = true; + i++; + setTimeout(show, 1900); + } + bGo.addEventListener('click', check); + inp.addEventListener('keydown', e => { if(e.key==='Enter') check(); }); + document.getElementById('p35-iv4-restart').addEventListener('click', () => { i = 0; score = 0; inp.disabled=false; bGo.disabled=false; show(); }); + show(); + })(); + wireReadBtn('p35'); }