'
+ 'Чтобы описать движение, нужно выбрать тело отсчёта — то, относительно которого смотрим. '
+ 'Тело отсчёта + связанные с ним оси координат + часы = система отсчёта (СО).');
h += makeCard('rule', 'Относительность движения и покоя', '§ 14.2',
'Одно и то же тело может одновременно и покоиться, и двигаться — в зависимости от выбранной СО.
'
+ 'Пример: пассажир в вагоне сидит на месте — относительно вагона он покоится; '
+ 'относительно земли он движется вместе с поездом со скоростью $v$.
'
+ 'Часто за тело отсчёта удобно брать Землю.');
h += makeCard('example', 'Облако и самолёт', '§ 14.3',
'Из иллюминатора самолёта вы видите облако. '
+ 'Относительно земли: самолёт летит со скоростью $900$ км/ч, облако почти неподвижно. '
+ 'Относительно самолёта: самолёт «стоит на месте» — а облако «летит» назад со скоростью $\\approx 900$ км/ч. '
+ 'И то, и другое — правильно. Просто СО разные.');
/* IV-1 СИМ: 2 СО — поезд + пассажир + станция */
h += wgWrap('p14-iv1', 'СИМ', 'Откуда смотришь — то и видишь', 'Переключай систему отсчёта и наблюдай, кто движется, а кто стоит.',
'
'
+ ''
+ ''
+ '
'
+ ''
+ '');
/* IV-2 КВИЗ */
h += wgWrap('p14-iv2', 'КВИЗ', 'Покой или движение?', '',
'
'
+ quizQuestion('p14-q', 0, 'Пассажир сидит в едущем автобусе. Относительно сидящих рядом пассажиров он:', ['Движется','Покоится','И то, и другое','Невозможно определить'], 1)
+ quizQuestion('p14-q', 1, 'Тот же пассажир относительно дороги:', ['Движется','Покоится','Невозможно сказать','Только при остановке'], 0)
+ quizQuestion('p14-q', 2, 'Дерево у дороги относительно проезжающей машины:', ['Покоится','Движется в сторону, противоположную машине','Движется в ту же сторону','Зависит от скорости'], 1, 'Если за СО взять машину, дерево «летит» назад со скоростью машины.')
+ quizQuestion('p14-q', 3, 'Что такое система отсчёта?', ['Только тело отсчёта','Тело отсчёта + оси координат + часы','Только часы','Любая точка'], 1)
+ '
');
/* IV-3 DnD */
h += wgWrap('p14-iv3', 'DnD', 'Что движется относительно чего', '',
dndPool('p14-dnd', [
{ id:'a1', cat:'mov', html:'Луна относительно Земли' },
{ id:'a2', cat:'mov', html:'Машина относительно дороги' },
{ id:'a3', cat:'rest', html:'Светильник относительно потолка' },
{ id:'a4', cat:'rest', html:'Пассажир относительно вагона' },
{ id:'a5', cat:'mov', html:'Стрелка часов относительно циферблата' },
{ id:'a6', cat:'rest', html:'Книга на столе относительно стола' }
], [
{ cat:'mov', label:'Движется' },
{ cat:'rest', label:'Покоится' }
]));
/* IV-4 ТРН */
h += wgWrap('p14-iv4', 'ТРН', 'Тренажёр §14', '',
'
'
+ quizQuestion('p14-tr', 0, 'Что НЕ входит в систему отсчёта?', ['Тело отсчёта','Оси координат','Часы','Скорость движения'], 3)
+ quizQuestion('p14-tr', 1, 'Покой или движение — это:', ['Абсолютные понятия','Относительные понятия (зависят от СО)','Существует только покой','Существует только движение'], 1)
+ quizQuestion('p14-tr', 2, 'Если за тело отсчёта взять движущийся поезд, то платформа:', ['Покоится','Движется','Не существует','Не имеет значения'], 1)
+ quizQuestion('p14-tr', 3, 'Можно ли утверждать, что Земля покоится?', ['Да, всегда','Нет, в одной СО — да, в другой — нет','Нет, никогда','Только ночью'], 1, 'Относительно Солнца Земля движется. Относительно дома — обычно её удобно считать покоящейся.')
+ '
');
h += readButton('p14');
body.innerHTML = h;
// §14 IV-1 wire
let frame14 = 0, raf14 = 0;
function draw14(){
const co = body.querySelector('.p14-co[style*="background: rgb(220, 38, 38)"], .p14-co[style*="background:#dc2626"]');
const isGround = !co || co.dataset.co === 'ground';
const W = 380, H = 160;
let trainX, treeX;
if(isGround){
trainX = 20 + (frame14 % 320);
treeX = 250;
} else {
trainX = 100; // поезд стоит
treeX = 380 - (frame14 % 320);
}
let s = '';
// Небо
s += '';
// Земля
s += '';
// Рельсы
s += '';
s += '';
// Дерево
s += '';
s += '';
// Поезд
s += '';
s += '';
s += '';
s += '';
s += '';
// Пассажир в окне
s += '';
// Стрелка «направление обзора»
if(isGround){
s += 'Наблюдатель на земле';
} else {
s += 'Наблюдатель в поезде';
}
document.getElementById('p14-svg').innerHTML = s;
const info = document.getElementById('p14-info');
if(isGround){
info.innerHTML = 'СО: Земля. Поезд движется направо. Дерево покоится.';
} else {
info.innerHTML = 'СО: Поезд. Поезд покоится. Дерево «движется» назад с той же скоростью.';
}
}
function loop14(){
frame14 += 1;
if(!document.getElementById('p14-svg')){ cancelAnimationFrame(raf14); return; }
draw14();
raf14 = requestAnimationFrame(loop14);
}
body.querySelectorAll('.p14-co').forEach(btn => btn.addEventListener('click', () => {
body.querySelectorAll('.p14-co').forEach(b => { b.style.background = '#fff'; b.style.color = '#dc2626'; b.style.border = '2px solid #dc2626'; });
btn.style.background = '#dc2626'; btn.style.color = '#fff'; btn.style.border = 'none';
btn.style.padding = '8px 16px'; // компенсировать border
frame14 = 0;
draw14();
}));
raf14 = requestAnimationFrame(loop14);
wireDnd('p14-dnd', [
{ id:'a1', cat:'mov' },{ id:'a2', cat:'mov' },{ id:'a3', cat:'rest' },
{ id:'a4', cat:'rest' },{ id:'a5', cat:'mov' },{ id:'a6', cat:'rest' }
]);
wireQuiz('p14-q-host', () => { if(window.addXp) window.addXp(10, 'q-p14'); });
wireQuiz('p14-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p14'); });
wireReadBtn('p14');
renderMath(body);
}
/* ========================================================== */
/* §15 — Траектория, путь, время */
/* ========================================================== */
function add_p15(){
const body = document.getElementById('p15-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Три ключевых понятия', '§ 15.1',
'Траектория — это линия, по которой движется тело. '
+ 'Путь $s$ — длина этой линии. $[s] = $ м (метр). '
+ 'Время $t$ — длительность движения. $[t] = $ с (секунда).');
h += makeCard('rule', 'Виды траекторий', '§ 15.2',
'
'
+ '
Прямолинейная — лифт, шарик в трубке.
'
+ '
Криволинейная — поворот машины, спутник вокруг Земли.
'
+ '
Замкнутая — бегун на круговой дорожке возвращается в старт; путь $\\neq 0$, а вот «перемещение» (вектор) равно $0$.
'
+ '
'
+ 'Длина траектории не зависит от направления — это всегда положительное число.');
h += makeCard('example', 'Школьник идёт в школу', '§ 15.3',
'Сценарий: школьник прошёл $200$ м прямо, потом свернул и прошёл ещё $150$ м, через $5$ мин был в школе. '
+ 'Траектория: ломаная из двух прямых. '
+ 'Путь: $s = 200 + 150 = 350$ м. '
+ 'Время: $t = 5$ мин $= 300$ с.');
/* IV-1 СИМ: интерактивная траектория — нажимай по квадратам, считаем путь */
h += wgWrap('p15-iv1', 'СИМ', 'Считаем путь по траектории', 'Кликай по точкам сетки, чтобы построить ломаную траекторию. Путь будет суммироваться.',
'
'
+ ''
+ '
Каждая клетка — $\\textbf{1}$ м.
'
+ '
'
+ ''
+ '
Кликай по клеткам, чтобы построить путь.
');
/* IV-2 КВИЗ */
h += wgWrap('p15-iv2', 'КВИЗ', 'Что есть что', '',
'
'
+ quizQuestion('p15-q', 0, 'Длина траектории — это:', ['Время','Скорость','Путь','Перемещение'], 2)
+ quizQuestion('p15-q', 1, 'Бегун пробежал круг $400$ м и вернулся в старт. Путь равен:', ['0 м','200 м','400 м','800 м'], 2, 'Путь = длина траектории, не зависит от того, что бегун вернулся.')
+ quizQuestion('p15-q', 2, 'Единица пути в СИ:', ['Секунда','Метр','Километр','Минута'], 1)
+ '
'
+ quizQuestion('p15-tr', 0, 'Велосипедист проехал $2$ км и вернулся обратно. Какой путь он проехал?', ['0 км','1 км','2 км','4 км'], 3, 'Путь — сумма длин всех участков: $2 + 2 = 4$ км.')
+ quizQuestion('p15-tr', 1, '$5$ мин $= ?$ с', ['50','300','500','3000'], 1)
+ quizQuestion('p15-tr', 2, '$1{,}5$ км $= ?$ м', ['15','150','1 500','15 000'], 2)
+ quizQuestion('p15-tr', 3, 'Может ли путь быть отрицательным?', ['Да','Нет — это длина, всегда $\\ge 0$','Только в нестандартных СО','Зависит от направления'], 1)
+ quizQuestion('p15-tr', 4, 'Что такое траектория?', ['Скорость движения','Линия, по которой движется тело','Длина пути','Время в пути'], 1)
+ '
');
h += readButton('p15');
body.innerHTML = h;
// §15 IV-1: clickable path
const W = 360, H = 220, cell = 20;
const points = [];
function draw15(){
let s = '';
// Сетка
for(let x = 0; x <= W; x += cell) s += '';
for(let y = 0; y <= H; y += cell) s += '';
// Линии между точками
if(points.length > 1){
let d = 'M ' + points[0].x + ' ' + points[0].y;
for(let i = 1; i < points.length; i++) d += ' L ' + points[i].x + ' ' + points[i].y;
s += '';
}
// Точки
points.forEach((p, i) => {
s += '';
if(i === 0) s += 'старт';
else if(i === points.length - 1) s += '' + (i+1) + '';
});
document.getElementById('p15-svg').innerHTML = s;
// Считаем путь
let total = 0;
for(let i = 1; i < points.length; i++){
total += Math.hypot(points[i].x - points[i-1].x, points[i].y - points[i-1].y);
}
const meters = (total / cell);
document.getElementById('p15-info').innerHTML = points.length < 2
? 'Кликай по клеткам, чтобы построить путь. (Кликнуто: ' + points.length + ')'
: 'Точек: ' + points.length + ' · Путь $s = $ ' + meters.toFixed(1) + ' м';
renderMath(document.getElementById('p15-info'));
}
document.getElementById('p15-svg').addEventListener('click', e => {
const rect = e.target.getBoundingClientRect();
const svgW = rect.width, svgH = rect.height;
const rawX = (e.clientX - rect.left) * (W / svgW);
const rawY = (e.clientY - rect.top) * (H / svgH);
const x = Math.round(rawX / cell) * cell;
const y = Math.round(rawY / cell) * cell;
points.push({ x, y });
draw15();
});
document.getElementById('p15-reset').addEventListener('click', () => { points.length = 0; draw15(); });
draw15();
wireDnd('p15-dnd', [
{ id:'a1', cat:'st' },{ id:'a2', cat:'st' },{ id:'a3', cat:'cv' },
{ id:'a4', cat:'cv' },{ id:'a5', cat:'cl' },{ id:'a6', cat:'cl' }
]);
wireQuiz('p15-q-host', () => { if(window.addXp) window.addXp(10, 'q-p15'); });
wireQuiz('p15-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p15'); });
wireReadBtn('p15');
renderMath(body);
}
/* ========================================================== */
/* §16 — Равномерное движение. Скорость */
/* ========================================================== */
function add_p16(){
const body = document.getElementById('p16-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Равномерное прямолинейное движение', '§ 16.1',
'Равномерное — это движение, при котором за любые равные промежутки времени тело проходит равные расстояния.
'
+ 'Скорость такого движения: '
+ '$$v = \\dfrac{s}{t}$$ '
+ '$[v] = $ м/с (или км/ч). Это векторная величина — у неё есть направление, но в 7-м классе мы пишем как скаляр (без минуса).');
h += makeCard('rule', 'Единицы скорости', '§ 16.2',
'
'
+ 'Из формулы $v = s/t$ можно выразить и другие: $s = v t$, $t = s/v$.');
/* IV-1 СИМ: автомобиль с slider v */
h += wgWrap('p16-iv1', 'СИМ', 'Автомобиль со скоростью v', 'Меняй скорость — наблюдай, как меняется путь за одно и то же время.',
''
+ ''
+ '');
/* IV-2 КАЛЬК: v = s/t */
h += wgWrap('p16-iv2', 'КАЛЬК', 'Калькулятор $v = s/t$', '',
'
'
+ ''
+ ''
+ '
'
+ '
'
+ '$v = s/t = $ 5 м/с $= $ 18 км/ч'
+ '
');
/* IV-3 DnD: скорости из жизни */
h += wgWrap('p16-iv3', 'DnD', 'Скорости в жизни', 'Сопоставь объекты с их скоростями.',
dndPool('p16-dnd', [
{ id:'a1', cat:'low', html:'$1$ м/с' },
{ id:'a2', cat:'low', html:'$5$ км/ч' },
{ id:'a3', cat:'mid', html:'$60$ км/ч' },
{ id:'a4', cat:'mid', html:'$20$ м/с' },
{ id:'a5', cat:'high', html:'$900$ км/ч' },
{ id:'a6', cat:'high', html:'$340$ м/с' }
], [
{ cat:'low', label:'Пешеход' },
{ cat:'mid', label:'Машина / велосипедист' },
{ cat:'high', label:'Самолёт / звук' }
]));
/* IV-4 ТРН */
h += wgWrap('p16-iv4', 'ТРН', 'Тренажёр §16', '',
'
'
+ quizQuestion('p16-tr', 0, 'Велосипедист за $30$ с проехал $150$ м. Скорость?', ['3 м/с','5 м/с','10 м/с','15 м/с'], 1, '$v = s/t = 150/30 = 5$ м/с.')
+ quizQuestion('p16-tr', 1, 'Автобус едет $54$ км/ч. Какой это путь за $10$ с?', ['90 м','120 м','150 м','180 м'], 2, '$v = 54/3{,}6 = 15$ м/с; $s = vt = 15 \\cdot 10 = 150$ м.')
+ quizQuestion('p16-tr', 2, 'Самолёт пролетает $720$ км за $1$ ч $30$ мин. Скорость в км/ч?', ['360','480','540','720'], 1, '$1$ ч $30$ мин $= 1{,}5$ ч. $v = 720/1{,}5 = 480$ км/ч.')
+ quizQuestion('p16-tr', 3, 'За какое время поезд проедет $300$ км со скоростью $100$ км/ч?', ['1 ч','2 ч','3 ч','4 ч'], 2, '$t = s/v = 300/100 = 3$ ч.')
+ quizQuestion('p16-tr', 4, 'Звук в воздухе $340$ м/с. Сколько это км/ч?', ['1024 км/ч','1224 км/ч','1340 км/ч','1500 км/ч'], 1, '$340 \\cdot 3{,}6 = 1224$ км/ч.')
+ '
');
h += readButton('p16');
body.innerHTML = h;
// §16 IV-1: car sim
let frame16 = 0, raf16 = 0;
function draw16(){
const v = +document.getElementById('p16-v-r').value;
document.getElementById('p16-v').textContent = v;
const W = 380, H = 110;
const t = frame16 / 60; // секунды (60 fps)
const pxPerM = 5;
let pos = (v * t * pxPerM) % (W - 60);
let s = '';
s += '';
s += '';
// Разметка
for(let x = 0; x < W; x += 20){
s += '';
}
// Машина
s += '';
s += '';
s += '';
s += '';
s += '';
document.getElementById('p16-svg').innerHTML = s;
const traveled = (v * t).toFixed(1);
document.getElementById('p16-info').innerHTML = '$v = ' + v + '$ м/с · время $t = ' + t.toFixed(1) + '$ с · путь $s = vt = $ ' + traveled + ' м';
renderMath(document.getElementById('p16-info'));
}
function loop16(){
frame16 += 1;
if(!document.getElementById('p16-svg')){ cancelAnimationFrame(raf16); return; }
draw16();
raf16 = requestAnimationFrame(loop16);
}
document.getElementById('p16-v-r').addEventListener('input', () => { frame16 = 0; draw16(); });
raf16 = requestAnimationFrame(loop16);
// §16 IV-2: calc v=s/t
const upd16c = () => {
const s = +document.getElementById('p16c-s-r').value;
const t = +document.getElementById('p16c-t-r').value;
document.getElementById('p16c-s').textContent = s;
document.getElementById('p16c-t').textContent = t;
const v = s / t;
document.getElementById('p16c-v').textContent = v.toFixed(2);
document.getElementById('p16c-vkmh').textContent = (v * 3.6).toFixed(1);
};
['p16c-s-r','p16c-t-r'].forEach(id => document.getElementById(id).addEventListener('input', upd16c));
upd16c();
wireDnd('p16-dnd', [
{ id:'a1', cat:'low' },{ id:'a2', cat:'low' },{ id:'a3', cat:'mid' },
{ id:'a4', cat:'mid' },{ id:'a5', cat:'high' },{ id:'a6', cat:'high' }
]);
wireQuiz('p16-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p16'); });
wireReadBtn('p16');
renderMath(body);
}
/* ========================================================== */
/* §17 — Графики пути и скорости (ГЛАВНЫЙ ВИЗУАЛ КИНЕМАТИКИ) */
/* ========================================================== */
function add_p17(){
const body = document.getElementById('p17-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'График $s(t)$', '§ 17.1',
'При равномерном движении путь растёт линейно со временем: $s = v t$. '
+ 'На графике «путь от времени» — это прямая линия, проходящая через начало координат '
+ '(если в момент $t = 0$ тело было в стартовой точке).
'
+ 'Наклон прямой равен скорости $v$. Чем круче линия — тем быстрее движется тело.');
h += makeCard('rule', 'График $v(t)$', '§ 17.2',
'При равномерном движении скорость постоянна: $v(t) = $ const. '
+ 'На графике «скорость от времени» — это горизонтальная линия.
'
+ 'Площадь под графиком $v(t)$ равна пройденному пути: $s = v \\cdot t$ (площадь прямоугольника).');
h += makeCard('example', 'Два тела на одном графике', '§ 17.3',
'Если на $s(t)$ две прямые — та, у которой больше наклон, движется быстрее. '
+ 'Если линии пересекаются — в эту точку оба тела пришли одновременно. '
+ 'Параллельные прямые → одинаковые скорости.');
/* IV-1 ГЛАВНЫЙ ВИЗУАЛ: интерактивные графики */
h += wgWrap('p17-iv1', 'СИМ', 'Главный визуал: графики s(t) и v(t)', 'Меняй $v_1$ и $v_2$ — наблюдай два тела одновременно.',
'
'
+ quizQuestion('p17-tr', 0, 'Тело прошло $40$ м за $8$ с равномерно. Скорость $v$?', ['3 м/с','4 м/с','5 м/с','8 м/с'], 2)
+ quizQuestion('p17-tr', 1, 'На графике $v(t)$ — линия $v = 4$ м/с. Какой путь за $6$ с?', ['10 м','18 м','24 м','30 м'], 2, '$s = vt = 4 \\cdot 6 = 24$ м (площадь прямоугольника).')
+ quizQuestion('p17-tr', 2, 'Два тела. На $s(t)$ первое — прямая $s = 2t$, второе — $s = 5t$. Кто быстрее?', ['Первое','Второе','Одинаково','Нельзя определить'], 1, '$v_2 = 5$ м/с $> v_1 = 2$ м/с.')
+ quizQuestion('p17-tr', 3, 'Тело покоится. Как выглядит $s(t)$?', ['Прямая через 0','Горизонтальная линия','Линия под углом 45°','Парабола'], 1)
+ '
');
h += readButton('p17');
body.innerHTML = h;
// §17 IV-1 graphs
function draw17(){
const v1 = +document.getElementById('p17-v1-r').value;
const v2 = +document.getElementById('p17-v2-r').value;
document.getElementById('p17-v1').textContent = v1;
document.getElementById('p17-v2').textContent = v2;
const W = 220, H = 170, pad = 30;
const tMax = 10, vMax = 12, sMax = 100;
// s(t)
function toXs(t){ return pad + (W - 2*pad) * t / tMax; }
function toYs(s){ return H - pad - (H - 2*pad) * s / sMax; }
let ss = '';
ss += '';
ss += '';
ss += 't, с';
ss += 's, м';
// ticks
for(let t = 0; t <= tMax; t += 2){
const x = toXs(t);
ss += '';
if(t > 0) ss += '' + t + '';
}
for(let s = 0; s <= sMax; s += 20){
const y = toYs(s);
ss += '';
if(s > 0) ss += '' + s + '';
}
// Lines
ss += '';
ss += '';
ss += 'тело 1: v=' + v1 + '';
ss += 'тело 2: v=' + v2 + '';
document.getElementById('p17-svg-s').innerHTML = ss;
// v(t)
function toYv(v){ return H - pad - (H - 2*pad) * v / vMax; }
let sv = '';
sv += '';
sv += '';
sv += 't, с';
sv += 'v, м/с';
for(let t = 0; t <= tMax; t += 2){
const x = toXs(t);
sv += '';
if(t > 0) sv += '' + t + '';
}
for(let v = 0; v <= vMax; v += 2){
const y = toYv(v);
sv += '';
if(v > 0) sv += '' + v + '';
}
// Площадь под v1 (заливка)
sv += '';
sv += '';
sv += '';
sv += 's₁ = v₁·t';
document.getElementById('p17-svg-v').innerHTML = sv;
// Info
document.getElementById('p17-info').innerHTML = 'За $t = 10$ с тело 1 пройдёт $s_1 = v_1 t = ' + (v1 * 10) + '$ м, тело 2 — $s_2 = v_2 t = ' + (v2 * 10) + '$ м. ' + (v1 === v2 ? 'Скорости равны — графики $s(t)$ параллельны.' : 'Скорости разные → разный наклон.');
renderMath(document.getElementById('p17-info'));
}
['p17-v1-r','p17-v2-r'].forEach(id => document.getElementById(id).addEventListener('input', draw17));
draw17();
wireDnd('p17-dnd', [
{ id:'a1', cat:'st_rest' },{ id:'a2', cat:'st_move' },{ id:'a3', cat:'v_rest' },
{ id:'a4', cat:'v_move' },{ id:'a5', cat:'st_move' },{ id:'a6', cat:'v_move' }
]);
wireQuiz('p17-q-host', () => { if(window.addXp) window.addXp(10, 'q-p17'); });
wireQuiz('p17-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p17'); });
wireReadBtn('p17');
renderMath(body);
}
/* ========================================================== */
/* §18 — Неравномерное движение. Средняя скорость */
/* ========================================================== */
function add_p18(){
const body = document.getElementById('p18-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Неравномерное движение', '§ 18.1',
'В реальности тела почти никогда не движутся идеально равномерно: машина в городе разгоняется, тормозит у светофоров, '
+ 'снова разгоняется. Скорость меняется со временем — это неравномерное (переменное) движение.
'
+ 'Чтобы охарактеризовать его «в среднем», используют среднюю скорость.');
h += makeCard('rule', 'Формула средней скорости', '§ 18.2',
'$$\\langle v\\rangle = \\dfrac{s_{полн}}{t_{полн}}$$ '
+ '«Средняя скорость = весь путь, делённый на всё время».
'
+ 'Внимание! Часто путают: $\\langle v\\rangle \\ne (v_1 + v_2)/2$ — среднеарифметическое не работает, '
+ 'если на участках разное время. Среднее по пути считается через массы (произведение $v \\cdot t$ на каждом участке).');
h += makeCard('example', 'Пешеход и метро', '§ 18.3',
'Девочка прошла пешком $0{,}5$ км за $10$ мин, потом проехала $5$ км на метро за $10$ мин. '
+ '$s_{полн} = 0{,}5 + 5 = 5{,}5$ км, $t_{полн} = 20$ мин $= 1/3$ ч. '
+ '$\\langle v\\rangle = 5{,}5 / (1/3) = 16{,}5$ км/ч.
'
+ 'Хотя метро ехало $30$ км/ч, а пешком — $3$ км/ч, средняя — не $(30+3)/2 = 16{,}5$. Совпало здесь только потому, что время оказалось равным!');
/* IV-1 КАЛЬК */
h += wgWrap('p18-iv1', 'КАЛЬК', 'Средняя на двух участках', 'Меняй $v_1, t_1, v_2, t_2$ — сравнивай среднюю и среднеарифметическое.',
'
');
/* IV-2 КВИЗ */
h += wgWrap('p18-iv2', 'КВИЗ', 'Среднеарифметическое и средняя', '',
'
'
+ quizQuestion('p18-q', 0, 'Когда $\\langle v\\rangle$ равна среднему арифметическому?', ['Всегда','Когда время на участках одинаковое','Когда путь одинаковый','Никогда'], 1, 'Среднее арифметическое — это $\\langle v\\rangle$ только если $t_1 = t_2$.')
+ quizQuestion('p18-q', 1, 'Половину пути тело шло $5$ м/с, вторую половину — $20$ м/с. $\\langle v\\rangle$ ближе к…', ['5 м/с','12,5 м/с','20 м/с','8 м/с'], 3, 'Если одинаковые пути, то $\\langle v\\rangle = 2 v_1 v_2 / (v_1 + v_2) = 8$ м/с (ближе к меньшей).')
+ quizQuestion('p18-q', 2, 'Если тело часть времени стояло (т.е. $v = 0$), $\\langle v\\rangle$ всего пути…', ['Стала больше','Уменьшилась','Не изменилась','Стала равна нулю'], 1)
+ '
');
/* IV-3 DnD */
h += wgWrap('p18-iv3', 'DnD', 'Какое движение?', '',
dndPool('p18-dnd', [
{ id:'a1', cat:'eq', html:'Лифт между этажами на постоянной скорости' },
{ id:'a2', cat:'eq', html:'Шарик в воде, опускающийся равномерно' },
{ id:'a3', cat:'neq', html:'Машина в городе' },
{ id:'a4', cat:'neq', html:'Падающий камень (в воздухе)' },
{ id:'a5', cat:'neq', html:'Поезд от станции до станции' },
{ id:'a6', cat:'eq', html:'Звук в воздухе на короткой дистанции' }
], [
{ cat:'eq', label:'Равномерное' },
{ cat:'neq', label:'Неравномерное' }
]));
/* IV-4 ТРН */
h += wgWrap('p18-iv4', 'ТРН', 'Тренажёр §18', '',
'
'
+ quizQuestion('p18-tr', 0, 'Тело прошло $60$ м за $4$ с и ещё $80$ м за $6$ с. $\\langle v\\rangle$?', ['10 м/с','12 м/с','14 м/с','15 м/с'], 2, '$\\langle v\\rangle = (60+80)/(4+6) = 140/10 = 14$ м/с.')
+ quizQuestion('p18-tr', 1, 'Машина $1$ ч ехала $60$ км/ч, потом $2$ ч — $90$ км/ч. $\\langle v\\rangle$ в км/ч?', ['70','75','80','85'], 2, '$(60 \\cdot 1 + 90 \\cdot 2)/(1+2) = 240/3 = 80$ км/ч.')
+ quizQuestion('p18-tr', 2, 'Поезд проехал $300$ км за $5$ ч, при этом $1$ ч стоял на станции. Средняя скорость движения?', ['50 км/ч','60 км/ч','75 км/ч','100 км/ч'], 2, '«Средняя скорость движения» — без учёта стоянки: $300 / (5-1) = 75$ км/ч.')
+ quizQuestion('p18-tr', 3, 'Велосипедист первые $5$ км ехал $20$ мин, ещё $5$ км — $40$ мин. $\\langle v\\rangle$?', ['7,5 км/ч','10 км/ч','12 км/ч','15 км/ч'], 1, '$s = 10$ км, $t = 1$ ч. $\\langle v\\rangle = 10$ км/ч.')
+ '
');
h += readButton('p18');
body.innerHTML = h;
// §18 IV-1
const upd18 = () => {
const v1 = +document.getElementById('p18-v1-r').value;
const t1 = +document.getElementById('p18-t1-r').value;
const v2 = +document.getElementById('p18-v2-r').value;
const t2 = +document.getElementById('p18-t2-r').value;
document.getElementById('p18-v1').textContent = v1;
document.getElementById('p18-t1').textContent = t1;
document.getElementById('p18-v2').textContent = v2;
document.getElementById('p18-t2').textContent = t2;
const vavg = (v1*t1 + v2*t2)/(t1+t2);
const arith = (v1+v2)/2;
document.getElementById('p18-vavg').textContent = vavg.toFixed(2);
document.getElementById('p18-trap').textContent = arith.toFixed(2);
const same = Math.abs(vavg - arith) < 0.01;
document.getElementById('p18-trap-lbl').textContent = same ? 'СОВПАЛО (t₁ = t₂)' : 'НЕВЕРНО';
document.getElementById('p18-trap-lbl').style.color = same ? '#10b981' : '#dc2626';
};
['p18-v1-r','p18-t1-r','p18-v2-r','p18-t2-r'].forEach(id => document.getElementById(id).addEventListener('input', upd18));
upd18();
wireDnd('p18-dnd', [
{ id:'a1', cat:'eq' },{ id:'a2', cat:'eq' },{ id:'a3', cat:'neq' },
{ id:'a4', cat:'neq' },{ id:'a5', cat:'neq' },{ id:'a6', cat:'eq' }
]);
wireQuiz('p18-q-host', () => { if(window.addXp) window.addXp(10, 'q-p18'); });
wireQuiz('p18-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p18'); });
wireReadBtn('p18');
renderMath(body);
}
/* ========================================================== */
/* §19 — Инерция */
/* ========================================================== */
function add_p19(){
const body = document.getElementById('p19-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Закон инерции Галилея', '§ 19.1',
'Тело сохраняет состояние покоя или равномерного прямолинейного движения, '
+ 'пока на него не действуют другие тела (или действия уравновешены).
'
+ 'Это явление называется инерцией. Оно открыто Галилеем в начале XVII века.');
h += makeCard('rule', 'Что меняет скорость', '§ 19.2',
'Чтобы изменить скорость тела (величину или направление), нужно воздействие другого тела:'
+ '
'
+ '
Толкнули — мяч полетел.
'
+ '
Поймали — мяч остановился.
'
+ '
Если на тело ничего не действует, оно само собой двигаться/останавливаться не может.
'
+ '
'
+ 'Тело сопротивляется изменению скорости. Мера этой инертности — масса: тяжёлое тело сложнее разогнать и сложнее остановить.');
h += makeCard('example', 'Пассажиры в автобусе', '§ 19.3',
'Автобус резко тормозит. Пассажиры (которые ещё не получили воздействие от спинки сиденья) '
+ 'по инерции продолжают двигаться вперёд — поэтому их «бросает» вперёд. '
+ 'Автобус резко трогается. Пассажиры по инерции пока остаются на месте, а автобус «уезжает из-под них» — их откидывает назад. '
+ 'Поэтому в транспорте важно держаться или пристёгиваться.');
/* IV-1 СИМ: шарик на гладком столе с переключателем «удар»/«трение» */
h += wgWrap('p19-iv1', 'СИМ', 'Шарик: с трением и без', 'Запусти шарик и сравни: с трением он остановится, без трения — будет двигаться вечно.',
'
'
+ ''
+ ''
+ '
'
+ ''
+ '');
/* IV-2 КВИЗ */
h += wgWrap('p19-iv2', 'КВИЗ', 'Инерция в жизни', '',
'
'
+ quizQuestion('p19-q', 0, 'Автобус резко тормозит. Куда «летят» пассажиры?', ['Вверх','Вниз','Вперёд','Назад'], 2, 'По инерции тело сохраняет движение вперёд.')
+ quizQuestion('p19-q', 1, 'Без действия других тел тело будет…', ['Останавливаться','Сохранять скорость или покой','Самопроизвольно ускоряться','Разваливаться'], 1)
+ quizQuestion('p19-q', 2, 'Что является мерой инертности тела?', ['Размер','Цвет','Масса','Объём'], 2)
+ quizQuestion('p19-q', 3, 'Кто сформулировал закон инерции?', ['Архимед','Галилей','Ньютон','Эйнштейн'], 1)
+ '
'
+ quizQuestion('p19-tr', 0, 'На тело не действуют другие тела. Что произойдёт?', ['Оно остановится','Оно ускорится','Оно сохранит скорость и направление','Невозможно сказать'], 2)
+ quizQuestion('p19-tr', 1, 'Почему машина после выключения мотора всё-таки тормозит?', ['Из-за инерции','Из-за силы трения о дорогу и сопротивления воздуха','Сама по себе','Из-за гравитации'], 1)
+ quizQuestion('p19-tr', 2, 'У какого тела инертность больше: у $1$ кг или $10$ кг?', ['1 кг','10 кг','Одинакова','Зависит от формы'], 1)
+ quizQuestion('p19-tr', 3, 'Зачем нужны ремни безопасности в машине?', ['Чтобы держать форму сиденья','Чтобы при резком торможении не «улететь» по инерции вперёд','Для красоты','Чтобы не сидеть прямо'], 1)
+ '
');
h += readButton('p19');
body.innerHTML = h;
// §19 IV-1 sim
let p19 = { x: 30, v: 0, friction: true, raf: 0 };
function draw19(){
const svg = document.getElementById('p19-svg');
if(!svg){ cancelAnimationFrame(p19.raf); return; }
if(p19.friction && p19.v > 0){
p19.v -= 0.04;
if(p19.v < 0) p19.v = 0;
}
p19.x += p19.v;
if(p19.x > 350){ p19.x = 350; p19.v = 0; }
let s = '';
s += '';
s += '';
if(!p19.friction){
s += 'идеально гладкая поверхность';
} else {
// Зубчатая текстура трения
for(let i = 0; i < 18; i++) s += '';
}
s += '';
svg.innerHTML = s;
document.getElementById('p19-info').innerHTML = 'Скорость шарика: ' + p19.v.toFixed(2) + ' у. е. ' + (p19.friction ? '(с трением — тормозит)' : '(без трения — будет двигаться вечно)');
if(p19.v > 0 || !p19.friction) p19.raf = requestAnimationFrame(draw19);
}
document.getElementById('p19-launch').addEventListener('click', () => { p19.x = 30; p19.v = 3.5; if(p19.raf) cancelAnimationFrame(p19.raf); draw19(); });
document.getElementById('p19-toggle').addEventListener('click', () => {
p19.friction = !p19.friction;
const btn = document.getElementById('p19-toggle');
btn.textContent = 'Трение: ' + (p19.friction ? 'ВКЛ' : 'ВЫКЛ');
btn.style.background = p19.friction ? '#fff' : '#10b981';
btn.style.color = p19.friction ? '#dc2626' : '#fff';
btn.style.borderColor = p19.friction ? '#dc2626' : '#10b981';
if(!p19.friction && p19.v === 0){ p19.v = 1.5; if(p19.raf) cancelAnimationFrame(p19.raf); draw19(); }
});
draw19();
wireDnd('p19-dnd', [
{ id:'a1', cat:'easy' },{ id:'a2', cat:'easy' },{ id:'a3', cat:'mid' },
{ id:'a4', cat:'mid' },{ id:'a5', cat:'hard' },{ id:'a6', cat:'hard' }
]);
wireQuiz('p19-q-host', () => { if(window.addXp) window.addXp(10, 'q-p19'); });
wireQuiz('p19-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p19'); });
wireReadBtn('p19');
renderMath(body);
}
/* ========================================================== */
/* §20 — Масса тела. Плотность вещества */
/* ========================================================== */
function add_p20(){
const body = document.getElementById('p20-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Что такое масса', '§ 20.1',
'Масса $m$ — физическая величина, характеризующая количество вещества в теле '
+ 'и инертность (то, как трудно изменить скорость тела).
'
+ '$[m] = $ кг (килограмм) — основная единица СИ. Кратные: $1$ т = $1000$ кг; '
+ 'дольные: $1$ г = $0{,}001$ кг.');
h += makeCard('rule', 'Плотность вещества', '§ 20.2',
'Плотность $\\rho$ показывает, какая масса вещества содержится в единице объёма: '
+ '$$\\rho = \\dfrac{m}{V}$$ '
+ '$[\\rho] = $ кг/м³. Также используют г/см³: $1$ г/см³ $= 1000$ кг/м³.
'
+ 'Из формулы $\\rho = m/V$ можно выразить и другие: $m = \\rho V$, $V = m/\\rho$.');
h += makeCard('example', 'Таблица плотностей', '§ 20.3',
'