'
+ 'Чтобы описать движение, нужно выбрать тело отсчёта — то, относительно которого смотрим. '
+ 'Тело отсчёта + связанные с ним оси координат + часы = система отсчёта (СО).');
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',
'
'
+ '$[F] = $ Н (ньютон) — в честь Исаака Ньютона.');
h += makeCard('rule', 'Что значит «изобразить силу»', '§ 21.2',
'У силы три характеристики (поэтому её рисуют стрелкой — вектором):'
+ '
'
+ '
Модуль (длина стрелки) — численное значение в ньютонах.
'
+ '
Направление — куда направлена стрелка.
'
+ '
Точка приложения — где начало стрелки (где сила «приложена» к телу).
'
+ '
');
h += makeCard('example', 'Четыре силы из жизни', '§ 21.3',
'
');
/* IV-1 СИМ: визуал силы со стрелкой */
h += wgWrap('p21-iv1', 'СИМ', 'Сила-стрелка', 'Меняй модуль и направление — посмотри, как меняется стрелка.',
'
'
+ ''
+ ''
+ '
'
+ '');
/* IV-2 КВИЗ */
h += wgWrap('p21-iv2', 'КВИЗ', 'Что такое сила', '',
'
'
+ quizQuestion('p21-q', 0, 'В каких единицах измеряют силу?', ['Килограммы','Метры','Ньютоны','Джоули'], 2)
+ quizQuestion('p21-q', 1, 'Сила — это…', ['Скалярная величина','Векторная величина','Время','Длина'], 1)
+ quizQuestion('p21-q', 2, 'Что НЕ относится к характеристикам силы?', ['Модуль','Направление','Точка приложения','Цвет'], 3)
+ quizQuestion('p21-q', 3, 'Что произойдёт с покоящимся телом, если на него действует одна сила?', ['Ничего','Тело изменит скорость','Тело пропадёт','Не меняется'], 1, 'Если силы не уравновешены — тело меняет скорость.')
+ '
'
+ quizQuestion('p21-tr', 0, 'Силу обозначают…', ['$s$','$v$','$F$','$t$'], 2)
+ quizQuestion('p21-tr', 1, 'Сила — мера…', ['Длины','Времени','Взаимодействия тел','Объёма'], 2)
+ quizQuestion('p21-tr', 2, 'В каких единицах СИ выражают силу?', ['Кг','Н (ньютоны)','Дж','м/с²'], 1)
+ quizQuestion('p21-tr', 3, 'Что нужно для того, чтобы изобразить силу?', ['Только число','Только направление','Стрелка с заданной длиной, направлением и точкой приложения','Только подпись'], 2)
+ '
');
h += readButton('p21');
body.innerHTML = h;
function draw21(){
const F = +document.getElementById('p21-F-r').value;
const ang = +document.getElementById('p21-ang-r').value;
document.getElementById('p21-F').textContent = F;
document.getElementById('p21-ang').textContent = ang;
const cx = 150, cy = 110;
const len = F * 2.5;
const a = -ang * Math.PI / 180;
const x2 = cx + len * Math.cos(a);
const y2 = cy + len * Math.sin(a);
let s = '';
// Тело — кружок
s += '';
// Стрелка силы
s += '';
// Наконечник
const ah = 10;
const ax1 = x2 - ah * Math.cos(a - 0.4);
const ay1 = y2 - ah * Math.sin(a - 0.4);
const ax2 = x2 - ah * Math.cos(a + 0.4);
const ay2 = y2 - ah * Math.sin(a + 0.4);
s += '';
// Подпись
s += 'F = ' + F + ' Н';
document.getElementById('p21-svg').innerHTML = s;
}
['p21-F-r','p21-ang-r'].forEach(id => document.getElementById(id).addEventListener('input', draw21));
draw21();
wireDnd('p21-dnd', [
{ id:'a1', cat:'grav' },{ id:'a2', cat:'grav' },{ id:'a3', cat:'el' },{ id:'a4', cat:'el' },
{ id:'a5', cat:'fr' },{ id:'a6', cat:'fr' },{ id:'a7', cat:'norm' },{ id:'a8', cat:'norm' }
]);
wireQuiz('p21-q-host', () => { if(window.addXp) window.addXp(10, 'q-p21'); });
wireQuiz('p21-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p21'); });
wireReadBtn('p21');
renderMath(body);
}
/* ========================================================== */
/* §22 — Сила тяжести */
/* ========================================================== */
function add_p22(){
const body = document.getElementById('p22-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Притяжение к Земле', '§ 22.1',
'Земля притягивает все тела возле своей поверхности. Сила, с которой Земля действует на тело, '
+ 'называется силой тяжести $\\vec F_т$. Она направлена вертикально вниз '
+ '(точнее — к центру Земли).');
h += makeCard('rule', 'Формула силы тяжести', '§ 22.2',
'$$F_т = m g$$ '
+ 'где $m$ — масса тела (кг), $g$ — ускорение свободного падения.
'
+ 'На Земле: $g = 9{,}8$ Н/кг (часто округляют до $g \\approx 10$ Н/кг). '
+ 'На Луне: $g_Л \\approx 1{,}6$ Н/кг (в 6 раз меньше). '
+ 'На Марсе: $g_М \\approx 3{,}7$ Н/кг. '
+ 'На Юпитере: $g_Ю \\approx 24{,}8$ Н/кг.');
h += makeCard('example', 'Сколько весит яблоко?', '§ 22.3',
'Масса среднего яблока $m = 100$ г $= 0{,}1$ кг. На Земле: '
+ '$F_т = mg = 0{,}1 \\cdot 9{,}8 \\approx 1$ Н.
'
+ 'Поэтому 1 ньютон — это «сила, с которой Земля притягивает 100 г».');
/* IV-1 КАЛЬК: F_т = mg, выбор планеты */
h += wgWrap('p22-iv1', 'КАЛЬК', 'Сила тяжести на разных планетах', 'Выбери планету и тело — узнай, как меняется $F_т$.',
'
'
+ '$F_т = m g = $ 0.98 Н (на Земле, $g = $ 9.8 Н/кг)'
+ '
');
/* IV-2 СИМ — Падение тела на 4 планетах */
h += wgWrap('p22-iv2', 'СИМ', 'Падение с одной высоты на 4 планетах', 'Нажми «Уронить» — увидь, кто упадёт быстрее. Время и скорость в реальном времени.',
'
'
+ quizQuestion('p22-q', 0, 'Куда направлена сила тяжести на поверхности Земли?', ['Вверх','Вертикально вниз (к центру Земли)','В сторону Солнца','В произвольном направлении'], 1)
+ quizQuestion('p22-q', 1, '$g$ на Земле примерно равно…', ['1 Н/кг','9,8 Н/кг','100 Н/кг','1000 Н/кг'], 1)
+ quizQuestion('p22-q', 2, 'На Луне $g_Л$ примерно в 6 раз меньше земного. Что произойдёт с $F_т$ камня?', ['Не изменится','Увеличится в 6 раз','Уменьшится в 6 раз','Станет нулевой'], 2)
+ quizQuestion('p22-q', 3, 'Масса остаётся постоянной на Земле и Луне, а сила тяжести?', ['Тоже постоянна','Уменьшается на Луне','Увеличивается на Луне','Зависит от формы тела'], 1, 'Масса = «количество вещества», она не меняется. А $F_т = mg$ меняется через $g$.')
+ '
'
+ 'Природа этой силы — взаимодействие молекул, изученное в §10.');
h += makeCard('rule', 'Закон Гука (качественно)', '§ 23.2',
'$$F_{упр} \\sim \\Delta l$$ '
+ 'Сила упругости пропорциональна удлинению $\\Delta l$. '
+ 'То есть в 2 раза больше растянули → в 2 раза больше сила.
'
+ 'Внимание: закон работает только пока деформация мала. Если перерастянуть пружину — '
+ 'она не вернётся в исходное положение (пластическая деформация).');
h += makeCard('example', 'Где встречается', '§ 23.3',
'
'
+ '
Пружина матраса, ручки, амортизатора.
'
+ '
Резинка для волос, рогатка.
'
+ '
Лук: тетива растянута → возвращает стрелу.
'
+ '
Опора прогибается под весом и отвечает реакцией $\\vec N$ — это тоже упругая сила.
'
+ '
');
/* IV-1 СИМ: пружина с slider */
h += wgWrap('p23-iv1', 'СИМ', 'Пружина: растяжение и сила', 'Меняй удлинение — увидь, как растёт сила упругости.',
''
+ ''
+ '');
/* IV-2 КВИЗ */
h += wgWrap('p23-iv2', 'КВИЗ', 'Упругость', '',
'
'
+ quizQuestion('p23-q', 0, 'Когда возникает сила упругости?', ['Всегда','Только в жидкостях','При деформации тела','При движении'], 2)
+ quizQuestion('p23-q', 1, 'Куда направлена $\\vec F_{упр}$?', ['В сторону деформации','Против деформации (возвращает в исходное)','Вертикально вниз','Зависит от тела'], 1)
+ quizQuestion('p23-q', 2, 'Если растянуть пружину в 3 раза сильнее, $F_{упр}$ изменится…', ['Не изменится','Увеличится в 3 раза','Уменьшится в 3 раза','Увеличится в 9 раз'], 1, 'Это закон Гука: $F \\sim \\Delta l$.')
+ '
'
+ quizQuestion('p23-tr', 0, 'Природа силы упругости — это…', ['Гравитация','Взаимодействие молекул','Магнетизм','Электричество'], 1)
+ quizQuestion('p23-tr', 1, 'Если пружину растянуть слишком сильно, она…', ['Останется упругой','Может остаться растянутой (пластическая деформация)','Станет тяжелее','Не изменится'], 1)
+ quizQuestion('p23-tr', 2, 'Что является примером упругой деформации?', ['Растяжение пружины и возврат','Лепка из пластилина','Раскалывание камня','Резка хлеба'], 0)
+ quizQuestion('p23-tr', 3, 'Какая из сил из жизни — упругая?', ['Сила тяжести','Сила трения','Реакция опоры $\\vec N$','Лунное притяжение'], 2, 'Опора прогибается и «отвечает» упругой силой.')
+ '
');
h += readButton('p23');
body.innerHTML = h;
function draw23(){
const dl = +document.getElementById('p23-dl-r').value;
document.getElementById('p23-dl').textContent = dl;
const F = dl * 2; // условный коэф. жёсткости 2 Н/см
const W = 380, H = 160;
const topY = 20, hookX = 80;
const naturalLen = 60;
const totalLen = naturalLen + dl * 3.5; // визуально усилено
let s = '';
// Потолок
s += '';
for(let i = 0; i < 6; i++) s += '';
// Подвес
s += '';
// Пружина (зигзаг)
const coils = 8;
let path = 'M ' + hookX + ' ' + topY;
for(let i = 0; i < coils; i++){
const y = topY + (i + 0.5) * (totalLen / coils);
path += ' L ' + (hookX + (i%2 ? 18 : -18)) + ' ' + y;
}
path += ' L ' + hookX + ' ' + (topY + totalLen);
s += '';
// Груз
s += '';
s += 'груз';
// Стрелка F_упр (вверх) и F_т (вниз) если dl>0
if(dl > 0){
const arrY = topY + totalLen + 50;
// F_упр вверх
s += '';
s += '';
s += 'F_упр = ' + F + ' Н ↑';
// F_т вниз
s += '';
s += '';
s += 'F_т ↓';
}
document.getElementById('p23-svg').innerHTML = s;
document.getElementById('p23-info').innerHTML = 'Удлинение $\\Delta l = ' + dl + '$ см · $F_{упр} \\approx $ ' + F + ' Н (при коэф. жёсткости $k = 2$ Н/см)';
renderMath(document.getElementById('p23-info'));
}
document.getElementById('p23-dl-r').addEventListener('input', draw23);
draw23();
wireDnd('p23-dnd', [
{ id:'a1', cat:'def' },{ id:'a2', cat:'def' },{ id:'a3', cat:'def' },
{ id:'a4', cat:'def' },{ id:'a5', cat:'no' },{ id:'a6', cat:'no' }
]);
wireQuiz('p23-q-host', () => { if(window.addXp) window.addXp(10, 'q-p23'); });
wireQuiz('p23-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p23'); });
wireReadBtn('p23');
renderMath(body);
}
/* ========================================================== */
/* §24 — Вес тела */
/* ========================================================== */
function add_p24(){
const body = document.getElementById('p24-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Что такое вес', '§ 24.1',
'Вес $\\vec P$ — это сила, с которой тело давит на опору (или растягивает подвес) '
+ 'вследствие притяжения к Земле.
'
+ 'Это не то же самое, что сила тяжести! Хоть на покоящемся теле они равны по модулю, '
+ 'они приложены к разным телам:'
+ '
'
+ '
$\\vec F_т$ — действует на само тело от Земли;
'
+ '
$\\vec P$ — действует на опору или подвес от тела.
'
+ '
');
h += makeCard('rule', 'Когда $P = F_т$, а когда нет', '§ 24.2',
'Покоится на горизонтальной опоре или висит на нити: $P = F_т = mg$.
'
+ 'Невесомость (свободное падение): $P = 0$ — тело не давит на опору. '
+ 'Космонавт на МКС в невесомости — у него масса есть, $F_т$ от Земли тоже есть, '
+ 'а вот вес $P = 0$, потому что станция падает на Землю вместе с ним.
'
+ 'Перегрузка: в ускоряющемся лифте вверх вес больше $mg$. В лифте вниз — меньше.');
h += makeCard('example', 'Как взвешивают тело', '§ 24.3',
'На чашечных весах сравнивают вес тела и вес гирь. '
+ 'Когда чашечки уравновешены — массы равны (поскольку $g$ одинаков, и $P = mg$).
'
+ 'На пружинных весах (динамометре) измеряют силу, с которой тело растягивает пружину. '
+ 'Это и есть вес тела в Ньютонах.');
/* IV-1 СИМ: динамический лифт с динамометром */
h += wgWrap('p24-iv1', 'СИМ', 'Лифт с динамометром: вес меняется при ускорении', 'Подвинь slider ускорения — увидь, как меняется показание динамометра (вес).',
'
'
+ ''
+ ''
+ '
'
+ '
'
+ [['0','Покой'],['2','Едет вверх с ускорением'],['-2','Едет вниз с ускорением'],['-10','Свободное падение']].map(p =>
'').join('')
+ '
'
+ ''
+ '');
/* IV-2 КВИЗ */
h += wgWrap('p24-iv2', 'КВИЗ', 'Вес vs сила тяжести', '',
'
'
+ quizQuestion('p24-q', 0, 'К чему приложена сила тяжести $\\vec F_т$?', ['К опоре','К самому телу','К центру Земли','К воздуху'], 1)
+ quizQuestion('p24-q', 1, 'К чему приложен вес $\\vec P$?', ['К телу','К опоре или подвесу','К атмосфере','К центру Земли'], 1)
+ quizQuestion('p24-q', 2, 'Космонавт в МКС находится в…', ['Состоянии покоя','Невесомости (P = 0)','Перегрузке','Постоянной силе'], 1)
+ quizQuestion('p24-q', 3, 'Тело $m = 2$ кг лежит на столе. Чему равен вес? ($g = 10$ Н/кг)', ['2 Н','10 Н','20 Н','200 Н'], 2, '$P = mg = 2 \\cdot 10 = 20$ Н.')
+ '
'
+ quizQuestion('p24-tr', 0, '$m = 0{,}5$ кг лежит на столе. Вес (при $g = 10$ Н/кг)?', ['0,5 Н','5 Н','50 Н','500 Н'], 1)
+ quizQuestion('p24-tr', 1, 'Гиря $m = 100$ г висит на нити. Сила, с которой нить растягивается, равна:', ['1 Н','10 Н','100 Н','0,1 Н'], 0, '$P = mg = 0{,}1 \\cdot 10 = 1$ Н.')
+ quizQuestion('p24-tr', 2, 'В свободно падающем лифте чувствует ли пассажир свой вес?', ['Да, как всегда','Нет, наступает невесомость','В 2 раза больше','В 2 раза меньше'], 1)
+ quizQuestion('p24-tr', 3, 'На Луне ($g_Л = 1{,}6$ Н/кг) тело массой $5$ кг весит:', ['5 Н','8 Н','16 Н','50 Н'], 1, '$P = 5 \\cdot 1{,}6 = 8$ Н.')
+ '
');
h += readButton('p24');
body.innerHTML = h;
function draw24(){
const svg = document.getElementById('p24-svg');
if(!svg) return;
const m = +document.getElementById('p24-m-r').value;
const a = +document.getElementById('p24-a-r').value; // положительное = вверх
const g = 10;
// Вес на пружине: P = m(g + a). a > 0 (лифт ускоряется вверх) → P > mg.
// Если лифт в свободном падении (a = -g), P = 0.
const P = Math.max(0, m * (g + a));
const W = 380, H = 260;
// Кабина лифта 160×220, центрирована
const cabX = 110, cabY = 20, cabW = 160, cabH = 220;
let s = '';
// Шахта (стенки)
s += '';
s += '';
// Кабина
s += '';
// Стрелка ускорения слева снаружи
if(Math.abs(a) > 0.3){
const aY = cabY + cabH/2;
const arrLen = Math.min(50, Math.abs(a) * 4);
const dir = a > 0 ? -1 : 1; // вверх = -y, вниз = +y
s += '';
s += '';
s += 'a = ' + (a > 0 ? '+' : '') + a + '';
}
// Динамометр (вертикальный): корпус, пружина, груз
const dynX = cabX + cabW/2, dynTop = cabY + 30;
s += '';
// Корпус
s += '';
// Пружина — длина пропорц. P
const maxStretch = 80;
const Pmax = m * (g + 10); // P при a = +10
const stretch = Math.min(maxStretch, (P / Pmax) * maxStretch);
const sprBot = dynTop + 5 + stretch;
const coils = 6;
let path = 'M ' + dynX + ' ' + (dynTop + 5);
for(let i = 0; i < coils; i++){
path += ' L ' + (dynX + (i%2 ? 9 : -9)) + ' ' + (dynTop + 5 + (i + 0.5) * stretch/coils);
}
path += ' L ' + dynX + ' ' + sprBot;
s += '';
// Шкала справа
for(let i = 0; i <= 10; i++){
const ty = dynTop + 5 + (i / 10) * maxStretch;
s += '';
if(i % 2 === 0) s += '' + ((Pmax * i / 10).toFixed(0)) + '';
}
// Указатель
s += '';
// Груз — кружок снизу пружины
s += '';
s += '' + m + ' кг';
// Показание динамометра в нижней части кабины
s += 'P = ' + P.toFixed(1) + ' Н';
// Подпись режима
let mode, modeCol;
if(Math.abs(P - m*g) < 0.01){ mode = 'ПОКОЙ или равномерно: P = mg'; modeCol = '#475569'; }
else if(P < 0.1){ mode = 'НЕВЕСОМОСТЬ: P = 0'; modeCol = '#10b981'; }
else if(P > m*g){ mode = 'ПЕРЕГРУЗКА: P > mg'; modeCol = '#dc2626'; }
else { mode = 'ПОНИЖЕННЫЙ ВЕС: P < mg'; modeCol = '#0284c7'; }
s += '' + mode + '';
svg.innerHTML = s;
document.getElementById('p24-m').textContent = m;
document.getElementById('p24-a').textContent = a > 0 ? '+' + a : a;
const Ft = m * g;
document.getElementById('p24-info').innerHTML =
'$F_т = mg = ' + Ft.toFixed(1) + '$ Н — сила тяжести на тело (не меняется при ускорении). '
+ '$P = m(g + a) = ' + m + ' \\cdot (' + g + (a >= 0 ? ' + ' : ' − ') + Math.abs(a) + ') = ' + P.toFixed(1) + '$ Н — показание динамометра (вес). '
+ '' + mode + '';
renderMath(document.getElementById('p24-info'));
}
body.querySelectorAll('.p24-preset').forEach(btn => btn.addEventListener('click', () => {
document.getElementById('p24-a-r').value = btn.dataset.a;
draw24();
}));
['p24-m-r','p24-a-r'].forEach(id => document.getElementById(id).addEventListener('input', draw24));
draw24();
wireDnd('p24-dnd', [
{ id:'a1', cat:'ft' },{ id:'a2', cat:'ft' },{ id:'a3', cat:'p' },
{ id:'a4', cat:'p' },{ id:'a5', cat:'zero' },{ id:'a6', cat:'zero' }
]);
wireQuiz('p24-q-host', () => { if(window.addXp) window.addXp(10, 'q-p24'); });
wireQuiz('p24-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p24'); });
wireReadBtn('p24');
renderMath(body);
}
/* ========================================================== */
/* §25 — Динамометр */
/* ========================================================== */
function add_p25(){
const body = document.getElementById('p25-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Принцип работы', '§ 25.1',
'Динамометр (от греч. динамис — сила) — прибор для измерения силы.
'
+ 'В основе — пружина: чем сильнее её растягивают, тем больше она удлиняется. '
+ 'Шкала проградуирована так, чтобы каждому положению указателя соответствовала сила в ньютонах.');
h += makeCard('rule', 'Виды динамометров', '§ 25.2',
'
'
+ '
Школьный лабораторный — обычно $0..4$ Н или $0..10$ Н, цена деления $0{,}1$ Н.
'
+ '
Медицинский (для силы кисти) — до $600$ Н.
'
+ '
Промышленный — для измерения тяги машин, до тысяч Н и больше.
'
+ '
'
+ 'Правила: прибор калибруют в вертикальном положении; не превышай предел шкалы (иначе пружина испортится).');
h += makeCard('example', 'Связь с массой', '§ 25.3',
'Динамометр измеряет силу (например, вес висящего груза). Если знаешь $g$, можно найти массу: '
+ '$$m = \\dfrac{F}{g}$$ '
+ 'Например, динамометр показал $P = 5$ Н. Тогда $m = 5 / 10 = 0{,}5$ кг $= 500$ г.');
/* IV-1 СИМ: виртуальный динамометр */
h += wgWrap('p25-iv1', 'СИМ', 'Виртуальный динамометр', 'Меняй силу — наблюдай растяжение пружины и положение указателя.',
'
');
/* IV-3 DnD */
h += wgWrap('p25-iv3', 'DnD', 'Выбери подходящий динамометр', '',
dndPool('p25-dnd', [
{ id:'a1', cat:'school', html:'Измерить вес гирьки 200 г' },
{ id:'a2', cat:'school', html:'Найти силу упругости школьной пружины' },
{ id:'a3', cat:'med', html:'Измерить силу кисти руки спортсмена' },
{ id:'a4', cat:'med', html:'Тест на здоровье в поликлинике' },
{ id:'a5', cat:'ind', html:'Тяга трактора, тащащего прицеп' },
{ id:'a6', cat:'ind', html:'Сила, с которой буксир тянет баржу' }
], [
{ cat:'school', label:'Школьный (0..10 Н)' },
{ cat:'med', label:'Медицинский (до 600 Н)' },
{ cat:'ind', label:'Промышленный (тысячи Н)' }
]));
/* IV-4 ТРН */
h += wgWrap('p25-iv4', 'ТРН', 'Тренажёр §25', '',
'
'
+ quizQuestion('p25-tr', 0, 'Динамометр показал $F = 4$ Н на Земле ($g = 10$). Масса тела?', ['0,4 кг','4 кг','40 кг','0,04 кг'], 0)
+ quizQuestion('p25-tr', 1, 'Какова цена деления школьного динамометра 0..4 Н с 40 малыми делениями?', ['0,01 Н','0,1 Н','0,4 Н','1 Н'], 1, '$C = 4/40 = 0{,}1$ Н.')
+ quizQuestion('p25-tr', 2, 'Принцип работы динамометра основан на…', ['Силе тяжести','Растяжении пружины (упругая сила)','Магнитном поле','Электричестве'], 1)
+ quizQuestion('p25-tr', 3, 'Что произойдёт, если превысить предел шкалы?', ['Ничего','Пружина испортится','Прибор сам сломается','Подаст звуковой сигнал'], 1)
+ '
');
h += readButton('p25');
body.innerHTML = h;
function draw25(){
const F = +document.getElementById('p25-F-r').value;
const Fmax = +document.getElementById('p25-Fmax-r').value;
document.getElementById('p25-F').textContent = F.toFixed(1);
document.getElementById('p25-Fmax').textContent = Fmax;
if(window.PHYS && window.PHYS.dynamometer){
let svgInner = window.PHYS.dynamometer(80, 20, 160, Fmax, Math.min(F, Fmax));
// Цвет фона для подложки
document.getElementById('p25-svg').innerHTML = '' + svgInner;
}
document.getElementById('p25-info').innerHTML = F > Fmax
? 'Превышение предела! Реальная сила $F = ' + F.toFixed(1) + '$ Н > $F_{max} = ' + Fmax + '$ Н. Пружина может испортиться.'
: 'Показание: $F = ' + F.toFixed(1) + '$ Н из $' + Fmax + '$ Н. Цена деления $\\approx ' + (Fmax/20).toFixed(2) + '$ Н.';
renderMath(document.getElementById('p25-info'));
}
['p25-F-r','p25-Fmax-r'].forEach(id => document.getElementById(id).addEventListener('input', draw25));
draw25();
const upd25c = () => {
const F = +document.getElementById('p25c-F-r').value;
const g = +document.getElementById('p25c-g-s').value;
document.getElementById('p25c-F').textContent = F.toFixed(1);
document.getElementById('p25c-g').textContent = g.toString().replace('.', ',');
const m = F / g;
document.getElementById('p25c-m').textContent = m.toFixed(3);
document.getElementById('p25c-mg').textContent = (m * 1000).toFixed(0);
};
document.getElementById('p25c-F-r').addEventListener('input', upd25c);
document.getElementById('p25c-g-s').addEventListener('change', upd25c);
upd25c();
wireDnd('p25-dnd', [
{ id:'a1', cat:'school' },{ id:'a2', cat:'school' },{ id:'a3', cat:'med' },
{ id:'a4', cat:'med' },{ id:'a5', cat:'ind' },{ id:'a6', cat:'ind' }
]);
wireQuiz('p25-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p25'); });
wireReadBtn('p25');
renderMath(body);
}
/* ========================================================== */
/* §26 — Сложение сил. Равнодействующая (ГЛАВНЫЙ ВИЗУАЛ ГЛАВЫ 3) */
/* ========================================================== */
function add_p26(){
const body = document.getElementById('p26-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Что такое равнодействующая', '§ 26.1',
'Если на тело действует несколько сил, их совместное действие можно заменить одной силой — '
+ 'равнодействующей $\\vec R$.
'
+ 'Тело ведёт себя так, словно на него действует только $\\vec R$. Например, если $R = 0$ — тело покоится '
+ 'или движется равномерно (силы уравновешены).');
h += makeCard('rule', 'Силы на одной прямой', '§ 26.2',
'Сонаправленные силы (в одну сторону): $$R = F_1 + F_2$$ направление — то же.
'
+ 'Противоположные силы: $$R = |F_1 - F_2|$$ направление — в сторону большей силы.
'
+ 'Если $F_1 = F_2$ и они противоположны — $R = 0$, тело в равновесии.');
h += makeCard('example', 'Перетягивание каната', '§ 26.3',
'Команда А тянет канат с силой $F_A = 600$ Н вправо. Команда Б — $F_Б = 500$ Н влево. '
+ '$R = 600 - 500 = 100$ Н вправо. Канат смещается в сторону команды А.
'
+ 'Если бы $F_A = F_Б = 600$ Н, было бы равновесие — канат стоял бы на месте.');
/* IV-1 ГЛАВНЫЙ ВИЗУАЛ: Конструктор сил на теле */
h += wgWrap('p26-iv1', 'СИМ', 'Конструктор сил на теле — главный визуал', 'Двигай ползунки 4 сил → видишь, как меняется равнодействующая и поведение тела.',
'
'
+ ''
+ ''
+ ''
+ ''
+ '
'
+ ''
+ '');
/* IV-2 КАЛЬК */
h += wgWrap('p26-iv2', 'КАЛЬК', 'Сложение двух сил на одной прямой', '',
'
'
+ ''
+ ''
+ ''
+ '
'
+ '');
/* IV-3 DnD */
h += wgWrap('p26-iv3', 'DnD', 'Куда направлена R?', '',
dndPool('p26-dnd', [
{ id:'a1', cat:'right', html:'$F_1 = 10$ Н →, $F_2 = 4$ Н →' },
{ id:'a2', cat:'right', html:'$F_1 = 8$ Н →, $F_2 = 5$ Н ←' },
{ id:'a3', cat:'left', html:'$F_1 = 3$ Н →, $F_2 = 9$ Н ←' },
{ id:'a4', cat:'left', html:'$F_1 = 5$ Н ←, $F_2 = 5$ Н ←' },
{ id:'a5', cat:'zero', html:'$F_1 = 7$ Н →, $F_2 = 7$ Н ←' },
{ id:'a6', cat:'zero', html:'Только $F_т$ и $N$ равны на горизонтальной опоре' }
], [
{ cat:'right', label:'R направлена →' },
{ cat:'left', label:'R направлена ←' },
{ cat:'zero', label:'R = 0' }
]));
/* IV-4 ТРН */
h += wgWrap('p26-iv4', 'ТРН', 'Тренажёр §26', '',
'
'
+ quizQuestion('p26-tr', 0, '$F_1 = 6$ Н, $F_2 = 4$ Н, сонаправлены. R?', ['2 Н','4 Н','10 Н','24 Н'], 2)
+ quizQuestion('p26-tr', 1, '$F_1 = 10$ Н, $F_2 = 6$ Н, противоположны. Модуль R?', ['4 Н','6 Н','10 Н','16 Н'], 0)
+ quizQuestion('p26-tr', 2, 'Книга лежит на столе. Действуют $F_т$ и $N$. Чему равна R?', ['$mg$','$2mg$','$0$','$N - F_т$'], 2, 'Тело в покое → силы уравновешены, $R = 0$.')
+ quizQuestion('p26-tr', 3, 'На брусок действуют $F_{тяги} = 12$ Н → и $F_{тр} = 5$ Н ←. Куда движется?', ['Покоится','Влево','Вправо','Невозможно сказать'], 2, '$R = 12-5 = 7$ Н → — вправо.')
+ quizQuestion('p26-tr', 4, '$F_1 = F_2 = 8$ Н, противоположны. R?', ['0','8 Н','16 Н','Зависит от массы'], 0)
+ '
');
h += readButton('p26');
body.innerHTML = h;
function draw26(){
const Ft = +document.getElementById('p26-ft-r').value;
const N = +document.getElementById('p26-N-r').value;
const Ftt = +document.getElementById('p26-Ft2-r').value;
const Ftr = +document.getElementById('p26-Ftr-r').value;
document.getElementById('p26-ft').textContent = Ft;
document.getElementById('p26-N').textContent = N;
document.getElementById('p26-Ft2').textContent = Ftt;
document.getElementById('p26-Ftr').textContent = Ftr;
const Rx = Ftt - Ftr;
const Ry = Ft - N; // положительное Ry — вниз
const R = Math.hypot(Rx, Ry);
const cx = 200, cy = 130;
const sc = 3.5; // px/Н
let s = '';
// Земля
s += '';
for(let i = 0; i < 14; i++) s += '';
// Тело — куб
s += '';
// Стрелки сил
function arrow(x1,y1,x2,y2,col,label){
const len = Math.hypot(x2-x1, y2-y1);
if(len < 4) return '';
const a = Math.atan2(y2-y1, x2-x1);
const ah = 8;
const ax1 = x2 - ah * Math.cos(a - 0.45);
const ay1 = y2 - ah * Math.sin(a - 0.45);
const ax2 = x2 - ah * Math.cos(a + 0.45);
const ay2 = y2 - ah * Math.sin(a + 0.45);
return ''
+ ''
+ '' + label + '';
}
s += arrow(cx, cy, cx, cy + Ft * sc, '#7c3aed', 'F_т=' + Ft); // вниз
s += arrow(cx, cy, cx, cy - N * sc, '#475569', 'N=' + N); // вверх
s += arrow(cx, cy, cx + Ftt * sc, cy, '#10b981', 'F_тяги=' + Ftt); // вправо
s += arrow(cx, cy, cx - Ftr * sc, cy, '#92400e', 'F_тр=' + Ftr); // влево
// Равнодействующая
if(R > 0.1){
s += arrow(cx, cy, cx + Rx * sc, cy + Ry * sc, '#dc2626', 'R=' + R.toFixed(1));
}
document.getElementById('p26-svg').innerHTML = s;
// Info
let verdict;
if(R < 0.1) verdict = 'Силы уравновешены. R = 0 — тело в покое или движется равномерно.';
else if(Math.abs(Ry) < 0.1 && Rx > 0) verdict = 'R = ' + Rx + ' Н вправо — тело ускоряется вправо.';
else if(Math.abs(Ry) < 0.1 && Rx < 0) verdict = 'R = ' + (-Rx) + ' Н влево — тело ускоряется влево.';
else if(Math.abs(Rx) < 0.1 && Ry > 0) verdict = 'R = ' + Ry + ' Н вниз — тело падает / провалится.';
else if(Math.abs(Rx) < 0.1 && Ry < 0) verdict = 'R = ' + (-Ry) + ' Н вверх — тело подпрыгнет.';
else verdict = 'R ≈ ' + R.toFixed(1) + ' Н — тело ускоряется под углом.';
document.getElementById('p26-info').innerHTML = verdict + ' $R_x = F_{тяги} - F_{тр} = ' + Rx + '$, $R_y = F_т - N = ' + Ry + '$';
renderMath(document.getElementById('p26-info'));
}
['p26-ft-r','p26-N-r','p26-Ft2-r','p26-Ftr-r'].forEach(id => document.getElementById(id).addEventListener('input', draw26));
draw26();
const upd26c = () => {
const F1 = +document.getElementById('p26c-F1-r').value;
const F2 = +document.getElementById('p26c-F2-r').value;
const dir = document.getElementById('p26c-dir').value;
document.getElementById('p26c-F1').textContent = F1;
document.getElementById('p26c-F2').textContent = F2;
let R;
if(dir === 'same') R = F1 + F2;
else R = Math.abs(F1 - F2);
let arrow1 = '→', arrow2 = '→';
if(dir === 'opp') arrow2 = '←';
let result;
if(dir === 'same') result = '$R = F_1 + F_2 = ' + F1 + ' + ' + F2 + ' = $ ' + R + ' Н (→)';
else {
const dir_arrow = F1 > F2 ? '→' : (F2 > F1 ? '←' : '');
result = '$R = |F_1 - F_2| = |' + F1 + ' - ' + F2 + '| = $ ' + R + ' Н ' + (R === 0 ? '(равновесие)' : '(' + dir_arrow + ')');
}
document.getElementById('p26c-out').innerHTML = result;
renderMath(document.getElementById('p26c-out'));
};
['p26c-F1-r','p26c-F2-r'].forEach(id => document.getElementById(id).addEventListener('input', upd26c));
document.getElementById('p26c-dir').addEventListener('change', upd26c);
upd26c();
wireDnd('p26-dnd', [
{ id:'a1', cat:'right' },{ id:'a2', cat:'right' },{ id:'a3', cat:'left' },
{ id:'a4', cat:'left' },{ id:'a5', cat:'zero' },{ id:'a6', cat:'zero' }
]);
wireQuiz('p26-tr-host', () => { if(window.addXp) window.addXp(15, 'tr-p26'); });
wireReadBtn('p26');
renderMath(body);
}
/* ========================================================== */
/* §27 — Трение. Сила трения */
/* ========================================================== */
function add_p27(){
const body = document.getElementById('p27-body');
if(!body) return;
let h = '';
h += makeCard('theory', 'Откуда берётся трение', '§ 27.1',
'При движении (или попытке движения) одного тела по поверхности другого возникает сила, '
+ 'мешающая движению — сила трения $\\vec F_{тр}$. Она направлена против движения.
'
+ 'Причины: шероховатость поверхностей и притяжение молекул в местах контакта.');
h += makeCard('rule', 'Виды трения', '§ 27.2',
'
'
+ '
Трение покоя — мешает сдвинуть тело с места. Бывает максимальным, после чего тело начинает скользить.
'
+ '
Трение скольжения — действует на скользящее тело. $F_{тр} \\approx \\mu N$, где $\\mu$ — коэффициент трения, $N$ — нормальная реакция (≈ вес).
'
+ '
Трение качения — катит колесо. Намного меньше скольжения. Поэтому колесо — гениальное изобретение.
'
+ '
'
+ '$F_{тр}$ не зависит (почти) от площади контакта, но зависит от $N$ и от шероховатости.');
h += makeCard('example', 'Где трение мешает, а где помогает', '§ 27.3',
'Полезно: идти и ехать (без трения — гололёд!), тормоза, гвозди в дереве, держать карандаш. '
+ 'Мешает: греет и изнашивает детали машин, замедляет движение. Чтобы уменьшить — смазывают маслом, ставят подшипники.');
/* IV-1 СИМ: брусок на поверхности с slider массы, μ, тяги */
h += wgWrap('p27-iv1', 'СИМ', 'Симулятор трения', 'Меняй массу, материал и силу тяги — посмотри, едет брусок или стоит.',
'