diff --git a/frontend/textbooks/geometry_11_ch3.html b/frontend/textbooks/geometry_11_ch3.html
index b1a705d..6a86835 100644
--- a/frontend/textbooks/geometry_11_ch3.html
+++ b/frontend/textbooks/geometry_11_ch3.html
@@ -396,7 +396,7 @@ function buildParaSelector(){
}
const BUILT=new Set();
-const BUILDERS = { p5:buildP5, p6:()=>buildStub('p6'), p7:()=>buildStub('p7'), final3:()=>buildStub('final3') };
+const BUILDERS = { p5:buildP5, p6:buildP6, p7:()=>buildStub('p7'), final3:()=>buildStub('final3') };
function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } }
function goTo(id){
STATE.current=id; ensureBuilt(id);
@@ -422,14 +422,25 @@ const SIDEBARS = {
["Площадь", "$S=4\\\\pi R^2$"],
["Объём шара", "$V=\\\\tfrac{4}{3}\\\\pi R^3$"]
]},
- p6:{title:"Шпаргалка § 6", rows:[["Тема", "Шар"],["Формула","$S=4\\\\pi R^2$, $V=\\\\frac{4}{3}\\\\pi R^3$"]]},
+ p6:{title:"Шпаргалка § 6", rows:[
+ ["Тема", "Шар"],
+ ["Шар", "тело, $|OM|\\\\le R$"],
+ ["Площадь сферы", "$S=4\\\\pi R^2$"],
+ ["Объём шара", "$V=\\\\tfrac{4}{3}\\\\pi R^3$"],
+ ["Сегмент $V$", "$\\\\tfrac{\\\\pi h^2(3R-h)}{3}$"],
+ ["Сегмент $S$", "$2\\\\pi R h$"],
+ ["Сектор $V$", "$\\\\tfrac{2}{3}\\\\pi R^2 h$"],
+ ["Слой $V$", "$\\\\tfrac{\\\\pi h}{6}(3r_1^2+3r_2^2+h^2)$"],
+ ["Куб впис. шар", "$r=a/2$"],
+ ["Куб опис. шар", "$R=\\\\tfrac{a\\\\sqrt{3}}{2}$"]
+ ]},
p7:{title:"Шпаргалка § 7", rows:[["Тема", "Правильные многогранники"],["Формула","5 платоновых тел"]]},
final3:{title:"Финал раздела 3", rows:[["§ 5–§ 7","теория раздела 3"],["Награда","+50 XP"]]}
};
const TIPS=[
{sec:'p5',html:"Сфера: $|OM|=R$. Уравнение $(x-a)^2+(y-b)^2+(z-c)^2=R^2$. Сечение плоскостью — окружность $r=\\\\sqrt{R^2-d^2}$."},
- {sec:'p6',html:"§ 6 «Шар» — содержание в разработке. $S=4\\\\\\\\pi R^2$, $V=\\\\\\\\frac{4}{3}\\\\\\\\pi R^3$"},
+ {sec:'p6',html:"Шар: $S=4\\\\pi R^2$, $V=\\\\tfrac{4}{3}\\\\pi R^3$. Сегмент: $V=\\\\tfrac{\\\\pi h^2(3R-h)}{3}$, $S=2\\\\pi R h$. Куб впис. шар: $r=a/2$; куб опис. шар: $R=\\\\tfrac{a\\\\sqrt 3}{2}$."},
{sec:'p7',html:"§ 7 «Правильные многогранники» — содержание в разработке. 5 платоновых тел"},
{sec:'final3',html:"Финал раздела 3 — интегрированные задачи по разделу."}
];
@@ -986,6 +997,446 @@ function buildP5(){
wireReadBtn('p5');
}
+/* ===== § 6 «Шар» — Wave 2 ===== */
+function buildP6(){
+ const box = document.getElementById('p6-body');
+ if(!box) return;
+ let html = '';
+
+ /* === ТЕОРИЯ === */
+
+ html += makeCard('theory', 'Площадь поверхности и объём шара', '§ 6.1',
+ '
Шар — тело, ограниченное сферой. Это множество точек пространства, для которых $|OM|\\le R$.
'
+ + 'Все точки шара удалены от центра $O$ не более чем на $R$. Поверхность шара — сама сфера.
'
+ + 'Основные формулы для шара радиуса $R$:
'
+ + '$$S_{\\text{сферы}}=4\\pi R^2 \\qquad V_{\\text{шара}}=\\dfrac{4}{3}\\pi R^3$$
'
+ + 'Формула объёма обосновывается методом Кавальери : сравнивая шар с цилиндром, из которого вырезан конус, получаем те же объёмы у равных поперечных сечений на одной высоте.
'
+ + 'Пример: $R=3$ — численное совпадение $S$ и $V$ '
+ + '
$S=4\\pi\\cdot 9=36\\pi\\approx 113{,}10$.
'
+ + '
$V=\\dfrac{4}{3}\\pi\\cdot 27=36\\pi\\approx 113{,}10$.
'
+ + '
Численно $S$ и $V$ совпадают — но только при $R=3$. Это лишь совпадение единиц измерения (одно — площадь, другое — объём).
'
+ + '
'
+ + 'Пример: связь радиуса и объёма '
+ + '
Если радиус увеличить в $2$ раза, то площадь сферы вырастет в $4$ раза, а объём — в $8$ раз.
'
+ + '
$\\dfrac{V_2}{V_1}=\\dfrac{(2R)^3}{R^3}=8$, $\\dfrac{S_2}{S_1}=\\dfrac{(2R)^2}{R^2}=4$.
'
+ + '
');
+
+ html += makeCard('rule', 'Шаровой сегмент, сектор, слой', '§ 6.2',
+ 'Шаровой сегмент — часть шара, отсекаемая плоскостью. Высота сегмента $h$ — расстояние от секущей плоскости до самой удалённой точки сегмента.
'
+ + '$$V_{\\text{сегм}}=\\dfrac{\\pi h^2(3R-h)}{3}, \\qquad S_{\\text{сфер.часть}}=2\\pi R h$$
'
+ + 'Радиус основания сегмента: $r=\\sqrt{2Rh-h^2}$ (по теореме Пифагора в осевом сечении).
'
+ + 'Шаровой сектор — тело, состоящее из шарового сегмента и конуса с вершиной в центре шара и основанием — кругом сегмента.
'
+ + '$$V_{\\text{сект}}=\\dfrac{2}{3}\\pi R^2 h$$
'
+ + 'Шаровой слой — часть шара между двумя параллельными плоскостями. $r_1$, $r_2$ — радиусы оснований, $h$ — расстояние между плоскостями.
'
+ + '$$V_{\\text{слой}}=\\dfrac{\\pi h}{6}\\bigl(3r_1^2+3r_2^2+h^2\\bigr), \\qquad S_{\\text{сфер.часть}}=2\\pi R h$$
'
+ + 'Замечательно: формула $S=2\\pi R h$ работает и для сегмента, и для шарового пояса (слоя) — площадь сферического пояса между параллельными плоскостями зависит только от его высоты $h$ и от $R$ сферы.
'
+ + 'Пример: $R=5$, $h=2$ (сегмент) '
+ + '
$V_{\\text{сегм}}=\\dfrac{\\pi\\cdot 4\\cdot(15-2)}{3}=\\dfrac{52\\pi}{3}\\approx 54{,}45$.
'
+ + '
$S_{\\text{сфер.часть}}=2\\pi\\cdot 5\\cdot 2=20\\pi\\approx 62{,}83$.
'
+ + '
Радиус основания: $r=\\sqrt{2\\cdot 5\\cdot 2-4}=\\sqrt{16}=4$.
'
+ + '
');
+
+ html += makeCard('example', 'Вписанные и описанные шары', '§ 6.3',
+ 'Шар вписан в многогранник, если он касается всех его граней изнутри.
'
+ + 'Шар описан около многогранника, если все его вершины лежат на сфере.
'
+ + 'Куб и шар.
'
+ + ''
+ + 'Шар вписан в куб со стороной $a$: касается каждой грани в её центре. Радиус: $r_{\\text{вп}}=\\dfrac{a}{2}$. '
+ + 'Шар описан около куба со стороной $a$: все 8 вершин на сфере. Диаметр шара равен диагонали куба $a\\sqrt{3}$. Радиус: $R_{\\text{оп}}=\\dfrac{a\\sqrt{3}}{2}$. '
+ + 'Отношение объёмов: $\\dfrac{V_{\\text{шара впис.}}}{V_{\\text{куба}}}=\\dfrac{\\tfrac{4}{3}\\pi(a/2)^3}{a^3}=\\dfrac{\\pi}{6}\\approx 0{,}524$. '
+ + ' '
+ + 'Цилиндр и шар.
'
+ + ''
+ + 'Шар вписан в цилиндр , если касается боковой поверхности и обоих оснований. Тогда $h_{\\text{цил}}=2R$, а радиусы шара и цилиндра совпадают. Отношение: $\\dfrac{V_{\\text{шара}}}{V_{\\text{цил}}}=\\dfrac{2}{3}$ (теорема Архимеда). '
+ + 'Шар описан около цилиндра с радиусом $R$ и высотой $h$: $R_{\\text{шар}}=\\sqrt{R^2+\\left(\\dfrac{h}{2}\\right)^2}$ (теорема Пифагора). '
+ + ' '
+ + 'Пример: куб со стороной $a=4$ '
+ + '
Вписанный шар: $r=2$, $V=\\dfrac{4}{3}\\pi\\cdot 8=\\dfrac{32\\pi}{3}\\approx 33{,}51$.
'
+ + '
Описанный шар: $R=\\dfrac{4\\sqrt 3}{2}=2\\sqrt 3\\approx 3{,}46$.
'
+ + '
');
+
+ /* === ИНТЕРАКТИВ 1 — 3D-визуализатор шара с сегментами === */
+ html += ''
+ + ''
+ + '
Меняй радиус $R$ и высоту сегмента $h$. Сегмент выделяется сверху. После 4 разных пар $(R,h)$ — +10 XP.
'
+ + '
'
+ + '$R$ (радиус):2.0 '
+ + '$h$ (высота сегмента):1.0 '
+ + '
'
+ + '
'
+ + 'Изо '
+ + 'Спереди '
+ + 'Сверху '
+ + 'Сбоку '
+ + '
'
+ + '
'
+ + '
'
+ + '$S_{\\text{сферы}}=4\\pi R^2\\approx$— '
+ + '$V_{\\text{шара}}=\\tfrac{4}{3}\\pi R^3\\approx$— '
+ + '$V_{\\text{сегм}}\\approx$— '
+ + '$S_{\\text{сфер.сегм}}=2\\pi R h\\approx$— '
+ + '
'
+ + '
Разных пар $(R,h)$ изучено: 0 / 4
'
+ + '
';
+
+ /* === ИНТЕРАКТИВ 2 — Калькулятор шара/сегмента/слоя === */
+ html += ''
+ + ''
+ + '
Выбери режим, введи параметры и получи $S$, $V$ и другие характеристики.
'
+ + '
'
+ + 'Шар целиком '
+ + 'Сегмент '
+ + 'Слой '
+ + '
'
+ + '
'
+ + '
'
+ + '
';
+
+ /* === ИНТЕРАКТИВ 3 — Вписан или описан? === */
+ html += ''
+ + ''
+ + '
Прочитай условие и выбери, какое отношение шара и многогранника описано.
'
+ + '
'
+ + '
Верно: 0 / 6
'
+ + '
';
+
+ /* === ИНТЕРАКТИВ 4 — Тренажёр === */
+ html += ''
+ + ''
+ + '
Используй $\\pi\\approx 3{,}14$. Допуск $\\pm 0{,}5$ для больших значений, $\\pm 0{,}05$ — для остальных.
'
+ + '
'
+ + '
Решено: 0 / 6
'
+ + '
';
+
+ html += secNav('p5', 'p7');
+ html += readButton('p6');
+
+ box.innerHTML = html;
+ renderMath(box);
+
+ /* ====== JS-логика интерактивов ====== */
+
+ /* IV1 — 3D-визуализатор шара с сегментом */
+ (function(){
+ if(!window.G3D) return;
+ const svg = document.getElementById('p6-iv1-svg');
+ const elR = document.getElementById('p6-iv1-R');
+ const elH = document.getElementById('p6-iv1-h');
+ const vR = document.getElementById('p6-iv1-R-v');
+ const vH = document.getElementById('p6-iv1-h-v');
+ const oS = document.getElementById('p6-iv1-S-o');
+ const oV = document.getElementById('p6-iv1-V-o');
+ const oVseg = document.getElementById('p6-iv1-Vseg-o');
+ const oSseg = document.getElementById('p6-iv1-Sseg-o');
+ const oCnt = document.getElementById('p6-iv1-cnt');
+ if(!svg) return;
+ const scene = G3D.createScene({W:480, H:400, scale:60, camDist:8, rotX:-0.35, rotY:0.7});
+ const seen = new Set();
+ let xpGiven = false;
+ const PI = 3.14;
+
+ function projector(v){
+ if (scene.proj === 'iso') return G3D.projectIso(v, scene.cx, scene.cy, scene.scale);
+ return G3D.projectPersp(v, scene.camDist, scene.cx, scene.cy, scene.scale);
+ }
+
+ function segmentOverlay(R, h, M){
+ // Сегмент сверху: от высоты y0 = R - h до y = R
+ if(h <= 0) return '';
+ const hClamp = Math.min(h, 2*R);
+ const y0 = R - hClamp; // y координата секущей плоскости
+ // 1) Окружность секущего круга — эллипс в проекции
+ const rBase = Math.sqrt(Math.max(0, 2*R*hClamp - hClamp*hClamp));
+ const N = 64;
+ const ringPts = [];
+ for(let i=0; i<=N; i++){
+ const t = 2*Math.PI*i/N;
+ ringPts.push({x: rBase*Math.cos(t), y: y0, z: rBase*Math.sin(t)});
+ }
+ const ringRot = ringPts.map(p => G3D.vApply(M, p)).map(projector);
+ let path = '';
+ for(let i=0; i ';
+
+ // 2) Полупрозрачная "шапка" сегмента — несколько горизонтальных эллипсов выше плоскости
+ const SLICES = 6;
+ for(let k=1; k<=SLICES; k++){
+ const yk = y0 + hClamp * k / SLICES;
+ const rk = Math.sqrt(Math.max(0, R*R - yk*yk));
+ if(rk < 1e-3) continue;
+ const pts = [];
+ for(let i=0; i<=N; i++){
+ const t = 2*Math.PI*i/N;
+ pts.push({x: rk*Math.cos(t), y: yk, z: rk*Math.sin(t)});
+ }
+ const proj = pts.map(p => G3D.vApply(M, p)).map(projector);
+ let p2 = '';
+ for(let i=0; i ';
+ }
+ return out;
+ }
+
+ function draw(){
+ const R = +elR.value;
+ let h = +elH.value;
+ if(h > 2*R) h = 2*R;
+ // Обновляем верхнюю границу слайдера h по текущему R
+ elH.max = (2*R).toFixed(1);
+ vR.textContent = R.toFixed(1);
+ vH.textContent = h.toFixed(1);
+ const sph = G3D.sphereWireframe(R, 6, 12);
+ const M = G3D.buildRotMatrix(scene);
+ const wire = G3D.renderSphereWireframe(sph, M, scene);
+ const seg = segmentOverlay(R, h, M);
+ svg.innerHTML = wire + seg;
+
+ oS.textContent = (4*PI*R*R).toFixed(2);
+ oV.textContent = ((4/3)*PI*R*R*R).toFixed(2);
+ oVseg.textContent = (PI*h*h*(3*R - h)/3).toFixed(2);
+ oSseg.textContent = (2*PI*R*h).toFixed(2);
+
+ const key = R.toFixed(1)+'|'+h.toFixed(1);
+ seen.add(key);
+ oCnt.textContent = Math.min(seen.size, 4);
+ if(seen.size >= 4 && !xpGiven){
+ xpGiven = true;
+ addXp(10, 'p6-iv1');
+ bumpProgress('p6', 15);
+ const note = document.createElement('div');
+ note.className = 'feedback ok';
+ note.innerHTML = '✓ +10 XP за исследование 4 разных конфигураций!';
+ note.style.cssText = 'display:block;margin-top:8px';
+ const host = document.getElementById('p6-iv1');
+ if(host) host.appendChild(note);
+ setTimeout(function(){ try{ note.remove(); }catch(e){} }, 3000);
+ }
+ }
+ draw();
+ G3D.attachOrbit(svg, scene, draw);
+ elR.addEventListener('input', draw);
+ elH.addEventListener('input', draw);
+ document.querySelectorAll('#p6-iv1 .g3d-tools .btn').forEach(function(b){
+ b.addEventListener('click', function(){ G3D.presetView(scene, b.dataset.view, draw); });
+ });
+ })();
+
+ /* IV2 — Калькулятор */
+ (function(){
+ const formBox = document.getElementById('p6-iv2-form');
+ const outBox = document.getElementById('p6-iv2-out');
+ let mode = 'ball';
+ let xpGiven = false;
+ const seenModes = new Set();
+ const PI = 3.14;
+
+ function setActive(){
+ ['mb','ms','ml'].forEach(function(s, i){
+ const b = document.getElementById('p6-iv2-'+s);
+ const m = ['ball','seg','lay'][i];
+ if(!b) return;
+ b.classList.toggle('primary', m === mode);
+ });
+ }
+
+ function parseNum(id){ const el = document.getElementById(id); if(!el) return NaN; const v = (el.value||'').replace(',', '.').trim(); const x = parseFloat(v); return isFinite(x) ? x : NaN; }
+
+ function render(){
+ let h = '';
+ if(mode === 'ball'){
+ h = 'Шар целиком
'
+ + ''
+ + '$R=$ '
+ + 'Вычислить '
+ + '
';
+ } else if(mode === 'seg'){
+ h = 'Шаровой сегмент
'
+ + ''
+ + '$R=$ '
+ + '$h=$ '
+ + 'Вычислить '
+ + '
';
+ } else {
+ h = 'Шаровой слой
'
+ + ''
+ + '$R=$ '
+ + '$r_1=$ '
+ + '$r_2=$ '
+ + '$h=$ '
+ + 'Вычислить '
+ + '
';
+ }
+ formBox.innerHTML = h;
+ renderMath(formBox);
+ const btn = document.getElementById('p6-iv2-calc');
+ if(btn) btn.addEventListener('click', calc);
+ }
+
+ function calc(){
+ let out = '';
+ if(mode === 'ball'){
+ const R = parseNum('p6-iv2-R');
+ if(!isFinite(R) || R<=0){ outBox.innerHTML = '✗ Введи $R>0$. '; renderMath(outBox); return; }
+ const S = 4*PI*R*R;
+ const V = (4/3)*PI*R*R*R;
+ const C = 2*PI*R;
+ out = 'Шар радиуса $R='+fmt(R)+'$:
'
+ + '$S_{\\text{сферы}}=4\\pi R^2=4\\cdot 3{,}14\\cdot '+fmt(R*R)+'\\approx '+fmt(+S.toFixed(2))+'$
'
+ + '$V_{\\text{шара}}=\\dfrac{4}{3}\\pi R^3\\approx '+fmt(+V.toFixed(2))+'$
'
+ + 'Длина большой окружности: $C=2\\pi R\\approx '+fmt(+C.toFixed(2))+'$
'
+ + '$\\dfrac{V}{S}=\\dfrac{R}{3}='+fmt(+(R/3).toFixed(4))+'$
';
+ } else if(mode === 'seg'){
+ const R = parseNum('p6-iv2-R');
+ const h = parseNum('p6-iv2-h');
+ if(!isFinite(R) || R<=0 || !isFinite(h) || h<=0 || h>2*R){ outBox.innerHTML = '✗ Введи $R>0$ и $0'; renderMath(outBox); return; }
+ const V = PI*h*h*(3*R - h)/3;
+ const S = 2*PI*R*h;
+ const r = Math.sqrt(Math.max(0, 2*R*h - h*h));
+ out = 'Шаровой сегмент $R='+fmt(R)+'$, $h='+fmt(h)+'$:
'
+ + '$V_{\\text{сегм}}=\\dfrac{\\pi h^2(3R-h)}{3}=\\dfrac{3{,}14\\cdot '+fmt(h*h)+'\\cdot '+fmt(3*R-h)+'}{3}\\approx '+fmt(+V.toFixed(2))+'$
'
+ + '$S_{\\text{сфер.часть}}=2\\pi R h=2\\cdot 3{,}14\\cdot '+fmt(R)+'\\cdot '+fmt(h)+'\\approx '+fmt(+S.toFixed(2))+'$
'
+ + 'Радиус основания сегмента: $r=\\sqrt{2Rh-h^2}=\\sqrt{'+fmt(2*R*h-h*h)+'}\\approx '+fmt(+r.toFixed(4))+'$
';
+ } else {
+ const R = parseNum('p6-iv2-R');
+ const r1 = parseNum('p6-iv2-r1');
+ const r2 = parseNum('p6-iv2-r2');
+ const h = parseNum('p6-iv2-h');
+ if(!isFinite(R) || R<=0 || !isFinite(r1) || r1<0 || !isFinite(r2) || r2<0 || !isFinite(h) || h<=0){ outBox.innerHTML = '✗ Введи корректные значения ($R>0$, $r_1,r_2\\ge 0$, $h>0$). '; renderMath(outBox); return; }
+ const V = PI*h*(3*r1*r1 + 3*r2*r2 + h*h)/6;
+ const S = 2*PI*R*h;
+ out = 'Шаровой слой $R='+fmt(R)+'$, $r_1='+fmt(r1)+'$, $r_2='+fmt(r2)+'$, $h='+fmt(h)+'$:
'
+ + '$V_{\\text{слой}}=\\dfrac{\\pi h(3r_1^2+3r_2^2+h^2)}{6}\\approx '+fmt(+V.toFixed(2))+'$
'
+ + '$S_{\\text{сфер.часть}}=2\\pi R h\\approx '+fmt(+S.toFixed(2))+'$
'
+ + 'Площадь полной боковой поверхности слоя зависит только от $R$ и $h$ — это и есть свойство сферического пояса.
';
+ }
+ outBox.innerHTML = out;
+ renderMath(outBox);
+ seenModes.add(mode);
+ if(seenModes.size >= 3 && !xpGiven){
+ xpGiven = true;
+ addXp(10, 'p6-iv2');
+ bumpProgress('p6', 15);
+ }
+ }
+
+ ['mb','ms','ml'].forEach(function(s, i){
+ const b = document.getElementById('p6-iv2-'+s);
+ const m = ['ball','seg','lay'][i];
+ if(!b) return;
+ b.addEventListener('click', function(){ mode = m; setActive(); render(); outBox.innerHTML=''; });
+ });
+ setActive();
+ render();
+ })();
+
+ /* IV3 — Вписан или описан? */
+ (function(){
+ const tasks = [
+ { q:'Шар касается всех 6 граней куба, его центр совпадает с центром куба.', a:'in', h:'Если шар касается всех граней изнутри — он вписан в куб.' },
+ { q:'Все 8 вершин куба лежат на сфере с центром в центре куба.', a:'out', h:'Все вершины на сфере — шар описан около куба.' },
+ { q:'Радиус шара равен $\\dfrac{a}{2}$, где $a$ — сторона куба.', a:'in', h:'$r=a/2$ — это вписанный шар (касается граней в центре).' },
+ { q:'Радиус шара равен $\\dfrac{a\\sqrt{3}}{2}$, где $a$ — сторона куба.', a:'out', h:'$R=\\dfrac{a\\sqrt 3}{2}$ = половина диагонали — шар описан .' },
+ { q:'Шар касается боковой поверхности цилиндра и обоих его оснований.', a:'in', h:'Касается всей поверхности изнутри — шар вписан в цилиндр ($h=2R$).' },
+ { q:'Все 4 вершины правильного тетраэдра лежат на сфере.', a:'out', h:'Все вершины на сфере — сфера описана около тетраэдра.' }
+ ];
+ const list = document.getElementById('p6-iv3-list');
+ const scoreEl = document.getElementById('p6-iv3-score');
+ const solved = new Set();
+ let xpGiven = false;
+ list.innerHTML = tasks.map(function(t, i){
+ return ''
+ + '
Задание '+(i+1)+'. '+t.q+'
'
+ + '
'
+ + 'Шар вписан '
+ + 'Шар описан '
+ + '
'
+ + '
'
+ + '
';
+ }).join('');
+ renderMath(list);
+ list.querySelectorAll('button[data-i]').forEach(function(b){
+ b.addEventListener('click', function(){
+ const i = +b.dataset.i, v = b.dataset.v, t = tasks[i];
+ const fb = document.getElementById('p6-iv3-fb-'+i);
+ if(solved.has(i)) return;
+ if(v === t.a){
+ feedback(fb, true, '✓ Верно. '+t.h);
+ solved.add(i);
+ scoreEl.textContent = solved.size;
+ if(solved.size === tasks.length && !xpGiven){
+ xpGiven = true;
+ addXp(15, 'p6-iv3');
+ bumpProgress('p6', 25);
+ }
+ } else {
+ feedback(fb, false, '✗ Не то. Подумай: шар вписан = касается граней; описан = вершины на сфере.');
+ }
+ });
+ });
+ })();
+
+ /* IV4 — Тренажёр */
+ (function(){
+ const tasks = [
+ { q:'Шар $R=5$. Найди $V$ (используй $\\pi\\approx 3{,}14$).', a:523.33, tol:0.6 },
+ { q:'Шар $R=3$. Найди $S$ (используй $\\pi\\approx 3{,}14$).', a:113.04, tol:0.1 },
+ { q:'Шар вписан в куб со стороной $a=6$. Найди $V_{\\text{шара}}$ ($\\pi\\approx 3{,}14$).', a:113.04, tol:0.1 },
+ { q:'Шар описан около куба со стороной $a=2$. Найди радиус шара $R$ (с точностью до 0,01).', a:1.73, tol:0.05 },
+ { q:'Шаровой сегмент: $R=5$, $h=2$. Найди $V_{\\text{сегм}}$ ($\\pi\\approx 3{,}14$).', a:54.43, tol:0.1 },
+ { q:'Шар $R=10$, сферический пояс высотой $h=4$. Найди $S$ пояса ($\\pi\\approx 3{,}14$).', a:251.2, tol:0.3 }
+ ];
+ const list = document.getElementById('p6-iv4-list');
+ const scoreEl = document.getElementById('p6-iv4-score');
+ const solved = new Set();
+ let xpGiven = false;
+ list.innerHTML = tasks.map(function(t, i){
+ return ''
+ + '
Задача '+(i+1)+'. '+t.q+'
'
+ + '
'
+ + ' '
+ + 'Проверить '
+ + '
'
+ + '
'
+ + '
';
+ }).join('');
+ renderMath(list);
+ list.querySelectorAll('button[data-i]').forEach(function(b){
+ b.addEventListener('click', function(){
+ const i = +b.dataset.i, t = tasks[i];
+ const inp = document.getElementById('p6-iv4-inp-'+i);
+ const fb = document.getElementById('p6-iv4-fb-'+i);
+ const raw = (inp.value || '').replace(',', '.').trim();
+ const val = parseFloat(raw);
+ if(!isFinite(val)){ feedback(fb, false, '✗ Введи число'); return; }
+ if(Math.abs(val - t.a) <= t.tol){
+ feedback(fb, true, '✓ Верно!');
+ if(!solved.has(i)){
+ solved.add(i);
+ scoreEl.textContent = solved.size;
+ if(solved.size === tasks.length && !xpGiven){
+ xpGiven = true;
+ addXp(15, 'p6-iv4');
+ bumpProgress('p6', 25);
+ setTimeout(function(){ achievement('p6_done'); }, 400);
+ }
+ }
+ } else {
+ feedback(fb, false, '✗ Не точно. Пересчитай с $\\pi\\approx 3{,}14$.');
+ }
+ });
+ });
+ })();
+
+ wireReadBtn('p6');
+}
+
/* ===== STUB BUILDER — единый для всех параграфов раздела (Phase 0) ===== */
function buildStub(id){
@@ -1071,6 +1522,11 @@ const SEARCH_INDEX = (function(){
arr.push({kind:'Теория',title:'Уравнение сферы',desc:'(x-a)^2+(y-b)^2+(z-c)^2=R^2',sec:'p5'});
arr.push({kind:'Теория',title:'Касательная плоскость к сфере',desc:'перпендикулярна радиусу в точке касания',sec:'p5'});
arr.push({kind:'Теория',title:'Сечение сферы плоскостью',desc:'r = sqrt(R^2 - d^2), большой круг',sec:'p5'});
+ arr.push({kind:'Теория',title:'Площадь сферы и объём шара',desc:'S = 4πR², V = (4/3)πR³',sec:'p6'});
+ arr.push({kind:'Теория',title:'Шаровой сегмент',desc:'V = πh²(3R−h)/3, S = 2πRh',sec:'p6'});
+ arr.push({kind:'Теория',title:'Шаровой сектор и слой',desc:'V_сект = (2/3)πR²h; V_слой = πh(3r1²+3r2²+h²)/6',sec:'p6'});
+ arr.push({kind:'Теория',title:'Шар, вписанный и описанный около куба',desc:'r = a/2, R = a√3/2',sec:'p6'});
+ arr.push({kind:'Теория',title:'Шар и цилиндр',desc:'вписан: h=2R; описан: R_шар=√(R²+(h/2)²)',sec:'p6'});
return arr;
})();
function initSearch(){