Files
Learn_System/frontend/textbooks/physics_9.html
Maxim Dolgolyov 033c941b02 feat(xp): physics8 + chem9 + phys9 синхронизируют XP с системной геймификацией
- js/textbook-xp-widget.js: shared модуль (monkey-patch addXp +
  para-pill auto-award для учебников без addXp)
- physics8_thermal/electro/optics: добавлены теги /js/xp.js и
  /js/textbook-xp-widget.js — теперь все 74 addXp-хука пробрасываются
  в глобальный gamification (через self-award endpoint с дебаунсом)
- chemistry_9 + physics_9: те же теги. Каждый первый клик по
  .para-pill даёт +5 XP в систему (без правок 23000 LOC)
- Изначальный XP в учебниках не теряется — localStorage остаётся
  кешем, сервер — источник правды
2026-05-27 16:36:43 +03:00

12429 lines
791 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Импульс. Работа. Энергия — §31–36 · Физика 9</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"
onload="renderMathInElement(document.body,{delimiters:[{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true}],throwOnError:false})"></script>
<script src="/js/xp.js" defer></script>
<script src="/js/textbook-xp-widget.js" defer></script>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;800;900&family=Literata:opsz,wght@7..72,400;7..72,500;7..72,600;7..72,700;7..72,800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<style>
:root{
--pri:#1d4ed8; --pri2:#1e40af;
--acc:#0ea5e9;
--ok:#10b981; --ok-bg:#d1fae5;
--fail:#ef4444; --fail-bg:#fee2e2;
--warn:#f59e0b; --warn-bg:#fef3c7;
--bg:#eff6ff; --card:#fff;
--text:#1e293b; --muted:#64748b;
--border:#dbeafe;
--sh:0 2px 10px rgba(30,64,175,.08)
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);overflow-x:hidden}
.dark{--bg:#0f172a;--card:#1e293b;--text:#e2e8f0;--muted:#94a3b8;--border:#1e3a5f}
/* ── Шапка ── */
.hdr{background:linear-gradient(135deg,#1e40af 0%,#0284c7 55%,#0ea5e9 100%);color:#fff;padding:18px 20px 16px;text-align:center}
.hdr h1{font-size:1.3rem;font-weight:900}
.hdr p{font-size:.8rem;opacity:.85;margin-top:3px}
/* ── Табы ── */
.tabs{display:flex;flex-wrap:wrap;gap:4px;padding:8px 10px;background:var(--card);border-bottom:1px solid var(--border)}
.tabs::-webkit-scrollbar{display:none}
.tab{padding:8px 14px;border:2px solid var(--border);border-radius:10px;font-size:.74rem;font-weight:700;cursor:pointer;white-space:nowrap;transition:.18s;background:var(--card);color:var(--muted);flex-shrink:0}
.tab:hover{border-color:var(--pri);color:var(--pri)}
.tab.active{background:var(--pri);color:#fff;border-color:var(--pri)}
/* ── Контент ── */
.content{max-width:780px;margin:0 auto;padding:16px 14px;display:none}
.content.active{display:block}
/* ── Справочник: карточки формул ── */
.section-title{font-size:1.05rem;font-weight:800;margin-bottom:12px;color:var(--pri);display:flex;align-items:center;gap:8px}
.section-title i{opacity:.7}
.formula-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}
@media(max-width:560px){.formula-grid{grid-template-columns:1fr}}
.fcard{background:var(--card);border:2px solid var(--border);border-radius:14px;padding:16px 18px;box-shadow:var(--sh);transition:transform .18s,box-shadow .18s}
.fcard:hover{transform:translateY(-2px);box-shadow:0 6px 22px rgba(29,78,216,.12)}
.fcard.highlight{border-color:var(--pri);background:linear-gradient(135deg,rgba(29,78,216,.04),rgba(14,165,233,.04))}
.fcard h3{font-size:.8rem;font-weight:700;color:var(--pri);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
.fcard .main-f{font-size:1.05rem;font-weight:700;text-align:center;margin:8px 0;padding:10px;background:rgba(29,78,216,.06);border-radius:9px}
.fcard p{font-size:.83rem;color:var(--muted);line-height:1.7;margin-top:6px}
.fcard ul{font-size:.83rem;color:var(--muted);line-height:1.8;padding-left:18px;margin-top:6px}
/* ── Пример задачи ── */
.example-box{background:var(--card);border:2px solid #bfdbfe;border-left:5px solid var(--pri);border-radius:12px;padding:18px 20px;margin-bottom:20px;box-shadow:var(--sh)}
.example-box h3{font-size:.88rem;font-weight:700;color:var(--pri);margin-bottom:10px}
.example-box .cond{font-size:.87rem;background:rgba(29,78,216,.05);border-radius:8px;padding:10px 14px;line-height:1.8;margin-bottom:10px}
.example-box .sol{font-size:.86rem;line-height:1.9}
.given-table{width:100%;border-collapse:collapse;margin:8px 0;font-size:.82rem}
.given-table td{padding:4px 10px;border:1px solid var(--border)}
.given-table tr:first-child td{background:rgba(29,78,216,.04)}
.given-table tr:last-child td{background:rgba(16,185,129,.05)}
.given-table td:first-child{font-weight:700;width:38%;color:var(--pri)}
/* ── Вопросы (теоретические) ── */
.q-list{font-size:.85rem;line-height:1.9;color:var(--muted);padding-left:20px}
.q-list li{margin-bottom:4px}
/* ── Задачи: интерактив ── */
.score-bar{display:flex;gap:10px;align-items:center;justify-content:center;margin-bottom:14px;font-size:.85rem;font-weight:600}
.chip{padding:5px 14px;border-radius:50px;display:flex;align-items:center;gap:5px}
.chip-ok{background:var(--ok-bg);color:#065f46}
.chip-tot{background:var(--card);color:var(--muted);border:1px solid var(--border)}
.prog-wrap{width:100%;height:6px;background:var(--border);border-radius:3px;overflow:hidden;margin-bottom:16px}
.prog-fill{height:100%;background:linear-gradient(90deg,var(--pri),var(--acc));border-radius:3px;transition:width .4s}
.task-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px 22px;box-shadow:var(--sh);margin-bottom:12px}
.task-num{font-size:.72rem;font-weight:700;color:var(--acc);text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px}
.task-text{font-size:.97rem;font-weight:700;line-height:1.85;margin-bottom:14px}
.task-hint{font-size:.8rem;color:var(--muted);margin-top:4px;margin-bottom:12px;display:flex;align-items:flex-start;gap:6px}
.task-hint i{margin-top:2px;color:var(--warn);flex-shrink:0}
.ans-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.ans-inp{width:110px;padding:11px 10px;border:2px solid var(--border);border-radius:10px;font-size:1.05rem;font-family:'JetBrains Mono',monospace;text-align:center;outline:none;background:var(--card);color:var(--text);transition:.18s}
.ans-inp:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(29,78,216,.12)}
.unit-lbl{font-size:.82rem;color:var(--muted);font-weight:600;white-space:nowrap}
.btn{padding:11px 20px;border:none;border-radius:10px;font-weight:700;font-size:.84rem;cursor:pointer;transition:.18s;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.btn:active{transform:scale(.96)}
.btn-pri{background:var(--pri);color:#fff}.btn-pri:hover{background:var(--pri2)}
.btn-ghost{background:transparent;border:2px solid var(--border);color:var(--muted)}.btn-ghost:hover{border-color:var(--pri);color:var(--pri)}
.btn-next{background:var(--ok);color:#fff}.btn-next:hover{filter:brightness(1.1)}
.feedback{padding:13px 18px;border-radius:11px;font-size:.87rem;font-weight:600;display:none;line-height:1.7;margin-top:10px}
.feedback.show{display:block;animation:pop .28s ease}
.fb-ok{background:var(--ok-bg);color:#065f46}
.fb-fail{background:var(--fail-bg);color:#991b1b}
@keyframes pop{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
/* ── Итог ── */
.summary{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:28px;text-align:center;box-shadow:var(--sh);display:none}
.summary.show{display:block;animation:pop .35s ease}
.summary h2{font-size:1.2rem;font-weight:800;margin-bottom:8px}
.big-score{font-size:3.5rem;font-weight:900;color:var(--pri);line-height:1;margin:10px 0}
.sum-grade{color:var(--muted);font-size:.9rem;margin-bottom:20px}
.sum-btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
/* ── Справочник (плавающая кнопка) ── */
.ref-toggle{position:fixed;bottom:16px;right:16px;z-index:60;width:46px;height:46px;border-radius:13px;background:var(--pri);color:#fff;border:none;cursor:pointer;display:grid;place-items:center;font-size:1.1rem;box-shadow:0 4px 14px rgba(29,78,216,.3)}
.ref-panel{position:fixed;bottom:72px;right:16px;z-index:60;width:300px;max-height:72vh;overflow-y:auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:16px 18px;box-shadow:0 8px 30px rgba(0,0,0,.15);display:none;font-size:.8rem;line-height:1.85;scrollbar-width:thin}
.ref-panel.show{display:block;animation:pop .2s ease}
.ref-panel h3{font-size:.84rem;font-weight:700;color:var(--pri);margin:12px 0 4px}.ref-panel h3:first-child{margin-top:0}
.ref-panel .rf{background:rgba(29,78,216,.06);border-radius:8px;padding:6px 10px;margin:3px 0;text-align:center}
/* ── Para-hero баннеры ── */
.para-hero{border-radius:18px;padding:22px 24px;margin-bottom:22px;position:relative;overflow:hidden}
.para-hero::after{content:'';position:absolute;right:-28px;top:-28px;width:150px;height:150px;border-radius:50%;opacity:.13;pointer-events:none}
.ph-31{background:linear-gradient(135deg,#1e3a8a 0%,#1d4ed8 55%,#3b82f6 100%);color:#fff}
.ph-31::after{background:#bfdbfe}
.ph-32{background:linear-gradient(135deg,#0c4a6e 0%,#0369a1 55%,#0ea5e9 100%);color:#fff}
.ph-32::after{background:#bae6fd}
.ph-33{background:linear-gradient(135deg,#064e3b 0%,#065f46 55%,#10b981 100%);color:#fff}
.ph-33::after{background:#a7f3d0}
.ph-34{background:linear-gradient(135deg,#78350f 0%,#92400e 55%,#d97706 100%);color:#fff}
.ph-34::after{background:#fde68a}
.ph-35{background:linear-gradient(135deg,#4c1d95 0%,#6d28d9 55%,#8b5cf6 100%);color:#fff}
.ph-35::after{background:#ddd6fe}
.ph-36{background:linear-gradient(135deg,#134e4a 0%,#0f766e 55%,#2dd4bf 100%);color:#fff}
.ph-36::after{background:#99f6e4}
.para-hero .ph-label{font-size:.7rem;font-weight:700;opacity:.7;letter-spacing:.1em;text-transform:uppercase;margin-bottom:5px}
.para-hero h2{font-size:1.12rem;font-weight:900;margin-bottom:8px;line-height:1.3}
.para-hero .ph-formula{display:inline-block;font-size:1rem;background:rgba(255,255,255,.17);border-radius:10px;padding:7px 16px;margin:2px 0 8px;font-weight:700;border:1px solid rgba(255,255,255,.22)}
.para-hero .ph-desc{font-size:.79rem;opacity:.87;line-height:1.65;margin-bottom:10px}
.para-hero .ph-tags{display:flex;flex-wrap:wrap;gap:6px}
.para-hero .ph-tag{background:rgba(255,255,255,.17);border:1px solid rgba(255,255,255,.25);border-radius:20px;padding:3px 11px;font-size:.7rem;font-weight:700}
/* ── Запомни! ── */
.remember-box{background:linear-gradient(135deg,rgba(239,68,68,.06),rgba(220,38,38,.03));border:2px solid rgba(239,68,68,.3);border-radius:13px;padding:14px 17px;margin:16px 0}
.remember-box-title{font-weight:800;font-size:.82rem;color:#b91c1c;margin-bottom:8px;display:flex;align-items:center;gap:7px}
.dark .remember-box{border-color:rgba(239,68,68,.4);background:rgba(239,68,68,.07)}
.dark .remember-box-title{color:#fca5a5}
.remember-box ul{padding-left:18px;margin:0}
.remember-box li,.remember-box p{font-size:.83rem;color:var(--text);line-height:1.9;margin:0}
/* ── Частые ошибки ── */
.mistakes-box{background:linear-gradient(135deg,rgba(245,158,11,.06),rgba(251,191,36,.03));border:2px solid rgba(245,158,11,.35);border-radius:13px;padding:14px 17px;margin:16px 0}
.mistakes-box-title{font-weight:800;font-size:.82rem;color:#92400e;margin-bottom:8px;display:flex;align-items:center;gap:7px}
.dark .mistakes-box{border-color:rgba(245,158,11,.4);background:rgba(245,158,11,.07)}
.dark .mistakes-box-title{color:#fcd34d}
.mistakes-box ul{padding-left:18px;margin:0}
.mistakes-box li{font-size:.83rem;color:var(--text);line-height:1.9}
/* ── Шаги решения ── */
.sol-steps{list-style:none;padding:0;margin:8px 0}
.sol-steps li{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px;font-size:.86rem;line-height:1.75}
.step-n{min-width:24px;height:24px;border-radius:50%;background:var(--pri);color:#fff;font-size:.69rem;font-weight:800;display:grid;place-items:center;margin-top:1px;flex-shrink:0}
/* ── Интерактивные схемы ── */
.idiag{background:var(--card);border:2px solid var(--border);border-radius:14px;padding:16px 18px;margin:14px 0;box-shadow:var(--sh)}
.idiag h3{font-size:.79rem;font-weight:700;color:var(--pri);text-transform:uppercase;letter-spacing:.05em;margin-bottom:12px;display:flex;align-items:center;gap:6px}
.idiag-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:14px 0}
@media(max-width:560px){.idiag-2col{grid-template-columns:1fr}}
.slider-row{display:flex;align-items:center;gap:10px;margin:8px 0;font-size:.82rem;flex-wrap:wrap}
.slider-lbl{min-width:90px;font-weight:600;color:var(--text);flex-shrink:0}
.slider-val{min-width:72px;font-weight:800;color:var(--pri);font-family:'JetBrains Mono',monospace;font-size:.82rem;flex-shrink:0}
input[type=range]{flex:1;min-width:100px;accent-color:var(--pri);cursor:pointer}
.idiag-result{background:rgba(29,78,216,.08);border-radius:10px;padding:10px 14px;margin-top:10px;font-size:.9rem;font-weight:700;text-align:center;font-family:'JetBrains Mono',monospace;letter-spacing:.02em;border:1px solid rgba(29,78,216,.15)}
.work-pos{color:#065f46;font-weight:900}.work-zero{color:#92400e;font-weight:900}.work-neg{color:#991b1b;font-weight:900}
/* ── Цепочка вывода формулы ── */
.fchain{display:flex;flex-wrap:wrap;align-items:center;gap:8px;background:rgba(29,78,216,.04);border:1px solid var(--border);border-radius:11px;padding:11px 15px;margin:10px 0;font-size:.82rem}
.fchain-step{background:var(--card);border:1.5px solid var(--border);border-radius:8px;padding:4px 12px;font-family:'JetBrains Mono',monospace;font-size:.8rem;font-weight:600}
.fchain-arrow{color:var(--muted);font-weight:700}
.fchain-note{font-size:.73rem;color:var(--muted);font-style:italic}
/* ── Объяснение по-человечески ── */
.student-box{background:linear-gradient(135deg,rgba(254,243,199,.7),rgba(255,237,213,.7));border:1.5px solid #f59e0b;border-radius:14px;padding:16px 18px;margin:16px 0;line-height:1.75}
.dark .student-box{background:linear-gradient(135deg,rgba(120,80,0,.18),rgba(100,50,0,.18));border-color:#d97706}
.student-box-title{font-weight:800;font-size:.88rem;color:#92400e;margin-bottom:10px;display:flex;align-items:center;gap:7px}
.dark .student-box-title{color:#fbbf24}
.student-box p{margin:0 0 9px;font-size:.84rem;color:var(--text)}
.student-box p:last-child{margin-bottom:0}
.student-box b{color:#92400e}
.dark .student-box b{color:#fbbf24}
/* ── Тема ── */
.theme-btn{position:fixed;top:12px;right:12px;z-index:60;width:38px;height:38px;border-radius:10px;background:var(--card);border:1px solid var(--border);cursor:pointer;display:grid;place-items:center;font-size:1rem;box-shadow:var(--sh);color:var(--text)}
/* ── Para badge (сложные задачи) ── */
.para-badge{display:inline-flex;align-items:center;padding:2px 8px;background:rgba(29,78,216,.13);color:var(--pri);border-radius:6px;font-size:.68rem;font-weight:800;margin-left:7px;letter-spacing:.03em}
.para-badge.b32{background:rgba(14,165,233,.13);color:#0284c7}
.para-badge.b33{background:rgba(16,185,129,.13);color:#059669}
.para-badge.b34{background:rgba(245,158,11,.13);color:#d97706}
.para-badge.b35{background:rgba(109,40,217,.13);color:#6d28d9}
.para-badge.b36{background:rgba(15,118,110,.13);color:#0f766e}
/* ── §1–14 Кинематика Para-heroes ── */
.ph-1{background:linear-gradient(135deg,#7f1d1d 0%,#dc2626 55%,#f97316 100%);color:#fff}
.ph-1::after{background:#fed7aa}
.ph-2{background:linear-gradient(135deg,#134e4a 0%,#0d9488 55%,#2dd4bf 100%);color:#fff}
.ph-2::after{background:#99f6e4}
.ph-3{background:linear-gradient(135deg,#500724 0%,#be185d 55%,#f472b6 100%);color:#fff}
.ph-3::after{background:#fce7f3}
.ph-4{background:linear-gradient(135deg,#431407 0%,#b45309 55%,#fbbf24 100%);color:#fff}
.ph-4::after{background:#fde68a}
.ph-5{background:linear-gradient(135deg,#1e3a8a 0%,#1d4ed8 55%,#60a5fa 100%);color:#fff}
.ph-5::after{background:#bfdbfe}
.ph-6{background:linear-gradient(135deg,#14532d 0%,#15803d 55%,#4ade80 100%);color:#fff}
.ph-6::after{background:#bbf7d0}
.ph-7{background:linear-gradient(135deg,#2e1065 0%,#7c3aed 55%,#c4b5fd 100%);color:#fff}
.ph-7::after{background:#ede9fe}
.ph-8{background:linear-gradient(135deg,#082f49 0%,#0284c7 55%,#7dd3fc 100%);color:#fff}
.ph-8::after{background:#e0f2fe}
.ph-9{background:linear-gradient(135deg,#1a2e05 0%,#4d7c0f 55%,#a3e635 100%);color:#fff}
.ph-9::after{background:#d9f99d}
.ph-10{background:linear-gradient(135deg,#4c0519 0%,#be123c 55%,#fb7185 100%);color:#fff}
.ph-10::after{background:#ffe4e6}
.ph-11{background:linear-gradient(135deg,#1e1b4b 0%,#3730a3 55%,#a5b4fc 100%);color:#fff}
.ph-11::after{background:#e0e7ff}
.ph-12{background:linear-gradient(135deg,#7c2d12 0%,#c2410c 55%,#fb923c 100%);color:#fff}
.ph-12::after{background:#ffedd5}
.ph-13{background:linear-gradient(135deg,#2e1065 0%,#6d28d9 55%,#ddd6fe 100%);color:#fff}
.ph-13::after{background:#f5f3ff}
.ph-14{background:linear-gradient(135deg,#164e63 0%,#0e7490 55%,#67e8f9 100%);color:#fff}
.ph-14::after{background:#cffafe}
.para-badge.b1{background:rgba(220,38,38,.13);color:#dc2626}
.para-badge.b2{background:rgba(13,148,136,.13);color:#0d9488}
.para-badge.b3{background:rgba(190,24,93,.13);color:#be185d}
.para-badge.b4{background:rgba(180,83,9,.13);color:#b45309}
.para-badge.b5{background:rgba(29,78,216,.13);color:#1d4ed8}
.para-badge.b6{background:rgba(21,128,61,.13);color:#15803d}
.para-badge.b7{background:rgba(124,58,237,.13);color:#7c3aed}
.para-badge.b8{background:rgba(2,132,199,.13);color:#0284c7}
.para-badge.b9{background:rgba(77,124,15,.13);color:#4d7c0f}
.para-badge.b10{background:rgba(190,18,60,.13);color:#be123c}
.para-badge.b11{background:rgba(55,48,163,.13);color:#3730a3}
.para-badge.b12{background:rgba(194,65,12,.13);color:#c2410c}
.para-badge.b13{background:rgba(109,40,217,.13);color:#6d28d9}
.para-badge.b14{background:rgba(14,116,144,.13);color:#0e7490}
/* ── §1521 Para-heroes ── */
.ph-15{background:linear-gradient(135deg,#7c2d12 0%,#c2410c 55%,#f97316 100%);color:#fff}
.ph-15::after{background:#fed7aa}
.ph-16{background:linear-gradient(135deg,#881337 0%,#be123c 55%,#f43f5e 100%);color:#fff}
.ph-16::after{background:#fecdd3}
.ph-17{background:linear-gradient(135deg,#4a044e 0%,#7e22ce 55%,#d946ef 100%);color:#fff}
.ph-17::after{background:#f5d0fe}
.ph-18{background:linear-gradient(135deg,#082f49 0%,#155e75 55%,#22d3ee 100%);color:#fff}
.ph-18::after{background:#a5f3fc}
.ph-19{background:linear-gradient(135deg,#500724 0%,#9d174d 55%,#f472b6 100%);color:#fff}
.ph-19::after{background:#fbcfe8}
.ph-20{background:linear-gradient(135deg,#1c1917 0%,#44403c 55%,#a8a29e 100%);color:#fff}
.ph-20::after{background:#e7e5e4}
.ph-21{background:linear-gradient(135deg,#1e1b4b 0%,#3730a3 55%,#818cf8 100%);color:#fff}
.ph-21::after{background:#c7d2fe}
.ph-22{background:linear-gradient(135deg,#0c4a6e 0%,#0369a1 55%,#38bdf8 100%);color:#fff}
.ph-22::after{background:#bae6fd}
.ph-23{background:linear-gradient(135deg,#14532d 0%,#166534 55%,#4ade80 100%);color:#fff}
.ph-23::after{background:#bbf7d0}
.ph-24{background:linear-gradient(135deg,#3b0764 0%,#7e22ce 55%,#c084fc 100%);color:#fff}
.ph-24::after{background:#e9d5ff}
.ph-25{background:linear-gradient(135deg,#052e16 0%,#065f46 55%,#34d399 100%);color:#fff}
.ph-25::after{background:#a7f3d0}
.ph-26{background:linear-gradient(135deg,#2e1065 0%,#6d28d9 55%,#c084fc 100%);color:#fff}
.ph-26::after{background:#e9d5ff}
.ph-27{background:linear-gradient(135deg,#431407 0%,#b45309 55%,#fbbf24 100%);color:#fff}
.ph-27::after{background:#fde68a}
.ph-28{background:linear-gradient(135deg,#0f2027 0%,#203a43 55%,#2c5364 100%);color:#fff}
.ph-28::after{background:#a5f3fc}
.ph-29{background:linear-gradient(135deg,#001845 0%,#0041a8 55%,#0099ff 100%);color:#fff}
.ph-29::after{background:#bfdbfe}
.ph-30{background:linear-gradient(135deg,#064e3b 0%,#065f46 55%,#34d399 100%);color:#fff}
.ph-30::after{background:#a7f3d0}
.para-badge.b15{background:rgba(194,65,12,.13);color:#c2410c}
.para-badge.b16{background:rgba(190,18,60,.13);color:#be123c}
.para-badge.b17{background:rgba(126,34,206,.13);color:#7e22ce}
.para-badge.b18{background:rgba(21,94,117,.13);color:#155e75}
.para-badge.b19{background:rgba(157,23,77,.13);color:#9d174d}
.para-badge.b20{background:rgba(68,64,60,.13);color:#44403c}
.para-badge.b21{background:rgba(55,48,163,.13);color:#3730a3}
.para-badge.b22{background:rgba(3,105,161,.13);color:#0369a1}
.para-badge.b23{background:rgba(22,101,52,.13);color:#166534}
.para-badge.b24{background:rgba(126,34,206,.13);color:#7e22ce}
.para-badge.b25{background:rgba(6,95,70,.13);color:#065f46}
.para-badge.b26{background:rgba(109,40,217,.13);color:#6d28d9}
.para-badge.b27{background:rgba(180,83,9,.13);color:#b45309}
.para-badge.b28{background:rgba(32,58,67,.13);color:#203a43}
.para-badge.b29{background:rgba(0,65,168,.13);color:#0041a8}
.para-badge.b30{background:rgba(6,95,70,.13);color:#065f46}
/* ── Misc ── */
.dark .ans-inp{background:#0f172a;color:#e2e8f0}
.dark .fcard{background:#1e293b}.dark .example-box{background:#1e293b}
.katex{font-size:1em!important}
.info-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:700;background:rgba(14,165,233,.12);color:#0284c7;margin-left:8px}
hr.divider{border:none;border-top:1px solid var(--border);margin:20px 0}
/* ── Навигация по задачам ── */
.nav-dots{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:14px}
.nav-dot{min-width:30px;height:30px;padding:0 6px;border-radius:7px;border:2px solid var(--border);background:var(--card);font-size:.72rem;font-weight:700;cursor:pointer;display:grid;place-items:center;transition:.15s;color:var(--muted);font-family:'JetBrains Mono',monospace}
.nav-dot:hover{border-color:var(--pri);color:var(--pri)}
.nav-dot.nd-cur{background:var(--pri);border-color:var(--pri);color:#fff}
.nav-dot.nd-ok{background:var(--ok-bg);border-color:var(--ok);color:#065f46}
.nav-dot.nd-fail{background:var(--fail-bg);border-color:var(--fail);color:#991b1b}
/* ── Life-examples grid ── */
.life-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin:14px 0}
.life-item{background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:12px 10px;text-align:center}
.life-item .li-icon{font-size:1.9rem;margin-bottom:5px}
.life-item .li-title{font-size:.79rem;font-weight:700;color:var(--text);margin-bottom:3px}
.life-item .li-desc{font-size:.71rem;color:var(--muted);line-height:1.55}
/* ── Insight (physics aha) box ── */
.insight-box{background:linear-gradient(135deg,rgba(99,102,241,.07),rgba(139,92,246,.04));border:2px solid rgba(99,102,241,.22);border-radius:13px;padding:14px 17px;margin:16px 0}
.insight-title{font-weight:800;font-size:.82rem;color:#4f46e5;margin-bottom:7px;display:flex;align-items:center;gap:7px}
.dark .insight-box{background:rgba(99,102,241,.08);border-color:rgba(139,92,246,.3)}
.dark .insight-title{color:#a5b4fc}
.insight-box p{font-size:.83rem;color:var(--text);line-height:1.8;margin:0 0 6px}
.insight-box p:last-child{margin:0}
/* ── μ table ── */
.mu-tbl{width:100%;border-collapse:collapse;font-size:.8rem;margin:8px 0}
.mu-tbl th{background:rgba(68,64,60,.1);padding:5px 8px;text-align:center;font-weight:700;border:1px solid var(--border)}
.mu-tbl td{padding:4px 8px;text-align:center;border:1px solid var(--border)}
.mu-tbl tr:hover td{background:rgba(29,78,216,.04)}
/* ── Solve-steps ── */
.solve-box{background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:14px 18px;margin:14px 0}
.solve-box h4{font-size:.82rem;font-weight:800;color:var(--pri);margin-bottom:10px;display:flex;align-items:center;gap:6px}
/* ── Canvas physics panels ── */
.cv-wrap{position:relative;margin:10px 0}
.cv-wrap canvas{width:100%;border-radius:10px;display:block}
.cv-playbtn{margin-top:6px;padding:7px 18px;border:none;border-radius:8px;background:var(--pri);color:#fff;font-weight:700;font-size:.8rem;cursor:pointer;transition:.15s}
.cv-playbtn:hover{filter:brightness(1.1)}
/* ── Para-pills ── */
.para-pill{padding:6px 13px;border:2px solid var(--border);border-radius:10px;font-size:.74rem;font-weight:700;cursor:pointer;white-space:nowrap;transition:.18s;background:var(--card);color:var(--muted);flex-shrink:0}
.para-pill:hover{border-color:var(--pri);color:var(--pri)}
.para-pill.active{background:var(--pri);color:#fff;border-color:var(--pri)}
/* ── MCQ ── */
.mcq-opts{display:flex;flex-direction:column;gap:8px;margin-top:4px}
.mcq-opt{width:100%;text-align:left;padding:11px 16px;border:2px solid var(--border);border-radius:10px;background:var(--card);color:var(--text);font-size:.9rem;font-weight:500;cursor:pointer;transition:.18s;line-height:1.5;font-family:inherit}
.mcq-opt:hover:not(:disabled){border-color:var(--pri);background:rgba(29,78,216,.05);color:var(--text)}
.mcq-opt:disabled{cursor:default}
.mcq-opt.mcq-cor{border-color:var(--ok)!important;background:var(--ok-bg)!important;color:#065f46!important;font-weight:700}
.mcq-opt.mcq-wrong{border-color:var(--fail)!important;background:var(--fail-bg)!important;color:#991b1b!important}
/* ── Def / info box ── */
.def-box{background:rgba(29,78,216,.05);border-left:4px solid var(--pri);border-radius:10px;padding:12px 16px;margin-bottom:16px;font-size:.87rem;line-height:1.8}
/* ── Лаб. №11 ── */
.ph-lab{background:linear-gradient(135deg,#7f1d1d 0%,#b91c1c 55%,#ef4444 100%);color:#fff}
.ph-lab::after{background:#fca5a5}
.lab11-tbl{width:100%;border-collapse:collapse;font-size:.83rem;font-family:'JetBrains Mono',monospace}
.lab11-tbl th{background:rgba(29,78,216,.07);padding:7px 8px;text-align:center;font-weight:700;font-size:.74rem;border:1px solid var(--border)}
.lab11-tbl td{padding:6px 8px;text-align:center;border:1px solid var(--border);background:var(--card)}
.lab11-tbl tr:hover td{background:rgba(29,78,216,.04)}
.lab11-tbl tr.lab11-avg td{background:rgba(29,78,216,.09);font-weight:800;color:var(--pri)}
/* ── Тетрадные вычисления (Лаб. №11) ── */
.nb-wrap{
background-color:#fffef2;
background-image:
linear-gradient(90deg,transparent 33px,rgba(239,68,68,.22) 33px,rgba(239,68,68,.22) 35px,transparent 35px),
repeating-linear-gradient(transparent 0,transparent 26px,#bfdbfe 26px,#bfdbfe 27px);
border:1px solid #fde68a;border-radius:13px;
padding:14px 18px 14px 46px;
font-size:.82rem;line-height:27px;color:var(--text);
margin:16px 0;overflow:hidden
}
.dark .nb-wrap{
background-color:#14120a;
background-image:
linear-gradient(90deg,transparent 33px,rgba(185,28,28,.30) 33px,rgba(185,28,28,.30) 35px,transparent 35px),
repeating-linear-gradient(transparent 0,transparent 26px,rgba(30,58,95,.75) 26px,rgba(30,58,95,.75) 27px);
border-color:#422006
}
.nb-hdr{font-size:.87rem;font-weight:800;color:#b45309;letter-spacing:.03em;margin-bottom:1px}
.dark .nb-hdr{color:#fbbf24}
.nb-dado{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;margin-bottom:4px}
@media(max-width:440px){.nb-dado{grid-template-columns:1fr}}
.nb-clbl{font-weight:800;color:var(--pri);text-decoration:underline;text-underline-offset:2px}
.nb-div{border:none;border-top:1.5px solid #fde68a;margin:4px 0}
.dark .nb-div{border-color:#422006}
.nb-sh{font-weight:800;color:var(--pri);margin:2px 0}
.nb-step{margin:2px 0}
.nb-step b{color:#1e293b;font-weight:700}
.dark .nb-step b{color:#e2e8f0}
.nb-i{display:block;padding-left:18px}
.nb-v{color:#1d4ed8;font-weight:800;font-family:'JetBrains Mono',monospace}
.dark .nb-v{color:#93c5fd}
.nb-box{display:inline-block;background:rgba(29,78,216,.11);border:1.5px solid rgba(29,78,216,.22);
border-radius:5px;padding:0 7px;font-weight:800;font-family:'JetBrains Mono',monospace;color:#1d4ed8}
.dark .nb-box{background:rgba(147,197,253,.11);border-color:rgba(147,197,253,.28);color:#93c5fd}
.nb-ok{color:#065f46;font-weight:800}.nb-bad{color:#991b1b;font-weight:800}
.nb-ans{border-top:2px solid #fde68a;margin-top:6px;padding-top:4px;font-weight:800;font-size:.85rem}
.dark .nb-ans{border-color:#422006}
</style>
<style>
/* ═══════════════════════════════════════════════════
UI v2 — Scientific Elegance Redesign
═══════════════════════════════════════════════════ */
/* ── Override Core Variables ── */
:root{
--pri:#3730a3;--pri2:#312e81;
--acc:#0ea5e9;
--ok:#059669;--ok-bg:#d1fae5;
--fail:#dc2626;--fail-bg:#fee2e2;
--warn:#d97706;--warn-bg:#fef3c7;
--bg:#f5f1e8;--card:#fffdf8;
--text:#1e1b2e;--muted:#6b6578;
--border:#e2dbd0;
--sh:0 2px 12px rgba(26,27,58,.06),0 1px 3px rgba(26,27,58,.04);
--sh-lg:0 8px 30px rgba(26,27,58,.10),0 2px 6px rgba(26,27,58,.06)
}
.dark{
--pri:#818cf8;--pri2:#6366f1;
--bg:#0f0e18;--card:#1a192a;
--text:#e2e0ed;--muted:#9490a5;
--border:#2d2b3f;
--sh:0 2px 12px rgba(0,0,0,.3),0 1px 3px rgba(0,0,0,.2);
--sh-lg:0 8px 30px rgba(0,0,0,.4)
}
/* ── Typography ── */
body{font-family:'Literata','Georgia',serif;background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
/* ── Header ── */
.hdr{background:linear-gradient(135deg,#1e1b35 0%,#312e81 50%,#4338ca 100%);padding:34px 24px 30px;position:relative;overflow:hidden}
.hdr::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 80% at 15% 50%,rgba(180,83,9,.18) 0%,transparent 60%),radial-gradient(ellipse 50% 70% at 85% 30%,rgba(99,102,241,.15) 0%,transparent 60%),radial-gradient(circle at 50% 110%,rgba(217,119,6,.12) 0%,transparent 50%);pointer-events:none}
.hdr::after{content:'';position:absolute;top:-50%;right:-15%;width:400px;height:400px;border-radius:50%;background:rgba(255,255,255,.03);pointer-events:none}
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900;position:relative;letter-spacing:-.02em;line-height:1.3}
.hdr p{font-family:'Outfit',sans-serif;font-size:.82rem;opacity:.55;margin-top:8px;position:relative;font-weight:500;letter-spacing:.01em}
/* ── Chapter Navigation ── */
.nav-wrap{background:rgba(245,241,232,.88);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50}
.dark .nav-wrap{background:rgba(15,14,24,.88)}
.ch-bar{display:flex;gap:0;padding:0 10px;overflow-x:auto;scrollbar-width:none}
.ch-bar::-webkit-scrollbar{display:none}
.ch-btn{padding:11px 15px;border:none;border-bottom:2.5px solid transparent;background:transparent;font-family:'Outfit',sans-serif;font-size:.76rem;font-weight:700;color:var(--muted);cursor:pointer;white-space:nowrap;transition:color .2s,border-color .2s;flex-shrink:0}
.ch-btn:hover{color:var(--text)}
.ch-btn.active{color:#3730a3;border-bottom-color:#3730a3}
.dark .ch-btn.active{color:#a5b4fc;border-bottom-color:#a5b4fc}
.sec-bar{padding:8px 10px 10px;border-top:1px solid var(--border)}
.sec-group{display:none;flex-wrap:wrap;gap:5px}
.sec-group.show{display:flex}
/* ── Section Tabs (override) ── */
.tab{padding:6px 13px;border:1.5px solid var(--border);border-radius:8px;font-family:'Outfit',sans-serif;font-size:.72rem;font-weight:600;cursor:pointer;white-space:nowrap;transition:all .15s ease;background:var(--card);color:var(--muted);flex-shrink:0}
.tab:hover{border-color:var(--pri);color:var(--pri);background:rgba(55,48,163,.04)}
.dark .tab:hover{background:rgba(129,140,248,.08)}
.tab.active{background:#3730a3;color:#fff;border-color:#3730a3;box-shadow:0 2px 8px rgba(55,48,163,.25)}
.dark .tab.active{background:#6366f1;border-color:#6366f1;box-shadow:0 2px 8px rgba(99,102,241,.3)}
/* ── Content ── */
.content{max-width:800px;padding:26px 18px}
.content.active{animation:fadeUp .3s ease}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
/* ── Section Title ── */
.section-title{font-family:'Outfit',sans-serif;font-size:1.1rem;font-weight:800;letter-spacing:-.01em}
/* ── Formula Cards ── */
.fcard{border:1.5px solid var(--border);border-radius:16px;padding:18px 20px;box-shadow:var(--sh);transition:transform .25s ease,box-shadow .25s ease}
.fcard:hover{transform:translateY(-3px);box-shadow:var(--sh-lg)}
.fcard.highlight{border-color:rgba(55,48,163,.25);background:linear-gradient(135deg,rgba(55,48,163,.04),rgba(99,102,241,.02))}
.dark .fcard.highlight{border-color:rgba(129,140,248,.2);background:linear-gradient(135deg,rgba(129,140,248,.06),rgba(99,102,241,.03))}
.fcard h3{font-family:'Outfit',sans-serif;font-size:.78rem;font-weight:700;letter-spacing:.07em}
.fcard .main-f{border-radius:10px;background:rgba(55,48,163,.05)}
.dark .fcard .main-f{background:rgba(129,140,248,.08)}
/* ── Example Box ── */
.example-box{border:1.5px solid var(--border);border-left:4px solid var(--pri);border-radius:14px}
.example-box h3{font-family:'Outfit',sans-serif}
.example-box .cond{background:rgba(55,48,163,.04);border-radius:10px}
.dark .example-box .cond{background:rgba(129,140,248,.06)}
/* ── Buttons ── */
.btn{border-radius:10px;font-family:'Outfit',sans-serif;font-size:.82rem;font-weight:700;transition:all .2s ease}
.btn-pri{background:#3730a3;color:#fff;box-shadow:0 2px 8px rgba(55,48,163,.2)}
.btn-pri:hover{background:#312e81;box-shadow:0 4px 14px rgba(55,48,163,.3)}
.dark .btn-pri{background:#6366f1;box-shadow:0 2px 8px rgba(99,102,241,.25)}
.dark .btn-pri:hover{background:#818cf8}
.btn-next{background:#059669}
/* ── Para Pills ── */
.para-pill{font-family:'Outfit',sans-serif;border-radius:8px}
.para-pill.active{background:#3730a3;border-color:#3730a3}
.dark .para-pill.active{background:#6366f1;border-color:#6366f1}
/* ── Task System ── */
.task-num{font-family:'Outfit',sans-serif}
.task-text{font-size:.95rem;line-height:1.9}
.task-card{border-radius:16px}
.score-bar{font-family:'Outfit',sans-serif}
.chip{border-radius:8px}
.nav-dot{font-family:'Outfit',sans-serif;border-radius:8px}
/* ── Reference Panel ── */
.ref-toggle{border-radius:14px;background:#3730a3;box-shadow:0 4px 16px rgba(55,48,163,.3)}
.dark .ref-toggle{background:#6366f1;box-shadow:0 4px 16px rgba(99,102,241,.3)}
.ref-panel{border-radius:18px;box-shadow:0 12px 40px rgba(0,0,0,.12)}
.ref-panel h3{font-family:'Outfit',sans-serif}
/* ── Theme Button ── */
.theme-btn{border-radius:10px}
/* ── Info Boxes ── */
.student-box-title,.remember-box-title,.mistakes-box-title,.insight-title{font-family:'Outfit',sans-serif}
.student-box p{font-size:.85rem}
/* ── Interactive Diagrams ── */
.idiag h3{font-family:'Outfit',sans-serif}
.idiag{border-radius:16px}
.slider-lbl{font-family:'Outfit',sans-serif}
.idiag-result{border-radius:12px}
input[type=range]{accent-color:#3730a3}
.dark input[type=range]{accent-color:#818cf8}
/* ── Para Hero ── */
.para-hero{border-radius:20px;padding:24px 26px}
.para-hero .ph-label{font-family:'Outfit',sans-serif}
.para-hero h2{font-family:'Outfit',sans-serif;font-size:1.15rem}
.para-hero .ph-formula{border-radius:12px}
.para-hero .ph-tag{font-family:'Outfit',sans-serif;border-radius:22px}
/* ── Misc Components ── */
.solve-box h4{font-family:'Outfit',sans-serif}
.fchain-step{font-family:'JetBrains Mono',monospace}
.life-item .li-title{font-family:'Outfit',sans-serif}
.life-item{border-radius:14px}
.step-n{background:#3730a3;font-family:'Outfit',sans-serif}
.dark .step-n{background:#6366f1}
.cv-playbtn{font-family:'Outfit',sans-serif;background:#3730a3}
.dark .cv-playbtn{background:#6366f1}
.mcq-opt{border-radius:10px}
.def-box{border-left-color:#3730a3;background:rgba(55,48,163,.04);border-radius:12px}
.dark .def-box{border-left-color:#818cf8;background:rgba(129,140,248,.06)}
.summary{border-radius:18px}
.summary h2,.big-score,.sum-grade{font-family:'Outfit',sans-serif}
.feedback{border-radius:12px}
.info-badge{font-family:'Outfit',sans-serif}
.nb-hdr{font-family:'Outfit',sans-serif}
.lab11-tbl th{font-family:'Outfit',sans-serif}
.given-table td:first-child{font-family:'Outfit',sans-serif}
/* ── Dark Overrides (hardcoded in old CSS) ── */
.dark .fcard{background:var(--card)}
.dark .example-box{background:var(--card)}
.dark .ans-inp{background:var(--bg);color:var(--text)}
/* ── Progress Bar ── */
.prog-fill{background:linear-gradient(90deg,#3730a3,#6366f1)}
.dark .prog-fill{background:linear-gradient(90deg,#6366f1,#a5b4fc)}
.nav-dot.nd-cur{background:#3730a3;border-color:#3730a3}
.dark .nav-dot.nd-cur{background:#6366f1;border-color:#6366f1}
/* ── Scrollbar ── */
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:var(--muted)}
/* ── Para Selector v2 (Designer) ── */
.para-selector{margin-bottom:24px}
.psel-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:10px}
/* Card base */
.psel-card{position:relative;overflow:hidden;border-radius:14px;padding:14px 14px 12px;border:1.5px solid transparent;transition:box-shadow .25s,transform .2s,border-color .25s}
.psel-card:hover{transform:translateY(-3px)}
/* Roman numeral watermark */
.psel-card::before{position:absolute;top:-4px;right:9px;font-family:'Outfit',sans-serif;font-size:3.8rem;font-weight:900;line-height:1;pointer-events:none;opacity:.07;z-index:0;letter-spacing:-.02em}
/* Top accent strip */
.psel-card::after{content:'';position:absolute;top:0;left:0;right:0;height:3px;border-radius:14px 14px 0 0}
/* Card header */
.psel-card-hdr{position:relative;z-index:1;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.psel-card-title{display:block;font-family:'Outfit',sans-serif;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}
.psel-card-sub{display:block;font-size:.6rem;font-weight:500;color:var(--muted);opacity:.85}
.psel-card-pills{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:4px}
/* Pills — compact squares */
.psel-card .para-pill{width:30px;height:27px;padding:0!important;display:inline-flex;align-items:center;justify-content:center;font-size:.67rem;font-weight:700;border-radius:7px;transition:transform .15s,box-shadow .15s,background .15s,color .15s}
.psel-card .para-pill:hover{transform:scale(1.15);z-index:2}
/* Chapter 1 — Кинематика (blue) */
.psel-c1{background:linear-gradient(135deg,rgba(37,99,235,.05) 0%,rgba(37,99,235,.01) 100%);border-color:rgba(37,99,235,.18)}
.psel-c1:hover{border-color:rgba(37,99,235,.38);box-shadow:0 6px 24px rgba(37,99,235,.12)}
.psel-c1::before{content:'I';color:#2563eb}
.psel-c1::after{background:linear-gradient(90deg,#2563eb,#60a5fa)}
.psel-c1 .psel-card-title{color:#2563eb}
.psel-c1 .para-pill:hover{box-shadow:0 2px 10px rgba(37,99,235,.25)}
.psel-c1 .para-pill.active{background:#2563eb;border-color:#2563eb;color:#fff;box-shadow:0 2px 8px rgba(37,99,235,.35)}
/* Chapter 2 — Динамика (orange) */
.psel-c2{background:linear-gradient(135deg,rgba(234,88,12,.05) 0%,rgba(234,88,12,.01) 100%);border-color:rgba(234,88,12,.18)}
.psel-c2:hover{border-color:rgba(234,88,12,.38);box-shadow:0 6px 24px rgba(234,88,12,.12)}
.psel-c2::before{content:'II';color:#ea580c}
.psel-c2::after{background:linear-gradient(90deg,#ea580c,#fb923c)}
.psel-c2 .psel-card-title{color:#ea580c}
.psel-c2 .para-pill:hover{box-shadow:0 2px 10px rgba(234,88,12,.25)}
.psel-c2 .para-pill.active{background:#ea580c;border-color:#ea580c;color:#fff;box-shadow:0 2px 8px rgba(234,88,12,.35)}
/* Chapter 3 — Тяготение (green) */
.psel-c3{background:linear-gradient(135deg,rgba(5,150,105,.05) 0%,rgba(5,150,105,.01) 100%);border-color:rgba(5,150,105,.18)}
.psel-c3:hover{border-color:rgba(5,150,105,.38);box-shadow:0 6px 24px rgba(5,150,105,.12)}
.psel-c3::before{content:'III';color:#059669}
.psel-c3::after{background:linear-gradient(90deg,#059669,#34d399)}
.psel-c3 .psel-card-title{color:#059669}
.psel-c3 .para-pill:hover{box-shadow:0 2px 10px rgba(5,150,105,.25)}
.psel-c3 .para-pill.active{background:#059669;border-color:#059669;color:#fff;box-shadow:0 2px 8px rgba(5,150,105,.35)}
/* Chapter 4 — Статика (violet) */
.psel-c4{background:linear-gradient(135deg,rgba(124,58,237,.05) 0%,rgba(124,58,237,.01) 100%);border-color:rgba(124,58,237,.18)}
.psel-c4:hover{border-color:rgba(124,58,237,.38);box-shadow:0 6px 24px rgba(124,58,237,.12)}
.psel-c4::before{content:'IV';color:#7c3aed}
.psel-c4::after{background:linear-gradient(90deg,#7c3aed,#a78bfa)}
.psel-c4 .psel-card-title{color:#7c3aed}
.psel-c4 .para-pill:hover{box-shadow:0 2px 10px rgba(124,58,237,.25)}
.psel-c4 .para-pill.active{background:#7c3aed;border-color:#7c3aed;color:#fff;box-shadow:0 2px 8px rgba(124,58,237,.35)}
/* Chapter 5 — Гидростатика (cyan) */
.psel-c5{background:linear-gradient(135deg,rgba(8,145,178,.05) 0%,rgba(8,145,178,.01) 100%);border-color:rgba(8,145,178,.18)}
.psel-c5:hover{border-color:rgba(8,145,178,.38);box-shadow:0 6px 24px rgba(8,145,178,.12)}
.psel-c5::before{content:'V';color:#0891b2}
.psel-c5::after{background:linear-gradient(90deg,#0891b2,#22d3ee)}
.psel-c5 .psel-card-title{color:#0891b2}
.psel-c5 .para-pill:hover{box-shadow:0 2px 10px rgba(8,145,178,.25)}
.psel-c5 .para-pill.active{background:#0891b2;border-color:#0891b2;color:#fff;box-shadow:0 2px 8px rgba(8,145,178,.35)}
/* Chapter 6 — Энергия (indigo) */
.psel-c6{background:linear-gradient(135deg,rgba(55,48,163,.05) 0%,rgba(55,48,163,.01) 100%);border-color:rgba(55,48,163,.18)}
.psel-c6:hover{border-color:rgba(55,48,163,.38);box-shadow:0 6px 24px rgba(55,48,163,.12)}
.psel-c6::before{content:'VI';color:#3730a3}
.psel-c6::after{background:linear-gradient(90deg,#3730a3,#818cf8)}
.psel-c6 .psel-card-title{color:#3730a3}
.psel-c6 .para-pill:hover{box-shadow:0 2px 10px rgba(55,48,163,.25)}
.psel-c6 .para-pill.active{background:#3730a3;border-color:#3730a3;color:#fff;box-shadow:0 2px 8px rgba(55,48,163,.35)}
/* Dark mode */
.dark .psel-c1{background:linear-gradient(135deg,rgba(37,99,235,.09) 0%,rgba(37,99,235,.02) 100%)}
.dark .psel-c1::before{color:#60a5fa}.dark .psel-c1 .psel-card-title{color:#60a5fa}
.dark .psel-c2{background:linear-gradient(135deg,rgba(234,88,12,.09) 0%,rgba(234,88,12,.02) 100%)}
.dark .psel-c2::before{color:#fb923c}.dark .psel-c2 .psel-card-title{color:#fb923c}
.dark .psel-c3{background:linear-gradient(135deg,rgba(5,150,105,.09) 0%,rgba(5,150,105,.02) 100%)}
.dark .psel-c3::before{color:#34d399}.dark .psel-c3 .psel-card-title{color:#34d399}
.dark .psel-c4{background:linear-gradient(135deg,rgba(124,58,237,.09) 0%,rgba(124,58,237,.02) 100%)}
.dark .psel-c4::before{color:#a78bfa}.dark .psel-c4 .psel-card-title{color:#a78bfa}
.dark .psel-c5{background:linear-gradient(135deg,rgba(8,145,178,.09) 0%,rgba(8,145,178,.02) 100%)}
.dark .psel-c5::before{color:#22d3ee}.dark .psel-c5 .psel-card-title{color:#22d3ee}
.dark .psel-c6{background:linear-gradient(135deg,rgba(55,48,163,.09) 0%,rgba(55,48,163,.02) 100%)}
.dark .psel-c6::before{color:#a5b4fc}.dark .psel-c6 .psel-card-title{color:#a5b4fc}
/* Hard card */
.psel-hard-card{width:100%;display:flex!important;align-items:center;gap:16px;padding:16px 20px!important;border-radius:14px!important;background:linear-gradient(135deg,#78350f 0%,#92400e 40%,#d97706 100%)!important;border:none!important;cursor:pointer;color:#fff!important;text-align:left;position:relative;overflow:hidden;transition:all .25s}
.psel-hard-card::before{content:'⚡';position:absolute;right:-4px;top:-8px;font-size:5rem;opacity:.09;pointer-events:none;line-height:1}
.psel-hard-card:hover{filter:brightness(1.1);box-shadow:0 6px 28px rgba(217,119,6,.4)!important;transform:translateY(-2px)}
.psel-hard-card.active{background:linear-gradient(135deg,#451a03 0%,#78350f 40%,#f59e0b 100%)!important;box-shadow:0 6px 28px rgba(245,158,11,.5)!important}
.psel-hard-icon{width:42px;height:42px;border-radius:10px;background:rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0}
.psel-hard-body{flex:1;min-width:0}
.psel-hard-title{font-family:'Outfit',sans-serif;font-size:.9rem;font-weight:800;line-height:1.2;margin-bottom:2px}
.psel-hard-sub{font-size:.72rem;font-weight:500;opacity:.75}
.psel-hard-arrow{width:28px;height:28px;border-radius:50%;background:rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;font-size:.78rem;flex-shrink:0;transition:transform .2s,background .2s}
.psel-hard-card:hover .psel-hard-arrow{transform:translateX(3px);background:rgba(255,255,255,.25)}
/* ── Responsive ── */
@media(max-width:560px){
.ch-btn{font-size:.72rem;padding:9px 11px}
.hdr h1{font-size:1.3rem}
.hdr{padding:26px 18px 22px}
.content{padding:18px 14px}
.psel-grid{grid-template-columns:1fr 1fr}
.psel-hard-title{font-size:.82rem}
}
</style>
<style>
/* ═══════════════════════════════════════════════════════════
ATLAS v3 — Comprehensive Redesign
2026-04-16
═══════════════════════════════════════════════════════════ */
/* ── Custom Properties ── */
:root{
--bg:#f5f1ea;--card:#ffffff;--card2:#fdfaf4;
--text:#1c1827;--muted:#70698a;--dim:#9c97b0;
--border:#e5e0d4;--border2:#ede8df;
--sh:0 1px 3px rgba(28,24,39,.05),0 4px 16px rgba(28,24,39,.04);
--sh-lg:0 6px 22px rgba(28,24,39,.08),0 2px 6px rgba(28,24,39,.04);
--sh-hover:0 10px 30px rgba(28,24,39,.13),0 2px 6px rgba(28,24,39,.05);
--ok:#0f7a51;--ok-bg:#ebfbf2;--ok-border:#9fdcb8;
--fail:#c1272d;--fail-bg:#fef2f2;--fail-border:#f5b8ba;
--warn:#b45309;--warn-bg:#fef7ed;
--gold:#b87d12;--gold2:#d4a843;--gold-bg:rgba(184,125,18,.06);
--pri:#3b3097;--pri2:#2f267a;
--pri-light:rgba(59,48,151,.055);--pri-border:rgba(59,48,151,.16);
--dot-clr:rgba(28,24,39,.06);
--r:14px
}
.dark{
--bg:#0c0b14;--card:#131120;--card2:#1a1829;
--text:#e8e3f5;--muted:#8c87a5;--dim:#5a5672;
--border:#24213a;--border2:#1c1a2e;
--sh:0 1px 3px rgba(0,0,0,.35),0 4px 16px rgba(0,0,0,.28);
--sh-lg:0 6px 22px rgba(0,0,0,.5),0 2px 6px rgba(0,0,0,.3);
--sh-hover:0 10px 30px rgba(0,0,0,.6);
--ok:#22c77d;--ok-bg:rgba(34,199,125,.09);--ok-border:rgba(34,199,125,.22);
--fail:#f16a6a;--fail-bg:rgba(241,106,106,.09);--fail-border:rgba(241,106,106,.22);
--warn:#e09b3e;--warn-bg:rgba(224,155,62,.09);
--gold:#d4a843;--gold2:#efc96c;--gold-bg:rgba(212,168,67,.07);
--pri:#7c74f4;--pri2:#6c63e8;
--pri-light:rgba(124,116,244,.08);--pri-border:rgba(124,116,244,.2);
--dot-clr:rgba(255,255,255,.022)
}
/* ── Base ── */
html,body{height:100%;overflow:hidden}
body{font-family:'Literata','Georgia',serif;background:var(--bg);color:var(--text);
-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
display:flex;flex-direction:column}
.hdr{flex-shrink:0}
body::before{content:'';position:fixed;inset:0;pointer-events:none;z-index:0;
background-image:radial-gradient(circle,var(--dot-clr) 1px,transparent 1px);
background-size:26px 26px}
::selection{background:var(--gold2);color:#fff}
::-webkit-scrollbar{width:5px;height:5px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:99px}
::-webkit-scrollbar-thumb:hover{background:var(--muted)}
/* ── Header ── */
.hdr{background:linear-gradient(110deg,#0d1b3e 0%,#102a5c 55%,#0e3460 100%);
padding:22px 28px 20px;position:relative;overflow:hidden;
border-bottom:2px solid rgba(56,152,255,.18);text-align:left}
.hdr::before{content:'ФИЗИКА';position:absolute;right:-8px;top:-5%;
font-family:'Outfit',sans-serif;font-size:clamp(5rem,18vw,14rem);
font-weight:900;letter-spacing:-.05em;color:transparent;
-webkit-text-stroke:1.5px rgba(100,180,255,.07);line-height:1;
pointer-events:none;user-select:none;z-index:0}
.hdr::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
background:
radial-gradient(ellipse 55% 90% at 5% 60%,rgba(0,120,255,.12) 0%,transparent 60%),
radial-gradient(ellipse 45% 65% at 90% 20%,rgba(0,200,255,.08) 0%,transparent 55%),
radial-gradient(ellipse 30% 50% at 50% 110%,rgba(56,100,220,.18) 0%,transparent 50%)}
.hdr-eyebrow{font-family:'Outfit',sans-serif;font-size:.6rem;font-weight:700;
letter-spacing:.22em;text-transform:uppercase;color:rgba(100,180,255,.6);
margin-bottom:12px;position:relative;z-index:1}
.hdr h1{font-family:'Outfit',sans-serif;font-size:clamp(1.55rem,4.5vw,2.2rem);
font-weight:900;letter-spacing:-.03em;color:#e8f4ff;
position:relative;z-index:1;line-height:1.1;margin-bottom:0}
.hdr h1 i{color:#38bdf8;margin-right:.2em}
.hdr p{font-family:'Outfit',sans-serif;font-size:.7rem;color:rgba(180,225,255,.8);
margin-top:10px;position:relative;z-index:1;letter-spacing:.07em;
font-weight:500;text-transform:uppercase}
.hdr-formula-strip{display:flex;flex-wrap:wrap;gap:6px;margin-top:20px;position:relative;z-index:1}
.hdr-formula-strip span{font-family:'JetBrains Mono',monospace;font-size:.68rem;
color:rgba(190,230,255,.88);background:rgba(56,152,255,.15);
border:1px solid rgba(100,180,255,.3);border-radius:6px;padding:4px 12px}
/* ── Chapter Navigation ── */
.nav-wrap{background:rgba(10,22,52,.97);backdrop-filter:blur(24px);
-webkit-backdrop-filter:blur(24px);border-bottom:1px solid rgba(56,152,255,.14);
position:sticky;top:0;z-index:50}
.dark .nav-wrap{background:rgba(10,22,52,.97);border-bottom-color:rgba(56,152,255,.1)}
.ch-bar{display:flex;gap:0;padding:0 14px;overflow-x:auto;scrollbar-width:none}
.ch-bar::-webkit-scrollbar{display:none}
.ch-btn{padding:13px 16px;border:none;border-bottom:2.5px solid transparent;
background:transparent;font-family:'Outfit',sans-serif;font-size:.68rem;font-weight:700;
color:rgba(180,220,255,.78);cursor:pointer;white-space:nowrap;
letter-spacing:.06em;text-transform:uppercase;
transition:color .18s,border-color .18s;flex-shrink:0}
.ch-btn:hover{color:rgba(160,210,255,.7)}
.ch-btn.active{color:#38bdf8;border-bottom-color:#38bdf8}
.dark .ch-btn.active{color:#38bdf8;border-bottom-color:#38bdf8}
.sec-bar{padding:8px 14px 12px;border-top:1px solid rgba(56,152,255,.1);
background:rgba(8,18,45,.97)}
.sec-group{display:none;flex-wrap:wrap;gap:5px}
.sec-group.show{display:flex}
/* ── Section Tabs ── */
.tab{font-family:'Outfit',sans-serif;font-size:.68rem;font-weight:600;
letter-spacing:.03em;padding:5px 12px;
border:1px solid rgba(56,152,255,.16);border-radius:7px;
background:rgba(56,152,255,.07);color:rgba(140,200,255,.45);
transition:all .15s;cursor:pointer;white-space:nowrap;flex-shrink:0}
.tab:hover{border-color:rgba(56,189,248,.4);color:#38bdf8;background:rgba(56,189,248,.1)}
.tab.active{background:#1d6fb5;border-color:#38bdf8;color:#e8f4ff;
box-shadow:0 2px 10px rgba(56,189,248,.25)}
.dark .tab.active{background:#1d6fb5;border-color:#38bdf8;
box-shadow:0 2px 10px rgba(56,189,248,.25)}
/* ── Content ── */
.content{max-width:820px;padding:28px 20px;display:none;position:relative;z-index:1}
.content.active{display:block;animation:fadeUp .28s ease}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
/* ── Section Title ── */
.section-title{font-family:'Outfit',sans-serif;font-size:.7rem;font-weight:800;
text-transform:uppercase;letter-spacing:.15em;color:var(--pri);
display:flex;align-items:center;gap:10px;margin-bottom:18px}
.section-title::before{content:'';display:block;width:18px;height:2px;
background:var(--pri);border-radius:1px;flex-shrink:0}
.section-title i{display:none}
/* ── Formula Grid & Cards ── */
.formula-grid{gap:14px;margin-bottom:22px}
.fcard{border:1px solid var(--border);border-radius:16px;padding:20px 22px;
background:var(--card);box-shadow:var(--sh);position:relative;overflow:hidden;
transition:transform .25s,box-shadow .25s}
.fcard::before{content:'';position:absolute;top:0;left:0;bottom:0;width:3px;
background:var(--pri);border-radius:16px 0 0 16px;opacity:.8}
.fcard:hover{transform:translateY(-3px);box-shadow:var(--sh-hover)}
.fcard h3{font-family:'Outfit',sans-serif;font-size:.68rem;font-weight:700;
text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:14px}
.fcard .main-f{background:var(--pri-light);border:1px solid var(--pri-border);
border-radius:10px;padding:14px 18px;font-size:1.08rem;margin:0 0 12px;text-align:center}
.fcard p,.fcard ul{font-size:.84rem;color:var(--muted);line-height:1.82}
.fcard.highlight{border-color:var(--pri-border)}
.dark .fcard{background:var(--card)}
/* ── Example Box ── */
.example-box{border:1px solid var(--border);border-left:4px solid var(--pri);
border-radius:0 16px 16px 0;padding:20px 24px;background:var(--card);
box-shadow:var(--sh);margin-bottom:22px}
.dark .example-box{background:var(--card)}
.example-box h3{font-family:'Outfit',sans-serif;font-size:.74rem;font-weight:800;
color:var(--pri);text-transform:uppercase;letter-spacing:.08em;margin-bottom:12px}
.example-box .cond{background:var(--pri-light);border:1px solid var(--pri-border);
border-radius:10px;padding:12px 16px;font-size:.87rem;line-height:1.8}
.dark .example-box .cond{background:var(--pri-light)}
/* ── Para Hero ── */
.para-hero{border-radius:20px;padding:28px 30px;position:relative;overflow:hidden;
box-shadow:0 6px 26px rgba(0,0,0,.2);margin-bottom:26px}
.para-hero::before{content:'';position:absolute;inset:0;z-index:0;pointer-events:none;
background:linear-gradient(135deg,rgba(255,255,255,.11) 0%,transparent 55%)}
.para-hero::after{content:'';position:absolute;right:-32px;top:-32px;width:170px;height:170px;
border-radius:50%;opacity:.11;pointer-events:none;z-index:0}
.para-hero .ph-label,.para-hero h2,.para-hero .ph-formula,
.para-hero .ph-desc,.para-hero .ph-tags{position:relative;z-index:1}
.para-hero .ph-label{font-family:'Outfit',sans-serif;font-size:.6rem;font-weight:700;
letter-spacing:.2em;text-transform:uppercase;opacity:.62;margin-bottom:8px;display:block}
.para-hero h2{font-family:'Outfit',sans-serif;font-size:1.25rem;font-weight:900;
letter-spacing:-.02em;line-height:1.2;margin-bottom:10px}
.para-hero .ph-formula{display:inline-block;background:rgba(255,255,255,.2);
border:1px solid rgba(255,255,255,.3);border-radius:10px;padding:8px 18px;
font-size:1rem;font-weight:700;margin:2px 0 12px}
.para-hero .ph-desc{font-family:'Literata',serif;font-size:.84rem;opacity:.88;
line-height:1.72;margin-bottom:14px}
.para-hero .ph-tags{display:flex;flex-wrap:wrap;gap:6px}
.para-hero .ph-tag{font-family:'Outfit',sans-serif;font-size:.6rem;font-weight:700;
letter-spacing:.06em;text-transform:uppercase;background:rgba(255,255,255,.18);
border:1px solid rgba(255,255,255,.24);border-radius:20px;padding:4px 12px}
/* ── Info Boxes (left-stripe style) ── */
.remember-box{background:rgba(193,39,45,.04);border:1px solid rgba(193,39,45,.16);
border-left:3.5px solid #c1272d;border-radius:0 12px 12px 0;padding:16px 18px;margin:16px 0}
.dark .remember-box{background:rgba(241,106,106,.06);border-color:rgba(241,106,106,.16);border-left-color:#f16a6a}
.remember-box-title{font-family:'Outfit',sans-serif;font-size:.7rem;font-weight:800;
text-transform:uppercase;letter-spacing:.1em;color:#c1272d;margin-bottom:8px;display:flex;align-items:center;gap:7px}
.dark .remember-box-title{color:#f16a6a}
.remember-box li,.remember-box p{font-size:.85rem;line-height:1.88}
.mistakes-box{background:rgba(180,83,9,.04);border:1px solid rgba(180,83,9,.16);
border-left:3.5px solid #b45309;border-radius:0 12px 12px 0;padding:16px 18px;margin:16px 0}
.dark .mistakes-box{background:rgba(224,155,62,.07);border-color:rgba(224,155,62,.16);border-left-color:#e09b3e}
.mistakes-box-title{font-family:'Outfit',sans-serif;font-size:.7rem;font-weight:800;
text-transform:uppercase;letter-spacing:.1em;color:#b45309;margin-bottom:8px;display:flex;align-items:center;gap:7px}
.dark .mistakes-box-title{color:#e09b3e}
.mistakes-box li{font-size:.85rem;line-height:1.88}
.student-box{background:var(--gold-bg);border:1px solid rgba(184,125,18,.18);
border-left:3.5px solid var(--gold);border-radius:0 14px 14px 0;
padding:18px 20px;margin:16px 0;line-height:1.75}
.dark .student-box{background:rgba(212,168,67,.06);border-color:rgba(212,168,67,.16);border-left-color:var(--gold)}
.student-box-title{font-family:'Outfit',sans-serif;font-size:.7rem;font-weight:800;
text-transform:uppercase;letter-spacing:.1em;color:var(--gold);margin-bottom:10px;display:flex;align-items:center;gap:7px}
.dark .student-box-title{color:var(--gold2)}
.student-box p{font-size:.86rem;color:var(--text);margin:0 0 8px}
.student-box p:last-child{margin-bottom:0}
.student-box b{color:var(--gold)}.dark .student-box b{color:var(--gold2)}
.insight-box{background:var(--pri-light);border:1px solid var(--pri-border);
border-left:3.5px solid var(--pri);border-radius:0 12px 12px 0;padding:16px 18px;margin:16px 0}
.dark .insight-box{background:var(--pri-light);border-color:var(--pri-border)}
.insight-title{font-family:'Outfit',sans-serif;font-size:.7rem;font-weight:800;
text-transform:uppercase;letter-spacing:.1em;color:var(--pri);margin-bottom:7px;display:flex;align-items:center;gap:7px}
.dark .insight-title{color:var(--pri)}
.insight-box p{font-size:.85rem;line-height:1.82;margin:0 0 6px}
.def-box{background:var(--pri-light);border:1px solid var(--pri-border);
border-left:3.5px solid var(--pri);border-radius:0 10px 10px 0;
padding:13px 16px;font-size:.88rem;line-height:1.82;margin-bottom:16px}
.dark .def-box{background:var(--pri-light);border-left-color:var(--pri)}
/* ── Score & Progress ── */
.score-bar{font-family:'Outfit',sans-serif}
.chip{font-family:'Outfit',sans-serif;font-size:.8rem;font-weight:700;border-radius:8px}
.chip-ok{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-border)}
.chip-tot{background:var(--card);color:var(--muted);border:1px solid var(--border)}
.prog-wrap{height:4px;border-radius:99px;background:var(--border2);overflow:hidden;margin-bottom:18px}
.prog-fill{height:100%;border-radius:99px;transition:width .5s cubic-bezier(.16,1,.3,1);
background:linear-gradient(90deg,var(--pri),var(--gold2))}
.dark .prog-fill{background:linear-gradient(90deg,var(--pri),var(--gold2))}
/* ── Nav Dots ── */
.nav-dots{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:16px}
.nav-dot{font-family:'Outfit',sans-serif;font-size:.68rem;font-weight:700;
min-width:30px;height:30px;padding:0 6px;border-radius:8px;
border:1.5px solid var(--border);background:var(--card);color:var(--muted);
cursor:pointer;display:grid;place-items:center;transition:all .14s}
.nav-dot:hover{border-color:var(--pri);color:var(--pri)}
.nav-dot.nd-cur{background:var(--pri);border-color:var(--pri);color:#fff}
.nav-dot.nd-ok{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ok)}
.nav-dot.nd-fail{background:var(--fail-bg);border-color:var(--fail-border);color:var(--fail)}
/* ── Task Card ── */
.task-card{background:var(--card);border:1px solid var(--border);
border-radius:16px;padding:24px 26px;box-shadow:var(--sh);
margin-bottom:14px;position:relative;overflow:hidden}
.task-card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;
background:linear-gradient(90deg,var(--pri) 0%,transparent 70%)}
.task-num{font-family:'Outfit',sans-serif;font-size:.65rem;font-weight:800;
text-transform:uppercase;letter-spacing:.16em;color:var(--pri);
margin-bottom:10px;display:flex;align-items:center;gap:.45em}
.task-num::before{content:'//';opacity:.35;font-weight:900}
.task-text{font-family:'Literata',serif;font-size:.97rem;font-weight:500;
line-height:1.92;margin-bottom:16px}
.task-hint{font-size:.8rem;color:var(--muted);margin-top:0;margin-bottom:14px;
display:flex;align-items:flex-start;gap:7px;
background:var(--warn-bg);padding:9px 13px;border-radius:9px;
border-left:3px solid var(--warn)}
.task-hint i{color:var(--warn);margin-top:2px;flex-shrink:0}
/* ── Answer Input ── */
.ans-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.ans-inp{width:118px;padding:12px 14px;border:1.5px solid var(--border);border-radius:10px;
font-family:'JetBrains Mono',monospace;font-size:1.1rem;font-weight:700;
text-align:center;background:var(--card);color:var(--text);
outline:none;transition:border-color .18s,box-shadow .18s}
.ans-inp:focus{border-color:var(--pri);box-shadow:0 0 0 3px var(--pri-light)}
.dark .ans-inp{background:var(--card2)}
.unit-lbl{font-family:'Outfit',sans-serif;font-size:.82rem;font-weight:600;color:var(--muted);white-space:nowrap}
/* ── Buttons ── */
.btn{font-family:'Outfit',sans-serif;font-size:.82rem;font-weight:700;letter-spacing:.02em;
padding:11px 22px;border-radius:10px;transition:all .2s;border:none;cursor:pointer;
display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.btn:active{transform:scale(.97)}
.btn-pri{background:var(--pri);color:#fff;box-shadow:0 2px 10px rgba(59,48,151,.18)}
.btn-pri:hover{background:var(--pri2);box-shadow:0 4px 18px rgba(59,48,151,.3);transform:translateY(-1px)}
.dark .btn-pri{background:#6056d4}.dark .btn-pri:hover{background:#5248c0}
.btn-ghost{background:transparent;border:1.5px solid var(--border);color:var(--muted)}
.btn-ghost:hover{border-color:var(--pri);color:var(--pri);background:var(--pri-light)}
.btn-next{background:var(--ok);color:#fff;box-shadow:0 2px 10px rgba(15,122,81,.18)}
.btn-next:hover{filter:brightness(1.08);transform:translateY(-1px)}
/* ── Feedback ── */
.feedback{display:none;padding:14px 18px;border-radius:12px;
font-family:'Outfit',sans-serif;font-size:.88rem;font-weight:600;
line-height:1.72;margin-top:12px;border-left:4px solid}
.feedback.show{display:block;animation:fb-in .28s cubic-bezier(.16,1,.3,1)}
@keyframes fb-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.fb-ok{background:var(--ok-bg);color:var(--ok);border-left-color:var(--ok)}
.fb-fail{background:var(--fail-bg);color:var(--fail);border-left-color:var(--fail)}
/* ── MCQ ── */
.mcq-opts{display:flex;flex-direction:column;gap:8px;margin-top:4px}
.mcq-opt{padding:13px 18px;border:1.5px solid var(--border);border-radius:12px;
background:var(--card);font-family:'Literata',serif;font-size:.93rem;
color:var(--text);text-align:left;width:100%;cursor:pointer;
transition:all .15s;line-height:1.55}
.mcq-opt:hover:not(:disabled){border-color:var(--pri);background:var(--pri-light)}
.mcq-opt.mcq-cor{background:var(--ok-bg)!important;border-color:var(--ok-border)!important;
color:var(--ok)!important;font-weight:600}
.mcq-opt.mcq-wrong{background:var(--fail-bg)!important;border-color:var(--fail-border)!important;
color:var(--fail)!important}
.mcq-opt:disabled{cursor:default}
/* ── Summary ── */
.summary{background:var(--card);border:1px solid var(--border);border-radius:20px;
padding:40px 36px;text-align:center;box-shadow:var(--sh-lg);
position:relative;overflow:hidden;display:none}
.summary.show{display:block;animation:fadeUp .35s ease}
.summary::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;
background:linear-gradient(90deg,var(--pri) 0%,var(--gold2) 100%)}
.summary h2{font-family:'Outfit',sans-serif;font-size:1.3rem;font-weight:900;
letter-spacing:-.02em;margin-bottom:6px}
.big-score{font-family:'Outfit',sans-serif;font-size:5rem;font-weight:900;
letter-spacing:-.04em;color:var(--pri);line-height:1;margin:10px 0}
.sum-grade{font-family:'Outfit',sans-serif;font-size:.9rem;color:var(--muted);margin-bottom:28px}
.sum-btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
/* ── Interactive Diagrams ── */
.idiag{background:var(--card);border:1px solid var(--border);border-radius:16px;
padding:18px 20px;box-shadow:var(--sh);margin:14px 0}
.idiag h3{font-family:'Outfit',sans-serif;font-size:.68rem;font-weight:800;
text-transform:uppercase;letter-spacing:.1em;color:var(--muted);
margin-bottom:14px;display:flex;align-items:center;gap:7px}
.idiag-result{background:var(--pri-light);border:1px solid var(--pri-border);
border-radius:10px;padding:12px 16px;font-size:.92rem;font-weight:700;
text-align:center;font-family:'JetBrains Mono',monospace;color:var(--pri)}
.slider-lbl{font-family:'Outfit',sans-serif;font-size:.82rem;font-weight:600;color:var(--text);min-width:90px}
.slider-val{font-family:'JetBrains Mono',monospace;font-weight:800;color:var(--pri);min-width:72px;font-size:.82rem}
input[type=range]{accent-color:var(--pri);cursor:pointer}
/* ── Solution Steps ── */
.sol-steps{list-style:none;padding:0;margin:8px 0}
.sol-steps li{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px;font-size:.86rem;line-height:1.78}
.step-n{min-width:24px;height:24px;border-radius:50%;background:var(--pri);color:#fff;
font-family:'Outfit',sans-serif;font-size:.68rem;font-weight:800;
display:grid;place-items:center;margin-top:1px;flex-shrink:0}
/* ── Formula Chain ── */
.fchain{display:flex;flex-wrap:wrap;align-items:center;gap:8px;
background:var(--pri-light);border:1px solid var(--border);
border-radius:11px;padding:11px 15px;margin:10px 0;font-size:.82rem}
.fchain-step{background:var(--card);border:1.5px solid var(--border);border-radius:8px;
padding:4px 12px;font-family:'JetBrains Mono',monospace;font-size:.78rem;font-weight:600}
.fchain-arrow{color:var(--muted);font-weight:700}
.fchain-note{font-size:.73rem;color:var(--muted);font-style:italic}
/* ── Reference Panel ── */
.ref-toggle{border-radius:14px;background:var(--pri);color:#fff;border:none;
width:46px;height:46px;cursor:pointer;display:grid;place-items:center;
font-size:1.1rem;box-shadow:0 4px 16px rgba(59,48,151,.3)}
.dark .ref-toggle{background:var(--pri);box-shadow:0 4px 16px rgba(124,116,244,.3)}
.ref-panel{background:var(--card);border:1px solid var(--border);border-radius:18px;
padding:16px 18px;box-shadow:var(--sh-lg);display:none;
position:fixed;bottom:72px;right:16px;z-index:60;width:300px;
max-height:72vh;overflow-y:auto;font-size:.8rem;line-height:1.85;scrollbar-width:thin}
.ref-panel.show{display:block;animation:fadeUp .2s ease}
.ref-panel h3{font-family:'Outfit',sans-serif;font-size:.72rem;font-weight:800;
text-transform:uppercase;letter-spacing:.1em;color:var(--pri);margin:12px 0 5px}
.ref-panel h3:first-child{margin-top:0}
.ref-panel .rf{background:var(--pri-light);border:1px solid var(--pri-border);
border-radius:8px;padding:7px 12px;margin:3px 0;text-align:center}
/* ── Theme Button ── */
.theme-btn{position:fixed;top:12px;right:12px;z-index:60;width:38px;height:38px;
border-radius:10px;background:rgba(240,236,255,.12);border:1px solid rgba(255,255,255,.12);
cursor:pointer;display:grid;place-items:center;font-size:1rem;
color:rgba(240,236,255,.6);box-shadow:none}
.theme-btn:hover{background:rgba(240,236,255,.18);color:#d4a843}
/* ── Canvas ── */
.cv-wrap canvas{border-radius:10px}
.cv-playbtn{font-family:'Outfit',sans-serif;background:var(--pri);color:#fff;
border:none;border-radius:8px;padding:7px 18px;font-weight:700;font-size:.78rem;cursor:pointer}
.cv-playbtn:hover{filter:brightness(1.08)}
/* ── Solve Box ── */
.solve-box{background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:16px 20px;margin:14px 0}
.solve-box h4{font-family:'Outfit',sans-serif;font-size:.76rem;font-weight:800;
text-transform:uppercase;letter-spacing:.1em;color:var(--pri);margin-bottom:10px;display:flex;align-items:center;gap:6px}
/* ── Misc ── */
.info-badge{font-family:'Outfit',sans-serif;font-size:.68rem;font-weight:700;
background:var(--pri-light);color:var(--pri);border-radius:20px;padding:3px 10px}
.life-item{background:var(--card);border:1px solid var(--border);border-radius:14px;
padding:12px 10px;text-align:center;box-shadow:var(--sh)}
.life-item .li-title{font-family:'Outfit',sans-serif;font-size:.8rem;font-weight:700}
.life-item .li-desc{font-size:.72rem;color:var(--muted);line-height:1.6}
hr.divider{border:none;border-top:1px solid var(--border2);margin:22px 0}
.q-list{font-size:.88rem;line-height:1.92;color:var(--muted);padding-left:20px}
.q-list li{margin-bottom:4px}
.given-table td{border-color:var(--border);font-size:.82rem}
.given-table tr:first-child td{background:var(--pri-light)}
.given-table tr:last-child td{background:var(--ok-bg)}
.given-table td:first-child{font-family:'Outfit',sans-serif;color:var(--pri)}
.para-badge{font-family:'Outfit',sans-serif;border-radius:6px}
.nb-hdr{font-family:'Outfit',sans-serif;color:var(--gold)}
.dark .nb-hdr{color:var(--gold2)}
.nb-clbl{color:var(--pri)}
.nb-v{color:var(--pri);font-family:'JetBrains Mono',monospace;font-weight:800}
.dark .nb-v{color:var(--pri)}
.nb-box{background:var(--pri-light);border-color:var(--pri-border);color:var(--pri)}
.dark .nb-box{background:var(--pri-light);border-color:var(--pri-border);color:var(--pri)}
.lab11-tbl th{font-family:'Outfit',sans-serif;background:var(--pri-light);color:var(--pri);border-color:var(--border)}
.lab11-tbl td{border-color:var(--border);background:var(--card)}
.lab11-tbl tr.lab11-avg td{background:var(--pri-light);color:var(--pri)}
.dark .fcard{background:var(--card)}
.dark .ans-inp{background:var(--card2);color:var(--text)}
/* ── Sidebar Brand ── */
.sb-brand{display:flex;align-items:center;gap:11px;padding:18px 14px 16px;
border-bottom:1px solid rgba(56,152,255,.1)}
.sb-logo{width:32px;height:32px;color:#38bdf8;flex-shrink:0}
.sb-title{display:block;font-family:'Outfit',sans-serif;font-size:.92rem;
font-weight:800;color:#e8f4ff;letter-spacing:-.025em;line-height:1.1}
.sb-sub{display:block;font-family:'JetBrains Mono',monospace;font-size:.54rem;
color:rgba(140,200,255,.38);margin-top:3px;letter-spacing:.03em}
/* ── Chapter icon + label + badge ── */
.ch-icon{width:14px;height:14px;flex-shrink:0;opacity:.55;
transition:opacity .15s,color .15s}
.ch-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.ch-roman{font-family:'Cormorant Garamond',serif;font-size:.7rem;
color:rgba(140,200,255,.45);font-weight:400;font-style:italic;flex-shrink:0}
.ch-count{font-family:'JetBrains Mono',monospace;font-size:.5rem;
background:rgba(56,152,255,.14);color:rgba(160,215,255,.65);
border-radius:4px;padding:1px 5px;flex-shrink:0;line-height:1.6}
.sidebar .ch-btn{display:flex;align-items:center;gap:8px}
.sidebar .ch-btn.active .ch-icon{opacity:1;color:#38bdf8}
.sidebar .ch-btn.active .ch-roman{color:rgba(56,189,248,.38)}
.sidebar .ch-btn.active .ch-count{background:rgba(56,189,248,.18);color:#38bdf8}
.sidebar .ch-btn:hover .ch-icon{opacity:.85}
/* ── Section tab: § number + name ── */
.sidebar .tab{display:flex!important;align-items:baseline;gap:0}
.tab-num{font-family:'JetBrains Mono',monospace;font-size:.64rem;
color:rgba(56,189,248,.55);flex-shrink:0;min-width:32px;
transition:color .15s}
.tab-name{font-family:'Outfit',sans-serif;font-size:.74rem;
line-height:1.35;white-space:normal}
.sidebar .tab.active .tab-num{color:#38bdf8}
.sidebar .tab:hover .tab-num{color:rgba(56,189,248,.8)}
/* ── Page Layout (sidebar) ── */
.page-layout{display:grid;grid-template-columns:220px 1fr;flex:1;min-height:0;overflow:hidden}
.sidebar{position:static;height:100%;overflow-y:auto;overflow-x:hidden;
background:rgba(8,16,42,.99);border-right:1px solid rgba(56,152,255,.1);
scrollbar-width:thin;scrollbar-color:rgba(56,152,255,.2) transparent}
.sidebar::-webkit-scrollbar{width:3px}
.sidebar::-webkit-scrollbar-thumb{background:rgba(56,152,255,.2);border-radius:99px}
.main-content{min-width:0;overflow-y:auto;overflow-x:hidden;height:100%}
.sidebar .nav-wrap{position:static;background:transparent;border-bottom:none;
backdrop-filter:none;-webkit-backdrop-filter:none}
.sidebar .ch-bar{flex-direction:column;padding:14px 10px 8px;gap:1px;overflow-x:visible}
.sidebar .ch-btn{border-bottom:none!important;border-left:2.5px solid transparent;
text-align:left;padding:8px 12px;border-radius:7px;font-size:.72rem;
letter-spacing:.03em;width:100%}
.sidebar .ch-btn:hover{background:rgba(56,152,255,.07);border-left-color:rgba(56,152,255,.22)}
.sidebar .ch-btn.active{border-left-color:#38bdf8!important;border-bottom:none!important;
background:rgba(56,152,255,.11);color:#38bdf8}
.sidebar .sec-bar{border-top:1px solid rgba(56,152,255,.1);padding:8px 10px 18px;
background:transparent}
.sidebar .sec-group{flex-direction:column;gap:1px}
.sidebar .tab{display:block;text-align:left;border:none!important;
background:transparent!important;color:rgba(170,215,255,.72)!important;
border-radius:5px;padding:5px 10px;font-size:.74rem;white-space:normal;
line-height:1.3;box-shadow:none!important}
.sidebar .tab:hover{background:rgba(56,152,255,.09)!important;color:#c8e8ff!important}
.sidebar .tab.active{background:rgba(56,152,255,.16)!important;color:#e8f4ff!important;
border-left:2px solid #38bdf8!important;padding-left:8px!important}
/* ── Responsive override ── */
@media(max-width:768px){
.page-layout{grid-template-columns:1fr;flex:1;min-height:0;overflow:visible}
.sidebar{height:auto;overflow-y:visible;border-right:none;
border-bottom:1px solid rgba(56,152,255,.12)}
.main-content{height:auto;overflow-y:visible}
.sidebar .ch-bar{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;padding:0 10px}
.sidebar .ch-btn{white-space:nowrap;border-left:none!important;width:auto;
border-bottom:2.5px solid transparent!important;padding:11px 13px;border-radius:0}
.sidebar .ch-btn.active{border-left:none!important;border-bottom-color:#38bdf8!important;
background:transparent;color:#38bdf8}
.sidebar .sec-bar{border-top:1px solid rgba(56,152,255,.1)}
.sidebar .sec-group{flex-direction:row;flex-wrap:wrap}
.sidebar .tab{display:inline-block!important;white-space:nowrap;
border:1px solid rgba(56,152,255,.16)!important;
background:rgba(56,152,255,.07)!important;
color:rgba(140,200,255,.45)!important;border-radius:7px!important;
padding:5px 12px!important}
.hdr{padding:16px 16px 14px}
.hdr h1{font-size:1.45rem}
.hdr-formula-strip{gap:5px}
.hdr-formula-strip span{font-size:.62rem;padding:3px 9px}
.content{padding:20px 14px}
.task-card{padding:18px 18px}
.fcard{padding:16px 18px}
.para-hero{padding:22px 22px}
.summary{padding:30px 22px}
.big-score{font-size:4rem}
.psel-grid{grid-template-columns:1fr 1fr!important}
}
</style>
</head>
<body>
<button class="theme-btn" id="themeBtn"><i class="fas fa-moon"></i></button>
<button class="ref-toggle" id="refToggle" title="Формулы"><i class="fas fa-atom"></i></button>
<!-- Плавающий справочник -->
<div class="ref-panel" id="refPanel">
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)">
<span style="font-size:.82rem;font-weight:800;color:var(--pri)">📋 Справочник · §31–36</span>
<button onclick="document.getElementById('refPanel').classList.remove('show')"
style="background:none;border:none;cursor:pointer;color:var(--muted);font-size:1rem;line-height:1;padding:2px 4px;border-radius:5px" title="Закрыть"></button>
</div>
<h3>§15 — Первый закон Ньютона</h3>
<div class="rf">$\vec{F}_\text{рез} = \vec{0} \Leftrightarrow \vec{a} = \vec{0}$</div>
<p style="font-size:.75rem">Тело покоится или движется равномерно прямолинейно, если равнодействующая = 0.</p>
<h3>§16 — Масса. Сила тяжести</h3>
<div class="rf">$F_\text{т} = mg$</div>
<div class="rf">$m = \rho V$</div>
<p style="font-size:.75rem">$[m]=\text{кг}$ · скалярная · не зависит от планеты</p>
<h3>§17 — Второй закон Ньютона</h3>
<div class="rf">$\vec{F}_\text{рез} = m\vec{a}$</div>
<div class="rf">$\vec{a} = \vec{F}_\text{рез}/m$</div>
<p style="font-size:.75rem">$1\,\text{Н} = 1\,\dfrac{\text{кг}{\cdot}\text{м}}{\text{с}^2}$ · только в ИСО</p>
<h3>§18 — Третий закон Ньютона</h3>
<div class="rf">$\vec{F}_{1\to2} = -\vec{F}_{2\to1}$</div>
<p style="font-size:.75rem">Равны по модулю, противоположны, одной природы, на разных телах.</p>
<h3>§19 — Закон Гука</h3>
<div class="rf">$F_\text{упр} = k|\Delta l|$</div>
<div class="rf">$F_{\text{упр},x} = -kx$</div>
<p style="font-size:.75rem">$k$ — жёсткость [Н/м] · $k = F/|\Delta l|$</p>
<h3>§20 — Силы трения</h3>
<div class="rf">$F_\text{тр} = \mu N$</div>
<div class="rf">$F_\text{тр.пок}^{max} = \mu_\text{пок} N$</div>
<p style="font-size:.75rem">$\mu$ — коэфф. трения · против скорости</p>
<h3>§21 — Свободное падение</h3>
<div class="rf">$v_y = gt;\quad y = gt^2/2$</div>
<div class="rf">$t_\text{пад} = \sqrt{2h/g}$</div>
<div class="rf">$v_\text{пад} = \sqrt{2gh}$</div>
<p style="font-size:.75rem">Горизонтальный бросок: $x = v_0 t$; $l = v_0\sqrt{2h/g}$</p>
<p style="font-size:.75rem">Вверх: $H = v_0^2/(2g)$; $t_\text{пол} = 2v_0/g$</p>
<h3>§31 — Импульс тела</h3>
<div class="rf">$\vec{p} = m\vec{v}$</div>
<p style="font-size:.75rem">$[\,p\,] = \text{кг}{\cdot}\text{м/с}$ · направление ∥ $\vec{v}$</p>
<div class="rf">$\Delta\vec{p} = \vec{F}\,\Delta t$</div>
<div class="rf">$\vec{p}_{\text{сист}} = \sum \vec{p}_i$</div>
<div class="rf">$\Delta\vec{p}_{\text{сист}} = \vec{F}_{\text{внешн}}\,\Delta t$</div>
<h3>§32 — Закон сохранения импульса</h3>
<p style="font-size:.75rem">Замкнутая система ($F_{\text{внешн}}=0$):</p>
<div class="rf">$\vec{p}_{\text{сист}} = \text{const}$</div>
<p style="font-size:.75rem">Неупругий удар:</p>
<div class="rf">$m_1 v_1 + m_2 v_2 = (m_1{+}m_2)v$</div>
<p style="font-size:.75rem">Из покоя (отдача, ракета):</p>
<div class="rf">$m_1 v_1 + m_2 v_2 = 0$</div>
<h3>§33 — Механическая работа. Мощность</h3>
<div class="rf">$A = F\,\Delta r\cos\alpha$</div>
<div class="rf">$A = mgh$ (подъём тела)</div>
<div class="rf">$A = kx^2/2$ (деформация пружины)</div>
<div class="rf">$P = A/\Delta t$</div>
<div class="rf">$P = Fv\cos\alpha$</div>
<p style="font-size:.75rem">$[A]=\text{Дж}=\text{Н}{\cdot}\text{м}$ · $[P]=\text{Вт}=\text{Дж/с}$</p>
<p style="font-size:.75rem">α острый → A &gt; 0 · α = 90° → A = 0 · α тупой → A &lt; 0</p>
<h3>§34 — Потенциальная энергия</h3>
<div class="rf">$E_\text{п} = mgh$ (гравитационная)</div>
<div class="rf">$E_\text{п} = kx^2/2$ (пружина)</div>
<div class="rf">$\Delta E_\text{п} = -A$</div>
<p style="font-size:.75rem">$E_\text{п}$ равна работе сил взаимодействия<br>при переходе на нулевой уровень.</p>
<p style="font-size:.75rem">Нулевой уровень выбирается произвольно;<br>$\Delta E_\text{п}$ от него не зависит.</p>
<h3>📐 Быстрые выводы §31–32</h3>
<p style="font-size:.75rem">Сила через изменение импульса:</p>
<div class="rf">$F = \dfrac{\Delta p}{\Delta t} = \dfrac{m\,\Delta v}{\Delta t}$</div>
<p style="font-size:.75rem">Скорость после удара (неупр.):</p>
<div class="rf">$v = \dfrac{m_1 v_1 + m_2 v_2}{m_1 + m_2}$</div>
<p style="font-size:.75rem">Отдача / ракета из покоя:</p>
<div class="rf">$m_1 v_1 = -m_2 v_2$</div>
<h3>📐 Быстрые выводы §33</h3>
<p style="font-size:.75rem">Если α = 0° → cos α = 1 → $A = F\Delta r$</p>
<p style="font-size:.75rem">Если α = 90° → cos α = 0 → $A = 0$</p>
<p style="font-size:.75rem">Мощность через скорость:</p>
<div class="rf">$P = Fv$ (при $\alpha = 0°$)</div>
<p style="font-size:.75rem">Деформация пружины из работы:</p>
<div class="rf">$x = \sqrt{2A/k}$</div>
<p style="font-size:.75rem">Высота из работы силы тяжести:</p>
<div class="rf">$h = A/(mg)$</div>
<h3>📐 Быстрые выводы §34</h3>
<p style="font-size:.75rem">$E_\text{п}$ растёт пропорц. $h$ (линейно)<br>и пропорц. $x^2$ (квадратично)</p>
<p style="font-size:.75rem">Деформация из $E_\text{п}$:</p>
<div class="rf">$x = \sqrt{2E_\text{п}/k}$</div>
<p style="font-size:.75rem">Масса из $E_\text{п}$ и $h$:</p>
<div class="rf">$m = E_\text{п}/(gh)$</div>
<p style="font-size:.75rem">Работа = убыль $E_\text{п}$:</p>
<div class="rf">$A = E_{\text{п}1} - E_{\text{п}2} = -\Delta E_\text{п}$</div>
<h3>📏 Единицы</h3>
<div class="rf">$[p] = \text{кг}{\cdot}\text{м/с}$</div>
<div class="rf">$[A] = [E_\text{п}] = \text{Дж} = \text{Н}{\cdot}\text{м}$</div>
<div class="rf">$[P] = \text{Вт} = \text{Дж/с}$</div>
<div class="rf">$1\,\text{кВт} = 1000\,\text{Вт}$</div>
<div class="rf">$g \approx 10\,\text{м/с}^2$</div>
<h3>§35 — Кинетическая энергия</h3>
<div class="rf">$E_\text{к} = \dfrac{mv^2}{2}$</div>
<p style="font-size:.75rem">$[E_\text{к}] = \text{Дж}$ · скалярная · всегда ≥ 0</p>
<div class="rf">$\Delta E_\text{к} = A_\text{рез}$</div>
<p style="font-size:.75rem">Теорема о кинетической энергии: изменение $E_\text{к}$ = работа всех сил.</p>
<div class="rf">$E_\text{мех} = E_\text{к} + E_\text{п}$</div>
<p style="font-size:.75rem">Полная механическая энергия = кинетическая + потенциальная.</p>
<h3>§36 — Закон сохранения энергии</h3>
<p style="font-size:.75rem">Без трения (замкнутая система):</p>
<div class="rf">$E_\text{мех} = \text{const}$</div>
<div class="rf">$E_{\text{к}1} + E_{\text{п}1} = E_{\text{к}2} + E_{\text{п}2}$</div>
<p style="font-size:.75rem">С трением (диссипативные силы):</p>
<div class="rf">$\Delta E_\text{мех} = A_\text{внеш}$</div>
<p style="font-size:.75rem">Полная энергия — всегда:</p>
<div class="rf">$E_\text{полн} = E_\text{мех} + E_\text{внутр} = \text{const}$</div>
<h3>📐 Быстрые выводы §35–36</h3>
<p style="font-size:.75rem">Скорость из высоты (без трения):</p>
<div class="rf">$v = \sqrt{2gh}$</div>
<p style="font-size:.75rem">Высота из скорости (без трения):</p>
<div class="rf">$h = \dfrac{v^2}{2g}$</div>
<p style="font-size:.75rem">Работа трения через Eмех:</p>
<div class="rf">$A_\text{тр} = \Delta E_\text{мех} = E_{\text{мех}2} - E_{\text{мех}1}$</div>
</div>
<!-- Шапка -->
<div class="hdr">
<h1><i class="fas fa-atom"></i> Физика 9 класс</h1>
<p>Кинематика · Динамика · Статика · Гидростатика · Импульс · Работа · Энергия</p>
</div>
<div class="page-layout">
<aside class="sidebar">
<!-- Sidebar brand -->
<div class="sb-brand">
<svg class="sb-logo" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round">
<circle cx="12" cy="12" r="2.2" fill="currentColor" opacity=".4"/>
<ellipse cx="12" cy="12" rx="10" ry="3.8"/>
<ellipse cx="12" cy="12" rx="10" ry="3.8" transform="rotate(60 12 12)"/>
<ellipse cx="12" cy="12" rx="10" ry="3.8" transform="rotate(120 12 12)"/>
</svg>
<div>
<span class="sb-title">Физика</span>
<span class="sb-sub">9 класс</span>
</div>
</div>
<nav class="nav-wrap">
<div class="ch-bar">
<button class="ch-btn active" data-ch="1">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
<path d="M3 14 Q7 4 17 8"/><path d="M13.5 5.5l3.5 2.5-3.5 1.5"/>
</svg>
<span class="ch-label">Кинематика</span>
<span class="ch-roman">I</span>
<span class="ch-count">14</span>
</button>
<button class="ch-btn" data-ch="2">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
<circle cx="5" cy="10" r="2.2" fill="currentColor" opacity=".25"/>
<path d="M7.5 10h8.5M13 7l3 3-3 3"/>
</svg>
<span class="ch-label">Динамика</span>
<span class="ch-roman">II</span>
<span class="ch-count">7</span>
</button>
<button class="ch-btn" data-ch="3">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round">
<circle cx="10" cy="10" r="2.8"/><ellipse cx="10" cy="10" rx="8.5" ry="3.2" transform="rotate(-30 10 10)"/>
<circle cx="16.5" cy="7.5" r="1" fill="currentColor"/>
</svg>
<span class="ch-label">Тяготение</span>
<span class="ch-roman">III</span>
<span class="ch-count">3</span>
</button>
<button class="ch-btn" data-ch="4">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
<path d="M10 3v14M4 17h12"/><path d="M5 7l-2 5h4zm10 0l-2 5h4z"/>
<path d="M5 7h10"/>
</svg>
<span class="ch-label">Статика</span>
<span class="ch-roman">IV</span>
<span class="ch-count">3</span>
</button>
<button class="ch-btn" data-ch="5">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round">
<path d="M10 2 Q13 6 10 10 Q7 6 10 2z" fill="currentColor" opacity=".2"/>
<path d="M3 12 Q6.5 9 10 12 Q13.5 15 17 12"/>
<path d="M3 16 Q6.5 13 10 16 Q13.5 19 17 16"/>
</svg>
<span class="ch-label">Гидростатика</span>
<span class="ch-roman">V</span>
<span class="ch-count">3</span>
</button>
<button class="ch-btn" data-ch="6">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
<path d="M11.5 2.5L5 11h6l-2 6.5 9-10h-6.5l2-5z"/>
</svg>
<span class="ch-label">Энергия</span>
<span class="ch-roman">VI</span>
<span class="ch-count">6</span>
</button>
<button class="ch-btn" data-ch="7">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
<path d="M7.5 3h5M8 3v5.5L4 17h12L12 8.5V3"/>
<circle cx="9.5" cy="12.5" r=".9" fill="currentColor"/>
<circle cx="12" cy="10.5" r=".9" fill="currentColor"/>
</svg>
<span class="ch-label">Лаб. работа</span>
<span class="ch-roman">VII</span>
<span class="ch-count">1</span>
</button>
<button class="ch-btn" data-ch="8">
<svg class="ch-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="3" width="14" height="14" rx="3"/>
<path d="M7 10l2.5 2.5L13 7"/>
</svg>
<span class="ch-label">Задачи</span>
<span class="ch-roman">VIII</span>
</button>
</div>
<div class="sec-bar">
<!-- Глава 1: Кинематика §1–14 -->
<div class="sec-group show" data-chg="1">
<div class="tab active" data-tab="ref1"><span class="tab-num">§1</span><span class="tab-name">Движение</span></div>
<div class="tab" data-tab="ref2"><span class="tab-num">§2</span><span class="tab-name">Относительность</span></div>
<div class="tab" data-tab="ref3"><span class="tab-num">§3</span><span class="tab-name">Векторы</span></div>
<div class="tab" data-tab="ref4"><span class="tab-num">§4</span><span class="tab-name">Проекции</span></div>
<div class="tab" data-tab="ref5"><span class="tab-num">§5</span><span class="tab-name">Путь</span></div>
<div class="tab" data-tab="ref6"><span class="tab-num">§6</span><span class="tab-name">Равн. движение</span></div>
<div class="tab" data-tab="ref7"><span class="tab-num">§7</span><span class="tab-name">Графики v(t)</span></div>
<div class="tab" data-tab="ref8"><span class="tab-num">§8</span><span class="tab-name">Средняя скорость</span></div>
<div class="tab" data-tab="ref9"><span class="tab-num">§9</span><span class="tab-name">Слож. скоростей</span></div>
<div class="tab" data-tab="ref10"><span class="tab-num">§10</span><span class="tab-name">Ускорение</span></div>
<div class="tab" data-tab="ref11"><span class="tab-num">§11</span><span class="tab-name">v(t)</span></div>
<div class="tab" data-tab="ref12"><span class="tab-num">§12</span><span class="tab-name">x(t)</span></div>
<div class="tab" data-tab="ref13"><span class="tab-num">§13</span><span class="tab-name">Окружность</span></div>
<div class="tab" data-tab="ref14"><span class="tab-num">§14</span><span class="tab-name">Центр. ускорение</span></div>
</div>
<!-- Глава 2: Динамика §15–21 -->
<div class="sec-group" data-chg="2">
<div class="tab" data-tab="ref15"><span class="tab-num">§15</span><span class="tab-name">1й закон Ньютона</span></div>
<div class="tab" data-tab="ref16"><span class="tab-num">§16</span><span class="tab-name">Масса</span></div>
<div class="tab" data-tab="ref17"><span class="tab-num">§17</span><span class="tab-name">2й закон Ньютона</span></div>
<div class="tab" data-tab="ref18"><span class="tab-num">§18</span><span class="tab-name">3й закон Ньютона</span></div>
<div class="tab" data-tab="ref19"><span class="tab-num">§19</span><span class="tab-name">Закон Гука</span></div>
<div class="tab" data-tab="ref20"><span class="tab-num">§20</span><span class="tab-name">Трение</span></div>
<div class="tab" data-tab="ref21"><span class="tab-num">§21</span><span class="tab-name">Свободное падение</span></div>
</div>
<!-- Глава 3: Тяготение §22–24 -->
<div class="sec-group" data-chg="3">
<div class="tab" data-tab="ref22"><span class="tab-num">§22</span><span class="tab-name">Бросок под углом</span></div>
<div class="tab" data-tab="ref23"><span class="tab-num">§23</span><span class="tab-name">Тяготение</span></div>
<div class="tab" data-tab="ref24"><span class="tab-num">§24</span><span class="tab-name">Невесомость</span></div>
</div>
<!-- Глава 4: Статика §25–27 -->
<div class="sec-group" data-chg="4">
<div class="tab" data-tab="ref25"><span class="tab-num">§25</span><span class="tab-name">Моменты сил</span></div>
<div class="tab" data-tab="ref26"><span class="tab-num">§26</span><span class="tab-name">Рычаги</span></div>
<div class="tab" data-tab="ref27"><span class="tab-num">§27</span><span class="tab-name">КПД</span></div>
</div>
<!-- Глава 5: Гидростатика §28–30 -->
<div class="sec-group" data-chg="5">
<div class="tab" data-tab="ref28"><span class="tab-num">§28</span><span class="tab-name">Центр тяжести</span></div>
<div class="tab" data-tab="ref29"><span class="tab-num">§29</span><span class="tab-name">Закон Архимеда</span></div>
<div class="tab" data-tab="ref30"><span class="tab-num">§30</span><span class="tab-name">Плавание тел</span></div>
</div>
<!-- Глава 6: Импульс & Энергия §3136 -->
<div class="sec-group" data-chg="6">
<div class="tab" data-tab="ref31"><span class="tab-num">§31</span><span class="tab-name">Импульс</span></div>
<div class="tab" data-tab="ref32"><span class="tab-num">§32</span><span class="tab-name">ЗСИ</span></div>
<div class="tab" data-tab="ref33"><span class="tab-num">§33</span><span class="tab-name">Работа</span></div>
<div class="tab" data-tab="ref34"><span class="tab-num">§34</span><span class="tab-name">Мощность</span></div>
<div class="tab" data-tab="ref35"><span class="tab-num">§35</span><span class="tab-name">Кинет. энергия</span></div>
<div class="tab" data-tab="ref36"><span class="tab-num">§36</span><span class="tab-name">ЗСЭ</span></div>
</div>
<!-- Лаб. -->
<div class="sec-group" data-chg="7">
<div class="tab" data-tab="lab11"><span class="tab-num">№11</span><span class="tab-name">Лабораторная работа</span></div>
</div>
<!-- Задачи -->
<div class="sec-group" data-chg="8">
<div class="tab" data-tab="tasks"><span class="tab-num"></span><span class="tab-name">Все задачи</span></div>
</div>
</div>
</nav>
</aside><!-- /.sidebar -->
<main class="main-content">
<!-- ══════════════════════════════════════════════════
ТАБ: §1 — МЕХАНИЧЕСКОЕ ДВИЖЕНИЕ
══════════════════════════════════════════════════ -->
<div class="content active" id="tab-ref1">
<div class="para-hero ph-1">
<div class="ph-label">§1 · Физика 9 кл</div>
<h2>Механическое движение. Материальная точка</h2>
<div class="ph-formula">где? куда? с какой скоростью?</div>
<div class="ph-desc">Кинематика описывает движение тел — без выяснения причин. Тело движется = меняет положение. Материальная точка — модель, когда размер тела не важен.</div>
<div class="ph-tags"><span class="ph-tag">📍 положение тела</span><span class="ph-tag">〰️ траектория</span><span class="ph-tag">🔄 виды движения</span></div>
</div>
<div class="section-title"><i class="fas fa-rocket"></i> §1. Механическое движение</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Материальная точка</h3>
<div class="main-f">не важно как выглядит — важно где находится</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:3px 10px;font-size:.76rem;margin:8px 0 6px">
<span style="color:#059669;font-weight:700">✓ точка</span><span style="color:#dc2626;font-weight:700">✗ не точка</span>
<span>самолёт в перелёте</span><span>самолёт на посадке</span>
<span>Земля вокруг Солнца</span><span>Земля при вращении</span>
<span>поезд на маршруте</span><span>колесо поезда</span>
</div>
<p>📏 <b>Когда можно считать тело точкой?</b> Спроси себя: важно ли, где именно на теле приложена сила или откуда мерить расстояние? Если нет — это точка. Самолёт летит из Москвы в Сочи: 1400 км, а сам самолёт — 70 м. Размер самолёта в сотни раз меньше пути — берём как точку. Но если самолёт заходит на посадку — нам важно, где нос, где хвост, как он наклонён. Уже не точка.</p>
</div>
<div class="fcard">
<h3>Траектория</h3>
<div class="main-f">след, который оставляет тело при движении</div>
<p><b>Прямолинейная</b> — прямая (поезд по рельсам). <b>Криволинейная</b> — кривая (мяч в полёте).</p>
<p style="margin-top:6px;font-size:.8rem;color:var(--muted)">⚠️ <b>Важно:</b> траектория зависит от того, <em>кто смотрит</em>. Представь: ты едешь в поезде и бросаешь мяч прямо вверх. Ты видишь — мяч летит вертикально вверх и падает обратно в руки. Но твой друг стоит на платформе и смотрит в окно — он видит, что мяч описывает дугу (параболу), потому что мяч ещё и едет вместе с поездом. Одно движение, два наблюдателя — две разные траектории. Траектория — не свойство мяча, а свойство наблюдателя.</p>
</div>
<div class="fcard">
<h3>Виды механического движения</h3>
<div class="main-f">поступательное · вращательное · колебательное</div>
<p><b>Поступательное:</b> все точки тела движутся параллельно — тело не вращается (лифт, поезд). <b>Вращательное:</b> каждая точка описывает окружность (колесо). <b>Колебательное:</b> тело раз за разом возвращается назад (маятник).</p>
</div>
<div class="fcard">
<h3>Задача кинематики</h3>
<div class="main-f">где? куда? с какой скоростью?</div>
<p>Кинематика отвечает на вопросы <em>где находится</em> и <em>как движется</em>, но не <em>почему</em>. Почему тело разгоняется или тормозит — это уже динамика (§15–).</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Кинематика — это как GPS-навигатор: он показывает где ты, куда едешь и с какой скоростью. Но ему всё равно, <b>почему</b> ты туда едешь и что движет машиной. Сначала учим <b>КАК</b> движется (кинематика, §1–14), потом <b>ПОЧЕМУ</b> (динамика, §15).</p>
<p>Механическое движение — это просто <b>изменение места</b>: был здесь, стал там. Звучит очевидно, но физика требует точности: относительно чего? в какой момент времени? с каким телом сравниваем?</p>
</div>
<div class="idiag">
<h3><i class="fas fa-play"></i> Анимация: виды движения</h3>
<div class="cv-wrap"><canvas id="cv1" style="height:160px"></canvas></div>
<button class="cv-playbtn" onclick="startAnim1()">▶ Запустить снова</button>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🚂</div><div class="li-title">Поезд</div><div class="li-desc">Поступательное — все точки движутся параллельно, тело не вращается</div></div>
<div class="life-item"><div class="li-icon">🌍</div><div class="li-title">Земля</div><div class="li-desc">Вращательное движение вокруг оси + поступательное по орбите</div></div>
<div class="life-item"><div class="li-icon">🎸</div><div class="li-title">Струна</div><div class="li-desc">Колебательное движение — периодически возвращается в исходное положение</div></div>
<div class="life-item"><div class="li-icon">🌀</div><div class="li-title">Волчок</div><div class="li-desc">Сочетание вращательного и поступательного движений</div></div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Материальная точка — это <b>модель</b>, а не реальный объект.</li>
<li>Траектория <b>относительна</b>: зависит от системы отсчёта.</li>
<li>Кинематика описывает движение, <b>не объясняет</b> его причины.</li>
</ul>
</div>
<ol class="q-list">
<li>Можно ли считать Луну материальной точкой при описании её движения вокруг Земли?</li>
<li>Приведи пример тела, совершающего одновременно поступательное и вращательное движение.</li>
<li>Что изучает кинематика? Чем она отличается от динамики?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §2 — СИСТЕМА ОТСЧЁТА. ОТНОСИТЕЛЬНОСТЬ ДВИЖЕНИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref2">
<div class="para-hero ph-2">
<div class="ph-label">§2 · Физика 9 кл</div>
<h2>Относительность движения. Система отсчёта</h2>
<div class="ph-formula">от чего · куда · когда = система отсчёта</div>
<div class="ph-desc">Движение относительно: один и тот же объект в разных системах отсчёта движется по-разному. Система отсчёта — тело + координатная сетка + часы.</div>
<div class="ph-tags"><span class="ph-tag">🔄 относительность</span><span class="ph-tag">📍 тело отсчёта</span><span class="ph-tag">⏱️ часы</span></div>
</div>
<div class="section-title"><i class="fas fa-globe"></i> §2. Относительность движения. Система отсчёта</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Система отсчёта (СО)</h3>
<div class="main-f">от чего считать · куда · когда</div>
<p>Чтобы описать движение, нужны: <b>тело отсчёта</b> (относительно чего считать), <b>координатная система</b> (куда двигаться) и <b>часы</b> (когда).</p>
</div>
<div class="fcard">
<h3>Относительность траектории</h3>
<div class="main-f">разные наблюдатели — разные пути</div>
<p>Ты в поезде бросаешь мяч вертикально вверх и ловишь его — для тебя он полетел прямо вверх и вернулся. Твой друг на платформе смотрит в окно: он видит, что мяч летел по дуге вперёд и вниз — потому что поезд двигался, пока мяч был в воздухе. <b>Никто не ошибается</b> — просто каждый описывает движение из своей системы отсчёта.</p>
</div>
<div class="fcard">
<h3>Координата точки</h3>
<div class="main-f">$x, y, z$ — числа вдоль осей</div>
<p>Представь ось — это линейка, у которой есть ноль и направления «+» и «−». Координата — это просто число на этой линейке: насколько далеко от нуля и в какую сторону. Например, $x = -3\,\text{м}$ значит «3 метра влево от начала». По одному числу можно точно сказать, где находится точка — больше ничего не нужно.</p>
</div>
<div class="fcard">
<h3>Тело отсчёта</h3>
<div class="main-f">то, относительно чего считаем</div>
<p>Тело отсчёта — это то, что ты считаешь <em>неподвижным</em> в своей задаче. Чаще всего это Земля — стоишь на ней, от неё и меряешь. Но можно выбрать любое: вагон поезда, самолёт, другую планету. Выбор не меняет физику — он меняет <b>удобство расчётов</b>. Задача про падающий камень в движущемся поезде решается проще в системе поезда, чем в системе Земли.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Ты едешь в поезде и смотришь на пассажира напротив — он неподвижен. Выгляни в окно — деревья мчатся назад. Это и есть относительность движения.</p>
<p><b>Без системы отсчёта вопрос «движется ли тело?» не имеет смысла.</b> Ты сейчас неподвижен относительно Земли, но летишь со скоростью 30 км/с вокруг Солнца.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-train"></i> Интерактив: поезд и платформа</h3>
<div class="slider-row">
<span class="slider-lbl">Скорость пассажира (в вагоне):</span>
<input type="range" min="0" max="10" value="5" id="sl2v" oninput="upd2()">
<span class="slider-val" id="v2v">5 м/с</span>
</div>
<div class="cv-wrap"><canvas id="cv2" style="height:160px"></canvas></div>
<div class="idiag-result" id="res2">Скорость пассажира относительно земли = — м/с</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Движение всегда <b>относительно</b>: нужно указывать систему отсчёта.</li>
<li>СО = тело отсчёта + координатная система + часы.</li>
<li>Одно и то же тело в разных СО имеет разные траектории и скорости.</li>
</ul>
</div>
<ol class="q-list">
<li>Пассажир в поезде бросает мяч вертикально вверх. Опишите траекторию мяча в СО поезда и в СО Земли.</li>
<li>Является ли движение абсолютным понятием? Обоснуй ответ.</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §3 — СКАЛЯРНЫЕ И ВЕКТОРНЫЕ ВЕЛИЧИНЫ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref3">
<div class="para-hero ph-3">
<div class="ph-label">§3 · Физика 9 кл</div>
<h2>Скалярные и векторные величины. Действия над векторами</h2>
<div class="ph-formula">$\vec{c} = \vec{a} + \vec{b};\quad |\vec{b}| = |k||\vec{a}|$</div>
<div class="ph-desc">Скаляр — только число. Вектор — число и направление. Складывают векторы по правилу параллелограмма или треугольника.</div>
<div class="ph-tags"><span class="ph-tag">📏 скаляр: масса, путь</span><span class="ph-tag">➡️ вектор: скорость, сила</span><span class="ph-tag">▱ правило параллелограмма</span></div>
</div>
<div class="section-title"><i class="fas fa-arrows-alt"></i> §3. Скалярные и векторные величины</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Векторное сложение</h3>
<div class="main-f">$\vec{c} = \vec{a} + \vec{b}$ (правило параллелограмма)</div>
<p>Идёшь на север 3 шага, поворачиваешь на восток 4 шага — ты сместился на 5 шагов на северо-восток. Это и есть сложение двух векторов. <b>Правило треугольника:</b> приставь начало второго вектора к концу первого — стрелка от самого начала до самого конца и есть сумма. <b>Правило параллелограмма:</b> оба вектора из одной точки — диагональ параллелограмма и есть сумма.</p>
</div>
<div class="fcard">
<h3>Умножение на скаляр</h3>
<div class="main-f">$\vec{b} = k\vec{a};\quad |\vec{b}| = |k||\vec{a}|$</div>
<p>$k > 0$: вектор в том же направлении. $k < 0$: вектор в обратном направлении. Модуль = $|k|$ × модуль исходного.</p>
</div>
<div class="fcard">
<h3>Вычитание векторов</h3>
<div class="main-f">$\vec{d} = \vec{a} - \vec{b} = \vec{a} + (-\vec{b})$</div>
<p>Вычесть вектор — значит прибавить противоположный. Шёл 5 м на север, потом «отнять» 3 м на север — то же, что прибавить 3 м на юг, итого 2 м на север. <b>Графически:</b> отложи оба вектора из одной точки — разность смотрит из конца $\vec{b}$ в конец $\vec{a}$. Пригодится при нахождении изменения скорости: $\Delta\vec{v} = \vec{v} - \vec{v}_0$.</p>
</div>
<div class="fcard">
<h3>Три важных случая</h3>
<div class="main-f" style="font-size:.78rem;text-align:left;padding:6px 8px">
0°: $|\vec{c}| = |\vec{a}|+|\vec{b}|$<br>
180°: $|\vec{c}| = \big||\vec{a}|-|\vec{b}|\big|$<br>
90°: $|\vec{c}| = \sqrt{|\vec{a}|^2+|\vec{b}|^2}$
</div>
<p>Если векторы в <b>одну сторону</b> — складывай числами. <b>Навстречу</b> — вычитай. <b>Перпендикулярно</b> — теорема Пифагора. Любой другой угол — формула параллелограмма.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Самолёт летит на восток 500 км/ч, боковой ветер 120 км/ч с севера. Нельзя сказать «итоговая скорость 620 км/ч» — надо сложить <em>векторно</em>: $\sqrt{500^2 + 120^2} \approx 514$ км/ч и немного на юг. Именно поэтому пилоты учитывают ветер при прокладке курса.</p>
<p>Правило простое: если направления совпадают — складывай числами. Если нет — только по правилу параллелограмма или треугольника.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-vector-square"></i> Интерактив: сложение векторов</h3>
<div class="slider-row">
<span class="slider-lbl">|a|:</span>
<input type="range" min="20" max="100" value="60" id="sl3a" oninput="upd3()">
<span class="slider-val" id="v3a">60</span>
</div>
<div class="slider-row">
<span class="slider-lbl">|b|:</span>
<input type="range" min="20" max="100" value="50" id="sl3b" oninput="upd3()">
<span class="slider-val" id="v3b">50</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Угол α:</span>
<input type="range" min="0" max="180" value="60" id="sl3ang" oninput="upd3()">
<span class="slider-val" id="v3ang">60°</span>
</div>
<div class="cv-wrap"><canvas id="cv3" style="height:180px"></canvas></div>
<div class="idiag-result" id="res3">|c| = —</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Модуль суммы ≠ сумма модулей (только если оба вектора в одну сторону).</li>
<li>Вектора складывают геометрически, не числами.</li>
<li>Сумма всегда: $|\vec{a}|-|\vec{b}| \leq |\vec{c}| \leq |\vec{a}|+|\vec{b}|$</li>
</ul>
</div>
<ol class="q-list">
<li>Можно ли сложить вектор и скаляр? Почему?</li>
<li>При каком угле между двумя равными векторами их сумма равна одному из них?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §4 — ПРОЕКЦИЯ ВЕКТОРА НА ОСЬ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref4">
<div class="para-hero ph-4">
<div class="ph-label">§4 · Физика 9 кл</div>
<h2>Проекция вектора на ось</h2>
<div class="ph-formula">$a_x = a\cos\varphi$</div>
<div class="ph-desc">Проекция вектора на ось — его «тень» на ось. Знак зависит от направления: угол острый — плюс, тупой — минус. Позволяет переводить векторные задачи в скалярные по осям.</div>
<div class="ph-tags"><span class="ph-tag">$a_x = a\cos\varphi$</span><span class="ph-tag"> острый угол</span><span class="ph-tag"> тупой угол</span></div>
</div>
<div class="section-title"><i class="fas fa-ruler-combined"></i> §4. Проекция вектора на ось</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Проекция на ось Ox</h3>
<div class="main-f">$a_x = a\cos\varphi$</div>
<p>$\varphi$ — угол между вектором и осью Ox. Если вектор «наклонён» в сторону оси (угол острый, до 90°) — проекция <b>положительная</b>. Если «отклонился» от неё (угол тупой, больше 90°) — <b>отрицательная</b>. Перпендикулярен оси — проекция нулевая: вся «сила» вектора уходит в другую ось. Проверь себя: $a_x = 10\cos 60° = 5$ (острый → плюс), $a_x = 10\cos 120° = -5$ (тупой → минус).</p>
</div>
<div class="fcard">
<h3>Проекции в 2D</h3>
<div class="main-f">$a_x = a\cos\varphi;\quad a_y = a\sin\varphi$</div>
<p>Любой вектор можно разложить на две составляющие — горизонтальную и вертикальную. Пример: сила 10 Н под углом 37° к горизонту → $F_x = 10\cos 37° = 8$ Н (горизонталь), $F_y = 10\sin 37° = 6$ Н (вертикаль). Теперь вместо одного вектора под углом — два числа, с которыми считать проще. И проверка: $\sqrt{8^2 + 6^2} = \sqrt{100} = 10$ Н</p>
</div>
<div class="fcard">
<h3>Сложение через проекции</h3>
<div class="main-f">$c_x = a_x + b_x;\quad c_y = a_y + b_y$</div>
<p>Чтобы сложить два вектора под произвольным углом: найди проекции каждого на обе оси, сложи проекции числами, восстанови вектор по теореме Пифагора. Это <b>аналитический метод</b> — точнее, чем рисовать на бумаге.</p>
</div>
<div class="fcard">
<h3>Восстановление вектора</h3>
<div class="main-f">$a = \sqrt{a_x^2 + a_y^2}$</div>
<p>Из проекций находим модуль (по теореме Пифагора) и направление ($\varphi$). Метод компонент — основной в физике.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Представь: солнце светит сбоку, вектор — карандаш. Тень карандаша на стене — это и есть проекция. Если карандаш параллелен стене — тень максимальная. Перпендикулярен — тень нулевая.</p>
<p>В физике проекции — способ «разобрать» вектор на составляющие. Движение под углом = горизонтальная часть + вертикальная часть. Каждую решаем отдельно!</p>
</div>
<div class="idiag">
<h3><i class="fas fa-ruler-horizontal"></i> Интерактив: проекция вектора</h3>
<div class="slider-row">
<span class="slider-lbl">Угол φ:</span>
<input type="range" min="0" max="180" value="37" id="sl4phi" oninput="upd4()">
<span class="slider-val" id="v4phi">37°</span>
</div>
<div class="slider-row">
<span class="slider-lbl">|a|:</span>
<input type="range" min="30" max="100" value="70" id="sl4a" oninput="upd4()">
<span class="slider-val" id="v4a">70</span>
</div>
<div class="cv-wrap"><canvas id="cv4" style="height:160px"></canvas></div>
<div class="idiag-result" id="res4">ax = — | ay = —</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$a_x = a\cos\varphi$ — проекция на ось.</li>
<li>Знак проекции зависит от направления вектора относительно оси.</li>
<li>$a = \sqrt{a_x^2 + a_y^2}$ — восстановление модуля из проекций.</li>
</ul>
</div>
<ol class="q-list">
<li>Может ли проекция вектора быть больше его модуля? Равна модулю? Равна нулю?</li>
<li>Вектор $|\vec{a}| = 10$ направлен под $60°$ к оси Ox. Найди $a_x$ и $a_y$.</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §5 — ПУТЬ И ПЕРЕМЕЩЕНИЕ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref5">
<div class="para-hero ph-5">
<div class="ph-label">§5 · Физика 9 кл</div>
<h2>Путь и перемещение</h2>
<div class="ph-formula">$s \geq |\Delta\vec{r}|$</div>
<div class="ph-desc">Путь — длина траектории (скаляр, всегда ≥ 0). Перемещение — вектор из начальной точки в конечную. Путь всегда ≥ модуля перемещения.</div>
<div class="ph-tags"><span class="ph-tag">📏 путь s — скаляр</span><span class="ph-tag">➡️ перемещение Δr — вектор</span><span class="ph-tag">s ≥ |Δr|</span></div>
</div>
<div class="section-title"><i class="fas fa-route"></i> §5. Путь и перемещение</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Путь s</h3>
<div class="main-f">длина траектории</div>
<p><b>Скалярная</b> величина — только число, без направления. Всегда ≥ 0: «минусового» пути не бывает. Одометр в машине считает путь: даже если ты вернулся на старт — он накрутил столько, сколько ты проехал. Зависит от <em>маршрута</em>, а не только от начальной и конечной точек.</p>
</div>
<div class="fcard">
<h3>Перемещение $\Delta\vec{r}$</h3>
<div class="main-f">$\Delta\vec{r} = \vec{r}_2 - \vec{r}_1$</div>
<p><b>Векторная</b> величина — имеет и число, и направление. Натяни верёвку напрямую от старта до финиша: её длина и направление — это и есть перемещение. Не важно, как ты шёл — зигзагами или по прямой: перемещение одно и то же, если начало и конец совпадают.</p>
</div>
<div class="fcard">
<h3>Проекции перемещения</h3>
<div class="main-f">$\Delta r_x = x_2 - x_1;\quad \Delta r_y = y_2 - y_1$</div>
<p>Проекция перемещения — просто разность координат: где был минус где стал. Переехал с отметки $x_1 = 20\,\text{м}$ на $x_2 = 8\,\text{м}$: $\Delta r_x = 8 - 20 = -12\,\text{м}$. Минус значит «двигался в сторону уменьшения оси» — то есть назад. Никакой тайны: минус — это просто направление.</p>
</div>
<div class="fcard">
<h3>Соотношение пути и перемещения</h3>
<div class="main-f">$s \geq |\Delta\vec{r}|$</div>
<p>Равенство достигается только при прямолинейном движении в одну сторону — тогда маршрут совпадает с прямой от старта до финиша. Стоит хоть раз повернуть или вернуться — путь сразу стал длиннее перемещения. Это как разница между прямой дорогой и объездом: расстояние по прямой — перемещение, по дороге — путь.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Ты вышел из дома (точка A), дошёл до магазина (B, 500 м), вернулся домой (A). Путь = 1000 м. Перемещение = 0 (начальная и конечная точка совпадают)!</p>
<p>GPS-навигатор считает <b>путь</b> (сколько проехал). Рулетка между двумя точками — это <b>перемещение</b>. Одометр в машине — путь. Смещение в прямом смысле — перемещение.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-map-marker-alt"></i> Интерактив: путь и перемещение</h3>
<div class="slider-row">
<span class="slider-lbl">Сегмент 1 (м):</span>
<input type="range" min="0" max="200" value="120" id="sl5s1" oninput="upd5()">
<span class="slider-val" id="v5s1">120 м</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Сегмент 2 (м, назад):</span>
<input type="range" min="0" max="200" value="60" id="sl5s2" oninput="upd5()">
<span class="slider-val" id="v5s2">60 м</span>
</div>
<div class="cv-wrap"><canvas id="cv5" style="height:130px"></canvas></div>
<div class="idiag-result" id="res5">Путь = — м | Перемещение = — м</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Путь — скаляр (длина), перемещение — вектор (смещение).</li>
<li>$s \geq |\Delta\vec{r}|$ — путь всегда не меньше модуля перемещения.</li>
<li>При движении «туда-обратно»: $s > 0$, но $\Delta\vec{r}$ может быть = $\vec{0}$.</li>
</ul>
</div>
<ol class="q-list">
<li>При каком условии путь равен модулю перемещения?</li>
<li>Тело прошло путь $s = 100\,\text{м}$. Может ли его перемещение быть равно нулю?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §6 — РАВНОМЕРНОЕ ПРЯМОЛИНЕЙНОЕ ДВИЖЕНИЕ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref6">
<div class="para-hero ph-6">
<div class="ph-label">§6 · Физика 9 кл</div>
<h2>Равномерное прямолинейное движение. Скорость</h2>
<div class="ph-formula">$v = \Delta r / \Delta t;\quad x = x_0 + v_x t$</div>
<div class="ph-desc">Равномерное движение — скорость постоянна по модулю и направлению. Скорость — векторная величина: показывает быстроту и направление изменения положения.</div>
<div class="ph-tags"><span class="ph-tag">$v = \text{const}$</span><span class="ph-tag">$x = x_0 + vt$</span><span class="ph-tag">[v] = м/с</span></div>
</div>
<div class="section-title"><i class="fas fa-tachometer-alt"></i> §6. Равномерное прямолинейное движение</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Скорость (вектор)</h3>
<div class="main-f">$\vec{v} = \Delta\vec{r}/\Delta t$</div>
<p>Скорость — вектор: у неё есть <b>и число</b> («60 км/ч»), <b>и направление</b> («на север»). Направлена туда, куда движется тело в данный момент. При равномерном движении оба параметра не меняются — ни быстрее/медленнее, ни поворотов. Стоит сказать только «скорость 20 м/с» без направления — это уже не вектор, а только его модуль.</p>
</div>
<div class="fcard">
<h3>Закон движения</h3>
<div class="main-f">$x = x_0 + v_x t$</div>
<p>Три части: <b>где стоял</b> ($x_0$) + <b>куда движешься</b> ($v_x \cdot t$). Если $v_x > 0$ — координата растёт (движение в сторону «+»). Если $v_x < 0$ убывает (движение назад). Пример: $x = 100 - 5t$ начал на отметке 100 м и едет назад со скоростью 5 м/с. Через 20 с будет на нуле, потом «уйдёт» в отрицательные координаты.</p>
</div>
<div class="fcard">
<h3>Перевод единиц</h3>
<div class="main-f">$1\,\text{м/с} = 3{,}6\,\text{км/ч}$</div>
<p>$v\,[\text{м/с}] = v\,[\text{км/ч}] / 3{,}6$. Пример: 72 км/ч = 72/3.6 = 20 м/с. Часто нужно на экзамене!</p>
</div>
<div class="fcard">
<h3>Путь при равномерном движении</h3>
<div class="main-f">$s = |v_x| \cdot t$</div>
<p>Путь = скорость × время. Перемещение: $\Delta r_x = v_x t$ (со знаком). Путь всегда ≥ 0.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Равномерное движение — идеализация, но очень полезная. Поезд «Москва–Петербург» на перегоне между остановками, самолёт в крейсерском полёте, свет в вакууме — всё это приближённо равномерное движение.</p>
<p>На графике $x(t)$ — прямая линия. <b>Наклон = скорость</b>: проведи прямую круче — едешь быстрее, положе — медленнее, горизонталь — стоишь. По одной прямой можно мгновенно прочитать скорость: $v_x = \Delta x / \Delta t$ — возьми любые два момента на прямой.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-car"></i> Интерактив: равномерное движение</h3>
<div class="slider-row">
<span class="slider-lbl">v, м/с:</span>
<input type="range" min="-20" max="20" value="10" id="sl6v" oninput="upd6()">
<span class="slider-val" id="v6v">10 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">x₀, м:</span>
<input type="range" min="-50" max="50" value="0" id="sl6x0" oninput="upd6()">
<span class="slider-val" id="v6x0">0 м</span>
</div>
<div class="cv-wrap"><canvas id="cv6" style="height:180px"></canvas></div>
<div class="idiag-result" id="res6">x(5с) = —</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">✈️</div><div class="li-title">Самолёт</div><div class="li-desc">Крейсерский полёт — ~равномерное движение: v ≈ const</div></div>
<div class="life-item"><div class="li-icon">🚢</div><div class="li-title">Корабль</div><div class="li-desc">На спокойной воде — близко к равномерному</div></div>
<div class="life-item"><div class="li-icon">🌍</div><div class="li-title">Земля</div><div class="li-desc">Движение по орбите ≈ равномерное (скорость почти постоянна)</div></div>
<div class="life-item"><div class="li-icon">💡</div><div class="li-title">Свет</div><div class="li-desc">В вакууме движется строго равномерно: $c = 3\cdot10^8$ м/с</div></div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$v = \text{const}$ — ни по модулю, ни по направлению не меняется.</li>
<li>$x = x_0 + v_x t$ — закон движения (линейный!)</li>
<li>$1\,\text{м/с} = 3{,}6\,\text{км/ч}$</li>
</ul>
</div>
<ol class="q-list">
<li>Автомобиль движется равномерно. Закон движения: $x = 100 + 15t$ (м). Найдите начальную координату и скорость.</li>
<li>Поезд прошёл 180 км за 2 часа. Найдите скорость в м/с и км/ч.</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §7 — ГРАФИКИ РАВНОМЕРНОГО ДВИЖЕНИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref7">
<div class="para-hero ph-7">
<div class="ph-label">§7 · Физика 9 кл</div>
<h2>Графическое представление равномерного движения</h2>
<div class="ph-formula">$v(t) = \text{const};\quad x(t) = x_0 + vt$</div>
<div class="ph-desc">График v(t) — горизонтальная прямая. График x(t) — наклонная прямая. Площадь под v(t) = перемещение. Наклон x(t) = скорость.</div>
<div class="ph-tags"><span class="ph-tag">📊 v(t) — горизонталь</span><span class="ph-tag">📈 x(t) — прямая</span><span class="ph-tag">S = Δr (площадь)</span></div>
</div>
<div class="section-title"><i class="fas fa-chart-line"></i> §7. Графики равномерного движения</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>График v(t)</h3>
<div class="main-f">горизонтальная прямая</div>
<p>Скорость не меняется — горизонтальная прямая. Прямая <b>выше нуля</b>: едешь «вперёд». <b>Ниже нуля</b>: едешь «назад». <b>На нуле</b>: стоишь. Ширина прямоугольника под графиком — это время $\Delta t$, высота — скорость $v_x$. Площадь = $v_x \cdot \Delta t$ = перемещение. Это не просто формула — это прямо следует из рисунка!</p>
</div>
<div class="fcard">
<h3>График x(t)</h3>
<div class="main-f">наклонная прямая</div>
<p>$x = x_0 + v_x t$ — прямая линия на графике. <b>Крутой наклон</b> вверх = большая скорость вперёд. <b>Горизонталь</b> = тело стоит ($v = 0$). <b>Наклон вниз</b> = движение назад ($v_x < 0$). Точка, где прямая пересекает ось $x$ это начальная координата $x_0$. По наклону прямой можно найти скорость: $v_x = \Delta x / \Delta t$.</p>
</div>
<div class="fcard">
<h3>Площадь под v(t)</h3>
<div class="main-f">$\Delta r_x = v_x \cdot \Delta t$ = площадь</div>
<p>Площадь фигуры под графиком v(t) = перемещение — это универсальное правило, работает для <b>любого движения</b>, не только равномерного. При равномерном фигура — прямоугольник: $S = v \cdot \Delta t = \Delta r$. При неравномерном — любая фигура: считаем её площадь.</p>
</div>
<div class="fcard">
<h3>Встреча двух тел</h3>
<div class="main-f">$x_1(t) = x_2(t)$</div>
<p>Два тела движутся и «встречаются», когда их координаты совпадают: $x_1(t) = x_2(t)$. На графике x(t) это просто <b>точка пересечения двух прямых</b>. Координата встречи — по оси $x$ в точке пересечения, время встречи — по оси $t$. Если прямые параллельны — тела движутся с одинаковой скоростью и никогда не встретятся (или всегда рядом, если совпадают).</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Почему площадь под v(t) = перемещение? Представь: едешь 3 м/с в течение 5 секунд. Прямоугольник: ширина 5 с, высота 3 м/с. Площадь = 5 × 3 = 15 м — именно столько проехал!</p>
<p><b>Наклон x(t) = скорость</b>: крутая линия — едешь быстро, пологая — медленно, горизонтальная — стоишь. Линии идут вниз — едешь в обратную сторону (отрицательная v).</p>
</div>
<div class="idiag">
<h3><i class="fas fa-chart-bar"></i> Интерактив: графики двух тел</h3>
<div class="slider-row">
<span class="slider-lbl">v₁, м/с:</span>
<input type="range" min="-15" max="15" value="10" id="sl7v1" oninput="upd7()">
<span class="slider-val" id="v7v1">10 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">x₀₁, м:</span>
<input type="range" min="-100" max="100" value="0" id="sl7x1" oninput="upd7()">
<span class="slider-val" id="v7x1">0 м</span>
</div>
<div class="slider-row">
<span class="slider-lbl">v₂, м/с:</span>
<input type="range" min="-15" max="15" value="-5" id="sl7v2" oninput="upd7()">
<span class="slider-val" id="v7v2">-5 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">x₀₂, м:</span>
<input type="range" min="-100" max="100" value="75" id="sl7x2" oninput="upd7()">
<span class="slider-val" id="v7x2">75 м</span>
</div>
<div class="cv-wrap"><canvas id="cv7" style="height:200px"></canvas></div>
<div class="idiag-result" id="res7">Встреча: t = — с, x = — м</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Наклон графика x(t) = скорость $v_x$ (с учётом знака!).</li>
<li>Площадь под v(t) = перемещение $\Delta r_x$.</li>
<li>Пересечение x(t) двух тел = момент встречи.</li>
</ul>
</div>
<ol class="q-list">
<li>Как по графику x(t) определить скорость тела?</li>
<li>Два тела движутся навстречу. Как выглядит их встреча на графике x(t)?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §8 — СРЕДНЯЯ И МГНОВЕННАЯ СКОРОСТЬ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref8">
<div class="para-hero ph-8">
<div class="ph-label">§8 · Физика 9 кл</div>
<h2>Неравномерное движение. Средняя и мгновенная скорость</h2>
<div class="ph-formula">$\langle v \rangle = s/\Delta t;\quad \langle\vec{v}\rangle = \Delta\vec{r}/\Delta t$</div>
<div class="ph-desc">Средняя скорость — отношение пути ко времени (скаляр). Средняя скорость (вектор) — отношение перемещения ко времени. Мгновенная — предел при Δt→0.</div>
<div class="ph-tags"><span class="ph-tag">⟨v⟩ = s/Δt</span><span class="ph-tag">v_мгн — в данный момент</span><span class="ph-tag">Δt → 0</span></div>
</div>
<div class="section-title"><i class="fas fa-stopwatch"></i> §8. Средняя и мгновенная скорость</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Средняя скорость пути (скаляр)</h3>
<div class="main-f">$\langle v \rangle = s / \Delta t$</div>
<p>Весь пройденный путь, делённый на всё затраченное время. Всегда ≥ 0 — отрицательного «пути» не бывает. Важно: если ехал медленно долго, а потом быстро чуть-чуть — средняя скорость ближе к медленной, а не к их среднему. <b>Спидометр</b> в машине показывает мгновенную скорость, а не среднюю за поездку.</p>
</div>
<div class="fcard">
<h3>Средняя скорость (вектор)</h3>
<div class="main-f">$\langle\vec{v}\rangle = \Delta\vec{r}/\Delta t$</div>
<p>Вектор перемещения, делённый на время. Направлена от начальной точки к конечной. Если ты сделал круг и вернулся — перемещение нулевое, значит и средняя векторная скорость нулевая, хотя весь маршрут ты реально ехал! Именно поэтому важно различать «скорость пути» и «скорость перемещения».</p>
</div>
<div class="fcard">
<h3>Мгновенная скорость</h3>
<div class="main-f">скорость в данный миг</div>
<p>Скорость именно в данный миг — как спидометр в машине: показывает не «сколько в среднем», а «прямо сейчас». Направлена всегда по касательной к траектории: именно туда полетит тело, если в этот момент убрать все силы. Поэтому мяч, оторвавшись от ракетки, летит по касательной, а не продолжает дугу.</p>
</div>
<div class="fcard">
<h3>Средняя скорость за два участка</h3>
<div class="main-f">$\langle v\rangle = \dfrac{s_1+s_2}{t_1+t_2} = \dfrac{2v_1 v_2}{v_1+v_2}$</div>
<p>Если два участка <b>равны по длине</b>: средняя скорость = гармоническое среднее, а <b>не среднеарифметическое</b>! Почему? На медленном участке тратишь больше времени — он «перевешивает». Пример: 60 км туда за 1 ч, 60 км обратно за 2 ч. Средняя = 120 / 3 = 40 км/ч, а не (60+30)/2 = 45 км/ч.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Маршрут A→B→A: 100 км туда, 100 км обратно. Туда 100 км/ч (1 час), обратно 50 км/ч (2 часа). Средняя скорость = 200 км / 3 ч ≈ 67 км/ч, а <b>НЕ</b> (100+50)/2 = 75 км/ч!</p>
<p>Среднеарифметическое скоростей не даёт среднюю скорость — нужно делить <b>весь путь / всё время</b>. А мгновенная скорость — это просто то, что показывает спидометр прямо сейчас.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-tachometer-alt"></i> Интерактив: средняя скорость</h3>
<div class="slider-row">
<span class="slider-lbl">v₁, км/ч:</span>
<input type="range" min="10" max="120" value="60" id="sl8v1" oninput="upd8()">
<span class="slider-val" id="v8v1">60 км/ч</span>
</div>
<div class="slider-row">
<span class="slider-lbl">v₂, км/ч:</span>
<input type="range" min="10" max="120" value="40" id="sl8v2" oninput="upd8()">
<span class="slider-val" id="v8v2">40 км/ч</span>
</div>
<div class="cv-wrap"><canvas id="cv8" style="height:140px"></canvas></div>
<div class="idiag-result" id="res8">⟨v⟩ = — | (v₁+v₂)/2 = —</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Средняя скорость = <b>весь путь / всё время</b>.</li>
<li>$\langle v\rangle \neq (v_1+v_2)/2$ в общем случае!</li>
<li>Мгновенная скорость направлена по касательной к траектории.</li>
</ul>
</div>
<ol class="q-list">
<li>Рысь пробежала первую половину пути со скоростью 3 м/с, вторую — со скоростью 6 м/с. Найдите среднюю скорость.</li>
<li>Куда направлена мгновенная скорость тела при движении по окружности?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §9 — СЛОЖЕНИЕ СКОРОСТЕЙ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref9">
<div class="para-hero ph-9">
<div class="ph-label">§9 · Физика 9 кл</div>
<h2>Сложение скоростей</h2>
<div class="ph-formula">$\vec{v} = \vec{v}' + \vec{u}$</div>
<div class="ph-desc">Скорость тела в неподвижной СО = скорость тела относительно подвижной СО + скорость подвижной СО. Применяется при движении лодки в реке, самолёта в потоке.</div>
<div class="ph-tags"><span class="ph-tag">🚤 лодка в реке</span><span class="ph-tag">✈️ самолёт в ветре</span><span class="ph-tag">$\vec{v} = \vec{v}' + \vec{u}$</span></div>
</div>
<div class="section-title"><i class="fas fa-water"></i> §9. Сложение скоростей</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Закон сложения скоростей</h3>
<div class="main-f">$\vec{v} = \vec{v}' + \vec{u}$</div>
<p>Три скорости: $\vec{v}'$ — скорость лодки <em>относительно воды</em> (как гребёт мотор), $\vec{u}$ — скорость течения <em>воды относительно берега</em>, $\vec{v}$ — итоговая скорость лодки <em>относительно берега</em>. Сложи первые два вектора — получишь третий. Именно так навигаторы кораблей и самолётов считают реальный курс с учётом ветра/течения.</p>
</div>
<div class="fcard">
<h3>Лодка поперёк реки</h3>
<div class="main-f">$v = \sqrt{v'^2 + u^2}$</div>
<p>Лодка гребёт перпендикулярно берегу ($v'$ — поперечная скорость), течение несёт вдоль реки ($u$ — продольная). Два вектора под углом 90° → суммарная скорость по теореме Пифагора: $v = \sqrt{v'^2 + u^2}$. Лодка движется наискосок — не туда, куда гребёт! Берег она пересечёт в другом месте.</p>
</div>
<div class="fcard">
<h3>Время переправы</h3>
<div class="main-f">$t = d/v'$</div>
<p>Время пересечения реки шириной $d$ зависит <em>только</em> от поперечной скорости $v'$: $t = d/v'$. Сколько бы ни было течение — оно сносит лодку <em>вдоль</em>, но не замедляет переправу. Хочешь оказаться точно напротив? Гребись под углом против течения, чтобы боковые скорости скомпенсировались.</p>
</div>
<div class="fcard">
<h3>Снос течением</h3>
<div class="main-f">$\Delta x = u \cdot t = u \cdot d/v'$</div>
<p>Пока лодка пересекала реку за время $t = d/v'$, течение успело снести её на $\Delta x = u \cdot t$. Широкая река + быстрое течение = большой снос. Пример: $d = 80$ м, $v' = 4$ м/с, $u = 3$ м/с → $t = 20$ с, снос = $3 \cdot 20 = 60$ м! Почти столько же, сколько ширина реки.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Плывёшь поперёк реки: для тебя берег движется прямо назад. Но кто-то с берега видит, что тебя несёт течением. Твоя «настоящая» скорость (относительно берега) — диагональ параллелограмма.</p>
<p>Самолёт летит на восток, ветер с севера — он отклоняется. Пилот должен корректировать курс, направляя нос немного севернее. Это и есть сложение скоростей на практике.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-ship"></i> Интерактив: лодка в реке</h3>
<div class="slider-row">
<span class="slider-lbl">v' (лодка), м/с:</span>
<input type="range" min="1" max="10" value="4" id="sl9vb" oninput="upd9()">
<span class="slider-val" id="v9vb">4 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">u (течение), м/с:</span>
<input type="range" min="0" max="8" value="3" id="sl9vu" oninput="upd9()">
<span class="slider-val" id="v9vu">3 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Ширина реки, м:</span>
<input type="range" min="20" max="200" value="80" id="sl9d" oninput="upd9()">
<span class="slider-val" id="v9d">80 м</span>
</div>
<div class="cv-wrap"><canvas id="cv9" style="height:180px"></canvas></div>
<div class="idiag-result" id="res9">v = — м/с | t = — с | снос = — м</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$\vec{v} = \vec{v}' + \vec{u}$ — складываем <b>векторно</b>.</li>
<li>Время переправы зависит только от $v'$ (скорость поперёк).</li>
<li>Снос = $u \cdot t$ (течение × время).</li>
</ul>
</div>
<ol class="q-list">
<li>Лодка плывёт со скоростью 4 м/с поперёк реки, течение 3 м/с. Найдите скорость лодки относительно берега.</li>
<li>Самолёт летит со скоростью 600 км/ч при встречном ветре 100 км/ч. Какова его скорость относительно земли?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §10 — УСКОРЕНИЕ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref10">
<div class="para-hero ph-10">
<div class="ph-label">§10 · Физика 9 кл</div>
<h2>Ускорение</h2>
<div class="ph-formula">$\vec{a} = \Delta\vec{v}/\Delta t$</div>
<div class="ph-desc">Ускорение характеризует быстроту изменения скорости. Это вектор — направлен туда, куда изменяется скорость. При торможении — против движения.</div>
<div class="ph-tags"><span class="ph-tag">$[a] = \text{м/с}^2$</span><span class="ph-tag">⬆️ разгон: a ∥ v</span><span class="ph-tag">⬇️ торможение: a против v</span></div>
</div>
<div class="section-title"><i class="fas fa-rocket"></i> §10. Ускорение</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Ускорение</h3>
<div class="main-f">$\vec{a} = \Delta\vec{v}/\Delta t$</div>
<p>Ускорение показывает, <em>насколько быстро меняется скорость</em>. Единица: 1 м/с² — это «на 1 м/с за каждую секунду». $a = 5\,\text{м/с}^2$: скорость прибавляется на 5 м/с каждую секунду. Важно: ускорение — <b>вектор</b>. Оно может менять и модуль скорости (разгон/торможение), и её направление (повороты).</p>
</div>
<div class="fcard">
<h3>Ускорение при разгоне</h3>
<div class="main-f">$\vec{a} \uparrow\uparrow \vec{v}$ (сонаправлены)</div>
<p>Ускорение направлено <b>туда же, куда движется тело</b> — скорость растёт. Машина стартует: ускорение вперёд → скорость растёт с каждой секундой. Чем дольше разгоняешься с постоянным ускорением — тем быстрее едешь. При $a = 5\,\text{м/с}^2$ через 4 с скорость: $0 + 5 \cdot 4 = 20$ м/с.</p>
</div>
<div class="fcard">
<h3>Ускорение при торможении</h3>
<div class="main-f">$\vec{a} \uparrow\downarrow \vec{v}$ (противоположны)</div>
<p>Машина едет вперёд ($v > 0$), нажимаешь тормоз: ускорение направлено назад ($a < 0$). Каждую секунду скорость уменьшается на $|a|$ м/с. Через $t = v_0 / |a|$ секунд полная остановка. Запомни: ускорение со знаком «минус» не значит «едет назад», это значит «тормозит».</p>
</div>
<div class="fcard">
<h3>Изменение скорости</h3>
<div class="main-f">$\Delta\vec{v} = \vec{v} - \vec{v}_0 = \vec{a}\cdot\Delta t$</div>
<p>Изменение скорости — это вектор, направленный вдоль ускорения. $\Delta\vec{v} = \vec{a} \cdot \Delta t$: умножь ускорение на время — получишь, как изменилась скорость. При разгоне $\Delta v > 0$ (скорость выросла), при торможении $\Delta v < 0$ (упала). Это та же физика, просто записанная векторно.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Ускорение — это «изменение скорости в секунду». $a = 3\,\text{м/с}^2$ означает: каждую секунду скорость растёт на 3 м/с. Начал с 0 → через 1 с: 3 м/с → через 2 с: 6 м/с → через 3 с: 9 м/с.</p>
<p>Важно: ускорение НЕ означает «быстро едет». Большое ускорение = быстро <b>разгоняется</b>. Черепаха может ехать быстро (v большая), но с нулевым ускорением (равномерно).</p>
</div>
<div class="idiag">
<h3><i class="fas fa-gauge-high"></i> Интерактив: ускорение</h3>
<div class="slider-row">
<span class="slider-lbl">v₀, м/с:</span>
<input type="range" min="0" max="30" value="0" id="sl10v0" oninput="upd10()">
<span class="slider-val" id="v10v0">0 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">a, м/с²:</span>
<input type="range" min="-10" max="10" value="3" id="sl10a" oninput="upd10()">
<span class="slider-val" id="v10a">3 м/с²</span>
</div>
<div class="cv-wrap"><canvas id="cv10" style="height:160px"></canvas></div>
<div class="idiag-result" id="res10">v(5с) = —</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🚀</div><div class="li-title">Ракета</div><div class="li-desc">При взлёте a = 3g ≈ 30 м/с². Космонавт «весит» в 3 раза больше</div></div>
<div class="life-item"><div class="li-icon">🏎️</div><div class="li-title">Формула-1</div><div class="li-desc">a ≈ 15 м/с² при разгоне (0–100 км/ч за 2 с)</div></div>
<div class="life-item"><div class="li-icon">🌍</div><div class="li-title">Свободное падение</div><div class="li-desc">g ≈ 9,8 м/с² — ускорение при падении на Землю</div></div>
<div class="life-item"><div class="li-icon">🛑</div><div class="li-title">Аварийное торможение</div><div class="li-desc">a ≈ −8 м/с² (против движения). 100 км/ч → 0 за ~3,5 с</div></div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$a = \Delta v / \Delta t$ — изменение скорости за единицу времени.</li>
<li>Ускорение вдоль скорости → разгон; против → торможение.</li>
<li>Ускорение ≠ большая скорость! Это <b>быстрота изменения</b> скорости.</li>
</ul>
</div>
<ol class="q-list">
<li>Автомобиль разогнался с 0 до 20 м/с за 5 с. Найдите ускорение.</li>
<li>Тело движется с $v_0 = 15$ м/с и тормозит с ускорением $a = 3\,\text{м/с}^2$. Через сколько секунд оно остановится?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §11 — СКОРОСТЬ ПРИ РАВНОУСКОРЕННОМ ДВИЖЕНИИ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref11">
<div class="para-hero ph-11">
<div class="ph-label">§11 · Физика 9 кл</div>
<h2>Скорость при равноускоренном движении</h2>
<div class="ph-formula">$v = v_0 + at;\quad \langle v \rangle = (v_0 + v)/2$</div>
<div class="ph-desc">При равноускоренном движении скорость меняется линейно: каждую секунду добавляется a м/с. Средняя скорость = полусумма начальной и конечной.</div>
<div class="ph-tags"><span class="ph-tag">$v = v_0 + at$</span><span class="ph-tag">$v(t)$ — прямая</span><span class="ph-tag">$\langle v\rangle = (v_0+v)/2$</span></div>
</div>
<div class="section-title"><i class="fas fa-chart-line"></i> §11. Скорость при равноускоренном движении</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Скорость</h3>
<div class="main-f">$v_x = v_{0x} + a_x t$</div>
<p>Скорость прибавляет по $a$ каждую секунду — значит, меняется <b>равномерно</b>. График v(t) — прямая линия. Крутой наклон вверх = большое ускорение (быстрый разгон). Наклон вниз = замедление. По наклону прямой сразу видно $a_x$: $a_x = \Delta v / \Delta t$.</p>
</div>
<div class="fcard">
<h3>Средняя скорость</h3>
<div class="main-f">$\langle v_x \rangle = (v_{0x} + v_x)/2$</div>
<p>Для равноускоренного движения это <b>точная формула</b>, не приближение. Почему работает? Скорость меняется равномерно — как температура воздуха от утра до вечера. «Средняя за день» = (утром + вечером) / 2. Здесь то же самое: скорость менялась по прямой — среднее точно посередине.</p>
</div>
<div class="fcard">
<h3>График v(t) — прямая</h3>
<div class="main-f">наклон = $a_x$; пересечение = $v_{0x}$</div>
<p>$a > 0$: прямая идёт вверх (разгон). $a < 0$: вниз (торможение). Точка, где прямая пересекает ось $t$ это момент, когда $v = 0$: тело остановилось или развернулось. После этого момента скорость меняет знак тело начинает двигаться в обратную сторону.</p>
</div>
<div class="fcard">
<h3>Площадь под v(t)</h3>
<div class="main-f">трапеция = $\Delta r = \langle v\rangle \cdot t$</div>
<p>Под прямой v(t) при равноускоренном движении — трапеция (или треугольник при $v_0 = 0$). Площадь этой фигуры = перемещение. Формула трапеции: $(v_0 + v)/2 \cdot t$ — это то же самое, что средняя скорость × время. Удобная проверка: посчитай перемещение двумя способами и сравни.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>$v = v_0 + at$ — каждую секунду скорость меняется на $a$. Начал с 5 м/с, $a = 3$ м/с²: через 1 с — 8 м/с, через 2 с — 11 м/с, через 3 с — 14 м/с. Просто прибавляй $a$ каждую секунду.</p>
<p>График $v(t)$ — прямая линия. Наклонена вверх = разгон. Наклонена вниз = торможение. Пересекает ось $t$ — это момент остановки. Закрашенная площадь под графиком = пройденный путь!</p>
</div>
<div class="idiag">
<h3><i class="fas fa-chart-area"></i> Интерактив: v(t) при равноускоренном движении</h3>
<div class="slider-row">
<span class="slider-lbl">v₀, м/с:</span>
<input type="range" min="-20" max="20" value="0" id="sl11v0" oninput="upd11()">
<span class="slider-val" id="v11v0">0 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">a, м/с²:</span>
<input type="range" min="-5" max="5" value="2" id="sl11a" oninput="upd11()">
<span class="slider-val" id="v11a">2 м/с²</span>
</div>
<div class="cv-wrap"><canvas id="cv11" style="height:180px"></canvas></div>
<div class="idiag-result" id="res11">v(5с) = — м/с | ⟨v⟩ = — м/с</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$v = v_0 + at$ — линейная зависимость от времени.</li>
<li>$\langle v\rangle = (v_0 + v)/2$ — строго для равноускоренного движения.</li>
<li>График v(t) — прямая; наклон = $a$.</li>
</ul>
</div>
<ol class="q-list">
<li>Тело начало движение с $v_0 = 4$ м/с, $a = 2\,\text{м/с}^2$. Найдите скорость через 5 с.</li>
<li>Поезд затормозил с $v_0 = 20$ м/с до остановки за 50 с. Найдите ускорение.</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §12 — ПЕРЕМЕЩЕНИЕ ПРИ РАВНОУСКОРЕННОМ ДВИЖЕНИИ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref12">
<div class="para-hero ph-12">
<div class="ph-label">§12 · Физика 9 кл</div>
<h2>Перемещение и координата при равноускоренном движении</h2>
<div class="ph-formula">$x = x_0 + v_0 t + \tfrac{at^2}{2};\quad v^2 = v_0^2 + 2a\Delta r$</div>
<div class="ph-desc">Координата при равноускоренном движении — квадратичная функция времени (парабола). Формула «без t» связывает скорость, ускорение и перемещение напрямую.</div>
<div class="ph-tags"><span class="ph-tag">парабола x(t)</span><span class="ph-tag">$v^2 = v_0^2 + 2as$</span><span class="ph-tag">квадратичная зависимость</span></div>
</div>
<div class="section-title"><i class="fas fa-chart-line"></i> §12. Перемещение при равноускоренном движении</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Перемещение</h3>
<div class="main-f">$\Delta r_x = v_{0x}t + \dfrac{a_x t^2}{2}$</div>
<p>При $a > 0$: расстояние нарастает всё быстрее — это парабола. Первую секунду проехал немного, вторую — больше, третью — ещё больше. Почему? Ускорение каждую секунду добавляет не просто постоянную прибавку к пути, а «нарастающую»: $1^2, 2^2, 3^2$... При $a = 0$ — прямая линия (равномерное движение). При $a \ne 0$ — парабола.</p>
</div>
<div class="fcard">
<h3>Координата</h3>
<div class="main-f">$x = x_0 + v_{0x}t + \dfrac{a_x t^2}{2}$</div>
<p>График x(t) — парабола: сначала пологая, потом всё круче (при $a > 0$). Вершина параболы — это точка, где $v = 0$: мяч, брошенный вверх, достиг максимальной высоты. После вершины парабола идёт вниз — тело движется обратно. Нашёл вершину на графике — нашёл максимальное смещение.</p>
</div>
<div class="fcard">
<h3>Формула «без t»</h3>
<div class="main-f">$v_x^2 = v_{0x}^2 + 2a_x\Delta r_x$</div>
<p>Спасает, когда в задаче <b>не дано время</b>. Машина тормозит с 72 км/ч (= 20 м/с) до нуля при $a = -4\,\text{м/с}^2$: тормозной путь $s = v_0^2 / (2|a|) = 400 / 8 = 50$ м — и никакого $t$! Запомни: если в задаче нет $t$ и не нужно его найти, сразу бери эту формулу.</p>
</div>
<div class="fcard">
<h3>Таблица сравнения</h3>
<div class="main-f" style="font-size:.78rem;text-align:left;padding:6px 8px">
Равном.: $\Delta r = vt$<br>
Равноуск.: $\Delta r = v_0 t + at^2/2$<br>
«без t»: $v^2 = v_0^2 + 2as$
</div>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Формула $x = x_0 + v_0 t + \frac{at^2}{2}$ — это три слагаемых: <b>где стоял</b> ($x_0$) + <b>куда уже шёл</b> ($v_0 t$) + <b>куда добавило ускорение</b> ($at^2/2$). При $v_0=0$, $x_0=0$ остаётся только $at^2/2$ — парабола.</p>
<p>Формула «без $t$»: $v^2 = v_0^2 + 2a\Delta r$ спасает когда в задаче <b>не дано время</b>. Торможение до нуля: $0 = v_0^2 - 2|a|s$, значит $s = v_0^2/(2|a|)$.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-project-diagram"></i> Интерактив: x(t) при равноускоренном движении</h3>
<div class="slider-row">
<span class="slider-lbl">v₀, м/с:</span>
<input type="range" min="0" max="20" value="10" id="sl12v0" oninput="upd12()">
<span class="slider-val" id="v12v0">10 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">a, м/с²:</span>
<input type="range" min="-5" max="5" value="-2" id="sl12a" oninput="upd12()">
<span class="slider-val" id="v12a">-2 м/с²</span>
</div>
<div class="cv-wrap"><canvas id="cv12" style="height:200px"></canvas></div>
<div class="idiag-result" id="res12">Δr(5с) = — м | v(5с) = — м/с</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🚗</div><div class="li-title">Тормозной путь</div><div class="li-desc">При скорости 60 км/ч ≈ 17 м/с и a = 8 м/с²: s = 17²/16 ≈ 18 м</div></div>
<div class="life-item"><div class="li-icon">🎢</div><div class="li-title">Свободное падение</div><div class="li-desc">Мяч падает с h = 20 м: t = √(2h/g) ≈ 2 с, v = gt ≈ 20 м/с</div></div>
<div class="life-item"><div class="li-icon">🚀</div><div class="li-title">Старт ракеты</div><div class="li-desc">a = 30 м/с². Через 10 с: v = 300 м/с, s = 1500 м</div></div>
<div class="life-item"><div class="li-icon">⛷️</div><div class="li-title">Горнолыжник</div><div class="li-desc">Разгоняется вниз: a ≈ 5 м/с², за 10 с набирает 50 м/с ≈ 180 км/ч!</div></div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$x = x_0 + v_0 t + at^2/2$ — уравнение движения (парабола).</li>
<li>$v^2 = v_0^2 + 2a\Delta r$ — когда нет времени в условии.</li>
<li>Вершина параболы — точка остановки ($v = 0$).</li>
</ul>
</div>
<ol class="q-list">
<li>Тело $v_0 = 10$ м/с, $a = -2\,\text{м/с}^2$. Найдите перемещение за 4 с.</li>
<li>Автомобиль тормозит: $v_0 = 20$ м/с, $a = -4\,\text{м/с}^2$. Какой тормозной путь до полной остановки?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §13 — ДВИЖЕНИЕ ПО ОКРУЖНОСТИ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref13">
<div class="para-hero ph-13">
<div class="ph-label">§13 · Физика 9 кл</div>
<h2>Криволинейное движение. Угловая и линейная скорости</h2>
<div class="ph-formula">$\omega = 2\pi/T;\quad v = \omega R;\quad \nu = 1/T$</div>
<div class="ph-desc">При движении по окружности вводится угловая скорость ω. Линейная скорость тем больше, чем дальше точка от оси. Все точки тела имеют одинаковое ω.</div>
<div class="ph-tags"><span class="ph-tag">$\omega$ = рад/с</span><span class="ph-tag">$v = \omega R$</span><span class="ph-tag">$T = 1/\nu$</span></div>
</div>
<div class="section-title"><i class="fas fa-circle-notch"></i> §13. Движение по окружности</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Угловая скорость</h3>
<div class="main-f">$\omega = \Delta\varphi/\Delta t = 2\pi/T = 2\pi\nu$</div>
<p>Угол, на который поворачивается тело за одну секунду — в радианах. Один полный оборот = $2\pi \approx 6{,}28$ рад. Вентилятор делает 10 оборотов в секунду: $\omega = 10 \cdot 2\pi \approx 63$ рад/с. Все точки колеса вращаются с одной $\omega$ — одинаковый угол за одинаковое время, но скорость разная: у края быстрее, у центра — медленнее.</p>
</div>
<div class="fcard">
<h3>Линейная скорость</h3>
<div class="main-f">$v = \omega R$</div>
<p>При одной и той же угловой скорости точки, <em>дальше от оси</em>, проходят больший путь за оборот — значит, движутся <b>быстрее</b>. Велосипедное колесо: ступица и обод вращаются с одним $\omega$, но скорость обода в 10 раз выше, чем точки в 10 раз ближе к центру. Именно поэтому резина на внешнем крае стирается быстрее.</p>
</div>
<div class="fcard">
<h3>Период и частота</h3>
<div class="main-f">$T = 2\pi/\omega;\quad \nu = 1/T;\quad \omega = 2\pi\nu$</div>
<p>Период $T$ — сколько секунд на один полный оборот. Частота $\nu$ — сколько оборотов в секунду. Они обратны: $T = 1/\nu$. Пример: мотор 3000 об/мин = 50 об/с → $\nu = 50$ Гц, $T = 0{,}02$ с. Секундная стрелка: $T = 60$ с, $\nu = 1/60$ Гц. Перевод в $\omega$: умножь $\nu$ на $2\pi$.</p>
</div>
<div class="fcard">
<h3>Длина дуги</h3>
<div class="main-f">$s = R\cdot\Delta\varphi$</div>
<p>Дуга = радиус × угол (в радианах). Легко запомнить: 1 рад — это угол, при котором дуга равна радиусу. Полный оборот: $\Delta\varphi = 2\pi$ рад → $s = 2\pi R$ — длина окружности. Знакомая формула! $2\pi R$ — это просто частный случай $s = R \cdot \Delta\varphi$ при полном обороте.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Велосипедное колесо: все спицы вращаются с одной угловой скоростью ω (одинаковый угол в секунду). Но конец спицы (обод) движется намного быстрее, чем её центр — потому что $v = \omega R$ и $R$ больше.</p>
<p>Часовые стрелки: угловая скорость секундной стрелки в 60 раз больше минутной. Но линейная скорость зависит ещё и от длины стрелки.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-sync"></i> Интерактив: движение по окружности</h3>
<div class="slider-row">
<span class="slider-lbl">R, м:</span>
<input type="range" min="0.1" max="5" step="0.1" value="1" id="sl13r" oninput="upd13()">
<span class="slider-val" id="v13r">1 м</span>
</div>
<div class="slider-row">
<span class="slider-lbl">ν, об/с:</span>
<input type="range" min="0.1" max="5" step="0.1" value="1" id="sl13nu" oninput="upd13()">
<span class="slider-val" id="v13nu">1 об/с</span>
</div>
<div class="cv-wrap"><canvas id="cv13" style="height:180px"></canvas></div>
<div class="idiag-result" id="res13">ω = — рад/с | v = — м/с | T = — с</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🎡</div><div class="li-title">Колесо обозрения</div><div class="li-desc">Все кабинки вращаются с одинаковым ω, но внешние движутся быстрее</div></div>
<div class="life-item"><div class="li-icon">⚙️</div><div class="li-title">Шестерёнки</div><div class="li-desc">Разные ω, но на точках касания линейные скорости одинаковы</div></div>
<div class="life-item"><div class="li-icon">🌍</div><div class="li-title">Земля</div><div class="li-desc">Один оборот за 24 ч = ω = 7,27·10⁻⁵ рад/с. На экваторе v = 465 м/с!</div></div>
<div class="life-item"><div class="li-icon">💿</div><div class="li-title">Виниловая пластинка</div><div class="li-desc">33 об/мин. Внешние дорожки длиннее, но воспроизводятся с той же скоростью</div></div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$\omega = 2\pi\nu = 2\pi/T$ — угловая скорость.</li>
<li>$v = \omega R$ — линейная скорость точки на расстоянии R от оси.</li>
<li>$1\,\text{об} = 2\pi\,\text{рад}$; $1\,\text{Гц} = 1\,\text{об/с}$.</li>
</ul>
</div>
<ol class="q-list">
<li>Вентилятор вращается с частотой 10 Гц. Найдите ω и T.</li>
<li>Точка на диске радиусом 0,5 м вращается с ω = 20 рад/с. Найдите линейную скорость.</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §14 — ЦЕНТРОСТРЕМИТЕЛЬНОЕ УСКОРЕНИЕ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref14">
<div class="para-hero ph-14">
<div class="ph-label">§14 · Физика 9 кл</div>
<h2>Ускорение при движении по окружности</h2>
<div class="ph-formula">$a_c = v^2/R = \omega^2 R$</div>
<div class="ph-desc">Даже при постоянной скорости на окружности есть ускорение — центростремительное. Оно направлено к центру и изменяет направление скорости, но не её модуль.</div>
<div class="ph-tags"><span class="ph-tag">$a_c = v^2/R$</span><span class="ph-tag">→ к центру</span><span class="ph-tag">⊥ скорости</span></div>
</div>
<div class="section-title"><i class="fas fa-bullseye"></i> §14. Центростремительное ускорение</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Центростремительное ускорение</h3>
<div class="main-f">$a_c = v^2/R = \omega^2 R$</div>
<p>Направлено к центру окружности и <b>перпендикулярно скорости</b>. Изменяет только направление скорости — заставляет тело «поворачивать», не разгоняя и не тормозя. Крутой поворот на большой скорости: маленький $R$ и большое $v$ → огромное $a_c$ → «тебя вдавливает в кресло». При увеличении радиуса поворота — $a_c$ падает.</p>
</div>
<div class="fcard">
<h3>Эквивалентные формулы</h3>
<div class="main-f">$a_c = \omega^2 R = \omega v = \dfrac{4\pi^2 R}{T^2}$</div>
<p>Три формулы — одна физика, разные «входные данные». Знаешь скорость и радиус → $a_c = v^2/R$. Знаешь угловую скорость и радиус → $a_c = \omega^2 R$. Знаешь период и радиус → $a_c = 4\pi^2 R / T^2$. Выбирай ту, где уже есть нужные данные — не нужно переводить лишний раз.</p>
</div>
<div class="fcard">
<h3>Направление</h3>
<div class="main-f">всегда к центру кривизны</div>
<p>Даже если скорость по модулю не меняется, <b>направление всё время поворачивает</b> — значит, есть ускорение. Его называют «нормальным» (⊥ к траектории) или центростремительным (к центру). При <em>равномерном</em> движении по окружности только оно и есть: $a_\tau = 0$. Тело едет с постоянной скоростью, но постоянно ускоряется!</p>
</div>
<div class="fcard">
<h3>Полное ускорение при неравномерном</h3>
<div class="main-f">$a = \sqrt{a_c^2 + a_\tau^2}$</div>
<p>Машина разгоняется в повороте: $a_c$ меняет <em>направление</em> скорости (к центру дуги), $a_\tau$ меняет <em>модуль</em> скорости (вдоль движения). Оба действуют одновременно и перпендикулярны друг другу → полное ускорение: теорема Пифагора $a = \sqrt{a_c^2 + a_\tau^2}$. Водитель «давит на газ в вираже» — чувствует оба одновременно.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Крутишь камень на верёвке — верёвка постоянно тянет к центру. Уберёшь руку (уберёшь центростремительную силу) — камень полетит по прямой. Ускорение меняет <b>направление</b> скорости, заставляя тело «поворачивать».</p>
<p>Луна на орбите: скорость ~1 км/с, но она постоянно «падает» к Земле. Это и есть центростремительное ускорение — оно удерживает Луну на орбите.</p>
</div>
<div class="idiag">
<h3><i class="fas fa-circle"></i> Интерактив: центростремительное ускорение</h3>
<div class="slider-row">
<span class="slider-lbl">v, м/с:</span>
<input type="range" min="1" max="30" value="10" id="sl14v" oninput="upd14()">
<span class="slider-val" id="v14v">10 м/с</span>
</div>
<div class="slider-row">
<span class="slider-lbl">R, м:</span>
<input type="range" min="1" max="50" value="10" id="sl14r" oninput="upd14()">
<span class="slider-val" id="v14r">10 м</span>
</div>
<div class="cv-wrap"><canvas id="cv14" style="height:180px"></canvas></div>
<div class="idiag-result" id="res14">a_c = — м/с²</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🎢</div><div class="li-title">Американские горки</div><div class="li-desc">В петле a_c = v²/R. При высокой скорости — ощущение «перегрузки»</div></div>
<div class="life-item"><div class="li-icon">🛸</div><div class="li-title">МКС</div><div class="li-desc">v ≈ 7,7 км/с, R = 6770 км → a_c ≈ 8,7 м/с² ≈ g</div></div>
<div class="life-item"><div class="li-icon">🏎️</div><div class="li-title">Гоночный поворот</div><div class="li-desc">200 км/ч, R = 100 м → a_c = 31 м/с² ≈ 3g. Нужна прижимная сила</div></div>
<div class="life-item"><div class="li-icon">🌍</div><div class="li-title">Земля вокруг Солнца</div><div class="li-desc">v = 30 км/с, R = 1,5·10¹¹ м → a_c = 6·10⁻³ м/с²</div></div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$a_c = v^2/R = \omega^2 R$ — к центру, ⊥ скорости.</li>
<li>При равномерном движении по окружности ускорение ≠ 0!</li>
<li>Чем больше $v$ и меньше $R$ — тем больше $a_c$.</li>
</ul>
</div>
<ol class="q-list">
<li>Автомобиль движется в повороте со скоростью 20 м/с, радиус 50 м. Найдите центростремительное ускорение.</li>
<li>Спутник летит по круговой орбите. Ускорение равно $g = 9{,}8\,\text{м/с}^2$, радиус 6 400 км. Найдите скорость спутника.</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §15 — ПЕРВЫЙ ЗАКОН НЬЮТОНА
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref15">
<div class="para-hero ph-15">
<div class="ph-label">§15 · Физика 9 кл</div>
<h2>Первый закон Ньютона. Инерция</h2>
<div class="ph-formula">$\vec{F}_\text{рез} = \vec{0} \Leftrightarrow \vec{a} = \vec{0}$</div>
<div class="ph-desc">Если равнодействующая всех сил равна нулю, тело покоится или движется равномерно прямолинейно. Покой и равномерное прямолинейное движение физически равноправны.</div>
<div class="ph-tags">
<span class="ph-tag">📌 закон инерции</span>
<span class="ph-tag">🔄 инерциальные СО</span>
<span class="ph-tag">⚖️ покой = равномерное движение</span>
</div>
</div>
<div class="section-title"><i class="fas fa-balance-scale"></i> §15. Первый закон Ньютона</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Первый закон Ньютона</h3>
<div class="main-f">$\vec{F}_\text{рез} = \vec{0} \Rightarrow \vec{a} = \vec{0}$</div>
<p>Проще говоря: тело <b>само ничего не меняет</b>. Стоит — будет стоять. Летит — будет лететь. Чтобы скорость изменилась (по величине или по направлению), нужна суммарная сила. Нет суммарной силы — нет ускорения. Это работает только в инерциальных системах отсчёта (там, где нет «фиктивных» сил — в покоящемся вагоне, в равномерно летящем самолёте).</p>
</div>
<div class="fcard">
<h3>Инерция</h3>
<div class="main-f">свойство тела</div>
<p><b>Инерция</b> — это «нежелание» тела менять скорость. Тяжёлую тележку трудно разогнать — и столь же трудно остановить. Лёгкий мяч реагирует мгновенно. Разница — в инерции. Количественная мера инерции — <b>масса</b>: больше масса → больше инерция → нужна большая сила, чтобы изменить скорость.</p>
</div>
<div class="fcard">
<h3>Инерциальная система отсчёта</h3>
<div class="main-f">ИСО</div>
<p>ИСО — это система, в которой тело не ускоряется без причины. Земля приближённо ИСО. Равномерно летящий самолёт — ИСО: на борту кидаешь мяч вверх — он падает обратно в руки, как на земле. Но самолёт на вираже — уже нет: мяч «улетит» сам по себе без видимых сил. Любая ИСО движется относительно другой ИСО только <em>равномерно и прямолинейно</em>.</p>
</div>
<div class="fcard">
<h3>Равнодействующая = 0</h3>
<div class="main-f">$\vec{F}_1 + \vec{F}_2 + \ldots = \vec{0}$</div>
<p>Важно: не «сил нет», а «векторная сумма нулевая». На стол давит тяжесть книги вниз, стол давит на книгу вверх — две силы, но они в сумме ноль → книга стоит неподвижно. Машина едет равномерно? Тяга = трению → $F_\text{рез} = 0$ → $a = 0$. Равновесие — это всегда баланс сил, а не их отсутствие.</p>
</div>
</div>
<!-- Инерция в жизни -->
<div class="section-title" style="margin-top:6px"><i class="fas fa-lightbulb"></i> Инерция вокруг нас</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🚌</div><div class="li-title">Автобус тормозит</div><div class="li-desc">Пассажир летит вперёд — тело стремится сохранить скорость</div></div>
<div class="life-item"><div class="li-icon">🍸</div><div class="li-title">Трюк со скатертью</div><div class="li-desc">Посуда остаётся на месте — она инертна, не успевает тронуться</div></div>
<div class="life-item"><div class="li-icon">🔨</div><div class="li-title">Забивание гвоздя</div><div class="li-desc">Тяжёлый молоток — большая инерция — большая сила удара</div></div>
<div class="life-item"><div class="li-icon">🚗</div><div class="li-title">Ремень безопасности</div><div class="li-desc">При ударе тело летит вперёд — ремень удерживает от инерции</div></div>
<div class="life-item"><div class="li-icon">🪐</div><div class="li-title">Планеты и спутники</div><div class="li-desc">Летят по орбите — сила тяжести меняет направление, но не гасит скорость</div></div>
<div class="life-item"><div class="li-icon"></div><div class="li-title">Мяч в полёте</div><div class="li-desc">Без воздуха летел бы вечно — трение воздуха постепенно тормозит</div></div>
</div>
<!-- Анимация: инерция -->
<div class="idiag">
<h3>🎬 Анимация: шайба с трением и без</h3>
<div class="cv-wrap">
<canvas id="cv15" style="height:170px"></canvas>
</div>
<button class="cv-playbtn" onclick="startAnim15()"><i class="fas fa-play"></i> Запустить снова</button>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">🔵 Лёд (почти без трения): шайба не останавливается. 🟠 Асфальт: трение гасит скорость.</p>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-rocket"></i> Почему ракеты летают в космосе без топлива?</div>
<p>Запустив ракету и выключив двигатель, она продолжает лететь <b>по инерции</b> — в космосе нет воздуха и почти нет сил. Первый закон Ньютона работает идеально.</p>
<p>Именно поэтому межпланетные зонды летят к Марсу или Юпитеру, включая двигатели лишь для корректировки курса.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>1-й закон: без силы — нет ускорения. Скорость не меняется <b>ни по модулю, ни по направлению</b>.</li>
<li>Покой и равномерное прямолинейное движение — физически <b>одно и то же</b> (оба: $a = 0$).</li>
<li>Инерция — не сила, а <b>свойство</b> тела. Мера инерции — масса.</li>
</ul>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-graduation-cap"></i> Простыми словами</div>
<p>Тело само по себе <b>не хочет ничего менять</b>. Если оно стоит — хочет стоять. Если летит — хочет лететь. Чтобы что-то изменить, нужна сила.</p>
<p>Именно поэтому в магазине тяжёлую тележку трудно сдвинуть с места — у неё <b>большая инерция</b>. И трудно остановить разогнавшуюся.</p>
</div>
<ol class="q-list">
<li>Что такое инерция? Приведи 3 примера из жизни.</li>
<li>Чем отличается инерциальная система отсчёта от неинерциальной?</li>
<li>Могут ли на тело действовать силы и при этом оно двигалось равномерно прямолинейно?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §16 — МАССА
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref16">
<div class="para-hero ph-16">
<div class="ph-label">§16 · Физика 9 кл</div>
<h2>Масса тела. Плотность. Сила тяжести</h2>
<div class="ph-formula">$F_\text{т} = mg$</div>
<div class="ph-desc">Масса — мера инертности тела и его гравитационных свойств. Она постоянна везде — и на Земле, и на Луне. Сила тяжести меняется, масса — нет.</div>
<div class="ph-tags">
<span class="ph-tag">⚖️ скалярная величина</span>
<span class="ph-tag">📐 [m] = кг</span>
<span class="ph-tag">🌍 не зависит от g</span>
</div>
</div>
<div class="section-title"><i class="fas fa-weight-hanging"></i> §16. Масса тела</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Сила тяжести</h3>
<div class="main-f">$F_\text{т} = mg$</div>
<p>Каждый килограмм массы даёт ~10 Н силы тяжести. Человек 60 кг: $F_\text{т} = 60 \cdot 10 = 600$ Н — именно с такой силой его тянет к Земле. Направлена всегда <b>строго вниз</b>, к центру Земли. Вес кажется разным на разных планетах, потому что $g$ меняется, а масса — нет.</p>
</div>
<div class="fcard">
<h3>Плотность → масса</h3>
<div class="main-f">$m = \rho V$</div>
<p>$\rho$ — плотность вещества (кг/м³).<br>$V$ — объём тела (м³).</p>
<p>Вода: $\rho = 1000\,\text{кг/м}^3$; Воздух: $\rho \approx 1{,}29\,\text{кг/м}^3$</p>
</div>
<div class="fcard">
<h3>Аддитивность массы</h3>
<div class="main-f">$m = m_1 + m_2 + \ldots$</div>
<p>Масса кузова + масса двигателя + масса пассажиров = масса автомобиля. Это очевидно, но важен вывод: масса <b>не меняется</b> от того, как расположены части тела и как они движутся. Сжатая пружина весит столько же, сколько разжатая. Разогнанная машина — столько же, что стоящая.</p>
</div>
<div class="fcard">
<h3>Масса и инерция</h3>
<div class="main-f">бо́льшая $m$ → бо́льшая инерция</div>
<p>Одинаковая сила — разный эффект. Пнул лёгкий мяч (0,5 кг) и тяжёлый камень (5 кг) с одинаковой силой: мяч улетит в 10 раз быстрее ($a = F/m$). Масса — это «количество инертности»: насколько трудно изменить состояние тела. Большая масса = нужна большая сила для того же ускорения.</p>
</div>
</div>
<div class="idiag">
<h3>🎚️ Интерактив: масса → сила тяжести</h3>
<div class="slider-row">
<span class="slider-lbl">Масса $m$:</span>
<input type="range" min="1" max="80" value="60" id="sl16m" oninput="upd16()">
<span class="slider-val" id="v16m">60 кг</span>
</div>
<div class="slider-row">
<span class="slider-lbl">$g$ (планета):</span>
<input type="range" min="1" max="25" step="1" value="10" id="sl16g" oninput="upd16()">
<span class="slider-val" id="v16g">10 м/с²</span>
</div>
<div class="idiag-result" id="res16">$F_\text{т} = 60 \cdot 10 = 600\,\text{Н}$</div>
</div>
<!-- Планеты -->
<div class="idiag">
<h3>🪐 Вес человека (60 кг) на разных планетах</h3>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:8px;margin-top:8px" id="planetGrid16">
</div>
<p style="font-size:.74rem;color:var(--muted);margin-top:8px">Масса всегда 60 кг — одинакова везде. Меняется только <b>сила тяжести</b>!</p>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-balance-scale-right"></i> Масса ≠ Вес</div>
<p>Ты весишь на Луне в 6 раз меньше — но твоя <b>масса не изменилась</b>. Там тебя так же трудно разогнать или остановить.</p>
<p>«Вес» в быту — это сила тяжести в ньютонах. В физике «масса» и «вес» — разные вещи. Масса в кг, вес (сила тяжести) в ньютонах.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li><b>Масса</b> (кг) — скалярная, не зависит от планеты и состояния движения.</li>
<li><b>Сила тяжести</b> (Н) — зависит от $g$: на Луне ($g \approx 1{,}6\,\text{м/с}^2$) в 6 раз меньше.</li>
<li>$F_\text{т} = mg$ — всегда направлена <b>вертикально вниз</b>.</li>
</ul>
</div>
<ol class="q-list">
<li>Чем отличается масса от силы тяжести?</li>
<li>Как изменится сила тяжести тела при полёте на Марс ($g \approx 3{,}7\,\text{м/с}^2$)?</li>
<li>Масса тела 5 кг. Какова его сила тяжести на Луне ($g = 1{,}6\,\text{м/с}^2$)?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §17 — ВТОРОЙ ЗАКОН НЬЮТОНА
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref17">
<div class="para-hero ph-17">
<div class="ph-label">§17 · Физика 9 кл</div>
<h2>Второй закон Ньютона</h2>
<div class="ph-formula">$\vec{F}_\text{рез} = m\vec{a}$</div>
<div class="ph-desc">Ускорение тела прямо пропорционально равнодействующей сил и обратно пропорционально массе. Направление ускорения совпадает с направлением равнодействующей.</div>
<div class="ph-tags">
<span class="ph-tag">📐 [F] = Н = кг·м/с²</span>
<span class="ph-tag">↗️ a ∥ F_рез</span>
<span class="ph-tag">⚙️ только в ИСО</span>
</div>
</div>
<div class="section-title"><i class="fas fa-tachometer-alt"></i> §17. Второй закон Ньютона</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Второй закон Ньютона</h3>
<div class="main-f">$\vec{F}_\text{рез} = m\vec{a}$</div>
<p>Хочешь разогнать тело — приложи силу. Чем больше сила → тем больше ускорение. Чем больше масса → тем меньше ускорение при той же силе. $a = F/m$: ускорение прямо пропорционально силе и обратно пропорционально массе. Ускорение направлено <b>туда же, куда и сила</b> — всегда.</p>
</div>
<div class="fcard">
<h3>Единица силы — 1 Ньютон</h3>
<div class="main-f">$1\,\text{Н} = 1\,\dfrac{\text{кг}{\cdot}\text{м}}{\text{с}^2}$</div>
<p>1 Н — это сила, которая разгоняет 1 кг на 1 м/с каждую секунду. Яблоко (~100 г) тянет к земле с силой ~1 Н. Ты поднимаешь гантель 1 кг → прикладываешь ~10 Н. Сила — <b>вектор</b>: у неё есть и модуль, и направление. Направление ускорения совпадает с направлением равнодействующей.</p>
</div>
<div class="fcard">
<h3>Несколько сил — равнодействующая</h3>
<div class="main-f">$m\vec{a} = \vec{F}_1 + \vec{F}_2 + \ldots$</div>
<p>На тело тянут вправо с силой 30 Н и влево с трением 10 Н. В закон Ньютона входит не «30» и не «10» по отдельности — только их <b>векторная сумма</b>: 30 10 = 20 Н вправо. Именно эта равнодействующая и вызывает ускорение: $a = 20/m$. Сначала сложи все силы — потом подставляй в формулу.</p>
</div>
<div class="fcard">
<h3>Горизонтальное движение</h3>
<div class="main-f">$ma = F_\text{тяга} - F_\text{тр}$</div>
<p>Самая частая ситуация в задачах. Двигатель толкает вперёд, трение тормозит — берём разницу: $F_\text{рез} = F_\text{тяга} - F_\text{тр}$. Если $F_\text{тяга} > F_\text{тр}$ → разгон ($a > 0$). Если $F_\text{тяга} = F_\text{тр}$ → равномерно ($a = 0$, 1-й закон!). Если $F_\text{тяга} < F_\text{тр}$ тормозит ($a < 0$). Все три случая из одной формулы.</p>
</div>
</div>
<div class="idiag">
<h3>🎚️ Интерактив: $a = F / m$</h3>
<div class="slider-row">
<span class="slider-lbl">Сила $F$:</span>
<input type="range" min="1" max="100" value="20" id="sl17f" oninput="upd17()">
<span class="slider-val" id="v17f">20 Н</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Масса $m$:</span>
<input type="range" min="1" max="20" value="4" id="sl17m" oninput="upd17()">
<span class="slider-val" id="v17m">4 кг</span>
</div>
<div class="idiag-result" id="res17">$a = 20 / 4 = 5{,}0\,\text{м/с}^2$</div>
</div>
<!-- §17 canvas animation -->
<div class="idiag" style="margin-top:10px">
<h3>🎬 Анимация: разгон тела — скорость растёт!</h3>
<div class="cv-wrap">
<canvas id="cv17" style="height:120px"></canvas>
</div>
<button class="cv-playbtn" onclick="startAnim17()"><i class="fas fa-play"></i> Запустить снова</button>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">Синяя стрелка = сила $F$, длина = ускорение $a = F/m$. Поменяй ползунки и нажми снова!</p>
</div>
<!-- §17 life examples -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Второй закон в жизни</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🛹</div><div class="li-title">Скейтборд</div><div class="li-desc">Сильнее оттолкнулся → больше $F$ → больше ускорение $a$</div></div>
<div class="life-item"><div class="li-icon">🚀</div><div class="li-title">Ракета</div><div class="li-desc">Большая тяга + малая масса → огромное ускорение при старте</div></div>
<div class="life-item"><div class="li-icon">🏋️</div><div class="li-title">Штанга</div><div class="li-desc">Тяжёлая штанга поднимается медленнее: $a = F/m$, большое $m$</div></div>
<div class="life-item"><div class="li-icon">🚗</div><div class="li-title">Авто</div><div class="li-desc">Мощный двигатель → большая $F$ → быстрый разгон</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-lightbulb"></i> Почему порожний грузовик разгоняется быстрее гружёного?</div>
<p>Двигатель создаёт одинаковую тягу $F$. Но с грузом масса $m$ больше → ускорение $a = F/m$ меньше.</p>
<p>Именно поэтому гоночные автомобили такие лёгкие — минимальная масса при максимальной мощности двигателя.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>В 2-м законе $F$ — это <b>равнодействующая</b>, а не одна из сил.</li>
<li>Если $F_\text{рез} = 0$ — получаем 1-й закон: $a = 0$.</li>
<li>Ускорение всегда <b>параллельно</b> равнодействующей и направлено в ту же сторону.</li>
</ul>
</div>
<div class="example-box">
<h3>Пример задачи</h3>
<div class="cond">Тело массой $m = 5\,\text{кг}$ тянут силой $F_\text{тяга} = 30\,\text{Н}$. Сила трения $F_\text{тр} = 10\,\text{Н}$. Найдите ускорение.</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span>Равнодействующая: $F_\text{рез} = F_\text{тяга} - F_\text{тр} = 30 - 10 = 20\,\text{Н}$</li>
<li><span class="step-n">2</span>2-й закон: $a = F_\text{рез}/m = 20/5 = 4\,\text{м/с}^2$</li>
</ol>
</div>
</div>
<ol class="q-list">
<li>Как изменится ускорение тела, если силу увеличить в 3 раза, а массу уменьшить в 2 раза?</li>
<li>Можно ли применять второй закон Ньютона в неинерциальных системах отсчёта?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §18 — ТРЕТИЙ ЗАКОН НЬЮТОНА
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref18">
<div class="para-hero ph-18">
<div class="ph-label">§18 · Физика 9 кл</div>
<h2>Третий закон Ньютона. Принцип Галилея</h2>
<div class="ph-formula">$\vec{F}_{1\to2} = -\vec{F}_{2\to1}$</div>
<div class="ph-desc">Силы взаимодействия двух тел равны по модулю, противоположны по направлению и приложены к РАЗНЫМ телам. Они не компенсируют друг друга!</div>
<div class="ph-tags">
<span class="ph-tag">⚡ на разных телах</span>
<span class="ph-tag">↔️ одна природа</span>
<span class="ph-tag">🌍 принцип Галилея</span>
</div>
</div>
<div class="section-title"><i class="fas fa-arrows-alt-h"></i> §18. Третий закон Ньютона</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Третий закон Ньютона</h3>
<div class="main-f">$\vec{F}_{1\to2} = -\vec{F}_{2\to1}$</div>
<p>Любое взаимодействие — двустороннее. Ты толкаешь стену — стена толкает тебя с той же силой. Магнит притягивает гвоздь — гвоздь притягивает магнит с равной силой. Земля тянет тебя вниз — ты тянешь Землю вверх. Разница в том, что Земля на это не реагирует — у неё масса в $10^{22}$ раз больше твоей, ускорение исчезающе мало.</p>
</div>
<div class="fcard">
<h3>Свойства пары сил</h3>
<div class="main-f">всегда парные</div>
<ul>
<li>Равны по <b>модулю</b></li>
<li>Противоположны по <b>направлению</b></li>
<li><b>Одинаковой природы</b></li>
<li>Приложены к <b>разным</b> телам</li>
<li>Действуют одновременно</li>
</ul>
</div>
<div class="fcard">
<h3>Принцип относительности Галилея</h3>
<div class="main-f">ИСО ↔ ИСО</div>
<p>В ровно летящем самолёте можно спокойно поиграть в мяч — всё идёт как на земле. Ни один эксперимент внутри ровно движущегося корабля не покажет, движешься ты или стоишь. Это и есть принцип Галилея: <b>физика не различает покой и равномерное прямолинейное движение</b>. Законы одинаковы в любой ИСО.</p>
</div>
<div class="fcard">
<h3>Почему лошадь тянет телегу?</h3>
<div class="main-f">разные тела!</div>
<p>Лошадь тянет телегу с силой $F$, телега тянет лошадь с силой $-F$. Но обе силы на <b>разных телах</b>. Телега едет, потому что $F_\text{тяга} > F_\text{тр.телеги}$.</p>
</div>
</div>
<div class="idiag">
<h3>📌 Действие и противодействие — визуализация</h3>
<svg width="100%" viewBox="0 0 320 105" style="display:block;margin:0 auto">
<rect x="20" y="32" width="85" height="40" rx="8" fill="#a5f3fc" stroke="#0891b2" stroke-width="2"/>
<text x="62" y="56" font-size="11" text-anchor="middle" fill="#0e7490" font-weight="700">Тело 1</text>
<rect x="215" y="32" width="85" height="40" rx="8" fill="#a5f3fc" stroke="#0891b2" stroke-width="2"/>
<text x="257" y="56" font-size="11" text-anchor="middle" fill="#0e7490" font-weight="700">Тело 2</text>
<line x1="105" y1="44" x2="213" y2="44" stroke="#ef4444" stroke-width="2.5"/>
<polygon points="213,44 201,39 201,49" fill="#ef4444"/>
<text x="159" y="40" font-size="9" text-anchor="middle" fill="#ef4444" font-weight="700">F₁→₂</text>
<line x1="215" y1="60" x2="107" y2="60" stroke="#10b981" stroke-width="2.5"/>
<polygon points="107,60 119,55 119,65" fill="#10b981"/>
<text x="161" y="75" font-size="9" text-anchor="middle" fill="#10b981" font-weight="700">F₂→₁</text>
<text x="160" y="96" font-size="8" text-anchor="middle" fill="#64748b" font-family="Inter">|F₁→₂| = |F₂→₁|, но приложены к разным телам!</text>
</svg>
</div>
<!-- §18 life examples -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Третий закон вокруг нас</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🚀</div><div class="li-title">Ракета</div><div class="li-desc">Газы летят назад → ракета летит вперёд — среда не нужна!</div></div>
<div class="life-item"><div class="li-icon">💣</div><div class="li-title">Выстрел пушки</div><div class="li-desc">Снаряд вперёд → отдача толкает пушку назад с той же силой</div></div>
<div class="life-item"><div class="li-icon">🛶</div><div class="li-title">Вёсла</div><div class="li-desc">Толкаешь воду назад → вода толкает лодку вперёд</div></div>
<div class="life-item"><div class="li-icon">🧊</div><div class="li-title">Конькобежец</div><div class="li-desc">Отталкивается от льда → лёд давит назад с равной силой</div></div>
</div>
<!-- §18 canvas animation -->
<div class="idiag">
<h3>🎬 Анимация: отдача — два тела разлетаются</h3>
<div class="cv-wrap">
<canvas id="cv18" style="height:120px"></canvas>
</div>
<button class="cv-playbtn" onclick="startAnim18()"><i class="fas fa-play"></i> Запустить снова</button>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">🔵 Лёгкое тело летит быстрее. 🟠 Тяжёлое — медленнее. Силы равны, скорости — нет!</p>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-rocket"></i> Почему ракета летит в вакууме?</div>
<p>Многие думают: «В вакууме ракета не может лететь — не от чего оттолкнуться». Это <b>неверно!</b></p>
<p>Ракета отталкивается <b>от собственных газов</b>: газы назад — ракета вперёд. Третий закон работает без среды.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Силы 3-го закона <b>не компенсируют</b> друг друга — они приложены к <b>разным</b> телам.</li>
<li>Пара сил 3-го закона всегда одинаковой природы (обе гравитационные, или обе упругие).</li>
<li>Принцип Галилея: физика одинакова в любой инерциальной СО.</li>
</ul>
</div>
<ol class="q-list">
<li>Почему пара сил третьего закона не уравновешивает тело?</li>
<li>Лошадь тянет телегу с силой 500 Н. С какой силой телега действует на лошадь?</li>
<li>В чём смысл принципа относительности Галилея?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §19 — ЗАКОН ГУКА
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref19">
<div class="para-hero ph-19">
<div class="ph-label">§19 · Физика 9 кл</div>
<h2>Деформация. Закон Гука</h2>
<div class="ph-formula">$F_\text{упр} = k|\Delta l|$</div>
<div class="ph-desc">Сила упругости пропорциональна деформации. Жёсткость k показывает, насколько сильно тело сопротивляется деформации. Природа сил упругости — электромагнитная.</div>
<div class="ph-tags">
<span class="ph-tag">📏 упругая деформация</span>
<span class="ph-tag">⚡ электромагнитная природа</span>
<span class="ph-tag">📐 [k] = Н</span>
</div>
</div>
<div class="section-title"><i class="fas fa-compress-arrows-alt"></i> §19. Закон Гука</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Закон Гука</h3>
<div class="main-f">$F_\text{упр} = k|\Delta l|$</div>
<p>Растянешь пружину на 1 см — сила 2 Н. На 2 см — сила 4 Н. На 10 см — 20 Н. Сила <b>пропорциональна деформации</b>: коэффициент пропорциональности $k$ — жёсткость. Чем жёстче пружина (большее $k$), тем больше сила при той же деформации. Направлена всегда <b>обратно растяжению</b> — пружина «хочет» вернуться.</p>
</div>
<div class="fcard">
<h3>Знаковая форма</h3>
<div class="main-f">$F_{\text{упр},x} = -kx$</div>
<p>Пружина растянута вправо ($x > 0$) — сила тянет влево ($F_x < 0$). Пружина сжата влево ($x < 0$) сила толкает вправо ($F_x > 0$). Минус в формуле — не просто знак, а физический смысл: <b>сила всегда против деформации</b>, всегда «возвращает» тело к исходному положению.</p>
</div>
<div class="fcard">
<h3>Жёсткость</h3>
<div class="main-f">$k = \dfrac{F}{\Delta l}$</div>
<p>Единица Н/м: сколько ньютонов нужно на метр деформации. Пружина с $k = 500$ Н/м: растяни на 1 см = 0,01 м → сила 5 Н. Пружинные весы: измеряют деформацию, пересчитывают в килограммы именно через $k$. Жёсткость матраса, автомобильной подвески, прыжкового батута — всё описывается одной формулой Гука.</p>
</div>
<div class="fcard">
<h3>Виды деформаций</h3>
<div class="main-f">упругая / пластическая</div>
<p><b>Упругая</b>: убери силу — тело вернулось. Закон Гука работает. Примеры: сжатая пружина, натянутая резинка. <b>Пластическая</b>: убери силу — тело осталось деформированным. Перегнул проволоку — она уже не выпрямится. <b>Предел упругости</b>: слишком сильное растяжение — пружина не возвращается. Для каждого материала он свой.</p>
</div>
</div>
<div class="idiag">
<h3>🎚️ Интерактив: $F_\text{упр} = k \cdot \Delta l$</h3>
<div class="slider-row">
<span class="slider-lbl">Жёсткость $k$:</span>
<input type="range" min="50" max="1000" step="50" value="200" id="sl19k" oninput="upd19()">
<span class="slider-val" id="v19k">200 Н</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Деформация $\Delta l$:</span>
<input type="range" min="1" max="50" value="10" id="sl19x" oninput="upd19()">
<span class="slider-val" id="v19x">10 см</span>
</div>
<div class="idiag-result" id="res19">$F_\text{упр} = 200 \cdot 0{,}10 = 20{,}0\,\text{Н}$</div>
</div>
<!-- §19 spring canvas -->
<div class="idiag" style="margin-top:10px">
<h3>🎬 Пружина: визуализация деформации</h3>
<div class="cv-wrap">
<canvas id="cv19" style="height:160px"></canvas>
</div>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">Двигай ползунки выше — пружина меняет растяжение. Красная стрелка = сила упругости $F_\text{упр}$.</p>
</div>
<!-- §19 life examples -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Закон Гука в жизни</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🚗</div><div class="li-title">Подвеска авто</div><div class="li-desc">Пружинная подвеска сжимается на ямах → $F=k\Delta l$ гасит удар</div></div>
<div class="life-item"><div class="li-icon">⚖️</div><div class="li-title">Пружинные весы</div><div class="li-desc">Деформация пружины пропорциональна массе груза</div></div>
<div class="life-item"><div class="li-icon">🛏️</div><div class="li-title">Матрас</div><div class="li-desc">Пружины деформируются равномерно — каждая по закону Гука</div></div>
<div class="life-item"><div class="li-icon">🏹</div><div class="li-title">Лук и стрела</div><div class="li-desc">Натягиваем тетиву → копим упругую энергию → стрела летит</div></div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Закон Гука: $F = k|\Delta l|$ — работает только при <b>упругой</b> деформации (не слишком большой).</li>
<li>Сила упругости <b>противоположна</b> деформации (знак минус в $F_x = -kx$).</li>
<li>Природа силы упругости — <b>электромагнитная</b> (взаимодействие атомов тела).</li>
</ul>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Повесь гирю на пружину — пружина растянется до равновесия: сила тяжести вниз = сила упругости вверх. Чем тяжелее гиря — тем больше растяжение. <b>Именно так работают пружинные весы</b>: шкала откалибрована по закону Гука, каждый лишний килограмм даёт одинаковое дополнительное растяжение.</p>
<p>Предел упругости важен в инженерии: строительные балки, мосты, пружины механизмов — всё рассчитывается так, чтобы деформация оставалась упругой. Нарушишь предел — конструкция не вернётся в исходное состояние, жди аварии.</p>
</div>
<div class="example-box">
<h3>Пример задачи</h3>
<div class="cond">На пружину жёсткостью $k = 500\,\text{Н/м}$ подвесили груз массой $m = 2\,\text{кг}$, $g = 10\,\text{м/с}^2$. Найдите деформацию пружины.</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span>Сила тяжести груза: $F_\text{т} = mg = 2 \cdot 10 = 20\,\text{Н}$</li>
<li><span class="step-n">2</span>При равновесии: $F_\text{упр} = F_\text{т} = 20\,\text{Н}$</li>
<li><span class="step-n">3</span>Деформация: $\Delta l = F/k = 20/500 = 0{,}04\,\text{м} = 4\,\text{см}$</li>
</ol>
</div>
</div>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §20 — СИЛЫ ТРЕНИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref20">
<div class="para-hero ph-20">
<div class="ph-label">§20 · Физика 9 кл</div>
<h2>Силы трения</h2>
<div class="ph-formula">$F_\text{тр} = \mu N$</div>
<div class="ph-desc">Трение скольжения пропорционально силе нормального давления. Коэффициент трения μ зависит от материала и состояния поверхностей, но не от площади контакта.</div>
<div class="ph-tags">
<span class="ph-tag">↔️ против скорости</span>
<span class="ph-tag">📐 μ — безразмерный</span>
<span class="ph-tag">🛞 качение &lt; скольжение</span>
</div>
</div>
<div class="section-title"><i class="fas fa-hand-paper"></i> §20. Силы трения</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Трение скольжения</h3>
<div class="main-f">$F_\text{тр} = \mu N$</div>
<p>$\mu$ — безразмерный коэффициент: чем глаже поверхности, тем меньше. Лёд–металл: $\mu \approx 0{,}03$. Резина–асфальт: $\mu \approx 0{,}7$. $N$ — с какой силой тело давит на поверхность (на горизонтали $N = mg$). Сила трения всегда направлена <b>против скорости</b> скольжения — никогда не разгоняет, только тормозит.</p>
</div>
<div class="fcard">
<h3>Трение покоя</h3>
<div class="main-f">$F_\text{тр.пок} \leq \mu_\text{пок} N$</div>
<p>Книга лежит на столе — ты слегка толкаешь, она не двигается. Трение покоя точно «отвечает» на твой толчок, уравновешивая его. Усиливаешь толчок — трение покоя растёт вместе с ним. Но есть предел: $F_\text{тр.пок}^{max} = \mu_\text{пок} N$. Преодолел этот предел — книга тронулась, и дальше работает уже трение скольжения.</p>
</div>
<div class="fcard">
<h3>Горизонтальная поверхность</h3>
<div class="main-f">$N = mg;\quad F_\text{тр} = \mu mg$</div>
<p>На горизонтальной поверхности вся тяжесть тела давит на неё перпендикулярно → $N = mg$ → $F_\text{тр} = \mu mg$. Сурприз: большой кубик и маленький кубик из того же материала и с той же массой имеют <b>одинаковое трение</b> — площадь не важна! Важны только материалы ($\mu$) и вес ($N$).</p>
</div>
<div class="fcard">
<h3>Трение качения и сопротивление среды</h3>
<div class="main-f">$F_\text{кач} \ll F_\text{скольж}$</div>
<p>Колесо катится — в точке контакта нет скольжения, трение мало. Именно поэтому колесо изобрели: перевезти груз на колёсах в 10–100 раз легче, чем волоком. Шарикоподшипник — то же самое: шарики катятся, не скользят → потери минимальны. В жидкости или воздухе сопротивление растёт со скоростью в квадрате: вдвое быстрее — в четыре раза больше тормозит.</p>
</div>
</div>
<div class="idiag">
<h3>🎚️ Интерактив: $F_\text{тр} = \mu \cdot N$</h3>
<div class="slider-row">
<span class="slider-lbl">Коэфф. трения $\mu$:</span>
<input type="range" min="1" max="80" value="30" id="sl20mu" oninput="upd20()">
<span class="slider-val" id="v20mu">0.30</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Масса $m$ (→ $N\!=\!mg$):</span>
<input type="range" min="1" max="50" value="10" id="sl20m" oninput="upd20()">
<span class="slider-val" id="v20m">10 кг</span>
</div>
<div class="idiag-result" id="res20">$F_\text{тр} = 0{,}30 \cdot 100 = 30{,}0\,\text{Н}$</div>
</div>
<!-- §20 friction canvas -->
<div class="idiag" style="margin-top:10px">
<h3>🎬 Диаграмма сил трения</h3>
<div class="cv-wrap">
<canvas id="cv20" style="height:150px"></canvas>
</div>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">Двигай ползунки — стрелки меняют масштаб. $N\!=\!mg$ (вертикаль), $F_\text{тр}\!=\!\mu N$ (горизонталь).</p>
</div>
<!-- §20 mu table -->
<div class="idiag" style="margin-top:12px">
<h3>📊 Типичные значения коэффициента трения $\mu$</h3>
<table class="mu-tbl">
<tr><th>Материалы</th><th>μ (скольжение)</th><th>μ (покой)</th></tr>
<tr><td>Лёд — металл</td><td>0.03</td><td>0.05</td></tr>
<tr><td>Дерево — дерево</td><td>0.30</td><td>0.45</td></tr>
<tr><td>Резина — асфальт</td><td>0.70</td><td>0.80</td></tr>
<tr><td>Сталь — сталь (смазка)</td><td>0.10</td><td>0.12</td></tr>
<tr><td>Кожа — асфальт</td><td>0.50</td><td>0.65</td></tr>
</table>
</div>
<!-- §20 life examples -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Трение в жизни</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">👟</div><div class="li-title">Кроссовки</div><div class="li-desc">Рифлёная подошва → большой $\mu$ → не скользишь при ходьбе</div></div>
<div class="life-item"><div class="li-icon">🚗</div><div class="li-title">Тормоза</div><div class="li-desc">$F_\text{торм}=\mu mg$ — чем больше $\mu$, тем короче тормозной путь</div></div>
<div class="life-item"><div class="li-icon">❄️</div><div class="li-title">Лыжи</div><div class="li-desc">Смазка снижает $\mu$ снега → скорость выше</div></div>
<div class="life-item"><div class="li-icon">🔩</div><div class="li-title">Болт и гайка</div><div class="li-desc">Трение покоя в резьбе удерживает соединение от раскручивания</div></div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Трение покоя — «умное»: оно подстраивается под приложенную силу. Толкаешь ящик с силой 10 Н — трение покоя ровно 10 Н. Усиливаешь до 30 Н — трение тоже 30 Н. Но как только преодолеешь максимум ($\mu_\text{пок} N$) — ящик трогается, и дальше тебя сопротивляет уже трение скольжения, которое обычно <em>меньше</em>. Именно поэтому сдвинуть тяжёлый предмет труднее, чем поддерживать его движение.</p>
<p>Трение — двуликое: мешает движению (гасит скорость, тратит энергию), но и <b>помогает</b>: без него ты не смог бы ходить, автомобиль — тормозить, болты — держаться в резьбе. Мир без трения — это ад на льду.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$F_\text{тр} = \mu N$ — трение скольжения; направлено <b>против скорости</b>.</li>
<li>Трение покоя <b>изменяется</b> от 0 до максимума $\mu_\text{пок} N$.</li>
<li>Трение <b>не зависит</b> от площади контакта — только от материалов и нормальной силы.</li>
</ul>
</div>
<ol class="q-list">
<li>Почему трение покоя может быть меньше трения скольжения?</li>
<li>Брусок скользит по горизонтальной поверхности. Как направлена сила трения?</li>
<li>Почему в подшипниках используют шарики, а не скользящие втулки?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §21 — ДВИЖЕНИЕ ПОД ДЕЙСТВИЕМ СИЛЫ ТЯЖЕСТИ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref21">
<div class="para-hero ph-21">
<div class="ph-label">§21 · Физика 9 кл</div>
<h2>Движение тела под действием силы тяжести</h2>
<div class="ph-formula">$t_\text{пад} = \sqrt{2h/g};\quad v_\text{пад} = \sqrt{2gh}$</div>
<div class="ph-desc">Свободное падение, горизонтальный бросок, вертикальный бросок — всё это движение под действием только силы тяжести. Траектория горизонтального броска — парабола.</div>
<div class="ph-tags">
<span class="ph-tag">⬇️ g = 10 м/с²</span>
<span class="ph-tag">📐 траектория — парабола</span>
<span class="ph-tag">⏱️ время не зависит от v₀</span>
</div>
</div>
<div class="section-title"><i class="fas fa-arrow-down"></i> §21. Движение под действием силы тяжести</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Свободное падение (вниз)</h3>
<div class="main-f">$v_y = gt;\quad y = \dfrac{gt^2}{2}$</div>
<p>Уронил камень с высоты 20 м: $t = \sqrt{2 \cdot 20 / 10} = 2$ с. Скорость при ударе: $v = 10 \cdot 2 = 20$ м/с = 72 км/ч. Жёстко! Бросил вверх с той же высоты: время падения то же — только подождёшь дольше. Ускорение $g$ одинаково для пера и молотка (в вакууме). Это доказал Галилей.</p>
</div>
<div class="fcard">
<h3>Горизонтальный бросок</h3>
<div class="main-f">$x = v_0 t;\quad y = \dfrac{gt^2}{2}$</div>
<p>Два движения одновременно: по горизонтали — <b>равномерно</b> со скоростью $v_0$, по вертикали — <b>свободное падение</b> без начальной скорости. Они не мешают друг другу! Дальность: чем быстрее бросаешь и чем выше стол, тем дальше улетит. Стрела, вылетевшая горизонтально с коня, и монета, упавшая с той же высоты, ударятся о землю одновременно.</p>
</div>
<div class="fcard">
<h3>Бросок вертикально вверх</h3>
<div class="main-f">$v_y = v_0 - gt;\quad y = v_0 t - \dfrac{gt^2}{2}$</div>
<p>Бросил вверх со скоростью 20 м/с: поднимается $t_\text{п} = 20/10 = 2$ с, максимальная высота $H = 20^2/(2 \cdot 10) = 20$ м. Потом падает ещё 2 с — <b>полёт симметричен</b>: подъём = спуск. Скорость при возвращении равна начальной (в вакууме). В верхней точке $v = 0$, но $a = g \ne 0$ — тело не зависает, оно всё время ускоряется вниз.</p>
</div>
<div class="fcard">
<h3>Ускорение свободного падения</h3>
<div class="main-f">$g \approx 10\,\text{м/с}^2$</div>
<p>Не зависит от массы, размера или материала — это экспериментальный факт. Перо и молоток падают с одинаковым ускорением в вакууме. На Луне Армстронг это демонстрировал: перо и молоток упали одновременно! Используем $g = 10\,\text{м/с}^2$ для простоты (точнее: 9,8 м/с², разница ~2%).</p>
</div>
</div>
<div class="idiag">
<h3>🎚️ Интерактив: свободное падение</h3>
<div class="slider-row">
<span class="slider-lbl">Высота $h$:</span>
<input type="range" min="1" max="125" value="20" id="sl21h" oninput="upd21()">
<span class="slider-val" id="v21h">20 м</span>
</div>
<div class="idiag-result" id="res21">$t = \sqrt{2{\cdot}20/10} = 2{,}0\,\text{с};\quad v = \sqrt{2{\cdot}10{\cdot}20} = 20{,}0\,\text{м/с}$</div>
</div>
<!-- §21 life examples -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Парабола вокруг нас</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon"></div><div class="li-title">Пас в футболе</div><div class="li-desc">Мяч летит по параболе: горизонталь — равномерно, вертикаль — ускорение $g$</div></div>
<div class="life-item"><div class="li-icon">💧</div><div class="li-title">Фонтан</div><div class="li-desc">Струя воды — парабола. Дальность зависит от скорости и угла броска</div></div>
<div class="life-item"><div class="li-icon">🏀</div><div class="li-title">Баскетбол</div><div class="li-desc">Точный бросок — правильно рассчитанная парабола траектории</div></div>
<div class="life-item"><div class="li-icon">🌋</div><div class="li-title">Вулкан</div><div class="li-desc">Выброшенные камни летят по параболе — можно предсказать зону падения</div></div>
</div>
<!-- §21 parabola canvas — THE BIG ANIMATION -->
<div class="idiag">
<h3>🎬 Горизонтальный бросок vs. свободное падение — упадут <em>одновременно!</em></h3>
<div class="cv-wrap">
<canvas id="cv21" style="height:220px"></canvas>
</div>
<button class="cv-playbtn" onclick="startAnim21()"><i class="fas fa-play"></i> Запустить анимацию</button>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">🔵 Бросок горизонтально. 🟠 Падает вертикально. По вертикали оба движутся <b>одинаково</b> — упадут в одно время!</p>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-brain"></i> Галилей vs. интуиция</div>
<p>Интуиция подсказывает: брошенное горизонтально тело падает <b>дольше</b>, ведь оно летит дальше.</p>
<p><b>На самом деле:</b> горизонтальная скорость не влияет на вертикальное падение. Оба тела — брошенное и просто упавшее с той же высоты — ударятся об землю одновременно. Именно это доказал Галилей, сбрасывая тела с Пизанской башни.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Время падения $t = \sqrt{2h/g}$ — <b>не зависит</b> от начальной горизонтальной скорости!</li>
<li>При горизонтальном броске: по горизонтали — <b>равномерно</b> ($v_x = v_0$), по вертикали — <b>равноускоренно</b> без начальной скорости.</li>
<li>Свободное падение — движение <b>только под действием силы тяжести</b>.</li>
</ul>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-graduation-cap"></i> Простыми словами</div>
<p>Если одновременно бросить один мяч горизонтально и уронить другой с той же высоты — они ударятся об пол <b>одновременно</b>. Горизонтальная скорость не влияет на вертикальное падение.</p>
<p>Это потому что горизонтальное и вертикальное движения <b>независимы</b>. Сила тяжести ускоряет только вертикальную составляющую скорости.</p>
</div>
<ol class="q-list">
<li>Что такое свободное падение? При каких условиях падение можно считать свободным?</li>
<li>Почему ускорения всех свободно падающих тел одинаковы?</li>
<li>Что такое горизонтальная дальность полёта? Как её вычислить?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §22 — БРОСОК ПОД УГЛОМ К ГОРИЗОНТУ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref22">
<div class="para-hero ph-22">
<div class="ph-label">§22 · Физика 9 кл</div>
<h2>Бросок тела под углом к горизонту</h2>
<div class="ph-formula">$v_x = v_0\cos\alpha;\quad v_y = v_0\sin\alpha - gt$</div>
<div class="ph-desc">Любой бросок — это два независимых движения: равномерное горизонтальное и равноускоренное вертикальное. Меняя угол броска, можно управлять дальностью и высотой.</div>
<div class="ph-tags">
<span class="ph-tag">📐 L = v₀²sin2α/g</span>
<span class="ph-tag">⬆️ H = v₀²sin²α/2g</span>
<span class="ph-tag">🎯 max L при α=45°</span>
</div>
</div>
<div class="section-title"><i class="fas fa-location-arrow"></i> §22. Бросок тела под углом к горизонту</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Составляющие скорости</h3>
<div class="main-f">$v_x = v_0\cos\alpha;\quad v_y = v_0\sin\alpha - gt$</div>
<p>При броске под углом $\alpha$ начальная скорость делится на две: $v_x = v_0\cos\alpha$ — горизонтальная (постоянна весь полёт, сила тяжести не влияет), $v_y = v_0\sin\alpha$ — вертикальная (убывает из-за $g$, в верхней точке = 0). Например, бросок со скоростью 20 м/с под 30°: $v_x = 17{,}3$ м/с, $v_{y0} = 10$ м/с.</p>
</div>
<div class="fcard">
<h3>Дальность и высота</h3>
<div class="main-f">$L = \dfrac{v_0^2 \sin 2\alpha}{g};\quad H = \dfrac{v_0^2 \sin^2\!\alpha}{2g}$</div>
<p>Дальность $L = v_0^2\sin 2\alpha / g$: зависит от $\sin 2\alpha$, который максимален при $2\alpha = 90°$, то есть при $\alpha = 45°$ — золотой угол для максимальной дальности. При $\alpha = 30°$ и $\alpha = 60°$ дальность одинакова ($\sin 60° = \sin 120°$). Высота максимальна при $\alpha = 90°$ (бросок строго вверх).</p>
</div>
<div class="fcard">
<h3>Полное время полёта</h3>
<div class="main-f">$T = \dfrac{2v_0\sin\alpha}{g}$</div>
<p>Время полёта — только от вертикального движения: тело улетело вверх (время $v_{y0}/g$) и упало обратно (ещё столько же). Горизонтальная скорость на время <em>никак не влияет</em>: хоть 1 м/с, хоть 100 м/с горизонтально — вертикальный цикл тот же. Поэтому формула: $T = 2v_0\sin\alpha / g$.</p>
</div>
<div class="fcard">
<h3>Координаты в момент t</h3>
<div class="main-f">$x = v_0\cos\alpha\cdot t$</div>
<div class="main-f">$y = v_0\sin\alpha\cdot t - \tfrac{gt^2}{2}$</div>
<p>В каждый момент $t$: горизонталь нарастает равномерно ($x = v_0\cos\alpha \cdot t$), вертикаль — по параболе ($y = v_0\sin\alpha \cdot t - gt^2/2$). Подставь $x$ вместо $t$ — получишь уравнение параболы: $y = x\tan\alpha - gx^2/(2v_0^2\cos^2\alpha)$. Вершина параболы — точка где $v_y = 0$, то есть $t = v_0\sin\alpha / g$.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Представь: ты бросаешь мяч. <b>По горизонтали</b> мяч летит с постоянной скоростью — как будто никакой гравитации нет. <b>По вертикали</b> — он тормозит (летит вверх) и потом разгоняется (падает вниз), как при свободном падении.</p>
<p>Оба движения происходят <b>одновременно и независимо</b>. Поэтому траектория — парабола.</p>
<p>Угол 45° — <b>золотой угол</b>. При нём sin2α = sin90° = 1 — максимально возможная дальность для данной скорости.</p>
</div>
<!-- Интерактив: бросок под углом -->
<div class="idiag">
<h3><i class="fas fa-chart-line"></i> Интерактив: бросок под углом</h3>
<div class="slider-row">
<span class="slider-lbl">Угол α:</span>
<input type="range" min="10" max="80" value="45" id="sl22a" oninput="upd22()">
<span class="slider-val" id="v22a">45°</span>
</div>
<div class="slider-row">
<span class="slider-lbl">v₀, м/с:</span>
<input type="range" min="5" max="30" value="20" id="sl22v" oninput="upd22()">
<span class="slider-val" id="v22v">20 м/с</span>
</div>
<div class="cv-wrap"><canvas id="cv22" style="height:200px"></canvas></div>
<div class="idiag-result" id="res22">L = — м | H = — м | T = — с</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon"></div><div class="li-title">Удар по мячу</div><div class="li-desc">Футболист выбирает угол удара, чтобы мяч улетел как можно дальше</div></div>
<div class="life-item"><div class="li-icon">💦</div><div class="li-title">Фонтан</div><div class="li-desc">Струи воды — параболы. Угол сопла определяет форму дуги</div></div>
<div class="life-item"><div class="li-icon">🎯</div><div class="li-title">Артиллерия</div><div class="li-desc">Угол наклона ствола орудия рассчитывают по формуле дальности</div></div>
<div class="life-item"><div class="li-icon">🏀</div><div class="li-title">Баскетбол</div><div class="li-desc">Траектория броска — парабола. Игрок интуитивно решает задачу §22</div></div>
<div class="life-item"><div class="li-icon">🚀</div><div class="li-title">Ракета</div><div class="li-desc">Баллистические ракеты летят по параболе в безвоздушном пространстве</div></div>
<div class="life-item"><div class="li-icon">🌧️</div><div class="li-title">Дождь</div><div class="li-desc">Капли вылетают из тучи с горизонтальной скоростью ветра + вертикальным ускорением g</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-lightbulb"></i> Парадокс: почему именно 45°?</div>
<p>$L = v_0^2\sin 2\alpha / g$. Функция $\sin 2\alpha$ максимальна при $2\alpha = 90°$, то есть $\alpha = 45°$.</p>
<p>Но в реальности воздух тормозит мяч — оптимальный угол смещается к 35–40°. Именно поэтому в футболе не бьют «под 45°».</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Горизонтальная и вертикальная составляющие движения <b>независимы</b>.</li>
<li>Максимальная дальность — при $\alpha = 45°$.</li>
<li>Траектория при броске под углом — <b>парабола</b>.</li>
<li>В верхней точке $v_y = 0$, но $v_x = v_0\cos\alpha \neq 0$.</li>
</ul>
</div>
<ol class="q-list">
<li>Как направлена скорость тела в верхней точке траектории при броске под углом?</li>
<li>При каком угле броска дальность максимальна? Почему?</li>
<li>Что происходит с горизонтальной составляющей скорости в течение всего полёта?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §23 — ЗАКОН ВСЕМИРНОГО ТЯГОТЕНИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref23">
<div class="para-hero ph-23">
<div class="ph-label">§23 · Физика 9 кл</div>
<h2>Закон всемирного тяготения</h2>
<div class="ph-formula">$F = G\dfrac{m_1 m_2}{r^2}$</div>
<div class="ph-desc">Каждое тело притягивает каждое другое тело с силой, прямо пропорциональной произведению масс и обратно пропорциональной квадрату расстояния между ними.</div>
<div class="ph-tags">
<span class="ph-tag">G = 6,67·10⁻¹¹ Н·м²/кг²</span>
<span class="ph-tag">🌍 g = GM/R²</span>
<span class="ph-tag">🛰️ v₁ = 7,9 км/с</span>
</div>
</div>
<div class="section-title"><i class="fas fa-globe"></i> §23. Закон всемирного тяготения</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Закон всемирного тяготения</h3>
<div class="main-f">$F = G\dfrac{m_1 m_2}{r^2}$</div>
<p>Два человека по 60 кг на расстоянии 1 м: $F = 6{,}67 \cdot 10^{-11} \cdot 60 \cdot 60 / 1^2 \approx 2{,}4 \cdot 10^{-7}$ Н — в миллиарды раз меньше нейтона. Для людей гравитация ничтожна. Но для планет ($10^{24}$ кг) — главная сила во Вселенной. $r$ — расстояние между <b>центрами масс</b>, не между поверхностями.</p>
</div>
<div class="fcard">
<h3>Ускорение свободного падения</h3>
<div class="main-f">$g = \dfrac{GM}{R^2}$</div>
<p>Сила тяжести = $GMm/R^2 = mg$, значит $g = GM/R^2$ — зависит только от планеты, не от падающего тела. Марс легче Земли и меньше: $g_\text{Марс} = 3{,}7$ м/с². Юпитер огромен: $g_\text{Юп} = 25$ м/с² — тебя «приплющит» в 2,5 раза сильнее. Чем выше над поверхностью (больше $r$) — тем слабее $g$.</p>
</div>
<div class="fcard">
<h3>Первая космическая скорость</h3>
<div class="main-f">$v_1 = \sqrt{gR} \approx 7{,}9\,\text{км/с}$</div>
<p>Если пушка на горе выстрелит горизонтально со скоростью 7,9 км/с — ядро начнёт «падать» к Земле, но Земля «убегает» под ней так же быстро. Ядро в вечном падении — орбита! Это минимальная орбитальная скорость: $mg = mv^2/R$ → $v_1 = \sqrt{gR}$. Реальные спутники летят чуть выше — нет атмосферы.</p>
</div>
<div class="fcard">
<h3>Вторая космическая скорость</h3>
<div class="main-f">$v_2 = \sqrt{2gR} \approx 11{,}2\,\text{км/с}$</div>
<p>При скорости $v_2 \approx 11{,}2$ км/с тело навсегда покидает Землю — кинетической энергии хватает, чтобы «выбраться» из гравитационной ямы. Именно с такой скоростью стартуют межпланетные зонды. Быстрее $v_2$ — улетаешь к другим планетам или из Солнечной системы. Медленнее — возвращаешься назад.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Ньютон заметил, что Луна падает на Земли так же, как яблоко — только «мимо». Луна движется так быстро по горизонтали, что, падая вниз, она «промахивается» мимо Земли. Это и есть орбита!</p>
<p>Закон работает <b>между любыми телами</b>: притягиваются две книги на столе, два облака, две галактики. Просто при малых массах сила крошечная.</p>
<p>Ключевой факт: сила падает как $1/r^2$. Увеличь расстояние в 2 раза — сила уменьшится в <b>4 раза</b>.</p>
</div>
<!-- Интерактив: закон тяготения -->
<div class="idiag">
<h3><i class="fas fa-satellite"></i> Интерактив: сила тяготения</h3>
<div class="slider-row">
<span class="slider-lbl">m₁, кг:</span>
<input type="range" min="1" max="100" value="50" id="sl23m1" oninput="upd23()">
<span class="slider-val" id="v23m1">50 кг</span>
</div>
<div class="slider-row">
<span class="slider-lbl">m₂, кг:</span>
<input type="range" min="1" max="100" value="50" id="sl23m2" oninput="upd23()">
<span class="slider-val" id="v23m2">50 кг</span>
</div>
<div class="slider-row">
<span class="slider-lbl">r, м:</span>
<input type="range" min="1" max="20" value="5" id="sl23r" oninput="upd23()">
<span class="slider-val" id="v23r">5 м</span>
</div>
<div class="cv-wrap"><canvas id="cv23" style="height:160px"></canvas></div>
<div class="idiag-result" id="res23">F = — Н</div>
</div>
<!-- Таблица планет -->
<div class="section-title" style="margin-top:6px"><i class="fas fa-solar-system"></i> Данные планет Солнечной системы</div>
<table class="mu-tbl">
<tr><th>Планета</th><th>M, кг</th><th>R, км</th><th>g, м/с²</th></tr>
<tr><td>Меркурий</td><td>3,3·10²³</td><td>2 440</td><td>3,7</td></tr>
<tr><td>Венера</td><td>4,9·10²⁴</td><td>6 050</td><td>8,9</td></tr>
<tr><td><b>Земля</b></td><td><b>6,0·10²⁴</b></td><td><b>6 370</b></td><td><b>9,8</b></td></tr>
<tr><td>Марс</td><td>6,4·10²³</td><td>3 390</td><td>3,7</td></tr>
<tr><td>Юпитер</td><td>1,9·10²⁷</td><td>71 490</td><td>25</td></tr>
<tr><td>Луна</td><td>7,3·10²²</td><td>1 737</td><td>1,6</td></tr>
</table>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-lightbulb"></i> Почему Луна не падает на Землю?</div>
<p>Луна постоянно «падает» на Землю — сила тяжести притягивает её. Но скорость Луны (~1 км/с) настолько велика, что она успевает «промахнуться»: Земля «уходит из-под ног» так же быстро, как Луна к ней приближается. Это и есть орбита.</p>
<p>Это объяснение принадлежит Ньютону — он придумал «пушку на горе», из которой можно выстрелить так, что ядро облетит Землю.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$F \propto m_1 m_2$ — вдвое тяжелее тело: сила вдвое больше.</li>
<li>$F \propto 1/r^2$ — вдвое дальше: сила <b>в четыре раза</b> меньше.</li>
<li>Первая космическая скорость: $v_1 \approx 7{,}9\,\text{км/с}$.</li>
<li>$G = 6{,}67 \cdot 10^{-11}\,\text{Н}{\cdot}\text{м}^2/\text{кг}^2$ — запомнить значение!</li>
</ul>
</div>
<ol class="q-list">
<li>Как изменится сила тяготения, если расстояние между телами уменьшить в 3 раза?</li>
<li>Что такое первая космическая скорость и как она связана с $g$ и $R$?</li>
<li>Почему ускорение свободного падения на разных планетах разное?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §24 — ВЕС ТЕЛА. НЕВЕСОМОСТЬ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref24">
<div class="para-hero ph-24">
<div class="ph-label">§24 · Физика 9 кл</div>
<h2>Вес тела. Невесомость</h2>
<div class="ph-formula">$P = m(g \pm a)$</div>
<div class="ph-desc">Вес — это сила, с которой тело давит на опору или растягивает подвес. При ускорении тело «тяжелеет» или «легчает». При свободном падении — полная невесомость.</div>
<div class="ph-tags">
<span class="ph-tag">⬆️ лифт вверх: P > mg</span>
<span class="ph-tag">⬇️ лифт вниз: P &lt; mg</span>
<span class="ph-tag">🕳️ a = g: P = 0</span>
</div>
</div>
<div class="section-title"><i class="fas fa-weight-hanging"></i> §24. Вес тела. Невесомость</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Вес тела при ускорении</h3>
<div class="main-f">$P = m(g + a)$ — лифт вверх ($a > 0$)</div>
<div class="main-f">$P = m(g - a)$ — лифт вниз ($a > 0$)</div>
<p>Вес — это не то же самое, что сила тяжести! Вес $\vec{P}$ — сила на опору, сила тяжести $\vec{F}_\text{т} = m\vec{g}$ — всегда одна и та же.</p>
</div>
<div class="fcard">
<h3>Невесомость</h3>
<div class="main-f">$a = g \Rightarrow P = 0$</div>
<p>Невесомость — не «нет гравитации», а «нет опоры». Стоишь на полу — пол давит снизу, ты его чувствуешь. Если пол исчезнет (лифт в свободном падении) — давить нечему, весы покажут 0. Твоя масса и $g$ никуда не делись, но опоры нет → веса нет → невесомость. Именно так на МКС: станция постоянно «падает» вокруг Земли.</p>
</div>
<div class="fcard">
<h3>Перегрузка</h3>
<div class="main-f">$Q = P/(mg) = (g+a)/g$</div>
<p>$Q = P/(mg)$: сколько «своих весов» ты ощущаешь. В покое $Q = 1$ (норма). Лифт разгоняется вверх: $Q > 1$ — ты тяжелее. Ракетный старт: $Q = 3{-}4$ — тело давит на кресло с утроенной силой. Отрицательная перегрузка ($Q < 0$): лифт падает быстрее $g$ тебя отрывает от пола. Предел выносимости человека: ~9g кратковременно.</p>
</div>
<div class="fcard">
<h3>Пример: лифт</h3>
<div class="main-f">$m = 60\,\text{кг},\; a = 2\,\text{м/с}^2$</div>
<p>Вверх: $P = 60(10+2) = 720\,\text{Н}$ (тяжелее)<br>
Вниз: $P = 60(10-2) = 480\,\text{Н}$ (легче)<br>
Без ускорения: $P = 60\cdot10 = 600\,\text{Н}$</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Ты стоишь в лифте. Лифт трогается вверх — ты чувствуешь, что стал <b>тяжелее</b>. Пол давит на тебя сильнее. Весы покажут больше. Это и есть увеличение веса: $P = m(g + a)$.</p>
<p>Лифт едет вниз с ускорением — ты чувствуешь, что стал <b>легче</b>. Если трос обрежут (свободное падение) — ты взлетишь к потолку. Вес = 0. Невесомость!</p>
<p><b>Ключевое:</b> вес и сила тяжести — разные вещи. Сила тяжести $mg$ всегда одна и та же. Вес зависит от ускорения.</p>
</div>
<!-- Интерактив: лифт -->
<div class="idiag">
<h3><i class="fas fa-elevator"></i> Интерактив: лифт</h3>
<div class="slider-row">
<span class="slider-lbl">Масса m, кг:</span>
<input type="range" min="10" max="120" value="60" id="sl24m" oninput="upd24()">
<span class="slider-val" id="v24m">60 кг</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Ускорение a:</span>
<input type="range" min="-10" max="10" value="0" id="sl24a" oninput="upd24()">
<span class="slider-val" id="v24a">0 м/с²</span>
</div>
<div class="cv-wrap"><canvas id="cv24" style="height:200px"></canvas></div>
<div class="idiag-result" id="res24">P = — Н | F_т = — Н</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🚀</div><div class="li-title">Старт ракеты</div><div class="li-desc">Космонавт при старте испытывает 3–4g. Тело весит в 3–4 раза больше нормы</div></div>
<div class="life-item"><div class="li-icon">🛗</div><div class="li-title">Лифт</div><div class="li-desc">Каждый день испытываешь перегрузку/невесомость при разгоне/торможении</div></div>
<div class="life-item"><div class="li-icon">✈️</div><div class="li-title">Самолёт</div><div class="li-desc">В «яме» воздушной ямы самолёт резко снижается — пассажиры чувствуют невесомость</div></div>
<div class="life-item"><div class="li-icon">🎢</div><div class="li-title">Американские горки</div><div class="li-desc">На верхней части петли — отрицательная перегрузка. Кровь приливает к голове</div></div>
<div class="life-item"><div class="li-icon">🌌</div><div class="li-title">МКС</div><div class="li-desc">Станция находится в постоянном свободном падении вокруг Земли — отсюда невесомость</div></div>
<div class="life-item"><div class="li-icon">🏋️</div><div class="li-title">Прыжок с парашютом</div><div class="li-desc">Первые секунды свободного падения — невесомость. Парашют раскрылся — перегрузка</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-lightbulb"></i> МКС — почему невесомость?</div>
<p>Многие думают: на МКС невесомость, потому что «далеко от Земли» и нет гравитации. Но на высоте 400 км гравитация составляет ~88% от земной! Невесомость — потому что станция <b>постоянно падает</b> вокруг Земли. Это и есть орбитальный полёт.</p>
<p>Космонавты — парашютисты, которые никогда не приземляются.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Вес $P \neq$ сила тяжести $F_\text{т} = mg$. Вес зависит от ускорения, сила тяжести — нет.</li>
<li>Ускорение вверх → $P = m(g+a)$ — перегрузка.</li>
<li>Ускорение вниз → $P = m(g-a)$ — облегчение.</li>
<li>$a = g$ (свободное падение) → $P = 0$ — невесомость.</li>
</ul>
</div>
<ol class="q-list">
<li>Чем отличается вес тела от силы тяжести?</li>
<li>Почему космонавты на орбите испытывают невесомость, хотя гравитация там есть?</li>
<li>Человек массой $m = 70\,\text{кг}$ в лифте. Лифт движется вниз с $a = 3\,\text{м/с}^2$. Каков его вес?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §25 — МОМЕНТ СИЛЫ. УСЛОВИЯ РАВНОВЕСИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref25">
<div class="para-hero ph-25">
<div class="ph-label">§25 · Физика 9 кл</div>
<h2>Условия равновесия тел. Момент силы</h2>
<div class="ph-formula">$M = F \cdot l;\quad \sum \vec{F} = \vec{0};\quad \sum M = 0$</div>
<div class="ph-desc">Тело в равновесии — если нет ни поступательного, ни вращательного движения. Момент силы — это «вращательный эффект» силы. Чем длиннее плечо, тем легче повернуть.</div>
<div class="ph-tags">
<span class="ph-tag">📐 [M] = Н·м</span>
<span class="ph-tag">⚖️ ΣM = 0</span>
<span class="ph-tag">↔️ ΣF = 0</span>
</div>
</div>
<div class="section-title"><i class="fas fa-balance-scale"></i> §25. Момент силы. Условия равновесия</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Момент силы</h3>
<div class="main-f">$M = F \cdot l$</div>
<p>$F$ — сила (Н), $l$ — <b>плечо</b> (м) — перпендикуляр от оси вращения до <em>линии действия</em> силы (не до точки приложения!). Тот же болт, та же сила — но длинный ключ даёт больший момент → легче открутить. Удвоил плечо — удвоил момент при той же силе. $[M] = \text{Н}{\cdot}\text{м}$.</p>
</div>
<div class="fcard">
<h3>Знак момента</h3>
<div class="main-f">$M = {+}F l$ или $M = {-}F l$</div>
<p>Чтобы условие равновесия $\sum M = 0$ работало, моментам нужен знак. Договоримся: <b>«+»</b> — против часовой стрелки (правило буравчика: палец вверх — ладонь против часовой). <b>«−»</b> — по часовой. Один груз на качелях «крутит» в одну сторону (+), второй — в другую (−). Баланс: суммарный момент = 0.</p>
</div>
<div class="fcard">
<h3>1-е условие равновесия (поступат.)</h3>
<div class="main-f">$\vec{F}_1 + \vec{F}_2 + \ldots = \vec{0}$</div>
<p>Книга на столе: сила тяжести вниз + реакция стола вверх = 0 → покой. Люстра на потолке: тяжесть вниз + натяжение троса вверх = 0 → висит. Это условие не допускает ускорения: ни влево-вправо, ни вперёд-назад, ни вверх-вниз. Нарушишь — тело начнёт лететь.</p>
</div>
<div class="fcard">
<h3>2-е условие равновесия (вращат.)</h3>
<div class="main-f">$M_1 + M_2 + \ldots = 0$</div>
<p>Даже если все силы уравновешены (1-е условие), тело может вращаться — если их моменты не компенсируют друг друга. Кран: трос тянет вниз слева (момент +), противовес давит вниз справа (момент −). Сумма = 0 → не вращается. Нарушь баланс моментов — кран начнёт заваливаться.</p>
</div>
</div>
<!-- Интерактивные качели -->
<div class="idiag">
<h3>🎚️ Интерактив: балансирующие качели</h3>
<p style="font-size:.79rem;color:var(--muted);margin-bottom:8px">Двигай плечи — качели наклоняются! Найди баланс: $M_1 = M_2$</p>
<div class="slider-row">
<span class="slider-lbl">Плечо $l_1$ (синий, 4 кг):</span>
<input type="range" min="1" max="20" value="8" id="sl25l1" oninput="upd25()">
<span class="slider-val" id="v25l1">0.8 м</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Плечо $l_2$ (оранж., 6 кг):</span>
<input type="range" min="1" max="20" value="6" id="sl25l2" oninput="upd25()">
<span class="slider-val" id="v25l2">0.6 м</span>
</div>
<div class="idiag-result" id="res25">M₁ = 32 Н·м | M₂ = 36 Н·м — наклон вправо</div>
<div class="cv-wrap" style="margin-top:8px">
<canvas id="cv25" style="height:180px"></canvas>
</div>
</div>
<!-- Жизненные примеры -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Момент силы в жизни</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🔧</div><div class="li-title">Гаечный ключ</div><div class="li-desc">Длинная ручка = большое плечо → меньше силы нужно для того же момента</div></div>
<div class="life-item"><div class="li-icon">🚪</div><div class="li-title">Ручка двери</div><div class="li-desc">Ручка у края: $l$ велико → легко открыть. Толкать у петель: $l$ мало → очень тяжело!</div></div>
<div class="life-item"><div class="li-icon">🏗️</div><div class="li-title">Башенный кран</div><div class="li-desc">Противовес сзади уравновешивает груз спереди: $M_1 = M_2$</div></div>
<div class="life-item"><div class="li-icon">🎡</div><div class="li-title">Качели</div><div class="li-desc">Тяжёлый ребёнок сидит ближе к центру, лёгкий — дальше. $F_1 l_1 = F_2 l_2$</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-bolt"></i> Почему трудно открыть дверь, толкая у петель?</div>
<p>Попробуй открыть дверь, нажав вблизи петель — почти невозможно! Плечо $l$ очень маленькое, значит момент $M = F \cdot l$ тоже мал при той же силе.</p>
<p>Поэтому ручки всегда ставят <b>максимально далеко от петель</b> — чтобы создавать большой момент небольшой силой.</p>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-ruler"></i> Как найти плечо «косой» силы?</div>
<p>Плечо — это <b>перпендикуляр</b> из оси вращения на <b>линию действия</b> силы (не на саму стрелку). Если сила приложена под углом, плечо $l = d \cdot \sin\alpha$, где $d$ — расстояние от оси до точки приложения.</p>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Представь качели. Слева сел тяжёлый человек (60 кг × 1 м = 60 Н·м), справа лёгкий ребёнок (30 кг). Чтобы сбалансировать — ребёнок должен сесть на 2 м от оси: $30 \cdot 2 = 60$ Н·м. Моменты равны — качели в равновесии. Это и есть условие $\sum M = 0$.</p>
<p>Ключевая ловушка: плечо — это не расстояние до <em>точки приложения</em> силы, а перпендикуляр до <em>линии действия</em>. Если сила приложена под углом — плечо короче, чем кажется. Именно поэтому «косая» сила создаёт меньший момент, чем «прямая» та же сила на том же расстоянии.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Два условия равновесия: <b>ΣF = 0</b> (нет поступательного движения) и <b>ΣM = 0</b> (нет вращения).</li>
<li>Плечо — это <b>перпендикуляр</b> от оси до линии действия силы, а не до точки приложения!</li>
<li>$[M] = \text{Н}{\cdot}\text{м}$ — единица момента силы.</li>
</ul>
</div>
<ol class="q-list">
<li>Что называется плечом силы? Как его найти?</li>
<li>Запиши оба условия равновесия тела.</li>
<li>Почему длинный гаечный ключ эффективнее короткого?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §26 — РЫЧАГИ И БЛОКИ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref26">
<div class="para-hero ph-26">
<div class="ph-label">§26 · Физика 9 кл</div>
<h2>Простые механизмы. Рычаги. Блоки</h2>
<div class="ph-formula">$F_1 \cdot l_1 = F_2 \cdot l_2;\quad \dfrac{F_2}{F_1} = \dfrac{l_1}{l_2}$</div>
<div class="ph-desc">Рычаг — это «умножитель силы»: выигрываешь в силе во столько раз, во сколько одно плечо длиннее другого. Но в расстоянии ты проигрываешь ровно столько же!</div>
<div class="ph-tags">
<span class="ph-tag">⚖️ F₁l₁ = F₂l₂</span>
<span class="ph-tag">🔄 блок меняет направление</span>
<span class="ph-tag">📏 выигрыш = l₁/l₂</span>
</div>
</div>
<div class="section-title"><i class="fas fa-tools"></i> §26. Рычаги и блоки</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Условие равновесия рычага</h3>
<div class="main-f">$F_1 \cdot l_1 = F_2 \cdot l_2$</div>
<p>Плечо нагрузки 0,2 м, плечо твоей силы 1 м → выигрыш = 5: тянешь с силой 100 Н, а поднимаешь груз 500 Н. Но! Твоя рука переместится в 5 раз дальше груза — работа не меняется ($F_1 \cdot s_1 = F_2 \cdot s_2$). Рычаг не создаёт энергию — только перераспределяет силу и расстояние.</p>
</div>
<div class="fcard">
<h3>Рычаг 1-го рода</h3>
<div class="main-f">ось между силами</div>
<p>Точка опоры — посередине, силы — по разные стороны. Качели: один толкает вниз слева, другой справа — точка опоры в центре. Ножницы: два лезвия, ось посередине. Лом под камень: камень давит вниз с одной стороны, ты тянешь вниз с другой — оба «вниз», но по разные стороны оси → противоположные моменты.</p>
</div>
<div class="fcard">
<h3>Неподвижный блок</h3>
<div class="main-f">выигрыш = 1</div>
<p>Ось блока закреплена. Верёвка меняет направление: тянешь вниз — груз идёт вверх. В силе выигрыша нет: сила нужна равная весу груза. Но удобство огромное: легче тянуть вниз (своим весом), чем поднимать вверх с напряжением мышц. Именно поэтому блок на колодце.</p>
</div>
<div class="fcard">
<h3>Подвижный блок</h3>
<div class="main-f">выигрыш = 2 (в силе)</div>
<p>Ось блока движется вместе с грузом — верёвка идёт сразу с двух сторон. Груз 100 кг = 1000 Н, а тянешь всего 500 Н — вдвое легче! Но верёвку надо вытянуть на 2 метра, чтобы груз поднялся на 1 метр. Работа та же: $500 \cdot 2 = 1000 \cdot 1$. «Золотое правило»: что выиграл в силе — проиграл в расстоянии.</p>
</div>
</div>
<!-- Рычаг: интерактив -->
<div class="idiag">
<h3>🎚️ Интерактив: сила нужна меньше при длинном плече!</h3>
<div class="slider-row">
<span class="slider-lbl">Плечо нагрузки $l_2$:</span>
<input type="range" min="1" max="10" value="3" id="sl26l2" oninput="upd26()">
<span class="slider-val" id="v26l2">0.3 м</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Плечо силы $l_1$:</span>
<input type="range" min="3" max="20" value="9" id="sl26l1" oninput="upd26()">
<span class="slider-val" id="v26l1">0.9 м</span>
</div>
<div class="idiag-result" id="res26">F = 167 Н | Выигрыш = 3.0× | Нагрузка 50 кг</div>
<div class="cv-wrap" style="margin-top:8px">
<canvas id="cv26" style="height:160px"></canvas>
</div>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">Увеличивай $l_1$ — стрелка силы уменьшается. Чем длиннее плечо, тем меньше нужно сил!</p>
</div>
<!-- Жизненные примеры -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Рычаги вокруг нас</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">✂️</div><div class="li-title">Ножницы</div><div class="li-desc">Рычаг 1-го рода. Длинные ручки и короткие лезвия — выигрыш в силе для резки</div></div>
<div class="life-item"><div class="li-icon">🚜</div><div class="li-title">Лом под камень</div><div class="li-desc">Маленькое усилие на длинном конце — огромная сила на коротком конце у камня</div></div>
<div class="life-item"><div class="li-icon">🪣</div><div class="li-title">Колодец</div><div class="li-desc">Блок на колодце меняет направление силы — тянуть вниз удобнее, чем поднимать вверх</div></div>
<div class="life-item"><div class="li-icon">🏗️</div><div class="li-title">Строительный кран</div><div class="li-desc">Подвижные блоки дают выигрыш в силе, позволяя поднимать тонны</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-brain"></i> «Золотое правило механики»</div>
<p>Любой механизм — рычаг, блок, наклонная плоскость — даёт выигрыш <b>либо в силе, либо в расстоянии</b>, но никогда — в работе.</p>
<p>Выиграл в силе в $n$ раз → проиграл в пути в $n$ раз. Работа: $A = F \cdot s$ — остаётся той же.</p>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Архимед говорил: «Дайте мне точку опоры — и я переверну Землю». Рычаг с достаточно длинным плечом может создать любую силу. Но для этого нужно двигать ручку очень далеко. Поднять Землю на 1 нанометр потребовало бы, чтобы ты перемещал свою руку на сотни световых лет.</p>
<p>Именно это и есть «золотое правило механики»: <b>выигрываешь в силе — проигрываешь в пути</b>. Работа не меняется. Поэтому вечного двигателя не бывает — любой механизм лишь перераспределяет, но не создаёт энергию.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Рычаг: $F_1 l_1 = F_2 l_2$ — момент сил с обеих сторон равен (равновесие).</li>
<li><b>Неподвижный</b> блок — меняет направление, выигрыш = 1.</li>
<li><b>Подвижный</b> блок — выигрыш = 2 (сила в 2 раза меньше, путь в 2 раза длиннее).</li>
</ul>
</div>
<ol class="q-list">
<li>Сформулируй условие равновесия рычага.</li>
<li>Чем отличается подвижный блок от неподвижного?</li>
<li>Как получить выигрыш в силе 4 раза с помощью блоков?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §27 — КПД. НАКЛОННАЯ ПЛОСКОСТЬ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref27">
<div class="para-hero ph-27">
<div class="ph-label">§27 · Физика 9 кл</div>
<h2>Наклонная плоскость. «Золотое правило». КПД</h2>
<div class="ph-formula">$\dfrac{F_2}{F} = \dfrac{h}{l};\quad \eta = \dfrac{A_\text{пол}}{A_\text{затр}} \cdot 100\%$</div>
<div class="ph-desc">Наклонная плоскость уменьшает нужную силу, но удлиняет путь. КПД показывает, какую долю работы мы используем с пользой — всегда меньше 100% из-за трения.</div>
<div class="ph-tags">
<span class="ph-tag">📏 выигрыш = l/h</span>
<span class="ph-tag">⚡ КПД &lt; 100%</span>
<span class="ph-tag">🔄 золотое правило</span>
</div>
</div>
<div class="section-title"><i class="fas fa-mountain"></i> §27. Наклонная плоскость и КПД</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Наклонная плоскость (без трения)</h3>
<div class="main-f">$F_2 = F \cdot \dfrac{h}{l}$</div>
<p>$F = mg$ — вес груза, $l$ — длина плоскости, $h$ — высота.</p>
<p>Выигрыш в силе: $l/h$ (во столько раз меньше нужная сила).</p>
</div>
<div class="fcard">
<h3>КПД механизма</h3>
<div class="main-f">$\eta = \dfrac{A_\text{полез}}{A_\text{затрач}} \cdot 100\%$</div>
<p>$A_\text{полез} = mgh$ — работа против силы тяжести.</p>
<p>$A_\text{затрач} = F_2 \cdot l$ — работа приложенной силы.</p>
<p>Всегда: $\eta < 100\%$</p>
</div>
<div class="fcard">
<h3>«Золотое правило механики»</h3>
<div class="main-f">$A_\text{затрач} \geq A_\text{полез}$</div>
<p>Ни один механизм не даёт выигрыша в работе. Выигрываешь в силе — проигрываешь в пути.</p>
<p>$F_2 \cdot l = mg \cdot h$ — идеально (без трения)</p>
</div>
<div class="fcard">
<h3>Силы на наклонной плоскости</h3>
<div class="main-f">$N = mg\cos\alpha;\quad F_\text{тр} = \mu N$</div>
<p>Компонента вдоль плоскости: $mg\sin\alpha$ (надо преодолеть, чтобы двигаться).</p>
<p>С трением: $F_2 = mg\sin\alpha + \mu mg\cos\alpha$</p>
</div>
</div>
<!-- Наклонная плоскость: интерактив -->
<div class="idiag">
<h3>🎚️ Интерактив: угол наклона → нужная сила</h3>
<div class="slider-row">
<span class="slider-lbl">Угол $\alpha$:</span>
<input type="range" min="5" max="70" value="20" id="sl27a" oninput="upd27()">
<span class="slider-val" id="v27a">20°</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Масса $m$:</span>
<input type="range" min="5" max="50" value="20" id="sl27m" oninput="upd27()">
<span class="slider-val" id="v27m">20 кг</span>
</div>
<div class="idiag-result" id="res27">F = 68 Н (против 200 Н напрямую) | Выигрыш = 2.9×</div>
<div class="cv-wrap" style="margin-top:8px">
<canvas id="cv27" style="height:180px"></canvas>
</div>
<p style="font-size:.78rem;color:var(--muted);margin-top:6px">Меньше угол = больше выигрыш в силе. Но путь становится длиннее!</p>
</div>
<!-- КПД интерактив -->
<div class="idiag" style="margin-top:12px">
<h3>📊 КПД: полезная и затраченная работа</h3>
<div class="slider-row">
<span class="slider-lbl">Коэфф. трения $\mu$:</span>
<input type="range" min="0" max="40" value="15" id="sl27mu" oninput="upd27mu()">
<span class="slider-val" id="v27mu">0.15</span>
</div>
<div class="idiag-result" id="res27mu">КПД = 79% | Потери на трение: 21%</div>
<div class="cv-wrap" style="margin-top:6px">
<canvas id="cv27eff" style="height:70px"></canvas>
</div>
<p style="font-size:.78rem;color:var(--muted);margin-top:4px">↑ μ = больше трение = меньше КПД. При $\mu = 0$ (идеальный механизм) КПД = 100%.</p>
</div>
<!-- Жизненные примеры -->
<div class="section-title" style="margin-top:14px"><i class="fas fa-lightbulb"></i> Наклонная плоскость в жизни</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon"></div><div class="li-title">Пандус</div><div class="li-desc">Длинный пологий пандус = большой $l/h$ → инвалидное кресло закатить легче</div></div>
<div class="life-item"><div class="li-icon">🔩</div><div class="li-title">Шуруп</div><div class="li-desc">Резьба — это наклонная плоскость, «закрученная» вокруг стержня. $l/h$ очень велико</div></div>
<div class="life-item"><div class="li-icon">🪓</div><div class="li-title">Топор / клин</div><div class="li-desc">Острый клин = малый угол α → огромный выигрыш в силе при ударе</div></div>
<div class="life-item"><div class="li-icon">🛣️</div><div class="li-title">Серпантин дорог</div><div class="li-desc">Горный серпантин — очень длинная «наклонная плоскость» с малым углом</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-fire"></i> Почему КПД не бывает 100%?</div>
<p>Всегда есть <b>трение</b> в механизмах: блоки, подшипники, поверхности — всё это «ворует» часть работы и превращает её в тепло.</p>
<p>КПД 80-90% — хороший механизм. КПД < 50% плохой. Задача инженеров смазывать, полировать, выбирать материалы с малым $\mu$.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Выигрыш наклонной плоскости = $l/h$ (длина/высота).</li>
<li>КПД: $\eta = \frac{A_\text{пол}}{A_\text{затр}} \cdot 100\% < 100\%$ всегда (из-за трения).</li>
<li>«Золотое правило»: выигрываешь в силе в $n$ раз → проигрываешь в пути в $n$ раз.</li>
</ul>
</div>
<ol class="q-list">
<li>В чём состоит «золотое правило механики»?</li>
<li>Что такое КПД? Может ли он быть больше 100%?</li>
<li>Во сколько раз наклонная плоскость $l = 5\,\text{м}$, $h = 1\,\text{м}$ уменьшает нужную силу?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §28 — ЦЕНТР ТЯЖЕСТИ. ВИДЫ РАВНОВЕСИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref28">
<div class="para-hero ph-28">
<div class="ph-label">§28 · Физика 9 кл</div>
<h2>Центр тяжести. Виды равновесия</h2>
<div class="ph-formula">$x_c = \dfrac{\sum m_i x_i}{\sum m_i};\quad y_c = \dfrac{\sum m_i y_i}{\sum m_i}$</div>
<div class="ph-desc">Центр тяжести — точка, через которую проходит равнодействующая всех сил тяжести, действующих на тело. Устойчивость тела зависит от положения центра тяжести и площади опоры.</div>
<div class="ph-tags">
<span class="ph-tag">⬆️ устойчивое: ЦТ снизу</span>
<span class="ph-tag">↕️ неустойчивое: ЦТ сверху</span>
<span class="ph-tag">🔄 безразличное: ЦТ = ось</span>
</div>
</div>
<div class="section-title"><i class="fas fa-balance-scale"></i> §28. Центр тяжести. Виды равновесия</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Центр тяжести (ЦТ)</h3>
<div class="main-f">$x_c = \dfrac{m_1 x_1 + m_2 x_2}{m_1 + m_2}$</div>
<p>Точка, в которой можно считать сосредоточенной всю массу тела при вычислении действия силы тяжести.</p>
</div>
<div class="fcard">
<h3>Устойчивое равновесие</h3>
<div class="main-f">ЦТ — <b>ниже</b> точки опоры</div>
<p>При отклонении тело возвращается в исходное положение. Пример: маятник, кресло-качалка.</p>
</div>
<div class="fcard">
<h3>Неустойчивое равновесие</h3>
<div class="main-f">ЦТ — <b>выше</b> точки опоры</div>
<p>При малейшем отклонении тело падает. Пример: карандаш на острие, пирамида вверх ногами.</p>
</div>
<div class="fcard">
<h3>Безразличное равновесие</h3>
<div class="main-f">ЦТ = ось вращения</div>
<p>При отклонении тело остаётся в новом положении. Пример: однородный шар, колесо.</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Представь неваляшку. Как бы ты её ни толкнул — она возвращается. Потому что её центр тяжести <b>очень низко</b> (снизу тяжёлый груз). Это устойчивое равновесие.</p>
<p>А теперь попробуй поставить карандаш на острие. Почти невозможно — центр тяжести <b>выше точки опоры</b>. Малейшее отклонение — и он падает. Неустойчивое равновесие.</p>
<p><b>Правило устойчивости:</b> чем <b>ниже ЦТ</b> и <b>шире площадь опоры</b>, тем устойчивее тело. Поэтому у грузовика широкая колея и низкий центр масс.</p>
</div>
<!-- Интерактив: 3 вида равновесия -->
<div class="idiag">
<h3><i class="fas fa-balance-scale-right"></i> Интерактив: виды равновесия</h3>
<div class="slider-row">
<span class="slider-lbl">Тип:</span>
<input type="range" min="0" max="2" step="1" value="0" id="sl28type" oninput="upd28()">
<span class="slider-val" id="v28type">Устойчивое</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Угол отклонения:</span>
<input type="range" min="-40" max="40" value="0" id="sl28angle" oninput="upd28()">
<span class="slider-val" id="v28angle"></span>
</div>
<div class="cv-wrap"><canvas id="cv28" style="height:220px"></canvas></div>
<div class="idiag-result" id="res28">Устойчивое равновесие — тело вернётся!</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🏗️</div><div class="li-title">Башенный кран</div><div class="li-desc">Тяжёлый противовес сзади — снижает ЦТ и не даёт упасть вперёд</div></div>
<div class="life-item"><div class="li-icon">🚗</div><div class="li-title">Гоночный автомобиль</div><div class="li-desc">Очень низкий кузов — центр тяжести у земли для максимальной устойчивости в поворотах</div></div>
<div class="life-item"><div class="li-icon"></div><div class="li-title">Парусник</div><div class="li-desc">Тяжёлый киль снизу — устойчивость. Без киля парусник бы перевернулся</div></div>
<div class="life-item"><div class="li-icon">🤸</div><div class="li-title">Гимнаст</div><div class="li-desc">Стойка на руках — неустойчивое равновесие. Мышцы постоянно корректируют ЦТ</div></div>
<div class="life-item"><div class="li-icon">🪆</div><div class="li-title">Неваляшка</div><div class="li-desc">ЦТ очень низко — устойчивое равновесие. Сколько ни толкай — встанет</div></div>
<div class="life-item"><div class="li-icon">🚜</div><div class="li-title">Трактор</div><div class="li-desc">Широкие гусеницы и низкий ЦТ — не перевернётся на склоне</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-lightbulb"></i> Пизанская башня не падает — почему?</div>
<p>Башня накренена под углом ~4°. Казалось бы — должна упасть. Но центр тяжести башни всё ещё находится <b>внутри площади опоры</b> (фундамента). Как только ЦТ выйдет за её границу — башня упадёт.</p>
<p>Реставраторы укрепляли фундамент с более высокой стороны, чтобы чуть «выпрямить» башню и вернуть ЦТ подальше от края.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>ЦТ ниже опоры → устойчивое равновесие.</li>
<li>ЦТ выше опоры → неустойчивое.</li>
<li>ЦТ = ось → безразличное.</li>
<li>Тело устойчиво, если вертикаль через ЦТ проходит <b>внутри площади опоры</b>.</li>
</ul>
</div>
<ol class="q-list">
<li>Почему гоночные автомобили делают с низким центром тяжести?</li>
<li>Назовите пример устойчивого, неустойчивого и безразличного равновесия из жизни.</li>
<li>При каком условии тело, стоящее на наклонной поверхности, не опрокидывается?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §29 — ЗАКОН АРХИМЕДА. ПЛАВАНИЕ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref29">
<div class="para-hero ph-29">
<div class="ph-label">§29 · Физика 9 кл</div>
<h2>Закон Архимеда. Плавание тел</h2>
<div class="ph-formula">$F_\text{выт} = \rho_\text{ж} g V_\text{погр}$</div>
<div class="ph-desc">На тело, погружённое в жидкость или газ, действует выталкивающая сила, равная весу вытесненной жидкости. Тело плавает, если его средняя плотность меньше плотности жидкости.</div>
<div class="ph-tags">
<span class="ph-tag">🌊 [F_выт] = Н</span>
<span class="ph-tag">⬆️ плавает: ρ_тела &lt; ρ_жидк</span>
<span class="ph-tag">⬇️ тонет: ρ_тела &gt; ρ_жидк</span>
</div>
</div>
<div class="section-title"><i class="fas fa-water"></i> §29. Закон Архимеда. Плавание тел</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Закон Архимеда</h3>
<div class="main-f">$F_\text{выт} = \rho_\text{ж} g V_\text{погр}$</div>
<p>$\rho_\text{ж}$ — плотность жидкости, $V_\text{погр}$ — объём погружённой части тела. Направление — вертикально вверх.</p>
</div>
<div class="fcard">
<h3>Условие плавания</h3>
<div class="main-f">$F_\text{выт} = mg \Leftrightarrow \rho_\text{тела} \leq \rho_\text{жидк}$</div>
<p>Тело плавает, когда выталкивающая сила уравновешивает силу тяжести. При этом часть тела может быть над водой.</p>
</div>
<div class="fcard">
<h3>Доля погружённой части</h3>
<div class="main-f">$\dfrac{V_\text{погр}}{V_\text{тела}} = \dfrac{\rho_\text{тела}}{\rho_\text{жидк}}$</div>
<p>Лёд ($\rho = 900\,\text{кг/м}^3$) в воде ($\rho = 1000$) погружён на $900/1000 = 90\%$. Над водой торчит лишь 10%.</p>
</div>
<div class="fcard">
<h3>Тонет или плывёт?</h3>
<div class="main-f">$\rho_\text{т} < \rho_\text{ж}$ — плавает</div>
<div class="main-f">$\rho_\text{т} > \rho_\text{ж}$ — тонет</div>
<div class="main-f">$\rho_\text{т} = \rho_\text{ж}$ — нейтральный подъём</div>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Почему деревянный кубик плавает, а стальной тонет? Дерево легче воды ($\rho_\text{дерева} \approx 600\,\text{кг/м}^3 < 1000$). Стальной кубик тяжелее воды ($\rho_\text{ст} \approx 7800 > 1000$).</p>
<p>Но стальной <b>корабль</b> плавает! Потому что внутри много воздуха. <b>Средняя</b> плотность корабля (металл + воздух внутри) меньше воды.</p>
<p>Секрет Архимеда: не важно, из чего тело. Важно, <b>сколько воды оно вытесняет</b>. Выталкивающая сила = вес этой воды.</p>
</div>
<!-- Интерактив: Архимед -->
<div class="idiag">
<h3><i class="fas fa-tint"></i> Интерактив: тело в жидкости</h3>
<div class="slider-row">
<span class="slider-lbl">ρ тела, кг/м³:</span>
<input type="range" min="200" max="2000" value="700" id="sl29rho" oninput="upd29()">
<span class="slider-val" id="v29rho">700 кг/м³</span>
</div>
<div class="slider-row">
<span class="slider-lbl">V тела, дм³:</span>
<input type="range" min="1" max="20" value="5" id="sl29v" oninput="upd29()">
<span class="slider-val" id="v29v">5 дм³</span>
</div>
<div class="cv-wrap"><canvas id="cv29" style="height:200px"></canvas></div>
<div class="idiag-result" id="res29">F_выт = — Н | F_т = — Н</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">🧊</div><div class="li-title">Айсберг</div><div class="li-desc">90% под водой, 10% видно. ρ льда = 900, ρ воды = 1000</div></div>
<div class="life-item"><div class="li-icon">🐟</div><div class="li-title">Рыбий пузырь</div><div class="li-desc">Рыба сжимает/расширяет пузырь, меняя свою среднюю плотность</div></div>
<div class="life-item"><div class="li-icon">🚢</div><div class="li-title">Корабль</div><div class="li-desc">Сталь + воздух. Средняя плотность меньше воды. Грузишь — погружается глубже</div></div>
<div class="life-item"><div class="li-icon">🎈</div><div class="li-title">Воздушный шар</div><div class="li-desc">Горячий воздух легче холодного — выталкивающая сила в воздухе!</div></div>
<div class="life-item"><div class="li-icon">🏊</div><div class="li-title">Мёртвое море</div><div class="li-desc">Солёность 30% — ρ = 1230 кг/м³. Человек всплывает сам</div></div>
<div class="life-item"><div class="li-icon">🔋</div><div class="li-title">Ареометр</div><div class="li-desc">Прибор для измерения плотности: плавает, по шкале читаешь ρ жидкости</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-lightbulb"></i> Как подводная лодка ныряет и всплывает?</div>
<p>У подводной лодки есть балластные цистерны. Чтобы нырнуть — заполняют водой (средняя плотность растёт, $\rho_\text{ср} > \rho_\text{воды}$, лодка тонет). Чтобы всплыть — продувают сжатым воздухом (выгоняют воду, $\rho_\text{ср} < \rho_\text{воды}$, лодка всплывает).</p>
<p>Это прямое применение закона Архимеда и условия плавания!</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>$F_\text{выт} = \rho_\text{ж} g V_\text{погр}$ — зависит от плотности <b>жидкости</b> и объёма <b>погружённой части</b>.</li>
<li>Тело плавает при $\rho_\text{тела} \leq \rho_\text{жидкости}$.</li>
<li>Лёд в воде: 10% над водой — потому что $\rho_\text{льда}/\rho_\text{воды} = 0{,}9$.</li>
<li>$F_\text{выт}$ не зависит от формы тела и глубины погружения (только от $V_\text{погр}$).</li>
</ul>
</div>
<ol class="q-list">
<li>От чего зависит архимедова сила? Как изменится $F_\text{выт}$, если тело перенести из воды в ртуть?</li>
<li>Почему стальной корабль плавает, а стальной гвоздь тонет?</li>
<li>Определите, потонет или всплывёт тело плотностью $1200\,\text{кг/м}^3$ в воде.</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §30 — ПЛАВАНИЕ СУДОВ. ВОЗДУХОПЛАВАНИЕ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref30">
<div class="para-hero ph-30">
<div class="ph-label">§30 · Физика 9 кл</div>
<h2>Плавание судов. Воздухоплавание</h2>
<div class="ph-formula">$\langle\rho\rangle = \dfrac{m_\text{судна}}{V_\text{судна}} < \rho_\text{воды}$</div>
<div class="ph-desc">Корабль плавает, потому что его средняя плотность (вместе с воздухом внутри) меньше воды. Воздушный шар летит, потому что вытесненный им воздух тяжелее шара с газом.</div>
<div class="ph-tags">
<span class="ph-tag">⚓ грузоподъёмность судна</span>
<span class="ph-tag">🎈 F_выт воздуха</span>
<span class="ph-tag">📏 осадка корабля</span>
</div>
</div>
<div class="section-title"><i class="fas fa-ship"></i> §30. Плавание судов. Воздухоплавание</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Условие плавания судна</h3>
<div class="main-f">$\langle\rho\rangle_\text{судна} = \dfrac{m_\text{т} + m_\text{груза}}{V_\text{корпуса}} < \rho_\text{воды}$</div>
<p>Средняя плотность = общая масса / полный объём корпуса. Пока $\langle\rho\rangle < 1000\,\text{кг/м}^3$ судно плавает.</p>
</div>
<div class="fcard">
<h3>Грузоподъёмность судна</h3>
<div class="main-f">$m_\text{груз}^{max} = \rho_\text{ж} V_\text{корп} - m_\text{судна}$</div>
<p>Максимальный груз — когда весь объём корпуса под водой. Ватерлиния не должна превышать борт.</p>
</div>
<div class="fcard">
<h3>Воздушный шар</h3>
<div class="main-f">$F_\text{подъём} = (\rho_\text{возд} - \rho_\text{газа})gV - mg_\text{обол}$</div>
<p>Шар поднимается, если подъёмная сила превышает вес оболочки и корзины. Горячий воздух ($\rho \approx 0{,}9\,\text{кг/м}^3$) легче холодного ($\rho = 1{,}29$).</p>
</div>
<div class="fcard">
<h3>Линия Плимсоля</h3>
<div class="main-f">метка на борту судна</div>
<p>Обязательная метка загрузки. Показывает максимально допустимую осадку в разных морях (солёная вода тяжелее пресной → корабль сидит выше).</p>
</div>
</div>
<div class="student-box">
<div class="student-box-title"><i class="fas fa-user-graduate"></i> Как это понять?</div>
<p>Возьми пустую жестяную банку. Она плавает — металл + воздух внутри = маленькая средняя плотность. Теперь наполни её водой — банка тонет.</p>
<p>Корабль работает так же. Огромный стальной корпус — как банка, только очень большая. Внутри воздух, каюты, машины. <b>Средняя</b> плотность корабля с воздухом — меньше воды. Загружаешь груз — осадка увеличивается.</p>
<p>Воздушный шар — такой же принцип, только в воздухе. Лёгкий газ (водород, гелий, горячий воздух) вытесняет тяжёлый атмосферный воздух. Разница в весе и есть подъёмная сила.</p>
</div>
<!-- Интерактив: корабль с грузом -->
<div class="idiag">
<h3><i class="fas fa-anchor"></i> Интерактив: корабль</h3>
<div class="slider-row">
<span class="slider-lbl">Масса судна, т:</span>
<input type="range" min="5" max="50" value="20" id="sl30ms" oninput="upd30()">
<span class="slider-val" id="v30ms">20 т</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Груз, т:</span>
<input type="range" min="0" max="30" value="5" id="sl30mg" oninput="upd30()">
<span class="slider-val" id="v30mg">5 т</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Объём корпуса, м³:</span>
<input type="range" min="10" max="100" value="40" id="sl30v" oninput="upd30()">
<span class="slider-val" id="v30v">40 м³</span>
</div>
<div class="cv-wrap"><canvas id="cv30" style="height:200px"></canvas></div>
<div class="idiag-result" id="res30">Осадка: — | ρ_ср = — кг/м³</div>
</div>
<div class="life-grid">
<div class="life-item"><div class="li-icon">⛴️</div><div class="li-title">Танкер</div><div class="li-desc">Гружёный — глубоко сидит. Пустой — высоко. Средняя плотность изменилась</div></div>
<div class="life-item"><div class="li-icon">🎈</div><div class="li-title">Монгольфьер</div><div class="li-desc">Первый воздушный шар (1783). Горячий воздух внутри — легче холодного снаружи</div></div>
<div class="life-item"><div class="li-icon">🛸</div><div class="li-title">Дирижабль</div><div class="li-desc">Гелий внутри — безопаснее водорода. Подъём = вытесненный воздух тяжелее гелия</div></div>
<div class="life-item"><div class="li-icon">🌊</div><div class="li-title">Осадка в морях</div><div class="li-desc">В солёном море (ρ=1025) судно сидит выше, чем в пресной воде (ρ=1000)</div></div>
<div class="life-item"><div class="li-icon">🏗️</div><div class="li-title">Подъём затонувших кораблей</div><div class="li-desc">Закачивают воздух в корпус — вытесняют воду, уменьшают среднюю плотность</div></div>
<div class="life-item"><div class="li-icon">🐙</div><div class="li-title">Кальмар</div><div class="li-desc">Nautilus (наутилус) — моллюск с камерой. Заполняет газом/жидкостью → регулирует плавучесть</div></div>
</div>
<div class="insight-box">
<div class="insight-title"><i class="fas fa-lightbulb"></i> Почему в солёной воде корабль «выше»?</div>
<p>Морская вода плотнее пресной ($\rho \approx 1025$ vs $1000\,\text{кг/м}^3$). Это значит, что для той же архимедовой силы нужен <b>меньший объём</b> погружённой части. Корабль «всплывает» немного выше при переходе из реки в море.</p>
<p>Именно поэтому на кораблях рисуют несколько линий Плимсоля: для Атлантики, для тропиков (горячая вода менее плотная), для пресных рек.</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-triangle"></i> Запомни!</div>
<ul>
<li>Судно плавает, если $\langle\rho\rangle_\text{судна} < \rho_\text{воды}$.</li>
<li>Загружая груз, увеличиваем $\langle\rho\rangle$ → судно глубже погружается.</li>
<li>Воздушный шар поднимается, если $(\rho_\text{возд} - \rho_\text{газа}) \cdot gV > mg_\text{оболочки}$.</li>
<li>В солёной воде судно сидит <b>выше</b>, чем в пресной.</li>
</ul>
</div>
<ol class="q-list">
<li>Почему стальной корабль плавает, хотя сталь тяжелее воды?</li>
<li>Как изменится осадка судна при переходе из моря в реку?</li>
<li>Какой газ легче заполняет воздушный шар: водород, гелий или горячий воздух? В чём их отличия?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §31 — ТЕОРИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref31">
<!-- Hero -->
<div class="para-hero ph-31">
<div class="ph-label">§31 · Физика 9 кл</div>
<h2>Импульс тела. Импульс системы тел</h2>
<div class="ph-formula">$\vec{p} = m\vec{v}$</div>
<div class="ph-desc">Импульс — это «количество движения»: учитывает и массу, и скорость сразу.<br>Изменить импульс может только внешняя сила, и только она.</div>
<div class="ph-tags">
<span class="ph-tag">⚡ связь с 2-м законом Ньютона</span>
<span class="ph-tag">📐 [p] = кг·м/с</span>
<span class="ph-tag">↗️ векторная величина</span>
</div>
</div>
<div class="section-title"><i class="fas fa-bolt"></i> §31. Импульс тела. Импульс системы тел</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Импульс тела</h3>
<div class="main-f">$\vec{p} = m\vec{v}$</div>
<p><b>Векторная</b> величина. Направление совпадает с $\vec{v}$.</p>
<p>Единица: $[p] = \text{кг}{\cdot}\text{м/с}$</p>
</div>
<div class="fcard">
<h3>Изменение импульса</h3>
<div class="main-f">$\Delta\vec{p} = \vec{F}\,\Delta t$</div>
<p>Изменение импульса тела равно <b>импульсу силы</b> $\vec{F}\,\Delta t$.</p>
<p>Также: $\dfrac{\Delta\vec{p}}{\Delta t} = \vec{F}$ — 2-й закон Ньютона.</p>
</div>
<div class="fcard">
<h3>Импульс системы тел</h3>
<div class="main-f">$\vec{p}_{\text{сист}} = \vec{p}_1 + \vec{p}_2 + \ldots$</div>
<p><b>Внутренние силы</b> — взаимодействие тел внутри системы.<br>
<b>Внешние силы</b> — действующие на систему снаружи.</p>
</div>
<div class="fcard">
<h3>Закон изменения импульса системы</h3>
<div class="main-f">$\Delta\vec{p}_{\text{сист}} = \vec{F}_{\text{внешн}}\,\Delta t$</div>
<p>Изменение импульса системы равно импульсу <b>результирующей внешних сил</b>.</p>
<p>Внутренние силы импульс системы <b>не изменяют</b>.</p>
</div>
</div>
<!-- ── СХЕМЫ §31 ── -->
<div class="idiag-2col">
<div class="idiag">
<h3>📌 Импульс — вектор вдоль скорости</h3>
<svg width="100%" viewBox="0 0 200 100" style="display:block;margin:0 auto">
<rect x="12" y="32" width="46" height="32" rx="8" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="2"/>
<text x="35" y="52" font-size="10" text-anchor="middle" fill="#1d4ed8" font-weight="700">m</text>
<line x1="58" y1="40" x2="100" y2="40" stroke="#0ea5e9" stroke-width="2.5"/>
<polygon points="100,40 89,35 89,45" fill="#0ea5e9"/>
<text x="79" y="33" font-size="9" fill="#0ea5e9" font-family="Inter" font-weight="700">v</text>
<line x1="58" y1="58" x2="138" y2="58" stroke="#1d4ed8" stroke-width="3.5"/>
<polygon points="138,58 125,53 125,63" fill="#1d4ed8"/>
<text x="97" y="73" font-size="9" fill="#1d4ed8" font-family="Inter" font-weight="700">p = mv</text>
<text x="148" y="37" font-size="8" fill="#0ea5e9" font-family="Inter">v</text>
<text x="148" y="60" font-size="8" fill="#1d4ed8" font-family="Inter">p</text>
<text x="148" y="48" font-size="10" fill="#64748b" font-family="Inter"></text>
<text x="10" y="95" font-size="7.5" fill="#64748b" font-family="Inter">p ∥ v · при большей m — p длиннее</text>
</svg>
</div>
<div class="idiag">
<h3>💥 Удар о стену: почему |Δp| = m(v₁+v₂)</h3>
<svg width="100%" viewBox="0 0 200 115" style="display:block;margin:0 auto">
<rect x="104" y="5" width="12" height="105" rx="3" fill="#94a3b8"/>
<text x="110" y="4" font-size="7" text-anchor="middle" fill="#64748b" font-family="Inter">стена</text>
<circle cx="58" cy="55" r="18" fill="#dbeafe" stroke="#1d4ed8" stroke-width="2"/>
<text x="58" y="59" font-size="10" text-anchor="middle" fill="#1d4ed8" font-weight="700">m</text>
<line x1="76" y1="42" x2="100" y2="42" stroke="#1d4ed8" stroke-width="2.5"/>
<polygon points="100,42 90,37 90,47" fill="#1d4ed8"/>
<text x="86" y="36" font-size="9" fill="#1d4ed8" font-family="Inter" font-weight="700">p₁</text>
<line x1="100" y1="68" x2="76" y2="68" stroke="#10b981" stroke-width="2.5"/>
<polygon points="76,68 86,63 86,73" fill="#10b981"/>
<text x="86" y="82" font-size="9" fill="#10b981" font-family="Inter" font-weight="700">p₂</text>
<text x="5" y="40" font-size="7.5" fill="#1d4ed8" font-family="Inter">+mv₁ →</text>
<text x="5" y="72" font-size="7.5" fill="#10b981" font-family="Inter">← -mv₂</text>
<rect x="4" y="86" width="88" height="22" rx="5" fill="rgba(239,68,68,.08)" stroke="#ef4444" stroke-width="1"/>
<text x="48" y="97" font-size="7.5" text-anchor="middle" fill="#991b1b" font-family="Inter" font-weight="700">|Δp| = m(v₁+v₂)</text>
<text x="48" y="107" font-size="7" text-anchor="middle" fill="#64748b" font-family="Inter">знаки противоположны!</text>
</svg>
</div>
</div>
<div class="idiag">
<h3>🎚️ Интерактив: p = mv — меняй параметры</h3>
<div class="slider-row">
<span class="slider-lbl">Масса $m$:</span>
<input type="range" min="1" max="20" value="5" id="sl31m" oninput="upd31()">
<span class="slider-val" id="v31m">5 кг</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Скорость $v$:</span>
<input type="range" min="1" max="30" value="10" id="sl31v" oninput="upd31()">
<span class="slider-val" id="v31v">10 м/с</span>
</div>
<div class="idiag-result" id="res31">p = 5 × 10 = <b style="font-size:1.1em;color:var(--pri)">50</b> кг·м/с</div>
<svg width="100%" viewBox="0 0 380 38" style="display:block;margin-top:8px">
<rect x="2" y="9" width="376" height="20" rx="6" fill="rgba(29,78,216,.07)" stroke="var(--border)" stroke-width="1"/>
<rect x="2" y="9" id="bar31" width="32" height="20" rx="6" fill="var(--pri)"/>
<text x="8" y="23" font-size="10" fill="white" font-weight="700" id="barlbl31">50 кг·м/с</text>
<text x="4" y="36" font-size="8" fill="var(--muted)" font-family="Inter">0</text>
<text x="376" y="36" font-size="8" fill="var(--muted)" font-family="Inter" text-anchor="end">600 кг·м/с</text>
</svg>
<p style="font-size:.75rem;color:var(--muted);margin-top:6px">💡 Попробуй: грузовик m=20 кг, v=30 м/с vs велосипедист m=2 кг, v=5 м/с — у кого импульс больше?</p>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-circle"></i> Запомни!</div>
<ul>
<li><b>Импульс — вектор.</b> Нельзя просто складывать числа, если тела движутся в разные стороны — нужно учитывать знак проекции на ось.</li>
<li>$\Delta\vec{p} = \vec{F}\,\Delta t$ — это и есть 2-й закон Ньютона в другой форме записи.</li>
<li>Внутренние силы <b>не меняют</b> импульс системы — только внешние.</li>
</ul>
</div>
<div class="mistakes-box">
<div class="mistakes-box-title"><i class="fas fa-triangle-exclamation"></i> Частые ошибки</div>
<ul>
<li>Путают импульс тела $p = mv$ с кинетической энергией $E_k = mv^2/2$ — это разные вещи.</li>
<li>При ударе мяча о стену берут $|\Delta p| = mv_2 - mv_1$ — забывают, что скорости противоположны, надо $m(v_2 + v_1)$.</li>
<li>Считают, что большая сила = большое изменение импульса. На самом деле важно произведение $F \cdot \Delta t$.</li>
</ul>
</div>
<div class="student-box">
<div class="student-box-title">🧑‍🎓 Как я это понял</div>
<p><b>Зачем импульс, если есть скорость?</b><br>
Грузовик едет 5 км/ч, велосипедист — тоже 5 км/ч. Но остановить грузовик в сто раз сложнее. Дело не только в скорости — важна ещё и масса. Импульс $p = mv$ учитывает сразу и то, и другое.</p>
<p><b>Почему машины «мнутся» и почему это хорошо?</b><br>
Когда машина бьётся, скорость меняется за какое-то время: $\Delta p = F \cdot \Delta t$. Суммарное изменение импульса фиксировано. Но если кузов мнётся — время удара $\Delta t$ увеличивается → сила $F$ уменьшается. Именно поэтому делают «зоны деформации» и подушки безопасности: не жалеют машину, зато спасают водителя.</p>
<p><b>Почему каратист бьёт резко, а не медленно?</b><br>
При резком ударе время контакта $\Delta t$ мизерное. Из $\Delta p = F \cdot \Delta t$ следует $F = \Delta p / \Delta t$. Чем меньше $\Delta t$ — тем больше $F$. Одно и то же изменение импульса за 0,001 с даёт силу, которая за 1 с выглядела бы смешно.</p>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-calculator"></i> Пример решения задачи</div>
<div class="example-box">
<h3>Мяч падает на пол и отскакивает</h3>
<div class="cond">
Мяч массой $m = 0{,}10\,\text{кг}$ падает с высоты $h = 0{,}20\,\text{м}$ на горизонтальный пол и отскакивает (упруго). Время удара $\Delta t = 5{,}0 \cdot 10^{-3}\,\text{с}$, $g = 10\,\text{м/с}^2$. Найдите среднюю силу удара.
</div>
<table class="given-table">
<tr><td>Дано</td><td>$m = 0{,}10\,\text{кг};\quad h = 0{,}20\,\text{м}$</td></tr>
<tr><td></td><td>$\Delta t = 5{,}0\cdot10^{-3}\,\text{с};\quad g = 10\,\text{м/с}^2$</td></tr>
<tr><td>Найти</td><td>$F_{\text{пол}} — ?$</td></tr>
</table>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span>Ось $Oy$ — вверх. Находим скорость мяча перед ударом:<br>\[v_1 = \sqrt{2gh} = \sqrt{2\cdot10\cdot0{,}20} = 2\,\text{м/с}\quad\text{(направлена вниз, проекция } {-}2\text{ м/с)}\]</span></li>
<li><span class="step-n">2</span><span>При упругом отскоке скорость сохраняется по модулю: $v_2 = 2\,\text{м/с}$ (вверх, проекция $+2$ м/с).<br>Изменение импульса (по модулю):\[|\Delta p| = m\cdot|v_2 - (-v_1)| = m(v_2+v_1) = 0{,}10\cdot4 = 0{,}40\,\text{кг}{\cdot}\text{м/с}\]</span></li>
<li><span class="step-n">3</span><span>По 2-му закону Ньютона: $\vec{F}_{\text{рез}}\,\Delta t = \Delta\vec{p}$, откуда средняя сила пола на мяч:\[F_{\text{пол}} = \frac{|\Delta p|}{\Delta t} + mg = \frac{0{,}40}{5{,}0\cdot10^{-3}} + 1 \approx 81\,\text{Н}\]</span></li>
<li><span class="step-n">4</span><span>По 3-му закону Ньютона сила мяча на пол равна $81\,\text{Н}$ — это в <b>81 раз</b> больше веса мяча!</span></li>
</ol>
</div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-question-circle"></i> Контрольные вопросы</div>
<ol class="q-list">
<li>Что такое импульс тела? Как он направлен? В каких единицах измеряется?</li>
<li>Как можно изменить импульс тела? Почему это изменение направлено именно так?</li>
<li>Что называют механической системой? Что такое импульс системы тел?</li>
<li>Какие силы называют внутренними? Какие — внешними?</li>
<li>Какие силы могут изменить импульс механической системы? Почему?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §32 — ТЕОРИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref32">
<!-- Hero -->
<div class="para-hero ph-32">
<div class="ph-label">§32 · Физика 9 кл</div>
<h2>Закон сохранения импульса. Реактивное движение</h2>
<div class="ph-formula">$\vec{p}_{\text{сист}} = \text{const}$</div>
<div class="ph-desc">Если внешние силы на систему не действуют — суммарный импульс не меняется.<br>Это объясняет и удары, и ракеты, и прыжки с лодки.</div>
<div class="ph-tags">
<span class="ph-tag">🚀 реактивное движение</span>
<span class="ph-tag">💥 удар тел</span>
<span class="ph-tag">🔒 замкнутая система</span>
</div>
</div>
<div class="section-title"><i class="fas fa-atom"></i> §32. Закон сохранения импульса. Реактивное движение</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Закон сохранения импульса</h3>
<div class="main-f">$\vec{p}_{\text{сист}} = \text{const}$</div>
<p>Импульс системы сохраняется, если <b>результирующая внешних сил равна нулю</b>.</p>
<p>Замкнутая система: $\vec{F}_{\text{внешн}} = 0$.</p>
</div>
<div class="fcard">
<h3>Применимость ЗСИ</h3>
<div class="main-f" style="font-size:.88rem">$\vec{F}_{\text{внешн}} = 0 \;\Rightarrow\; \vec{p}=\text{const}$</div>
<p>ЗСИ применим к незамкнутым системам, если:</p>
<ul>
<li>внешние силы малы по сравнению с внутренними;</li>
<li>проекция внешних сил на направление движения равна нулю.</li>
</ul>
</div>
<div class="fcard">
<h3>Абсолютно неупругий удар</h3>
<div class="main-f">$m_1\vec{v}_1 + m_2\vec{v}_2 = (m_1{+}m_2)\vec{v}$</div>
<p>После удара тела движутся вместе с одинаковой скоростью $\vec{v}$.</p>
</div>
<div class="fcard">
<h3>Реактивное движение</h3>
<div class="main-f">$m_1\vec{v}_1 + m_2\vec{v}_2 = 0$</div>
<p>Если система покоилась ($p_0 = 0$), после отделения части тело и отделившаяся часть движутся в <b>противоположных направлениях</b>.</p>
<p>Пушка на платформе, ракета, прыжок с лодки.</p>
</div>
</div>
<!-- Схема: до и после удара -->
<div class="fcard" style="margin-bottom:16px">
<h3>Схема абсолютно неупругого удара (проекция на ось $Ox$)</h3>
<svg width="100%" viewBox="0 0 480 90" style="max-width:480px;display:block;margin:8px auto">
<!-- До удара -->
<text x="4" y="18" font-size="12" fill="#64748b" font-family="Inter">До удара:</text>
<!-- тело 1 -->
<rect x="10" y="28" width="60" height="30" rx="6" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="40" y="48" font-size="11" text-anchor="middle" fill="#1d4ed8" font-weight="700">m₁</text>
<polygon points="75,43 90,38 90,48" fill="#1d4ed8"/>
<text x="100" y="48" font-size="11" fill="#1d4ed8" font-family="JetBrains Mono">v₁→</text>
<!-- тело 2 -->
<rect x="160" y="28" width="60" height="30" rx="6" fill="#dbeafe" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="190" y="48" font-size="11" text-anchor="middle" fill="#1d4ed8" font-weight="700">m₂</text>
<polygon points="225,43 240,38 240,48" fill="#64748b"/>
<text x="250" y="48" font-size="11" fill="#64748b" font-family="JetBrains Mono">v₂</text>
<!-- После удара -->
<text x="310" y="18" font-size="12" fill="#64748b" font-family="Inter">После удара:</text>
<rect x="310" y="28" width="100" height="30" rx="6" fill="#a5f3fc" stroke="#0891b2" stroke-width="1.5"/>
<text x="360" y="48" font-size="11" text-anchor="middle" fill="#0891b2" font-weight="700">m₁+m₂</text>
<polygon points="415,43 430,38 430,48" fill="#0891b2"/>
<text x="440" y="48" font-size="11" fill="#0891b2" font-family="JetBrains Mono">v</text>
</svg>
<p style="font-size:.82rem;color:var(--muted);text-align:center">Импульс до удара = Импульс после: $m_1 v_1 + m_2 v_2 = (m_1{+}m_2)v$</p>
</div>
<!-- ── СХЕМЫ §32 ── -->
<div class="idiag-2col">
<div class="idiag">
<h3>🚀 Ракета: реактивное движение в вакууме</h3>
<svg width="100%" viewBox="0 0 200 110" style="display:block;margin:0 auto">
<rect width="200" height="110" fill="#0f172a" rx="8"/>
<circle cx="18" cy="14" r="1" fill="white" opacity=".6"/>
<circle cx="52" cy="7" r="1.5" fill="white" opacity=".5"/>
<circle cx="88" cy="20" r="1" fill="white" opacity=".4"/>
<circle cx="138" cy="9" r="1" fill="white" opacity=".7"/>
<circle cx="172" cy="22" r="1" fill="white" opacity=".5"/>
<circle cx="28" cy="42" r="1" fill="white" opacity=".3"/>
<circle cx="162" cy="54" r="1" fill="white" opacity=".4"/>
<rect x="88" y="38" width="52" height="26" rx="5" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<polygon points="140,38 140,64 163,51" fill="#93c5fd"/>
<polygon points="88,64 76,78 88,70" fill="#93c5fd"/>
<polygon points="88,38 76,24 88,44" fill="#93c5fd"/>
<text x="114" y="55" font-size="9" text-anchor="middle" fill="#1e3a8a" font-weight="700">M</text>
<rect x="46" y="44" width="42" height="14" rx="5" fill="rgba(251,146,60,.4)" stroke="#f97316" stroke-width="1.2"/>
<text x="67" y="55" font-size="8.5" text-anchor="middle" fill="#ea580c" font-weight="700">m, u</text>
<line x1="163" y1="51" x2="188" y2="51" stroke="#60a5fa" stroke-width="2.5"/>
<polygon points="188,51 178,46 178,56" fill="#60a5fa"/>
<text x="168" y="44" font-size="8" fill="#93c5fd" font-family="Inter">MV→</text>
<line x1="46" y1="78" x2="20" y2="78" stroke="#fb923c" stroke-width="2.5"/>
<polygon points="20,78 30,73 30,83" fill="#fb923c"/>
<text x="24" y="92" font-size="8" fill="#fb923c" font-family="Inter">←mu</text>
<text x="100" y="102" font-size="7.5" text-anchor="middle" fill="#94a3b8" font-family="Inter">MV + mu = 0 · MV = mu</text>
</svg>
</div>
<div class="idiag">
<h3>🧊 Лёд: суммарный импульс = 0</h3>
<svg width="100%" viewBox="0 0 200 115" style="display:block;margin:0 auto">
<rect x="0" y="88" width="200" height="20" fill="#bae6fd" opacity=".3" rx="2"/>
<text x="100" y="104" font-size="7.5" text-anchor="middle" fill="#0284c7" font-family="Inter">гладкий лёд (Fтрен ≈ 0)</text>
<text x="50" y="14" font-size="8" text-anchor="middle" fill="#64748b" font-family="Inter">ДО толчка</text>
<circle cx="35" cy="60" r="15" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="35" y="64" font-size="9" text-anchor="middle" fill="#1d4ed8" font-weight="700">m₁</text>
<circle cx="65" cy="60" r="15" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="65" y="64" font-size="9" text-anchor="middle" fill="#1d4ed8" font-weight="700">m₂</text>
<text x="50" y="84" font-size="8" text-anchor="middle" fill="#64748b" font-family="Inter">p = 0</text>
<line x1="88" y1="60" x2="108" y2="60" stroke="#94a3b8" stroke-width="1.5" stroke-dasharray="3,2"/>
<polygon points="108,60 99,55 99,65" fill="#94a3b8"/>
<text x="96" y="52" font-size="7" fill="#94a3b8" font-family="Inter">толчок</text>
<text x="155" y="14" font-size="8" text-anchor="middle" fill="#64748b" font-family="Inter">ПОСЛЕ толчка</text>
<circle cx="125" cy="60" r="14" fill="#dbeafe" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="125" y="64" font-size="8.5" text-anchor="middle" fill="#1d4ed8" font-weight="700">m₁</text>
<line x1="111" y1="52" x2="97" y2="52" stroke="#1d4ed8" stroke-width="2"/>
<polygon points="97,52 107,47 107,57" fill="#1d4ed8"/>
<text x="99" y="44" font-size="7.5" fill="#1d4ed8" font-family="Inter">p₁←</text>
<circle cx="180" cy="60" r="14" fill="#a5f3fc" stroke="#0891b2" stroke-width="1.5"/>
<text x="180" y="64" font-size="8.5" text-anchor="middle" fill="#0891b2" font-weight="700">m₂</text>
<line x1="194" y1="52" x2="200" y2="52" stroke="#0891b2" stroke-width="2"/>
<polygon points="200,52 191,47 191,57" fill="#0891b2"/>
<text x="191" y="44" font-size="7.5" fill="#0891b2" font-family="Inter">→p₂</text>
<text x="155" y="84" font-size="8" text-anchor="middle" fill="#065f46" font-family="Inter" font-weight="700">p₁+p₂ = 0 ✓</text>
</svg>
</div>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-circle"></i> Запомни!</div>
<ul>
<li>ЗСИ работает только если <b>результирующая внешних сил = 0</b>. Трение, сила тяжести, реакция опоры — это всё внешние силы!</li>
<li>При ударе внутренние силы огромны (тысячи ньютонов), а внешние малы → ЗСИ применим даже для незамкнутой системы.</li>
<li>Ось выбирай сам. Всегда задавай положительное направление <b>до</b> составления уравнения.</li>
</ul>
</div>
<div class="mistakes-box">
<div class="mistakes-box-title"><i class="fas fa-triangle-exclamation"></i> Частые ошибки</div>
<ul>
<li>Забывают знак: если вагоны едут <b>навстречу</b>, один из $v$ — отрицательный по выбранной оси.</li>
<li>Путают «реактивное движение» с «отталкиванием от среды» — ракета летит в вакууме без воздуха.</li>
<li>При отдаче пушки берут $v_{\text{пушки}} = v_{\text{снаряда}}$ — забывают, что массы разные: $m_1 v_1 = m_2 v_2$.</li>
</ul>
</div>
<div class="student-box">
<div class="student-box-title">🧑‍🎓 Как я это понял</div>
<p><b>Лёд и друг</b><br>
Встань на лёд (трение почти нулевое) и толкни друга. Ты сам покатишься назад! Ты дал другу импульс вперёд — ты получил равный импульс назад. До толчка система покоилась ($p = 0$). После — суммарный импульс всё равно равен нулю. Ничего не пропало.</p>
<p><b>Как работает ракета в космосе?</b><br>
В космосе не на что опереться. Ракета выбрасывает газы назад — газы получают импульс назад. По ЗСИ ракета получает равный импульс вперёд. Никакого «отталкивания от воздуха» — чисто закон сохранения импульса.</p>
<p><b>Внутренние силы — «кукловод без рук»</b><br>
Сидишь в лодке и толкаешь борт изнутри. Лодка не поплывёт — ты часть той же системы. Только внешняя сила (весло, которое упирается в воду) может изменить суммарный импульс. Внутренние силы переносят импульс между частями системы, но общую сумму не меняют.</p>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-calculator"></i> Пример решения задачи</div>
<div class="example-box">
<h3>Два вагона движутся навстречу и сцепляются</h3>
<div class="cond">
Вагон массой $m_1 = 10\,\text{т}$ движется со скоростью $v_1 = 0{,}1\,\text{м/с}$. Навстречу ему движется вагон массой $m_2 = 20\,\text{т}$ со скоростью $v_2 = 0{,}2\,\text{м/с}$. После сцепки определите скорость вагонов.
</div>
<table class="given-table">
<tr><td>Дано</td><td>$m_1 = 10^4\,\text{кг};\; v_1 = 0{,}1\,\text{м/с}$</td></tr>
<tr><td></td><td>$m_2 = 2{\cdot}10^4\,\text{кг};\; v_2 = 0{,}2\,\text{м/с}$</td></tr>
<tr><td>Найти</td><td>$v — ?$</td></tr>
</table>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span><b>Ось $Ox$:</b> в направлении движения 1-го вагона. Тогда $v_1 = +0{,}1$ м/с, а $v_2 = -0{,}2$ м/с (навстречу).</span></li>
<li><span class="step-n">2</span><span><b>ЗСИ</b> (силы трения малы по сравнению с силой удара):\[m_1 v_1 + m_2 v_2 = (m_1+m_2)\,v\]</span></li>
<li><span class="step-n">3</span><span>Подставляем:\[v = \frac{m_1 v_1 + m_2 v_2}{m_1+m_2} = \frac{10^4\cdot(+0{,}1) + 2\cdot10^4\cdot(-0{,}2)}{3\cdot10^4} = \frac{1000 - 4000}{30000} = -0{,}1\,\text{м/с}\]</span></li>
<li><span class="step-n">4</span><span>Знак «$-$» — вагоны едут в сторону <b>отрицательного направления оси</b>, т.е. в сторону 2-го вагона.<br><b>Ответ:</b> $v = 0{,}1\,\text{м/с}$ в сторону второго вагона.</span></li>
</ol>
</div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-question-circle"></i> Контрольные вопросы</div>
<ol class="q-list">
<li>Что происходит с импульсом системы, если внешние силы на неё не действуют?</li>
<li>В каких случаях закон сохранения импульса применим к незамкнутой системе?</li>
<li>Что такое реактивная сила? Приведите примеры.</li>
<li>Почему скорость ракеты увеличивается по мере её полёта?</li>
<li>Почему для запуска спутников применяют многоступенчатые ракеты?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §33 — ТЕОРИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref33">
<!-- Hero -->
<div class="para-hero ph-33">
<div class="ph-label">§33 · Физика 9 кл</div>
<h2>Механическая работа. Мощность</h2>
<div class="ph-formula">$A = F\,\Delta r\cos\alpha$</div>
<div class="ph-desc">Работа — это результат действия силы вдоль перемещения.<br>Мощность — это насколько быстро совершается работа.</div>
<div class="ph-tags">
<span class="ph-tag">📐 [A] = Дж = Н·м</span>
<span class="ph-tag">⚡ [P] = Вт = Дж/с</span>
<span class="ph-tag">📐 cosα — ключ к знаку</span>
</div>
</div>
<div class="section-title"><i class="fas fa-bolt"></i> §33. Механическая работа. Мощность</div>
<!-- Главная формула -->
<div class="formula-grid">
<div class="fcard highlight">
<h3>Механическая работа</h3>
<div class="main-f">$A = F\,\Delta r\cos\alpha$</div>
<p>$F$ — модуль силы, $\Delta r$ — модуль перемещения, $\alpha$ — угол между $\vec{F}$ и $\Delta\vec{r}$.</p>
<p style="margin-top:5px">$[A] = \text{Дж} = \text{Н}{\cdot}\text{м}$</p>
</div>
<div class="fcard">
<h3>Знак работы</h3>
<div style="font-size:.82rem;line-height:2;margin-top:4px">
<div style="color:#065f46;font-weight:700">α &lt; 90° → cos α &gt; 0 → <span style="background:#d1fae5;border-radius:4px;padding:1px 6px">A &gt; 0</span> положительная</div>
<div style="color:#92400e;font-weight:700">α = 90° → cos α = 0 → <span style="background:#fef3c7;border-radius:4px;padding:1px 6px">A = 0</span> равна нулю</div>
<div style="color:#991b1b;font-weight:700">α &gt; 90° → cos α &lt; 0 → <span style="background:#fee2e2;border-radius:4px;padding:1px 6px">A &lt; 0</span> отрицательная</div>
</div>
</div>
<div class="fcard">
<h3>Работа при подъёме тела</h3>
<div class="main-f">$A = mgh$</div>
<p>Работа силы тяжести при подъёме тела массой $m$ на высоту $h$ (сила и перемещение сонаправлены).</p>
</div>
<div class="fcard">
<h3>Работа по деформации пружины</h3>
<div class="main-f">$A = \dfrac{kx^2}{2}$</div>
<p>Работа внешней силы при растяжении или сжатии пружины жёсткостью $k$ на $x$.</p>
</div>
</div>
<!-- Мощность -->
<div class="formula-grid" style="margin-bottom:16px">
<div class="fcard highlight">
<h3>Мощность</h3>
<div class="main-f">$P = \dfrac{A}{\Delta t}$</div>
<p>Мощность — быстрота совершения работы.</p>
<p>$[P] = \text{Вт} = \dfrac{\text{Дж}}{\text{с}}$; 1 кВт = 10³ Вт; 1 МВт = 10⁶ Вт</p>
</div>
<div class="fcard">
<h3>Мощность через скорость</h3>
<div class="main-f">$P = Fv\cos\alpha$</div>
<p>Из $A = F\Delta r\cos\alpha$ и $P = A/\Delta t$, так как $\Delta r/\Delta t = v$.</p>
<p style="margin-top:6px">Если сила вдоль движения: $P = Fv$</p>
</div>
</div>
<!-- Важные частные случаи -->
<div class="def-box">
<b>Силы, перпендикулярные перемещению, работы не совершают</b> (α = 90°, cos 90° = 0).<br>
Примеры: сила реакции опоры при горизонтальном движении, центростремительная сила при движении по окружности.
</div>
<!-- ── СХЕМЫ §33 ── -->
<div class="idiag-2col">
<div class="idiag">
<h3>🛷 Санки: только Fcosα совершает работу</h3>
<svg width="100%" viewBox="0 0 210 128" style="display:block;margin:0 auto">
<line x1="5" y1="100" x2="205" y2="100" stroke="#94a3b8" stroke-width="2"/>
<line x1="15" y1="100" x2="5" y2="112" stroke="#94a3b8" stroke-width="1"/>
<line x1="35" y1="100" x2="25" y2="112" stroke="#94a3b8" stroke-width="1"/>
<line x1="55" y1="100" x2="45" y2="112" stroke="#94a3b8" stroke-width="1"/>
<line x1="75" y1="100" x2="65" y2="112" stroke="#94a3b8" stroke-width="1"/>
<line x1="95" y1="100" x2="85" y2="112" stroke="#94a3b8" stroke-width="1"/>
<line x1="115" y1="100" x2="105" y2="112" stroke="#94a3b8" stroke-width="1"/>
<line x1="135" y1="100" x2="125" y2="112" stroke="#94a3b8" stroke-width="1"/>
<rect x="55" y="72" width="54" height="28" rx="5" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="82" y="90" font-size="10" text-anchor="middle" fill="#1d4ed8" font-weight="700">m</text>
<line x1="109" y1="78" x2="152" y2="47" stroke="#1d4ed8" stroke-width="2.5"/>
<polygon points="152,47 138,51 143,63" fill="#1d4ed8"/>
<text x="158" y="44" font-size="9" fill="#1d4ed8" font-family="Inter" font-weight="700">F</text>
<line x1="109" y1="87" x2="152" y2="87" stroke="#10b981" stroke-width="2.5"/>
<polygon points="152,87 142,82 142,92" fill="#10b981"/>
<text x="123" y="98" font-size="8" fill="#10b981" font-family="Inter" font-weight="700">F·cosα</text>
<line x1="152" y1="47" x2="152" y2="87" stroke="#94a3b8" stroke-width="1.5" stroke-dasharray="4,2"/>
<polygon points="152,87 147,76 157,76" fill="#94a3b8"/>
<text x="156" y="70" font-size="7.5" fill="#94a3b8" font-family="Inter">F·sinα</text>
<path d="M 122 78 A 14 14 0 0 1 130 69" stroke="#64748b" fill="none" stroke-width="1.2"/>
<text x="131" y="70" font-size="8" fill="#64748b" font-family="Inter">α</text>
<text x="5" y="12" font-size="7.5" fill="#10b981" font-family="Inter" font-weight="700">F·cosα → вдоль Δr → A &gt; 0</text>
<text x="5" y="22" font-size="7.5" fill="#94a3b8" font-family="Inter">F·sinα → ⊥ Δr → A = 0</text>
</svg>
</div>
<div class="idiag">
<h3>🔩 Пружина: работа = площадь треугольника под F-x</h3>
<svg width="100%" viewBox="0 0 200 130" style="display:block;margin:0 auto">
<line x1="28" y1="108" x2="183" y2="108" stroke="var(--muted)" stroke-width="1.5"/>
<line x1="28" y1="108" x2="28" y2="15" stroke="var(--muted)" stroke-width="1.5"/>
<polygon points="28,15 24,27 32,27" fill="var(--muted)"/>
<polygon points="183,108 171,104 171,112" fill="var(--muted)"/>
<text x="187" y="112" font-size="9" fill="var(--muted)" font-family="Inter">x</text>
<text x="20" y="13" font-size="9" fill="var(--muted)" font-family="Inter">F</text>
<line x1="24" y1="34" x2="32" y2="34" stroke="var(--muted)" stroke-width="1"/>
<text x="2" y="37" font-size="8" fill="#1d4ed8" font-family="Inter">kx</text>
<line x1="110" y1="104" x2="110" y2="112" stroke="var(--muted)" stroke-width="1"/>
<text x="106" y="122" font-size="8" fill="#1d4ed8" font-family="Inter">x</text>
<line x1="28" y1="108" x2="135" y2="28" stroke="#1d4ed8" stroke-width="2.5"/>
<line x1="28" y1="34" x2="110" y2="34" stroke="#1d4ed8" stroke-width="1" stroke-dasharray="3,2"/>
<line x1="110" y1="34" x2="110" y2="108" stroke="#1d4ed8" stroke-width="1" stroke-dasharray="3,2"/>
<polygon points="28,108 110,108 110,34" fill="rgba(29,78,216,.14)" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="55" y="88" font-size="8.5" fill="#1d4ed8" font-family="Inter" font-weight="700">A = kx²/2</text>
<text x="52" y="100" font-size="7.5" fill="#64748b" font-family="Inter">(площадь ▲)</text>
<text x="128" y="34" font-size="8.5" fill="#1d4ed8" font-family="Inter" font-weight="700">F=kx</text>
<text x="28" y="15" font-size="7.5" fill="#64748b" font-family="Inter">F растёт → ср. значение = kx/2</text>
</svg>
</div>
</div>
<!-- Цепочка вывода P = Fv -->
<div class="fchain">
<span class="fchain-note">Откуда $P = Fv$:</span>
<span class="fchain-step">$A = F\Delta r\cos\alpha$</span>
<span class="fchain-arrow">÷ Δt</span>
<span class="fchain-step">$P = F\dfrac{\Delta r}{\Delta t}\cos\alpha$</span>
<span class="fchain-arrow">$\Delta r/\Delta t = v$</span>
<span class="fchain-step">$P = Fv\cos\alpha$</span>
<span class="fchain-arrow">при α=0°</span>
<span class="fchain-step">$P = Fv$ ✓</span>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-circle"></i> Запомни!</div>
<ul>
<li><b>Угол α</b> — это угол между вектором силы $\vec{F}$ и вектором перемещения $\Delta\vec{r}$, а не с горизонтом или чем-то ещё.</li>
<li>Если тело движется <b>горизонтально</b>, а сила направлена <b>вертикально</b> — работа равна нулю.</li>
<li>Сила тяжести совершает <b>положительную</b> работу при спуске и <b>отрицательную</b> при подъёме.</li>
</ul>
</div>
<div class="mistakes-box">
<div class="mistakes-box-title"><i class="fas fa-triangle-exclamation"></i> Частые ошибки</div>
<ul>
<li>Берут угол между верёвкой и горизонтом вместо угла между $\vec{F}$ и $\Delta\vec{r}$ — результат неверный.</li>
<li>Забывают $A = kx^2/2$ — это не $A = kx$, потому что сила пружины сама растёт с деформацией.</li>
<li>Путают мощность двигателя с силой тяги: большая мощность ≠ большая сила (при высокой скорости сила маленькая и наоборот).</li>
</ul>
</div>
<div class="student-box">
<div class="student-box-title">🧑‍🎓 Как я это понял</div>
<p><b>Нести сумку — это не работа (серьёзно)</b><br>
Когда несёшь сумку по горизонтали, ты держишь её рукой вверх (сила направлена вертикально), а сумка при этом едет горизонтально. Угол между силой и перемещением = 90°, cos 90° = 0, значит $A = 0$. Мышцы устают — это да. Но с точки зрения физики работа равна нулю. Обидно.</p>
<p><b>Угол α — это угол между «куда тянешь» и «куда едет»</b><br>
Тянешь санки верёвкой под углом 30° к земле: часть силы тянет вперёд (делает работу), часть — поднимает санки вверх (работы нет). Только та часть силы, которая направлена вдоль движения, и совершает работу — это и есть $F \cos\alpha$.</p>
<p><b>Мощность — это «кто быстрее сделает ту же работу»</b><br>
Подняться на 5-й этаж пешком за 2 минуты или за 10 — работа одинакова ($mgh$). Но кто пробежал за 2 минуты — его мощность в 5 раз больше. Именно поэтому двигатели характеризуют мощностью: не «сколько сделает», а «как быстро».</p>
<p><b>Зачем формула $P = Fv$?</b><br>
Если знаешь скорость машины и силу тяги — мощность считается мгновенно. Гоночная машина едет 60 м/с с тягой 3000 Н → мощность = 180 000 Вт = 180 кВт. Никакого времени знать не нужно.</p>
</div>
<!-- Схема угла -->
<div class="fcard" style="margin-bottom:16px">
<h3>Схема: работа при разных углах</h3>
<svg width="100%" viewBox="0 0 480 100" style="max-width:480px;display:block;margin:6px auto">
<!-- Случай 1: α = 0 -->
<rect x="10" y="40" width="70" height="25" rx="5" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<polygon points="80,52 100,47 100,57" fill="#065f46"/>
<text x="110" y="48" font-size="10" fill="#064e3b" font-family="Inter" font-weight="700">F, Δr</text>
<text x="10" y="82" font-size="10" fill="#065f46" font-family="Inter">α=0°, A=FΔr &gt; 0</text>
<!-- Случай 2: α = 90° -->
<rect x="170" y="40" width="70" height="25" rx="5" fill="#fef3c7" stroke="#f59e0b" stroke-width="1.5"/>
<polygon points="240,52 260,47 260,57" fill="#92400e"/>
<polygon points="205,40 200,20 210,20" fill="#92400e"/>
<text x="165" y="82" font-size="10" fill="#92400e" font-family="Inter">α=90°, A=0</text>
<!-- Случай 3: α > 90° -->
<rect x="330" y="40" width="70" height="25" rx="5" fill="#fee2e2" stroke="#ef4444" stroke-width="1.5"/>
<polygon points="330,52 310,47 310,57" fill="#991b1b"/>
<polygon points="400,52 420,47 420,57" fill="#64748b"/>
<text x="305" y="82" font-size="10" fill="#991b1b" font-family="Inter">α&gt;90°, A&lt;0 (торм.)</text>
</svg>
</div>
<!-- Интерактивный угол α -->
<div class="idiag">
<h3>🎚️ Интерактив: как угол α влияет на работу</h3>
<div class="slider-row">
<span class="slider-lbl">Угол α:</span>
<input type="range" min="0" max="180" value="45" id="sl33a" oninput="upd33()">
<span class="slider-val" id="v33a">45°</span>
</div>
<div style="display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;margin-top:10px">
<svg width="200" height="110" id="svg33" style="flex-shrink:0;border:1.5px solid var(--border);border-radius:12px;background:rgba(29,78,216,.03)">
<rect x="60" y="60" width="40" height="30" rx="6" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<text x="80" y="79" font-size="9" text-anchor="middle" fill="#1d4ed8" font-weight="700">m</text>
<line x1="100" y1="75" x2="178" y2="75" stroke="#94a3b8" stroke-width="2"/>
<polygon points="178,75 167,70 167,80" fill="#94a3b8"/>
<text x="135" y="90" font-size="8" fill="#64748b" font-family="Inter">Δr</text>
<line id="fline33" x1="80" y1="75" x2="108" y2="47" stroke="#10b981" stroke-width="3"/>
<polygon id="farrow33" points="108,47 97,56 107,63" fill="#10b981"/>
<text id="ftxt33" x="115" y="46" font-size="9" fill="#10b981" font-family="Inter" font-weight="700">F</text>
<text id="albl33" x="103" y="70" font-size="8" fill="#64748b" font-family="Inter">α</text>
</svg>
<div style="flex:1;min-width:140px">
<div style="font-size:.84rem;margin-bottom:8px;font-weight:600">cos <span id="aval33">45</span>° = <b id="cosval33" style="font-family:'JetBrains Mono',monospace;color:var(--pri);font-size:.92rem">0.71</b></div>
<div class="idiag-result" id="worksign33" style="font-size:.82rem;padding:8px 12px"><span class="work-pos">A &gt; 0 — положительная</span></div>
<div style="font-size:.77rem;color:var(--muted);margin-top:8px;line-height:1.6" id="workdesc33">Сила «помогает» движению</div>
</div>
</div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-calculator"></i> Примеры решения задач</div>
<div class="example-box">
<h3>Автомобиль поднимается в гору</h3>
<div class="cond">
Автомобиль массой $m = 2{,}0\,\text{т}$, мощность двигателя $P \approx 2{,}9\cdot10^4\,\text{Вт}$, скорость подъёма $v = 3{,}0\,\text{м/с}$, $g = 10\,\text{м/с}^2$. Найдите угол наклона горы.
</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span>Сила тяги направлена вдоль движения (α = 0°), поэтому $P = Fv$:<br>$F = P/v = 2{,}9\cdot10^4\,/\,3{,}0 \approx 9{,}7\cdot10^3\,\text{Н}$</span></li>
<li><span class="step-n">2</span><span>При равномерном движении сила тяги = составляющая тяжести вдоль горы:<br>$F = mg\sin\alpha$</span></li>
<li><span class="step-n">3</span><span>$\sin\alpha = F/(mg) = 9700/(2000\cdot10) = 0{,}485 \approx 0{,}5$ → $\alpha = 30°$</span></li>
</ol>
</div>
</div>
<div class="example-box">
<h3>Работа по деформации пружины</h3>
<div class="cond">
Пружину жёсткостью $k = 200\,\text{Н/м}$ растянули с $l_0 = 16\,\text{см}$ до $l = 20\,\text{см}$. Найдите работу внешней силы.
</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span>Деформация (удлинение, а не полная длина!):<br>$x = l - l_0 = 0{,}20 - 0{,}16 = 0{,}04\,\text{м}$</span></li>
<li><span class="step-n">2</span><span>Работа внешней силы при деформации пружины:\[A = \frac{kx^2}{2} = \frac{200\cdot(0{,}04)^2}{2} = \frac{200\cdot0{,}0016}{2} = 0{,}16\,\text{Дж}\]</span></li>
</ol>
</div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-list-check"></i> Главные выводы</div>
<div class="def-box" style="border-left-color:#10b981">
1. Работа силы равна произведению модулей силы и перемещения на косинус угла между ними.<br>
2. Острый угол → A &gt; 0; тупой угол → A &lt; 0; прямой угол → A = 0.<br>
3. Силы, перпендикулярные перемещению тела, работы не совершают.<br>
4. Мощность численно равна работе, совершаемой за единицу времени.<br>
5. Мощность пропорциональна произведению действующей силы и скорости движения тела.
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-question-circle"></i> Контрольные вопросы</div>
<ol class="q-list">
<li>Положительной или отрицательной будет работа силы тяжести, действующей на тело, движущееся вверх? Падающее вниз? Почему?</li>
<li>Положительной или отрицательной будет работа силы сопротивления воздуха при движении мяча вверх? При движении вниз?</li>
<li>Чему равна суммарная работа, которую совершила сила тяжести при броске мяча вверх и при его движении обратно?</li>
<li>Совершает ли работу нормальная составляющая силы реакции поверхности, действующая на движущееся по этой поверхности тело?</li>
<li>Можно ли при заданной мощности выиграть и в силе, и в скорости одновременно?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §34 — ТЕОРИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref34">
<!-- Hero -->
<div class="para-hero ph-34">
<div class="ph-label">§34 · Физика 9 кл</div>
<h2>Потенциальная энергия</h2>
<div class="ph-formula">$E_\text{п} = mgh \quad\text{или}\quad E_\text{п} = \tfrac{kx^2}{2}$</div>
<div class="ph-desc">Потенциальная энергия — это «запас» работы, которую могут совершить силы взаимодействия.<br>Нулевой уровень выбираешь сам — важна только разность энергий.</div>
<div class="ph-tags">
<span class="ph-tag">📐 [Eп] = Дж</span>
<span class="ph-tag">📈 mgh — линейно от h</span>
<span class="ph-tag">📈 kx²/2 — квадратично от x</span>
</div>
</div>
<div class="section-title"><i class="fas fa-battery-half"></i> §34. Потенциальная энергия</div>
<div class="def-box">
<b>Потенциальная энергия</b> — мера способности сил взаимодействия механической системы совершать работу.<br>
Потенциальная энергия равна работе, которую совершат силы взаимодействия при переходе тела из данного состояния на <b>нулевой уровень</b>: $E_\text{п} = A$.
</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Потенциальная энергия в поле тяжести</h3>
<div class="main-f">$E_\text{п} = mgh$</div>
<p>$m$ — масса тела, $g$ — ускорение свободного падения, $h$ — высота над нулевым уровнем.</p>
<p style="margin-top:6px">$[E_\text{п}] = \text{Дж}$</p>
</div>
<div class="fcard highlight">
<h3>Потенциальная энергия упруго деформированного тела</h3>
<div class="main-f">$E_\text{п} = \dfrac{kx^2}{2}$</div>
<p>$k$ — жёсткость пружины, $x$ — деформация (растяжение или сжатие).</p>
</div>
<div class="fcard">
<h3>Изменение потенциальной энергии и работа</h3>
<div class="main-f">$\Delta E_\text{п} = -A$</div>
<p>Изменение потенциальной энергии и работа сил взаимодействия имеют <b>противоположные знаки</b>.</p>
<p style="margin-top:5px;font-size:.79rem">Тело опускается → $A &gt; 0$ → $\Delta E_\text{п} &lt; 0$ (энергия убывает)</p>
</div>
<div class="fcard">
<h3>Нулевой уровень</h3>
<div class="main-f" style="font-size:.9rem">$E_\text{п}(h{=}0) = 0$</div>
<p>Нулевой уровень потенциальной энергии <b>выбирается произвольно</b>.</p>
<p style="margin-top:5px;font-size:.79rem">Изменение $\Delta E_\text{п}$ от выбора нулевого уровня <b>не зависит</b>.</p>
</div>
</div>
<!-- Графики из учебника -->
<div class="fcard" style="margin-bottom:16px">
<h3>Графики потенциальной энергии</h3>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:10px">
<div>
<svg width="100%" viewBox="0 0 200 140">
<text x="100" y="14" font-size="11" text-anchor="middle" fill="var(--pri)" font-family="Inter" font-weight="700">E п = mgh (гравитац.)</text>
<line x1="20" y1="120" x2="180" y2="120" stroke="var(--muted)" stroke-width="1.5"/>
<line x1="20" y1="120" x2="20" y2="20" stroke="var(--muted)" stroke-width="1.5"/>
<polygon points="20,20 16,32 24,32" fill="var(--muted)"/>
<polygon points="180,120 168,116 168,124" fill="var(--muted)"/>
<text x="183" y="124" font-size="10" fill="var(--muted)" font-family="Inter">h</text>
<text x="14" y="18" font-size="10" fill="var(--muted)" font-family="Inter">Eп</text>
<line x1="20" y1="120" x2="170" y2="30" stroke="#1d4ed8" stroke-width="2.5"/>
<text x="130" y="55" font-size="9" fill="#1d4ed8" font-family="Inter" font-weight="700">прямая</text>
<text x="100" y="135" font-size="9" text-anchor="middle" fill="var(--muted)" font-family="Inter">Eп ~ h (линейно)</text>
</svg>
</div>
<div>
<svg width="100%" viewBox="0 0 200 140">
<text x="100" y="14" font-size="11" text-anchor="middle" fill="var(--pri)" font-family="Inter" font-weight="700">E п = kx²/2 (пружина)</text>
<line x1="20" y1="120" x2="180" y2="120" stroke="var(--muted)" stroke-width="1.5"/>
<line x1="20" y1="120" x2="20" y2="20" stroke="var(--muted)" stroke-width="1.5"/>
<polygon points="20,20 16,32 24,32" fill="var(--muted)"/>
<polygon points="180,120 168,116 168,124" fill="var(--muted)"/>
<text x="183" y="124" font-size="10" fill="var(--muted)" font-family="Inter">x</text>
<text x="14" y="18" font-size="10" fill="var(--muted)" font-family="Inter">Eп</text>
<path d="M20,120 Q80,118 110,90 Q140,62 170,28" stroke="#1d4ed8" stroke-width="2.5" fill="none"/>
<text x="130" y="60" font-size="9" fill="#1d4ed8" font-family="Inter" font-weight="700">парабола</text>
<text x="100" y="135" font-size="9" text-anchor="middle" fill="var(--muted)" font-family="Inter">Eп ~ x² (квадратично)</text>
</svg>
</div>
</div>
</div>
<!-- ── СХЕМЫ §34 ── -->
<div class="idiag">
<h3>📏 Нулевой уровень — двигай и смотри что меняется, а что нет</h3>
<div class="slider-row" style="margin-bottom:12px">
<span class="slider-lbl">Уровень h=0:</span>
<input type="range" min="0" max="6" step="0.5" value="0" id="sl34zero" oninput="upd34zero()">
<span class="slider-val" id="v34zero">пол (0 м)</span>
</div>
<div style="display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap">
<!-- SVG-сцена -->
<svg width="160" height="230" style="flex-shrink:0;border:1.5px solid var(--border);border-radius:12px;overflow:visible;background:rgba(29,78,216,.025)">
<!-- Стена слева -->
<rect x="0" y="0" width="14" height="230" fill="#e2e8f0"/>
<!-- Этажи: фиксированные реальные высоты. 1 м = 22px. Низ SVG = y=218 = реальный -1м (земля). -->
<!-- Реальный пол = 0 м = y=196. Полка 1 = 2м = y=152. Полка 2 = 5м = y=86 -->
<!-- Земля (улица) -->
<rect x="14" y="218" width="146" height="12" fill="#94a3b8" rx="2"/>
<line x1="14" y1="218" x2="160" y2="218" stroke="#64748b" stroke-width="1.5"/>
<!-- Пол комнаты -->
<rect x="14" y="196" width="146" height="5" fill="#94a3b8"/>
<text x="17" y="208" font-size="7.5" fill="#64748b" font-family="Inter">пол</text>
<!-- Потолок -->
<rect x="14" y="18" width="146" height="5" fill="#94a3b8"/>
<text x="17" y="16" font-size="7.5" fill="#64748b" font-family="Inter">потолок (7 м)</text>
<!-- Полка А (шар лежит) — реальная высота 2 м = y=152 -->
<rect x="40" y="152" width="55" height="5" rx="2" fill="#1d4ed8" opacity=".4"/>
<!-- Шар А (позиция 1 — низкая) cy = 152-12 = 140 -->
<circle cx="67" cy="140" r="12" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="2"/>
<text x="67" y="144" font-size="8" text-anchor="middle" fill="#1d4ed8" font-weight="700">m</text>
<text x="100" y="144" font-size="7.5" fill="#1d4ed8" font-family="Inter">2 м</text>
<!-- Полка Б (шар лежит) — реальная высота 5 м = y=86 -->
<rect x="40" y="86" width="55" height="5" rx="2" fill="#7c3aed" opacity=".4"/>
<!-- Шар Б (позиция 2 — высокая) cy = 86-12 = 74 -->
<circle cx="67" cy="74" r="12" fill="#ede9fe" stroke="#7c3aed" stroke-width="2"/>
<text x="67" y="78" font-size="8" text-anchor="middle" fill="#7c3aed" font-weight="700">m</text>
<text x="100" y="78" font-size="7.5" fill="#7c3aed" font-family="Inter">5 м</text>
<!-- Скобка ΔЕп: стрелка между шарами -->
<line x1="130" y1="74" x2="130" y2="140" stroke="#10b981" stroke-width="2"/>
<polygon points="130,74 126,85 134,85" fill="#10b981"/>
<polygon points="130,140 126,129 134,129" fill="#10b981"/>
<text x="134" y="112" font-size="8" fill="#065f46" font-family="Inter" font-weight="700">Δh=3м</text>
<!-- Нулевой уровень — динамическая линия -->
<line id="zline34" x1="14" y1="196" x2="160" y2="196" stroke="#10b981" stroke-width="2.5" stroke-dasharray="6,3"/>
<text id="zlbl34" x="16" y="192" font-size="8" fill="#10b981" font-family="Inter" font-weight="800">h = 0</text>
<!-- Стрелки от нулевого уровня до шара А -->
<line id="za_line" x1="22" y1="196" x2="22" y2="140" stroke="#1d4ed8" stroke-width="1.8" stroke-dasharray="3,2"/>
<polygon id="za_arr1" points="22,140 18,151 26,151" fill="#1d4ed8"/>
<polygon id="za_arr2" points="22,196 18,185 26,185" fill="#1d4ed8"/>
<text id="za_lbl" x="4" y="172" font-size="8" fill="#1d4ed8" font-family="Inter" font-weight="700">h₁</text>
<!-- Стрелки от нулевого уровня до шара Б -->
<line id="zb_line" x1="33" y1="196" x2="33" y2="74" stroke="#7c3aed" stroke-width="1.8" stroke-dasharray="3,2"/>
<polygon id="zb_arr1" points="33,74 29,85 37,85" fill="#7c3aed"/>
<polygon id="zb_arr2" points="33,196 29,185 37,185" fill="#7c3aed"/>
<text id="zb_lbl" x="4" y="130" font-size="8" fill="#7c3aed" font-family="Inter" font-weight="700">h₂</text>
</svg>
<!-- Правая панель с числами -->
<div style="flex:1;min-width:170px;display:flex;flex-direction:column;gap:10px">
<div style="background:rgba(29,78,216,.07);border:1.5px solid rgba(29,78,216,.25);border-radius:10px;padding:10px 13px">
<div style="font-size:.73rem;font-weight:700;color:#1d4ed8;margin-bottom:5px">🔵 Шар на нижней полке (2 м)</div>
<div style="font-family:'JetBrains Mono',monospace;font-size:.85rem;font-weight:700;color:var(--text)">
h₁ = <span id="h1val">2</span> м<br>
Eп₁ = <span id="ep1val" style="color:#1d4ed8">400</span> Дж
</div>
</div>
<div style="background:rgba(124,58,237,.07);border:1.5px solid rgba(124,58,237,.25);border-radius:10px;padding:10px 13px">
<div style="font-size:.73rem;font-weight:700;color:#7c3aed;margin-bottom:5px">🟣 Шар на верхней полке (5 м)</div>
<div style="font-family:'JetBrains Mono',monospace;font-size:.85rem;font-weight:700;color:var(--text)">
h₂ = <span id="h2val">5</span> м<br>
Eп₂ = <span id="ep2val" style="color:#7c3aed">1000</span> Дж
</div>
</div>
<div style="background:rgba(16,185,129,.1);border:2px solid #10b981;border-radius:10px;padding:10px 13px">
<div style="font-size:.73rem;font-weight:700;color:#065f46;margin-bottom:5px">✅ Изменение энергии</div>
<div style="font-family:'JetBrains Mono',monospace;font-size:.9rem;font-weight:800;color:#065f46">
ΔEп = <span id="depval">600</span> Дж
</div>
<div style="font-size:.72rem;color:#065f46;margin-top:4px;font-weight:600" id="dep_note">
= 2 × 10 × 3 = не меняется!
</div>
</div>
<div style="font-size:.75rem;color:var(--muted);line-height:1.6;padding:0 2px">
💡 Двигай нулевой уровень — Eп₁ и Eп₂ меняются,<br>но <b style="color:#065f46">ΔEп всегда = 600 Дж</b>
</div>
</div>
</div>
</div>
<div class="idiag">
<h3>🎚️ Интерактив: Eп = mgh</h3>
<div class="slider-row">
<span class="slider-lbl">Масса $m$:</span>
<input type="range" min="1" max="20" value="5" id="sl34m" oninput="upd34()">
<span class="slider-val" id="v34m">5 кг</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Высота $h$:</span>
<input type="range" min="0" max="20" value="4" id="sl34h" oninput="upd34()">
<span class="slider-val" id="v34h">4 м</span>
</div>
<div style="display:flex;gap:16px;align-items:center;flex-wrap:wrap">
<div style="flex:1;min-width:180px">
<div class="idiag-result" id="res34">Eп = 5 × 10 × 4 = <b style="font-size:1.1em;color:var(--pri)">200</b> Дж</div>
<p style="font-size:.75rem;color:var(--muted);margin-top:8px">💡 Подними m=10 кг на h=10 м — 1000 Дж! Столько тратит кран, поднимая гирю.</p>
</div>
<svg width="60" height="118" id="svg34lift" style="flex-shrink:0">
<line x1="8" y1="5" x2="8" y2="103" stroke="var(--muted)" stroke-width="1"/>
<text x="3" y="9" font-size="7" fill="var(--muted)" font-family="Inter">h</text>
<line x1="4" y1="103" x2="54" y2="103" stroke="#94a3b8" stroke-width="1.5"/>
<text x="30" y="113" font-size="7" text-anchor="middle" fill="#94a3b8" font-family="Inter">h=0</text>
<rect x="18" y="5" width="34" height="98" rx="5" fill="rgba(29,78,216,.07)" stroke="var(--border)" stroke-width="1.5"/>
<rect x="20" id="liftbar34" y="80" width="30" height="22" rx="4" fill="var(--pri)" opacity=".7"/>
<circle id="liftball34" cx="35" cy="70" r="9" fill="#bfdbfe" stroke="#1d4ed8" stroke-width="1.5"/>
<text id="liftballtxt" x="35" y="74" font-size="7" text-anchor="middle" fill="#1d4ed8" font-weight="700">m</text>
</svg>
</div>
</div>
<!-- Цепочка связей §34 -->
<div class="fchain">
<span class="fchain-note">Связь работы и энергии:</span>
<span class="fchain-step">тело опускается</span>
<span class="fchain-arrow"></span>
<span class="fchain-step">$A_{\text{тяж}} > 0$</span>
<span class="fchain-arrow"></span>
<span class="fchain-step">$\Delta E_\text{п} = -A < 0$</span>
<span class="fchain-arrow"></span>
<span class="fchain-step">$E_\text{п}$ убывает</span>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-circle"></i> Запомни!</div>
<ul>
<li>$\Delta E_\text{п} = -A$: минус означает, что при совершении положительной работы запас энергии <b>уменьшается</b>.</li>
<li>$x$ в формуле $E_\text{п} = kx^2/2$ — это <b>деформация</b> (изменение длины), а не полная длина пружины!</li>
<li>Нулевой уровень для $mgh$ выбирают там, куда падает тело — тогда $E_\text{п}$ на нулевом уровне = 0.</li>
</ul>
</div>
<div class="mistakes-box">
<div class="mistakes-box-title"><i class="fas fa-triangle-exclamation"></i> Частые ошибки</div>
<ul>
<li>Подставляют полную длину пружины $l$ вместо деформации $x = l - l_0$ в $kx^2/2$.</li>
<li>Путают знак: тело поднялось → $A_{\text{тяж}} < 0$ $\Delta E_\text{п} = -A > 0$ → энергия выросла (всё логично).</li>
<li>Думают, что $E_\text{п}$ — абсолютная характеристика тела. На самом деле она зависит от выбора нулевого уровня, зато $\Delta E_\text{п}$ — не зависит.</li>
</ul>
</div>
<div class="student-box">
<div class="student-box-title">🧑‍🎓 Как я это понял</div>
<p><b>Потенциальная энергия — это «замороженная» работа</b><br>
Кирпич лежит на высоте 10 м. Он ничего не делает. Но стоит его отпустить — он упадёт, разгонится и совершит работу. Откуда она возьмётся? Из высоты. Пока кирпич висит — у него есть потенциальная энергия. Это как деньги на счёте: их не видно, но они есть.</p>
<p><b>Нулевой уровень — сам выбираешь</b><br>
Считать высоту от пола, от земли или от крыши — всё равно. Меняется только само число $E_\text{п} = mgh$, но разница $\Delta E_\text{п}$ между двумя положениями всегда одинакова. Именно поэтому нулевой уровень выбирают там, где удобно: обычно там, куда тело падает.</p>
<p><b>Пружина тоже хранит энергию — и квадратично</b><br>
Растянул пружину в 2 раза сильнее — энергия выросла в 4 раза ($E_\text{п} = kx^2/2$). Это не линейно! Поэтому взведённый арбалет опасен сильнее, чем кажется: маленькая дополнительная деформация даёт большой прирост энергии.</p>
<p><b>$\Delta E_\text{п} = -A$: почему минус?</b><br>
Тело падает → сила тяжести совершает работу $A > 0$ (помогает движению) → потенциальная энергия уменьшается $\Delta E_\text{п} < 0$. Энергия «потратилась» на работу. Знак минус это просто способ сказать: что потратил на работу, то убыло из запаса.</p>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-calculator"></i> Пример решения задачи</div>
<div class="example-box">
<h3>Работа внешней силы и изменение $E_\text{п}$ пружины</h3>
<div class="cond">
Пружину жёсткостью $k = 200\,\text{Н/м}$ растянули с $l_0 = 16\,\text{см}$ до $l = 20\,\text{см}$. Найдите работу внешней силы, работу силы упругости и изменение потенциальной энергии.
</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span>Деформация (не путать с полной длиной!):<br>$x = l - l_0 = 0{,}20 - 0{,}16 = 0{,}04\,\text{м}$</span></li>
<li><span class="step-n">2</span><span>Работа внешней силы = прирост $E_\text{п}$ пружины:\[A_\text{внеш} = \frac{kx^2}{2} = \frac{200\cdot0{,}04^2}{2} = 0{,}16\,\text{Дж}\]</span></li>
<li><span class="step-n">3</span><span>Сила упругости — против деформации, значит работает против: $A_\text{упр} = -0{,}16\,\text{Дж}$</span></li>
<li><span class="step-n">4</span><span>$\Delta E_\text{п} = -A_\text{упр} = -(-0{,}16) = +0{,}16\,\text{Дж}$ — энергия выросла. ✓</span></li>
</ol>
</div>
</div>
<div class="example-box">
<h3>Определить массу тела по работе при подъёме</h3>
<div class="cond">
При медленном подъёме камня из ямы глубиной $h = 2{,}0\,\text{м}$ совершена работа $A = 100\,\text{Дж}$, $g = 10\,\text{м/с}^2$. Найдите массу камня.
</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span>При равномерном подъёме сила равна весу, поэтому $A = mgh$.</span></li>
<li><span class="step-n">2</span><span>Выражаем массу:\[m = \frac{A}{gh} = \frac{100}{10\cdot2{,}0} = 5{,}0\,\text{кг}\]</span></li>
</ol>
</div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-list-check"></i> Главные выводы</div>
<div class="def-box" style="border-left-color:#10b981">
1. Потенциальная энергия характеризует способность тела совершать работу.<br>
2. Потенциальная энергия равна работе сил взаимодействия при переходе тела на нулевой уровень.<br>
3. Изменение потенциальной энергии равно работе сил взаимодействия, взятой с противоположным знаком: $\Delta E_\text{п} = -A$.
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-question-circle"></i> Контрольные вопросы</div>
<ol class="q-list">
<li>В каких случаях тело обладает потенциальной энергией?</li>
<li>Как определить потенциальную энергию любого тела? От чего она зависит?</li>
<li>Чему равна потенциальная энергия тела в системе «тело + Земля»?</li>
<li>Чему равна потенциальная энергия упруго деформированного тела?</li>
<li>Почему значение потенциальной энергии зависит от выбора нулевого уровня, а её изменение — нет?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §35 — ТЕОРИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref35">
<div class="para-hero ph-35">
<div class="ph-label">§35 · Физика 9 кл</div>
<h2>Кинетическая энергия. Полная энергия системы тел</h2>
<div class="ph-formula">$E_\text{к} = \dfrac{mv^2}{2}$</div>
<div class="ph-desc">Кинетическая энергия — это «энергия движения». Она зависит от скорости квадратично:<br>удвоить скорость — значит учетверить энергию.</div>
<div class="ph-tags">
<span class="ph-tag">📐 [Eк] = Дж</span>
<span class="ph-tag">📈 пропорциональна v²</span>
<span class="ph-tag">⚡ теорема ΔEк = Aрез</span>
</div>
</div>
<div class="section-title"><i class="fas fa-bolt"></i> §35. Кинетическая энергия</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>Кинетическая энергия</h3>
<div class="main-f">$E_\text{к} = \dfrac{mv^2}{2}$</div>
<p><b>Скалярная</b> величина, всегда $\geq 0$.</p>
<p>$[E_\text{к}] = \text{Дж}$</p>
<p style="margin-top:6px;font-size:.79rem">$m$ — масса тела, $v$ — скорость</p>
</div>
<div class="fcard highlight">
<h3>Теорема о кинетической энергии</h3>
<div class="main-f">$\Delta E_\text{к} = A_\text{рез}$</div>
<p>Изменение $E_\text{к}$ равно <b>работе результирующей всех сил</b>.</p>
<p style="margin-top:5px;font-size:.79rem">$\dfrac{mv^2}{2} - \dfrac{mv_0^2}{2} = A_\text{рез}$</p>
</div>
<div class="fcard">
<h3>Механическая энергия</h3>
<div class="main-f">$E_\text{мех} = E_\text{к} + E_\text{п}$</div>
<p>Сумма кинетической и потенциальной энергии тела (или системы).</p>
<p style="margin-top:5px;font-size:.79rem">$E_\text{мех} = \dfrac{mv^2}{2} + mgh$</p>
</div>
<div class="fcard">
<h3>Полная энергия системы</h3>
<div class="main-f">$E = E_\text{мех} + E_\text{внутр}$</div>
<p><b>Полная энергия</b> системы тел включает механическую и внутреннюю (тепловую) энергию.</p>
<p style="margin-top:5px;font-size:.79rem">$E = \text{const}$ — закон сохранения энергии</p>
</div>
</div>
<!-- ── ИНТЕРАКТИВНЫЙ КАЛЬКУЛЯТОР Eк ── -->
<div class="idiag">
<h3><i class="fas fa-sliders"></i> Калькулятор кинетической энергии</h3>
<div class="slider-row">
<span class="slider-lbl">Масса m:</span>
<input type="range" min="1" max="20" step="1" value="5" id="sl35m" oninput="upd35()">
<span class="slider-val" id="v35m">5 кг</span>
</div>
<div class="slider-row">
<span class="slider-lbl">Скорость v:</span>
<input type="range" min="0" max="30" step="1" value="10" id="sl35v" oninput="upd35()">
<span class="slider-val" id="v35v">10 м/с</span>
</div>
<div class="idiag-result" id="res35">Eк = 5 × 100 / 2 = <b style="font-size:1.1em;color:var(--pri)">250</b> Дж</div>
<!-- Полоска энергии -->
<div style="margin-top:10px;background:rgba(29,78,216,.07);border-radius:9px;height:22px;overflow:hidden;position:relative">
<div id="bar35" style="height:100%;background:linear-gradient(90deg,#6d28d9,#8b5cf6);border-radius:9px;transition:width .3s;width:25%"></div>
</div>
<div style="font-size:.73rem;color:var(--muted);margin-top:5px;text-align:right">Шкала: 0 — 4 500 Дж</div>
<!-- Сравнение: удвоение скорости -->
<div class="student-box" style="margin-top:14px">
<div class="student-box-title"><i class="fas fa-lightbulb"></i> Ключевое наблюдение</div>
<p>Скорость удвоить (×2) → $E_\text{к}$ увеличится <b>в 4 раза</b>.</p>
<p>Скорость утроить (×3) → $E_\text{к}$ увеличится <b>в 9 раз</b>.</p>
<p>Это потому что $E_\text{к} \sim v^2$ — зависит от квадрата скорости!</p>
</div>
</div>
<!-- ── ТЕОРЕМА О Eк: ЦЕПОЧКА ── -->
<div class="section-title"><i class="fas fa-link"></i> Как применять теорему о Eк</div>
<div class="fchain">
<span class="fchain-step">$A_\text{рез} = F_\text{рез}\,\Delta r$</span>
<span class="fchain-arrow"></span>
<span class="fchain-step">$A_\text{рез} = \Delta E_\text{к}$</span>
<span class="fchain-arrow"></span>
<span class="fchain-step">$A_\text{рез} = \dfrac{mv^2}{2} - \dfrac{mv_0^2}{2}$</span>
<span class="fchain-note">Работа всех сил = изменение Eк</span>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-circle"></i> Запомни!</div>
<ul>
<li>В теореме учитывается работа <b>ВСЕХ</b> сил, а не только одной.</li>
<li>$E_\text{к}$ скалярная и всегда $\geq 0$; импульс $\vec{p}$ — векторный.</li>
<li>$E_\text{к}$ пропорциональна $v^2$: скорость ×2 → $E_\text{к}$ ×4.</li>
</ul>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-calculator"></i> Пример решения</div>
<div class="example-box">
<h3>Поезд разгоняется до скорости</h3>
<div class="cond">
Поезд массой $m = 600\,\text{т} = 6\cdot10^5\,\text{кг}$ разгоняется с нуля до скорости $v = 54\,\text{км/ч} = 15\,\text{м/с}$. Найдите кинетическую энергию поезда и работу тяговых сил.
</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span>$E_\text{к} = \dfrac{mv^2}{2} = \dfrac{6\cdot10^5 \cdot 15^2}{2} = \dfrac{6\cdot10^5 \cdot 225}{2} = 6{,}75\cdot10^7\,\text{Дж} = 67{,}5\,\text{МДж}$</span></li>
<li><span class="step-n">2</span><span>По теореме о кинетической энергии: $A = \Delta E_\text{к} = E_\text{к} - 0 = 6{,}75\cdot10^7\,\text{Дж}$</span></li>
</ol>
</div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-question-circle"></i> Контрольные вопросы</div>
<ol class="q-list">
<li>Что такое кинетическая энергия? В каких единицах она измеряется?</li>
<li>Как изменится кинетическая энергия тела при увеличении его скорости в 3 раза?</li>
<li>Что гласит теорема о кинетической энергии? Какова её связь со 2-м законом Ньютона?</li>
<li>Что такое механическая энергия? Из каких частей она состоит?</li>
<li>Может ли кинетическая энергия тела быть отрицательной?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: §36 — ТЕОРИЯ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-ref36">
<div class="para-hero ph-36">
<div class="ph-label">§36 · Физика 9 кл</div>
<h2>Закон сохранения энергии</h2>
<div class="ph-formula">$E_\text{мех} = \text{const}$</div>
<div class="ph-desc">В замкнутой системе без трения полная механическая энергия не изменяется.<br>Кинетическая и потенциальная энергии непрерывно переходят друг в друга.</div>
<div class="ph-tags">
<span class="ph-tag">🔄 Eк ↔ Eп</span>
<span class="ph-tag">⚡ без трения: Eмех = const</span>
<span class="ph-tag">🌡 с трением: ΔEмех = Aвнеш</span>
</div>
</div>
<div class="section-title"><i class="fas fa-scale-balanced"></i> §36. Закон сохранения механической энергии</div>
<div class="formula-grid">
<div class="fcard highlight">
<h3>ЗСЭ — замкнутая система (без трения)</h3>
<div class="main-f">$E_\text{мех} = \text{const}$</div>
<p>$E_{\text{к}1} + E_{\text{п}1} = E_{\text{к}2} + E_{\text{п}2}$</p>
<p style="margin-top:5px;font-size:.79rem">Условие: <b>только консервативные силы</b> (тяжесть и упругость).</p>
</div>
<div class="fcard">
<h3>ЗСЭ с трением</h3>
<div class="main-f">$\Delta E_\text{мех} = A_\text{внеш}$</div>
<p>Изменение мех. энергии равно работе <b>внешних (диссипативных) сил</b>.</p>
<p style="margin-top:5px;font-size:.79rem">$A_\text{тр} < 0$ $E_\text{мех}$ уменьшается энергия уходит в тепло.</p>
</div>
<div class="fcard">
<h3>Закон сохранения полной энергии</h3>
<div class="main-f">$E_\text{полн} = \text{const}$</div>
<p>$E_\text{полн} = E_\text{мех} + E_\text{внутр}$</p>
<p style="margin-top:5px;font-size:.79rem">Полная энергия сохраняется <b>всегда</b>, в любой системе.</p>
</div>
<div class="fcard">
<h3>Практические следствия</h3>
<div class="main-f" style="font-size:.9rem">$v = \sqrt{2gh}$</div>
<p>Скорость тела, упавшего с высоты $h$ (начальная скорость = 0, без трения).</p>
<p style="margin-top:5px;font-size:.79rem">Из: $mgh = \dfrac{mv^2}{2}$</p>
</div>
</div>
<!-- ── АНИМАЦИЯ: МАЯТНИК ── -->
<div class="idiag">
<h3><i class="fas fa-circle-notch"></i> Маятник: превращение Eк ↔ Eп</h3>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start">
<div>
<svg id="svgPend36" width="100%" viewBox="0 0 200 220" style="display:block">
<!-- Потолок -->
<rect x="0" y="0" width="200" height="14" fill="#94a3b8" rx="2"/>
<rect x="93" y="0" width="14" height="14" fill="#64748b"/>
<!-- Нить (динамическая) -->
<line id="pend-rope" x1="100" y1="14" x2="100" y2="165" stroke="#64748b" stroke-width="2.5"/>
<!-- Шар -->
<circle id="pend-ball" cx="100" cy="165" r="15" fill="#ddd6fe" stroke="#6d28d9" stroke-width="2.5"/>
<!-- Уровень равновесия (пунктир) -->
<line x1="10" y1="165" x2="190" y2="165" stroke="#94a3b8" stroke-width="1" stroke-dasharray="4,3"/>
<text x="150" y="160" font-size="8" fill="#94a3b8" font-family="Inter">h = 0</text>
<!-- Высота h -->
<line id="pend-hline" x1="160" y1="165" x2="160" y2="165" stroke="#0f766e" stroke-width="2" stroke-dasharray="3,2"/>
<text id="pend-hlbl" x="165" y="165" font-size="9" fill="#0f766e" font-family="Inter" font-weight="700"></text>
<!-- Скорость -->
<line id="pend-vline" x1="100" y1="165" x2="100" y2="165" stroke="#6d28d9" stroke-width="2.5"/>
<polygon id="pend-varr" points="100,165 96,165 98,165" fill="#6d28d9"/>
<!-- Метки Eк и Eп -->
<text id="pend-ek" x="6" y="200" font-size="9" fill="#6d28d9" font-family="Inter" font-weight="700"></text>
<text id="pend-ep" x="6" y="213" font-size="9" fill="#0f766e" font-family="Inter" font-weight="700"></text>
</svg>
<button class="btn btn-ghost" id="pendBtn36" onclick="togglePend36()" style="width:100%;margin-top:6px;font-size:.78rem">
<i class="fas fa-play"></i> Запустить
</button>
</div>
<div style="padding-top:10px">
<div style="font-size:.83rem;font-weight:600;margin-bottom:10px">Энергия в точках:</div>
<!-- Шкала Eк -->
<div style="font-size:.78rem;color:var(--muted);margin-bottom:4px">Eк (кинетическая)</div>
<div style="background:rgba(109,40,217,.1);border-radius:8px;height:16px;overflow:hidden;margin-bottom:10px">
<div id="bar-ek36" style="height:100%;background:linear-gradient(90deg,#6d28d9,#8b5cf6);border-radius:8px;transition:width .1s;width:0%"></div>
</div>
<!-- Шкала Eп -->
<div style="font-size:.78rem;color:var(--muted);margin-bottom:4px">Eп (потенциальная)</div>
<div style="background:rgba(15,118,110,.1);border-radius:8px;height:16px;overflow:hidden;margin-bottom:14px">
<div id="bar-ep36" style="height:100%;background:linear-gradient(90deg,#0f766e,#2dd4bf);border-radius:8px;transition:width .1s;width:100%"></div>
</div>
<!-- Итог -->
<div class="idiag-result" id="sum-e36" style="font-size:.8rem">Eмех = const</div>
<div class="student-box" style="margin-top:10px">
<div class="student-box-title" style="font-size:.8rem"><i class="fas fa-lightbulb"></i> Наблюдение</div>
<p style="font-size:.78rem">В высшей точке: <b>Eп max, Eк = 0</b></p>
<p style="font-size:.78rem">В нижней точке: <b>Eк max, Eп = 0</b></p>
<p style="font-size:.78rem">Сумма Eк + Eп = const всегда!</p>
</div>
</div>
</div>
</div>
<!-- ── ПРИМЕР С ТРЕНИЕМ ── -->
<div class="section-title"><i class="fas fa-fire"></i> Закон сохранения с трением</div>
<div class="def-box" style="border-left-color:#ef4444">
При наличии <b>сил трения</b> механическая энергия убывает — переходит во внутреннюю (тепловую) энергию. Но <b>полная</b> энергия системы по-прежнему сохраняется: <span style="font-size:.95em">$E_\text{полн} = E_\text{мех} + E_\text{внутр} = \text{const}$</span>.
</div>
<div class="fchain">
<span class="fchain-step">$E_{\text{мех}1}$</span>
<span class="fchain-arrow">+</span>
<span class="fchain-step">$A_\text{тр}$</span>
<span class="fchain-arrow">=</span>
<span class="fchain-step">$E_{\text{мех}2}$</span>
<span class="fchain-note">$A_\text{тр} < 0$ трение уменьшает Eмех</span>
</div>
<div class="remember-box">
<div class="remember-box-title"><i class="fas fa-exclamation-circle"></i> Запомни!</div>
<ul>
<li>Без трения: $E_\text{к} + E_\text{п} = \text{const}$ — можно писать равенство в двух точках.</li>
<li>С трением: $\Delta E_\text{мех} = A_\text{тр}$ — часть энергии ушла в теплоту.</li>
<li>Полная энергия $E_\text{полн}$ сохраняется <b>всегда</b>.</li>
</ul>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-calculator"></i> Пример решения</div>
<div class="example-box">
<h3>Шарик бросают вертикально вверх</h3>
<div class="cond">
Шарик массой $m = 0{,}5\,\text{кг}$ бросают вертикально вверх с начальной скоростью $v_0 = 20\,\text{м/с}$. $g = 10\,\text{м/с}^2$. Нет трения. Найдите максимальную высоту подъёма.
</div>
<div class="sol">
<ol class="sol-steps">
<li><span class="step-n">1</span><span>В высшей точке скорость = 0: $E_{\text{к}2} = 0$. Нулевой уровень — точка бросания: $E_{\text{п}1} = 0$.</span></li>
<li><span class="step-n">2</span><span>По ЗСЭ: $E_{\text{к}1} + E_{\text{п}1} = E_{\text{к}2} + E_{\text{п}2}$<br>
$\dfrac{mv_0^2}{2} + 0 = 0 + mgh_{\max}$</span></li>
<li><span class="step-n">3</span><span>$h_{\max} = \dfrac{v_0^2}{2g} = \dfrac{400}{20} = 20\,\text{м}$</span></li>
</ol>
</div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-question-circle"></i> Контрольные вопросы</div>
<ol class="q-list">
<li>При каком условии сохраняется механическая энергия системы тел?</li>
<li>Что происходит с механической энергией при наличии сил трения?</li>
<li>Как связаны кинетическая и потенциальная энергия тела при его падении?</li>
<li>Куда «исчезает» механическая энергия при торможении автомобиля?</li>
<li>Чем отличается механическая энергия от полной энергии системы?</li>
</ol>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: ЛАБОРАТОРИЯ №11 — Проверка ЗСИ
══════════════════════════════════════════════════ -->
<div class="content" id="tab-lab11">
<div class="para-hero ph-lab">
<div class="ph-label">🔬 Лабораторная работа № 11</div>
<h2>Проверка закона сохранения импульса</h2>
<div class="ph-formula">$m_1 l_1 = m_1 l_1' + m_2 l_2'$</div>
<div class="ph-desc">Шар скатывается с лотка и сталкивается у края стола со вторым шаром. По дальностям полёта проверяем ЗСИ и вычисляем погрешности.</div>
<div class="ph-tags">
<span class="ph-tag">Задачи 1–7 хода работы</span>
<span class="ph-tag">Анализ погрешностей</span>
<span class="ph-tag">H = 15 см (фиксировано)</span>
</div>
</div>
<div class="fcard" style="margin-bottom:16px">
<h3>📋 Принцип метода</h3>
<p style="font-size:.84rem;line-height:1.85;margin-top:8px;color:var(--text)">
Оба шара вылетают горизонтально с одной высоты H, поэтому время полёта одинаково:
$t = \sqrt{2H/g}$. Скорость пропорциональна дальности: $v = l/t$.
Подставляя в ЗСИ $m_1 v_0 = m_1 v_1' + m_2 v_2'$, получаем рабочую формулу:
</p>
<div style="text-align:center;margin:10px 0;padding:10px 16px;background:rgba(185,28,28,.07);border-radius:9px;font-size:1.05rem;font-weight:800">
$m_1 l_1 = m_1 l_1' + m_2 l_2'$
</div>
<p style="font-size:.82rem;color:var(--muted);margin-top:6px">
$l_1$ — дальность шара 1 <em>без</em> столкновения; $l_1'$, $l_2'$ — дальности шаров <em>после</em> столкновения.
</p>
</div>
<div class="idiag">
<h3><i class="fas fa-drafting-compass"></i> Виртуальная установка — траектории</h3>
<canvas id="cvLab11" width="540" height="195" style="width:100%;border-radius:10px;display:block;background:var(--bg)"></canvas>
<div style="margin-top:14px;display:grid;grid-template-columns:1fr 1fr;gap:6px 18px">
<div class="slider-row">
<span class="slider-lbl" style="min-width:56px">m₁</span>
<input type="range" id="l11m1" min="100" max="400" value="200" step="10" oninput="updLab11()">
<span class="slider-val" id="l11m1v">200</span><span style="font-size:.76rem;color:var(--muted);margin-left:2px">г</span>
</div>
<div class="slider-row">
<span class="slider-lbl" style="min-width:56px">m₂</span>
<input type="range" id="l11m2" min="50" max="300" value="100" step="10" oninput="updLab11()">
<span class="slider-val" id="l11m2v">100</span><span style="font-size:.76rem;color:var(--muted);margin-left:2px">г</span>
</div>
<div class="slider-row" style="grid-column:1/3">
<span class="slider-lbl" style="min-width:56px">h лотка</span>
<input type="range" id="l11h" min="5" max="25" value="15" step="1" oninput="updLab11()">
<span class="slider-val" id="l11hv">15</span><span style="font-size:.76rem;color:var(--muted);margin-left:2px">см</span>
</div>
</div>
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px;font-size:.82rem">
<div class="idiag-result">l₁ = <b id="l11r1"></b> м</div>
<div class="idiag-result">l₁' = <b id="l11r1p"></b> м</div>
<div class="idiag-result">l₂' = <b id="l11r2p"></b> м</div>
</div>
</div>
<div style="margin:20px 0">
<div class="section-title"><i class="fas fa-table-list"></i> Таблица измерений</div>
<div style="overflow-x:auto;border-radius:12px;border:1px solid var(--border)">
<table class="lab11-tbl">
<thead><tr>
<th></th><th>m₁, кг</th><th>m₂, кг</th>
<th>l₁, м</th><th>l₁', м</th><th>l₂', м</th>
</tr></thead>
<tbody id="lab11tb"></tbody>
</table>
</div>
<div style="display:flex;gap:10px;margin-top:12px;flex-wrap:wrap;align-items:center">
<button class="btn btn-pri" id="lab11b1" onclick="lab11add()"><i class="fas fa-flask"></i> Провести опыт</button>
<button class="btn btn-ghost" onclick="lab11all()"><i class="fas fa-forward-fast"></i> Все 5 опытов</button>
<button class="btn btn-ghost" style="margin-left:auto" onclick="lab11reset()"><i class="fas fa-rotate-right"></i> Сначала</button>
</div>
</div>
<div id="lab11vrf" style="display:none">
<hr class="divider">
<div class="section-title"><i class="fas fa-check-double"></i> Проверка закона и погрешности</div>
<div id="lab11nb"></div>
<div id="lab11cn" style="padding:14px 18px;border-radius:12px;font-size:.88rem;font-weight:700;line-height:1.7;margin-top:12px"></div>
</div>
<hr class="divider">
<div class="section-title"><i class="fas fa-question-circle"></i> Контрольные вопросы</div>
<ol class="q-list">
<li>Как направлен импульс тела?</li>
<li>При каких условиях выполняется закон сохранения импульса?</li>
<li>Почему для системы двух шаров можно применять закон сохранения импульса?</li>
</ol>
<hr class="divider">
<div class="section-title"><i class="fas fa-star"></i> Суперзадание</div>
<div style="background:var(--card);border:2px solid var(--warn);border-radius:12px;padding:16px 20px;font-size:.93rem;line-height:1.75">
Можно ли утверждать, что суммарный импульс шаров не будет изменяться и при их дальнейшем полёте по параболической траектории вплоть до соударения с поверхностью стола? Ответ аргументируйте.
</div>
<div style="text-align:center;margin-top:12px">
<button onclick="toggleSuperAns()" id="superAnsBtn" style="background:var(--pri);color:#fff;border:none;border-radius:10px;padding:9px 22px;font-size:.88rem;font-weight:700;cursor:pointer;transition:filter .15s">
<i class="fas fa-lightbulb"></i>&nbsp; Показать решение
</button>
</div>
<div id="superAns" style="display:none;margin-top:14px">
<div class="nb-wrap">
<div class="nb-hdr">📐&nbsp; Решение</div>
<div style="background:var(--warn-bg);border-left:4px solid var(--warn);border-radius:0 8px 8px 0;padding:12px 16px;margin:12px 0;font-size:.91rem;line-height:1.7;color:#78350f">
<b>Ответ: нет — суммарный вектор импульса изменяется.</b><br>
Однако горизонтальная составляющая суммарного импульса остаётся постоянной, и именно она измеряется в опыте.
</div>
<hr class="nb-div">
<div class="nb-sh">Аргументация:</div>
<div class="nb-step">
<b>1.&nbsp; Какие силы действуют на шары в полёте?</b><br>
<span class="nb-i">После удара оба шара летят по параболе. На каждый из них действует <em>только сила тяжести</em> (трение воздуха пренебрежимо мало).</span>
<span class="nb-i">Сила тяжести — <em>внешняя</em> сила по отношению к системе «шар 1 + шар 2».</span>
</div>
<div class="nb-step">
<b>2.&nbsp; Как изменяется суммарный вектор импульса?</b><br>
<span class="nb-i">По второму закону Ньютона для системы тел:</span>
<span class="nb-i" style="font-style:normal">&nbsp;&nbsp;&nbsp;<span class="nb-box">Δ<b>p</b>&nbsp;= <b>F</b><sub>внеш</sub>·Δt = (m₁+m₂)·<b>g</b>·Δt</span></span>
<span class="nb-i">За каждую секунду полёта суммарный импульс приобретает направленную <em>вертикально вниз</em> добавку. Значит, суммарный вектор импульса непрерывно изменяется.</span>
</div>
<div class="nb-step">
<b>3.&nbsp; Почему опыт всё равно верифицирует закон сохранения импульса?</b><br>
<span class="nb-i">Сила тяжести направлена строго вертикально → горизонтальная проекция внешней силы равна нулю:</span>
<span class="nb-i" style="font-style:normal">&nbsp;&nbsp;&nbsp;<span class="nb-box">F<sub>внеш, x</sub> = 0 &nbsp;&nbsp; p<sub>1x</sub> + p<sub>2x</sub> = const</span></span>
<span class="nb-i">Горизонтальные скорости шаров <em>не меняются</em> в течение всего полёта.</span>
<span class="nb-i">Горизонтальная дальность l = v<sub>x</sub> · t<sub>пад</sub>, причём <em>время падения одинаково</em> для обоих шаров (одна высота стола).</span>
<span class="nb-i">Следовательно, l ∝ v<sub>x</sub> ∝ p<sub>x</sub> — расстояния пропорциональны горизонтальным импульсам, которые и сохраняются.</span>
</div>
<!-- SVG диаграмма -->
<div style="margin:14px 0 6px;text-align:center">
<svg width="420" height="160" viewBox="0 0 420 160" style="max-width:100%;font-family:inherit">
<!-- стол -->
<rect x="0" y="68" width="120" height="6" fill="var(--pri)" rx="2"/>
<rect x="0" y="74" width="120" height="80" fill="rgba(29,78,216,.07)" rx="2"/>
<!-- пол -->
<line x1="120" y1="154" x2="420" y2="154" stroke="var(--border)" stroke-width="2"/>
<!-- вертикальная линия края стола -->
<line x1="120" y1="74" x2="120" y2="154" stroke="var(--border)" stroke-width="1.5" stroke-dasharray="4,3"/>
<!-- траектория шар 1 (быстрый) -->
<path d="M120 71 Q210 71 310 154" fill="none" stroke="var(--pri)" stroke-width="2.2" stroke-dasharray="6,3"/>
<!-- траектория шар 2 (медленнее) -->
<path d="M120 71 Q175 71 240 154" fill="none" stroke="var(--acc)" stroke-width="2.2" stroke-dasharray="6,3"/>
<!-- точка удара -->
<circle cx="120" cy="71" r="5" fill="var(--warn)" stroke="#fff" stroke-width="1.5"/>
<!-- стрелка g -->
<line x1="380" y1="40" x2="380" y2="90" stroke="#ef4444" stroke-width="2"/>
<polygon points="380,95 375,83 385,83" fill="#ef4444"/>
<text x="387" y="72" font-size="13" fill="#ef4444" font-weight="700">g</text>
<!-- стрелка p_total (меняется) -->
<line x1="200" y1="95" x2="200" y2="130" stroke="#ef4444" stroke-width="1.5" stroke-dasharray="3,2"/>
<line x1="200" y1="95" x2="255" y2="95" stroke="var(--pri)" stroke-width="1.5"/>
<line x1="200" y1="95" x2="248" y2="127" stroke="#6d28d9" stroke-width="2"/>
<polygon points="248,132 241,122 252,120" fill="#6d28d9"/>
<text x="258" y="131" font-size="11" fill="#6d28d9" font-weight="700">p&#x20D7;&#x2211;</text>
<text x="257" y="93" font-size="10" fill="var(--pri)">p&#x20D7;<tspan font-size="9">&#x2211;x</tspan></text>
<text x="178" y="133" font-size="10" fill="#ef4444">Δp&#x20D7;<tspan font-size="9">&#x2211;</tspan></text>
<!-- метки шаров -->
<text x="315" y="150" font-size="11" fill="var(--pri)" font-weight="700">шар 1</text>
<text x="243" y="150" font-size="11" fill="var(--acc)" font-weight="700">шар 2</text>
<!-- удар -->
<text x="126" y="66" font-size="11" fill="var(--warn)" font-weight="700">удар</text>
</svg>
<div style="font-size:.78rem;color:var(--muted);margin-top:2px">
p⃗<sub></sub> — суммарный вектор импульса нарастает вниз; горизонтальная составляющая p<sub>∑x</sub> постоянна
</div>
</div>
<div class="nb-ans" style="background:var(--ok-bg);border-color:var(--ok);color:#065f46">
<b>Вывод:</b> Суммарный <em>вектор</em> импульса системы изменяется под действием силы тяжести. Но его горизонтальная составляющая сохраняется во всё время полёта. Именно это свойство лежит в основе опыта: расстояния на столе отражают горизонтальные скорости, а горизонтальные импульсы не изменяются ни во время удара, ни после него.
</div>
</div>
</div>
</div>
<!-- ══════════════════════════════════════════════════
ТАБ: ЗАДАЧИ (единый)
══════════════════════════════════════════════════ -->
<div class="content" id="tab-tasks">
<!-- Переключатель параграфов — карточки глав -->
<div class="para-selector">
<div class="psel-grid">
<!-- I. Кинематика §114 -->
<div class="psel-card psel-c1">
<div class="psel-card-hdr">
<span class="psel-card-title">Кинематика</span>
<span class="psel-card-sub">§114</span>
</div>
<div class="psel-card-pills">
<button class="para-pill active" data-para="p1" onclick="setParaTab('p1')" title="Механическое движение">§1</button>
<button class="para-pill" data-para="p2" onclick="setParaTab('p2')" title="Относительность движения">§2</button>
<button class="para-pill" data-para="p3" onclick="setParaTab('p3')" title="Скаляры и векторы">§3</button>
<button class="para-pill" data-para="p4" onclick="setParaTab('p4')" title="Проекции вектора">§4</button>
<button class="para-pill" data-para="p5" onclick="setParaTab('p5')" title="Путь и перемещение">§5</button>
<button class="para-pill" data-para="p6" onclick="setParaTab('p6')" title="Равномерное движение">§6</button>
<button class="para-pill" data-para="p7" onclick="setParaTab('p7')" title="Движение двух тел">§7</button>
<button class="para-pill" data-para="p8" onclick="setParaTab('p8')" title="Средняя скорость">§8</button>
<button class="para-pill" data-para="p9" onclick="setParaTab('p9')" title="Сложение скоростей">§9</button>
<button class="para-pill" data-para="p10" onclick="setParaTab('p10')" title="Ускорение">§10</button>
<button class="para-pill" data-para="p11" onclick="setParaTab('p11')" title="Равноускоренное движение: скорость">§11</button>
<button class="para-pill" data-para="p12" onclick="setParaTab('p12')" title="Равноускоренное движение: x(t)">§12</button>
<button class="para-pill" data-para="p13" onclick="setParaTab('p13')" title="Движение по окружности">§13</button>
<button class="para-pill" data-para="p14" onclick="setParaTab('p14')" title="Центростремительное ускорение">§14</button>
</div>
</div>
<!-- II. Динамика §1521 -->
<div class="psel-card psel-c2">
<div class="psel-card-hdr">
<span class="psel-card-title">Динамика</span>
<span class="psel-card-sub">§1521</span>
</div>
<div class="psel-card-pills">
<button class="para-pill" data-para="p15" onclick="setParaTab('p15')" title="Первый закон Ньютона">§15</button>
<button class="para-pill" data-para="p16" onclick="setParaTab('p16')" title="Масса. Плотность. Сила тяжести">§16</button>
<button class="para-pill" data-para="p17" onclick="setParaTab('p17')" title="Второй закон Ньютона">§17</button>
<button class="para-pill" data-para="p18" onclick="setParaTab('p18')" title="Третий закон Ньютона">§18</button>
<button class="para-pill" data-para="p19" onclick="setParaTab('p19')" title="Деформация. Закон Гука">§19</button>
<button class="para-pill" data-para="p20" onclick="setParaTab('p20')" title="Силы трения">§20</button>
<button class="para-pill" data-para="p21" onclick="setParaTab('p21')" title="Движение под действием силы тяжести">§21</button>
</div>
</div>
<!-- III. Тяготение §2224 -->
<div class="psel-card psel-c3">
<div class="psel-card-hdr">
<span class="psel-card-title">Тяготение</span>
<span class="psel-card-sub">§2224</span>
</div>
<div class="psel-card-pills">
<button class="para-pill" data-para="p22" onclick="setParaTab('p22')" title="Бросок под углом к горизонту">§22</button>
<button class="para-pill" data-para="p23" onclick="setParaTab('p23')" title="Закон всемирного тяготения">§23</button>
<button class="para-pill" data-para="p24" onclick="setParaTab('p24')" title="Вес тела. Невесомость">§24</button>
</div>
</div>
<!-- IV. Статика §2527 -->
<div class="psel-card psel-c4">
<div class="psel-card-hdr">
<span class="psel-card-title">Статика</span>
<span class="psel-card-sub">§2527</span>
</div>
<div class="psel-card-pills">
<button class="para-pill" data-para="p25" onclick="setParaTab('p25')" title="Момент силы. Условия равновесия">§25</button>
<button class="para-pill" data-para="p26" onclick="setParaTab('p26')" title="Рычаги и блоки">§26</button>
<button class="para-pill" data-para="p27" onclick="setParaTab('p27')" title="Наклонная плоскость. КПД">§27</button>
</div>
</div>
<!-- V. Гидростатика §28–30 -->
<div class="psel-card psel-c5">
<div class="psel-card-hdr">
<span class="psel-card-title">Гидростатика</span>
<span class="psel-card-sub">§2830</span>
</div>
<div class="psel-card-pills">
<button class="para-pill" data-para="p28" onclick="setParaTab('p28')" title="Центр тяжести. Виды равновесия">§28</button>
<button class="para-pill" data-para="p29" onclick="setParaTab('p29')" title="Закон Архимеда. Плавание тел">§29</button>
<button class="para-pill" data-para="p30" onclick="setParaTab('p30')" title="Плавание судов. Воздухоплавание">§30</button>
</div>
</div>
<!-- VI. Импульс & Энергия §3136 -->
<div class="psel-card psel-c6">
<div class="psel-card-hdr">
<span class="psel-card-title">Импульс & Энергия</span>
<span class="psel-card-sub">§3136</span>
</div>
<div class="psel-card-pills">
<button class="para-pill" data-para="p31" onclick="setParaTab('p31')" title="Импульс тела">§31</button>
<button class="para-pill" data-para="p32" onclick="setParaTab('p32')" title="Закон сохранения импульса">§32</button>
<button class="para-pill" data-para="p33" onclick="setParaTab('p33')" title="Механическая работа. Мощность">§33</button>
<button class="para-pill" data-para="p34" onclick="setParaTab('p34')" title="Потенциальная энергия">§34</button>
<button class="para-pill" data-para="p35" onclick="setParaTab('p35')" title="Кинетическая энергия">§35</button>
<button class="para-pill" data-para="p36" onclick="setParaTab('p36')" title="Закон сохранения энергии">§36</button>
</div>
</div>
</div>
<!-- Сложные задачи -->
<button class="para-pill psel-hard-card" data-para="hard" onclick="setParaTab('hard')">
<div class="psel-hard-icon"><i class="fas fa-bolt"></i></div>
<div class="psel-hard-body">
<div class="psel-hard-title">Сложные задачи</div>
<div class="psel-hard-sub">Все темы · §136</div>
</div>
<div class="psel-hard-arrow"><i class="fas fa-arrow-right"></i></div>
</button>
</div>
<!-- §1 -->
<div id="ptab-p1" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp1">0</span></div>
<div class="chip chip-tot"><span id="curp1">0</span>&nbsp;/&nbsp;<span id="maxp1">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p1')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp1" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp1"></div>
<div id="taskAreap1"></div>
<div class="feedback" id="fbp1"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp1" onclick="nextTask('p1')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump1">
<h2>§1 — готово!</h2>
<div class="big-score" id="sumScorep1"></div>
<div class="sum-grade" id="sumGradep1"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p1')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p2')">→ §2</button>
</div>
</div>
</div>
<!-- §2 -->
<div id="ptab-p2" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp2">0</span></div>
<div class="chip chip-tot"><span id="curp2">0</span>&nbsp;/&nbsp;<span id="maxp2">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p2')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp2" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp2"></div>
<div id="taskAreap2"></div>
<div class="feedback" id="fbp2"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp2" onclick="nextTask('p2')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump2">
<h2>§2 — готово!</h2>
<div class="big-score" id="sumScorep2"></div>
<div class="sum-grade" id="sumGradep2"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p2')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p3')">→ §3</button>
</div>
</div>
</div>
<!-- §3 -->
<div id="ptab-p3" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp3">0</span></div>
<div class="chip chip-tot"><span id="curp3">0</span>&nbsp;/&nbsp;<span id="maxp3">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p3')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp3" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp3"></div>
<div id="taskAreap3"></div>
<div class="feedback" id="fbp3"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp3" onclick="nextTask('p3')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump3">
<h2>§3 — готово!</h2>
<div class="big-score" id="sumScorep3"></div>
<div class="sum-grade" id="sumGradep3"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p3')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p4')">→ §4</button>
</div>
</div>
</div>
<!-- §4 -->
<div id="ptab-p4" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp4">0</span></div>
<div class="chip chip-tot"><span id="curp4">0</span>&nbsp;/&nbsp;<span id="maxp4">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p4')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp4" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp4"></div>
<div id="taskAreap4"></div>
<div class="feedback" id="fbp4"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp4" onclick="nextTask('p4')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump4">
<h2>§4 — готово!</h2>
<div class="big-score" id="sumScorep4"></div>
<div class="sum-grade" id="sumGradep4"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p4')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p5')">→ §5</button>
</div>
</div>
</div>
<!-- §5 -->
<div id="ptab-p5" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp5">0</span></div>
<div class="chip chip-tot"><span id="curp5">0</span>&nbsp;/&nbsp;<span id="maxp5">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p5')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp5" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp5"></div>
<div id="taskAreap5"></div>
<div class="feedback" id="fbp5"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp5" onclick="nextTask('p5')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump5">
<h2>§5 — готово!</h2>
<div class="big-score" id="sumScorep5"></div>
<div class="sum-grade" id="sumGradep5"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p5')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p6')">→ §6</button>
</div>
</div>
</div>
<!-- §6 -->
<div id="ptab-p6" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp6">0</span></div>
<div class="chip chip-tot"><span id="curp6">0</span>&nbsp;/&nbsp;<span id="maxp6">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p6')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp6" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp6"></div>
<div id="taskAreap6"></div>
<div class="feedback" id="fbp6"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp6" onclick="nextTask('p6')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump6">
<h2>§6 — готово!</h2>
<div class="big-score" id="sumScorep6"></div>
<div class="sum-grade" id="sumGradep6"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p6')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p7')">→ §7</button>
</div>
</div>
</div>
<!-- §7 -->
<div id="ptab-p7" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp7">0</span></div>
<div class="chip chip-tot"><span id="curp7">0</span>&nbsp;/&nbsp;<span id="maxp7">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p7')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp7" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp7"></div>
<div id="taskAreap7"></div>
<div class="feedback" id="fbp7"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp7" onclick="nextTask('p7')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump7">
<h2>§7 — готово!</h2>
<div class="big-score" id="sumScorep7"></div>
<div class="sum-grade" id="sumGradep7"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p7')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p8')">→ §8</button>
</div>
</div>
</div>
<!-- §8 -->
<div id="ptab-p8" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp8">0</span></div>
<div class="chip chip-tot"><span id="curp8">0</span>&nbsp;/&nbsp;<span id="maxp8">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p8')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp8" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp8"></div>
<div id="taskAreap8"></div>
<div class="feedback" id="fbp8"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp8" onclick="nextTask('p8')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump8">
<h2>§8 — готово!</h2>
<div class="big-score" id="sumScorep8"></div>
<div class="sum-grade" id="sumGradep8"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p8')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p9')">→ §9</button>
</div>
</div>
</div>
<!-- §9 -->
<div id="ptab-p9" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp9">0</span></div>
<div class="chip chip-tot"><span id="curp9">0</span>&nbsp;/&nbsp;<span id="maxp9">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p9')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp9" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp9"></div>
<div id="taskAreap9"></div>
<div class="feedback" id="fbp9"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp9" onclick="nextTask('p9')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump9">
<h2>§9 — готово!</h2>
<div class="big-score" id="sumScorep9"></div>
<div class="sum-grade" id="sumGradep9"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p9')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p10')">→ §10</button>
</div>
</div>
</div>
<!-- §10 -->
<div id="ptab-p10" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp10">0</span></div>
<div class="chip chip-tot"><span id="curp10">0</span>&nbsp;/&nbsp;<span id="maxp10">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p10')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp10" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp10"></div>
<div id="taskAreap10"></div>
<div class="feedback" id="fbp10"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp10" onclick="nextTask('p10')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump10">
<h2>§10 — готово!</h2>
<div class="big-score" id="sumScorep10"></div>
<div class="sum-grade" id="sumGradep10"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p10')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p11')">→ §11</button>
</div>
</div>
</div>
<!-- §11 -->
<div id="ptab-p11" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp11">0</span></div>
<div class="chip chip-tot"><span id="curp11">0</span>&nbsp;/&nbsp;<span id="maxp11">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p11')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp11" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp11"></div>
<div id="taskAreap11"></div>
<div class="feedback" id="fbp11"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp11" onclick="nextTask('p11')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump11">
<h2>§11 — готово!</h2>
<div class="big-score" id="sumScorep11"></div>
<div class="sum-grade" id="sumGradep11"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p11')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p12')">→ §12</button>
</div>
</div>
</div>
<!-- §12 -->
<div id="ptab-p12" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp12">0</span></div>
<div class="chip chip-tot"><span id="curp12">0</span>&nbsp;/&nbsp;<span id="maxp12">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p12')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp12" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp12"></div>
<div id="taskAreap12"></div>
<div class="feedback" id="fbp12"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp12" onclick="nextTask('p12')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump12">
<h2>§12 — готово!</h2>
<div class="big-score" id="sumScorep12"></div>
<div class="sum-grade" id="sumGradep12"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p12')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p13')">→ §13</button>
</div>
</div>
</div>
<!-- §13 -->
<div id="ptab-p13" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp13">0</span></div>
<div class="chip chip-tot"><span id="curp13">0</span>&nbsp;/&nbsp;<span id="maxp13">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p13')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp13" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp13"></div>
<div id="taskAreap13"></div>
<div class="feedback" id="fbp13"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp13" onclick="nextTask('p13')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump13">
<h2>§13 — готово!</h2>
<div class="big-score" id="sumScorep13"></div>
<div class="sum-grade" id="sumGradep13"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p13')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p14')">→ §14</button>
</div>
</div>
</div>
<!-- §14 -->
<div id="ptab-p14" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp14">0</span></div>
<div class="chip chip-tot"><span id="curp14">0</span>&nbsp;/&nbsp;<span id="maxp14">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p14')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp14" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp14"></div>
<div id="taskAreap14"></div>
<div class="feedback" id="fbp14"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp14" onclick="nextTask('p14')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump14">
<h2>§14 — готово!</h2>
<div class="big-score" id="sumScorep14"></div>
<div class="sum-grade" id="sumGradep14"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p14')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p15')">→ §15</button>
</div>
</div>
</div>
<!-- §15 -->
<div id="ptab-p15">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp15">0</span></div>
<div class="chip chip-tot"><span id="curp15">0</span>&nbsp;/&nbsp;<span id="maxp15">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p15')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp15" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp15"></div>
<div id="taskAreap15"></div>
<div class="feedback" id="fbp15"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp15" onclick="nextTask('p15')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump15">
<h2>§15 — готово!</h2>
<div class="big-score" id="sumScorep15"></div>
<div class="sum-grade" id="sumGradep15"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p15')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p16')">→ §16</button>
</div>
</div>
</div>
<!-- §16 -->
<div id="ptab-p16" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp16">0</span></div>
<div class="chip chip-tot"><span id="curp16">0</span>&nbsp;/&nbsp;<span id="maxp16">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p16')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp16" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp16"></div>
<div id="taskAreap16"></div>
<div class="feedback" id="fbp16"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp16" onclick="nextTask('p16')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump16">
<h2>§16 — готово!</h2>
<div class="big-score" id="sumScorep16"></div>
<div class="sum-grade" id="sumGradep16"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p16')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p17')">→ §17</button>
</div>
</div>
</div>
<!-- §17 -->
<div id="ptab-p17" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp17">0</span></div>
<div class="chip chip-tot"><span id="curp17">0</span>&nbsp;/&nbsp;<span id="maxp17">9</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p17')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp17" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp17"></div>
<div id="taskAreap17"></div>
<div class="feedback" id="fbp17"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp17" onclick="nextTask('p17')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump17">
<h2>§17 — готово!</h2>
<div class="big-score" id="sumScorep17"></div>
<div class="sum-grade" id="sumGradep17"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p17')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p18')">→ §18</button>
</div>
</div>
</div>
<!-- §18 -->
<div id="ptab-p18" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp18">0</span></div>
<div class="chip chip-tot"><span id="curp18">0</span>&nbsp;/&nbsp;<span id="maxp18">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p18')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp18" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp18"></div>
<div id="taskAreap18"></div>
<div class="feedback" id="fbp18"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp18" onclick="nextTask('p18')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump18">
<h2>§18 — готово!</h2>
<div class="big-score" id="sumScorep18"></div>
<div class="sum-grade" id="sumGradep18"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p18')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p19')">→ §19</button>
</div>
</div>
</div>
<!-- §19 -->
<div id="ptab-p19" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp19">0</span></div>
<div class="chip chip-tot"><span id="curp19">0</span>&nbsp;/&nbsp;<span id="maxp19">9</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p19')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp19" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp19"></div>
<div id="taskAreap19"></div>
<div class="feedback" id="fbp19"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp19" onclick="nextTask('p19')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump19">
<h2>§19 — готово!</h2>
<div class="big-score" id="sumScorep19"></div>
<div class="sum-grade" id="sumGradep19"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p19')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p20')">→ §20</button>
</div>
</div>
</div>
<!-- §20 -->
<div id="ptab-p20" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp20">0</span></div>
<div class="chip chip-tot"><span id="curp20">0</span>&nbsp;/&nbsp;<span id="maxp20">9</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p20')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp20" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp20"></div>
<div id="taskAreap20"></div>
<div class="feedback" id="fbp20"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp20" onclick="nextTask('p20')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump20">
<h2>§20 — готово!</h2>
<div class="big-score" id="sumScorep20"></div>
<div class="sum-grade" id="sumGradep20"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p20')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p21')">→ §21</button>
</div>
</div>
</div>
<!-- §21 -->
<div id="ptab-p21" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp21">0</span></div>
<div class="chip chip-tot"><span id="curp21">0</span>&nbsp;/&nbsp;<span id="maxp21">9</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p21')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp21" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp21"></div>
<div id="taskAreap21"></div>
<div class="feedback" id="fbp21"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp21" onclick="nextTask('p21')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump21">
<h2>§21 — готово!</h2>
<div class="big-score" id="sumScorep21"></div>
<div class="sum-grade" id="sumGradep21"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p21')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p22')">→ §22</button>
</div>
</div>
</div>
<!-- §22 -->
<div id="ptab-p22" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp22">0</span></div>
<div class="chip chip-tot"><span id="curp22">0</span>&nbsp;/&nbsp;<span id="maxp22">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p22')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp22" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp22"></div>
<div id="taskAreap22"></div>
<div class="feedback" id="fbp22"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp22" onclick="nextTask('p22')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump22">
<h2>§22 — готово!</h2>
<div class="big-score" id="sumScorep22"></div>
<div class="sum-grade" id="sumGradep22"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p22')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p23')">→ §23</button>
</div>
</div>
</div>
<!-- §23 -->
<div id="ptab-p23" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp23">0</span></div>
<div class="chip chip-tot"><span id="curp23">0</span>&nbsp;/&nbsp;<span id="maxp23">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p23')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp23" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp23"></div>
<div id="taskAreap23"></div>
<div class="feedback" id="fbp23"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp23" onclick="nextTask('p23')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump23">
<h2>§23 — готово!</h2>
<div class="big-score" id="sumScorep23"></div>
<div class="sum-grade" id="sumGradep23"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p23')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p24')">→ §24</button>
</div>
</div>
</div>
<!-- §24 -->
<div id="ptab-p24" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp24">0</span></div>
<div class="chip chip-tot"><span id="curp24">0</span>&nbsp;/&nbsp;<span id="maxp24">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p24')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp24" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp24"></div>
<div id="taskAreap24"></div>
<div class="feedback" id="fbp24"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp24" onclick="nextTask('p24')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump24">
<h2>§24 — готово!</h2>
<div class="big-score" id="sumScorep24"></div>
<div class="sum-grade" id="sumGradep24"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p24')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p25')">→ §25</button>
</div>
</div>
</div>
<!-- §25 -->
<div id="ptab-p25" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp25">0</span></div>
<div class="chip chip-tot"><span id="curp25">0</span>&nbsp;/&nbsp;<span id="maxp25">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p25')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp25" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp25"></div>
<div id="taskAreap25"></div>
<div class="feedback" id="fbp25"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp25" onclick="nextTask('p25')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump25">
<h2>§25 — готово!</h2>
<div class="big-score" id="sumScorep25"></div>
<div class="sum-grade" id="sumGradep25"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p25')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p26')">→ §26</button>
</div>
</div>
</div>
<!-- §26 -->
<div id="ptab-p26" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp26">0</span></div>
<div class="chip chip-tot"><span id="curp26">0</span>&nbsp;/&nbsp;<span id="maxp26">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p26')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp26" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp26"></div>
<div id="taskAreap26"></div>
<div class="feedback" id="fbp26"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp26" onclick="nextTask('p26')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump26">
<h2>§26 — готово!</h2>
<div class="big-score" id="sumScorep26"></div>
<div class="sum-grade" id="sumGradep26"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p26')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p27')">→ §27</button>
</div>
</div>
</div>
<!-- §27 -->
<div id="ptab-p27" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp27">0</span></div>
<div class="chip chip-tot"><span id="curp27">0</span>&nbsp;/&nbsp;<span id="maxp27">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p27')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp27" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp27"></div>
<div id="taskAreap27"></div>
<div class="feedback" id="fbp27"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp27" onclick="nextTask('p27')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump27">
<h2>§27 — готово!</h2>
<div class="big-score" id="sumScorep27"></div>
<div class="sum-grade" id="sumGradep27"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p27')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p28')">→ §28</button>
</div>
</div>
</div>
<!-- §28 -->
<div id="ptab-p28" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp28">0</span></div>
<div class="chip chip-tot"><span id="curp28">0</span>&nbsp;/&nbsp;<span id="maxp28">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p28')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp28" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp28"></div>
<div id="taskAreap28"></div>
<div class="feedback" id="fbp28"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp28" onclick="nextTask('p28')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump28">
<h2>§28 — готово!</h2>
<div class="big-score" id="sumScorep28"></div>
<div class="sum-grade" id="sumGradep28"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p28')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p29')">→ §29</button>
</div>
</div>
</div>
<!-- §29 -->
<div id="ptab-p29" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp29">0</span></div>
<div class="chip chip-tot"><span id="curp29">0</span>&nbsp;/&nbsp;<span id="maxp29">9</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p29')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp29" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp29"></div>
<div id="taskAreap29"></div>
<div class="feedback" id="fbp29"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp29" onclick="nextTask('p29')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump29">
<h2>§29 — готово!</h2>
<div class="big-score" id="sumScorep29"></div>
<div class="sum-grade" id="sumGradep29"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p29')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p30')">→ §30</button>
</div>
</div>
</div>
<!-- §30 -->
<div id="ptab-p30" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp30">0</span></div>
<div class="chip chip-tot"><span id="curp30">0</span>&nbsp;/&nbsp;<span id="maxp30">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p30')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp30" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp30"></div>
<div id="taskAreap30"></div>
<div class="feedback" id="fbp30"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp30" onclick="nextTask('p30')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump30">
<h2>§30 — готово!</h2>
<div class="big-score" id="sumScorep30"></div>
<div class="sum-grade" id="sumGradep30"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p30')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p31')">→ §31</button>
</div>
</div>
</div>
<!-- §31 -->
<div id="ptab-p31">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp31">0</span></div>
<div class="chip chip-tot"><span id="curp31">0</span>&nbsp;/&nbsp;<span id="maxp31">12</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p31')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp31" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp31"></div>
<div id="taskAreap31"></div>
<div class="feedback" id="fbp31"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp31" onclick="nextTask('p31')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump31">
<h2>§31 — готово!</h2>
<div class="big-score" id="sumScorep31"></div>
<div class="sum-grade" id="sumGradep31"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p31')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p32')">→ §32</button>
</div>
</div>
</div>
<!-- §32 -->
<div id="ptab-p32" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp32">0</span></div>
<div class="chip chip-tot"><span id="curp32">0</span>&nbsp;/&nbsp;<span id="maxp32">12</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p32')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp32" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp32"></div>
<div id="taskAreap32"></div>
<div class="feedback" id="fbp32"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp32" onclick="nextTask('p32')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump32">
<h2>§32 — готово!</h2>
<div class="big-score" id="sumScorep32"></div>
<div class="sum-grade" id="sumGradep32"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p32')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p33')">→ §33</button>
</div>
</div>
</div>
<!-- §33 -->
<div id="ptab-p33" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp33">0</span></div>
<div class="chip chip-tot"><span id="curp33">0</span>&nbsp;/&nbsp;<span id="maxp33">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p33')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp33" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp33"></div>
<div id="taskAreap33"></div>
<div class="feedback" id="fbp33"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp33" onclick="nextTask('p33')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump33">
<h2>§33 — готово!</h2>
<div class="big-score" id="sumScorep33"></div>
<div class="sum-grade" id="sumGradep33"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p33')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p34')">→ §34</button>
</div>
</div>
</div>
<!-- §34 -->
<div id="ptab-p34" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp34">0</span></div>
<div class="chip chip-tot"><span id="curp34">0</span>&nbsp;/&nbsp;<span id="maxp34">9</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p34')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp34" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp34"></div>
<div id="taskAreap34"></div>
<div class="feedback" id="fbp34"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp34" onclick="nextTask('p34')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump34">
<h2>§34 — готово!</h2>
<div class="big-score" id="sumScorep34"></div>
<div class="sum-grade" id="sumGradep34"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p34')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p35')">→ §35</button>
</div>
</div>
</div>
<!-- §35 -->
<div id="ptab-p35" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp35">0</span></div>
<div class="chip chip-tot"><span id="curp35">0</span>&nbsp;/&nbsp;<span id="maxp35">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p35')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp35" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp35"></div>
<div id="taskAreap35"></div>
<div class="feedback" id="fbp35"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp35" onclick="nextTask('p35')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump35">
<h2>§35 — готово!</h2>
<div class="big-score" id="sumScorep35"></div>
<div class="sum-grade" id="sumGradep35"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p35')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('p36')">→ §36</button>
</div>
</div>
</div>
<!-- §36 -->
<div id="ptab-p36" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okp36">0</span></div>
<div class="chip chip-tot"><span id="curp36">0</span>&nbsp;/&nbsp;<span id="maxp36">8</span></div>
<button class="btn btn-ghost" onclick="resetTasks('p36')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="progp36" style="width:0%"></div></div>
<div class="nav-dots" id="navDotsp36"></div>
<div id="taskAreap36"></div>
<div class="feedback" id="fbp36"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnp36" onclick="nextTask('p36')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sump36">
<h2>§36 — готово!</h2>
<div class="big-score" id="sumScorep36"></div>
<div class="sum-grade" id="sumGradep36"></div>
<div class="sum-btns">
<button class="btn btn-pri" onclick="resetTasks('p36')"><i class="fas fa-rotate-right"></i> Ещё раз</button>
<button class="btn btn-ghost" onclick="setParaTab('hard')">→ Сложные</button>
</div>
</div>
</div>
<!-- Сложные -->
<div id="ptab-hard" style="display:none">
<div class="score-bar">
<div class="chip chip-ok"><i class="fas fa-check"></i>&nbsp;<span id="okhard">0</span></div>
<div class="chip chip-tot"><span id="curhard">0</span>&nbsp;/&nbsp;<span id="maxhard">12</span></div>
<button class="btn btn-ghost" onclick="resetTasks('hard')" style="padding:6px 13px;font-size:.74rem"><i class="fas fa-rotate-right"></i> Заново</button>
</div>
<div class="prog-wrap"><div class="prog-fill" id="proghard" style="width:0%"></div></div>
<div class="nav-dots" id="navDotshard"></div>
<div id="taskAreahard"></div>
<div class="feedback" id="fbhard"></div>
<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end">
<button class="btn btn-next" id="nextBtnhard" onclick="nextTask('hard')" style="display:none"><i class="fas fa-arrow-right"></i> Следующая</button>
</div>
<div class="summary" id="sumhard">
<h2>Сложные задачи — готово!</h2>
<div class="big-score" id="sumScorehard"></div>
<div class="sum-grade" id="sumGradehard"></div>
<div class="sum-btns"><button class="btn btn-pri" onclick="resetTasks('hard')"><i class="fas fa-rotate-right"></i> Ещё раз</button></div>
</div>
</div>
</div>
<script>
// ══════════════════════════════════════════════
// ПУЛЫ ЗАДАЧ
// ══════════════════════════════════════════════
const TASKS_P31 = [
{
q: "Тело массой $m = 2\\,\\text{кг}$ движется со скоростью $v = 5\\,\\text{м/с}$. Найдите модуль импульса тела.",
hint: "Используйте формулу $p = mv$.",
unit: "кг·м/с", a: 10,
ex: "$p = mv = 2\\,\\text{кг} \\cdot 5\\,\\text{м/с} = 10\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
{
q: "Мяч массой $m = 0{,}5\\,\\text{кг}$ движется со скоростью $v = 8\\,\\text{м/с}$. Найдите его импульс.",
hint: "$p = mv$",
unit: "кг·м/с", a: 4,
ex: "$p = 0{,}5 \\cdot 8 = 4\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
{
q: "Человек массой $m = 70\\,\\text{кг}$ идёт со скоростью $v = 3\\,\\text{м/с}$. Найдите его импульс.",
hint: "$p = mv$",
unit: "кг·м/с", a: 210,
ex: "$p = 70 \\cdot 3 = 210\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
{
q: "Тело массой $m = 4\\,\\text{кг}$ имеет импульс $p = 12\\,\\text{кг}{\\cdot}\\text{м/с}$. Найдите скорость тела.",
hint: "Из $p = mv$ выразите $v = p/m$.",
unit: "м/с", a: 3,
ex: "$v = \\dfrac{p}{m} = \\dfrac{12}{4} = 3\\,\\text{м/с}$"
},
{
q: "Тело движется со скоростью $v = 5\\,\\text{м/с}$ и имеет импульс $p = 20\\,\\text{кг}{\\cdot}\\text{м/с}$. Найдите массу тела.",
hint: "$m = p/v$",
unit: "кг", a: 4,
ex: "$m = \\dfrac{p}{v} = \\dfrac{20}{5} = 4\\,\\text{кг}$"
},
{
q: "На тело действует постоянная сила $F = 20\\,\\text{Н}$ в течение $\\Delta t = 3\\,\\text{с}$. Найдите изменение импульса тела.",
hint: "$\\Delta p = F\\,\\Delta t$",
unit: "кг·м/с", a: 60,
ex: "$\\Delta p = F\\,\\Delta t = 20 \\cdot 3 = 60\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
{
q: "Пуля при выстреле испытывает силу $F = 500\\,\\text{Н}$ в течение $\\Delta t = 0{,}1\\,\\text{с}$. Найдите импульс силы.",
hint: "Импульс силы = $F\\,\\Delta t$.",
unit: "Н·с", a: 50,
ex: "$F\\,\\Delta t = 500 \\cdot 0{,}1 = 50\\,\\text{Н}{\\cdot}\\text{с}$"
},
{
q: "Импульс тела изменился на $\\Delta p = 200\\,\\text{кг}{\\cdot}\\text{м/с}$ за время $\\Delta t = 4\\,\\text{с}$. Найдите действующую силу.",
hint: "$F = \\Delta p / \\Delta t$",
unit: "Н", a: 50,
ex: "$F = \\dfrac{\\Delta p}{\\Delta t} = \\dfrac{200}{4} = 50\\,\\text{Н}$"
},
{
q: "Мяч массой $m = 0{,}2\\,\\text{кг}$ падает с высоты $h = 5\\,\\text{м}$ и упруго отскакивает от пола ($g = 10\\,\\text{м/с}^2$). Найдите модуль изменения импульса при ударе.",
hint: "$v = \\sqrt{2gh}$; при упругом отскоке $|\\Delta p| = 2mv$.",
unit: "кг·м/с", a: 4,
ex: "$v = \\sqrt{2\\cdot10\\cdot5} = 10\\,\\text{м/с}$; $|\\Delta p| = 2 \\cdot 0{,}2 \\cdot 10 = 4\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
{
q: "Автомобиль массой $m = 800\\,\\text{кг}$ движется со скоростью $v = 10\\,\\text{м/с}$ и тормозит до остановки. Найдите модуль изменения импульса.",
hint: "$|\\Delta p| = m|\\Delta v| = m \\cdot v$",
unit: "кг·м/с", a: 8000,
ex: "$|\\Delta p| = 800 \\cdot 10 = 8000\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
{
q: "Тело массой $m = 4\\,\\text{кг}$ разгоняется с $v_0 = 2\\,\\text{м/с}$ до $v_1 = 8\\,\\text{м/с}$ за $\\Delta t = 3\\,\\text{с}$. Найдите действующую силу.",
hint: "$F = m\\,\\Delta v / \\Delta t$",
unit: "Н", a: 8,
ex: "$F = \\dfrac{m\\,\\Delta v}{\\Delta t} = \\dfrac{4 \\cdot 6}{3} = 8\\,\\text{Н}$"
},
{
q: "Камень массой $m = 0{,}01\\,\\text{кг}$ летит со скоростью $v = 20\\,\\text{м/с}$ и застревает в стене (останавливается). Найдите модуль его изменения импульса.",
hint: "$|\\Delta p| = mv - 0 = mv$",
unit: "кг·м/с", a: 0.2,
ex: "$|\\Delta p| = mv = 0{,}01 \\cdot 20 = 0{,}2\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
];
const TASKS_P32 = [
{
q: "Тело массой $m_1 = 3\\,\\text{кг}$ движется со скоростью $v_1 = 4\\,\\text{м/с}$ и наталкивается на покоящееся тело массой $m_2 = 9\\,\\text{кг}$. Абсолютно неупругий удар. Найдите скорость тел после удара.",
hint: "$m_1 v_1 = (m_1+m_2)v$",
unit: "м/с", a: 1,
ex: "$v = \\dfrac{m_1 v_1}{m_1+m_2} = \\dfrac{3 \\cdot 4}{12} = 1\\,\\text{м/с}$"
},
{
q: "Тело массой $m_1 = 4\\,\\text{кг}$ ($v_1 = 6\\,\\text{м/с}$) ударяет по покоящемуся телу $m_2 = 2\\,\\text{кг}$. Абсолютно неупругий удар. Скорость после удара?",
hint: "$m_1 v_1 = (m_1+m_2)v$",
unit: "м/с", a: 4,
ex: "$v = \\dfrac{4 \\cdot 6}{6} = 4\\,\\text{м/с}$"
},
{
q: "Два одинаковых тела по $m = 5\\,\\text{кг}$ движутся навстречу с одинаковыми скоростями $v = 4\\,\\text{м/с}$. Абсолютно неупругий удар. Скорость после удара?",
hint: "Векторы импульсов равны и противоположны.",
unit: "м/с", a: 0,
ex: "$m \\cdot v - m \\cdot v = 2m \\cdot v_{\\text{после}} \\Rightarrow v_{\\text{после}} = 0\\,\\text{м/с}$"
},
{
q: "Тела массами $m_1 = 6\\,\\text{кг}$ ($v_1 = 3\\,\\text{м/с}$) и $m_2 = 4\\,\\text{кг}$ ($v_2 = 3\\,\\text{м/с}$ навстречу) сталкиваются абсолютно неупруго. Скорость после удара?",
hint: "Оси: $v_1 > 0$, $v_2 < 0$. Применить ЗСИ.",
unit: "м/с", a: 0.6,
ex: "$v = \\dfrac{6\\cdot3 - 4\\cdot3}{6+4} = \\dfrac{18-12}{10} = 0{,}6\\,\\text{м/с}$"
},
{
q: "Пушка массой $M = 200\\,\\text{кг}$ неподвижно стоит на платформе. Снаряд массой $m = 4\\,\\text{кг}$ вылетает со скоростью $v = 500\\,\\text{м/с}$. Найдите скорость отката пушки с платформой.",
hint: "До выстрела система покоилась: $p = 0$. $0 = mv + Mv_1$.",
unit: "м/с", a: 10,
ex: "$v_1 = \\dfrac{mv}{M} = \\dfrac{4 \\cdot 500}{200} = 10\\,\\text{м/с}$"
},
{
q: "Два конькобёжца стоят на льду неподвижно. Масса первого $m_1 = 50\\,\\text{кг}$, второго $m_2 = 30\\,\\text{кг}$. Они отталкиваются, и первый приобретает скорость $v_1 = 0{,}6\\,\\text{м/с}$. Найдите скорость второго.",
hint: "$p_0 = 0$: $m_1 v_1 + m_2 v_2 = 0$.",
unit: "м/с", a: 1,
ex: "$v_2 = \\dfrac{m_1 v_1}{m_2} = \\dfrac{50 \\cdot 0{,}6}{30} = 1\\,\\text{м/с}$"
},
{
q: "Лодка с мальчиком ($m_1{+}m_2 = 140\\,\\text{кг}$) движется со скоростью $v_0 = 1{,}5\\,\\text{м/с}$. Мальчик ($m_2 = 40\\,\\text{кг}$) прыгает вперёд (в направлении движения) со скоростью $v_2 = 2{,}0\\,\\text{м/с}$ (от берега). Найдите скорость лодки после прыжка.",
hint: "$(m_1+m_2)v_0 = m_1 v_1 + m_2 v_2$, масса лодки $m_1=100\\,\\text{кг}$.",
unit: "м/с", a: 1.3,
ex: "$v_1 = \\dfrac{140\\cdot1{,}5 - 40\\cdot2{,}0}{100} = \\dfrac{210-80}{100} = 1{,}3\\,\\text{м/с}$"
},
{
q: "Орудие с платформой ($M = 200\\,\\text{кг}$) неподвижно. Снаряд $m = 10\\,\\text{кг}$ вылетает со скоростью $v = 300\\,\\text{м/с}$. Найдите скорость отката орудия с платформой.",
hint: "$0 = mv + Mv_1$",
unit: "м/с", a: 15,
ex: "$v_1 = \\dfrac{mv}{M} = \\dfrac{10\\cdot300}{200} = 15\\,\\text{м/с}$"
},
{
q: "Ракета стартует с нуля. После сгорания топлива масса ракеты $m_1 = 75\\,\\text{кг}$, масса выброшенных газов $m_2 = 25\\,\\text{кг}$, скорость газов $v_2 = 300\\,\\text{м/с}$ (назад). Найдите скорость ракеты.",
hint: "$p_0 = 0$: $m_1 v_1 = m_2 v_2$.",
unit: "м/с", a: 100,
ex: "$v_1 = \\dfrac{m_2 v_2}{m_1} = \\dfrac{25 \\cdot 300}{75} = 100\\,\\text{м/с}$"
},
{
q: "Две тележки сталкиваются: $m_1 = 6\\,\\text{кг}$, $v_1 = 4\\,\\text{м/с}$; $m_2 = 2\\,\\text{кг}$, $v_2 = 2\\,\\text{м/с}$ (навстречу). Абсолютно неупругий удар. Скорость после удара?",
hint: "Ось $Ox$ — вдоль $v_1$. ЗСИ в проекции.",
unit: "м/с", a: 2.5,
ex: "$v = \\dfrac{6\\cdot4 - 2\\cdot2}{6+2} = \\dfrac{24-4}{8} = 2{,}5\\,\\text{м/с}$"
},
{
q: "Человек стоит на тележке. Суммарная масса системы $70\\,\\text{кг}$ (масса камня $10\\,\\text{кг}$ входит). Из покоя человек бросает камень со скоростью $v = 6\\,\\text{м/с}$. Найдите скорость тележки с человеком после броска.",
hint: "$p_0=0$: $m_{\\text{кам}}v + m_{\\text{чел+тел}}v_1 = 0$.",
unit: "м/с", a: 1,
ex: "$v_1 = \\dfrac{10\\cdot6}{60} = 1\\,\\text{м/с}$ (в сторону, обратную броску)"
},
{
q: "Вагон массой $m_1 = 20\\,\\text{т}$ движется со скоростью $v_1 = 0{,}3\\,\\text{м/с}$ и сцепляется с неподвижным вагоном $m_2 = 10\\,\\text{т}$. Найдите скорость вагонов после сцепки.",
hint: "Абсолютно неупругий удар. $m_1 v_1 = (m_1+m_2)v$.",
unit: "м/с", a: 0.2,
ex: "$v = \\dfrac{20 \\cdot 0{,}3}{30} = 0{,}2\\,\\text{м/с}$"
},
];
const TASKS_HARD = [
// ── §31 ──────────────────────────────────────────
{
para: "§31",
q: "Шайба массой $m = 0{,}2\\,\\text{кг}$ летит со скоростью $v_1 = 6\\,\\text{м/с}$ и ударяется о борт, отскакивая в обратном направлении со скоростью $v_2 = 4\\,\\text{м/с}$. Время удара $\\Delta t = 0{,}01\\,\\text{с}$. Найдите среднюю силу борта на шайбу.",
hint: "$|\\Delta p| = m(v_1+v_2)$, затем $F = |\\Delta p|/\\Delta t$.",
unit: "Н", a: 200,
ex: "$F = \\dfrac{m(v_1+v_2)}{\\Delta t} = \\dfrac{0{,}2\\cdot10}{0{,}01} = 200\\,\\text{Н}$"
},
{
para: "§31",
q: "Автомобиль массой $m = 1200\\,\\text{кг}$ тормозит: скорость уменьшается с $v_0 = 20\\,\\text{м/с}$ до $v = 8\\,\\text{м/с}$ за $t = 6\\,\\text{с}$. Найдите силу торможения.",
hint: "$F = m|\\Delta v|/\\Delta t$.",
unit: "Н", a: 2400,
ex: "$F = \\dfrac{m(v_0-v)}{t} = \\dfrac{1200\\cdot12}{6} = 2400\\,\\text{Н}$"
},
{
para: "§31",
q: "Молоток массой $m = 2\\,\\text{кг}$ ударяет по гвоздю со скоростью $v = 8\\,\\text{м/с}$ и останавливается за $\\Delta t = 0{,}004\\,\\text{с}$. Найдите среднюю силу удара.",
hint: "$F = mv/\\Delta t$.",
unit: "Н", a: 4000,
ex: "$F = \\dfrac{mv}{\\Delta t} = \\dfrac{2\\cdot8}{0{,}004} = 4000\\,\\text{Н}$"
},
{
para: "§31",
q: "Мяч массой $m = 0{,}4\\,\\text{кг}$ падает с высоты $h_1 = 3{,}2\\,\\text{м}$ и отскакивает до высоты $h_2 = 0{,}8\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите модуль изменения импульса при ударе.",
hint: "$v_1 = \\sqrt{2gh_1}$, $v_2 = \\sqrt{2gh_2}$; $|\\Delta p| = m(v_1+v_2)$.",
unit: "кг·м/с", a: 4.8,
ex: "$v_1=8\\,\\text{м/с}$; $v_2=4\\,\\text{м/с}$; $|\\Delta p|=0{,}4\\cdot12=4{,}8\\,\\text{кг}{\\cdot}\\text{м/с}$"
},
{
para: "§31",
q: "Тело массой $m = 5\\,\\text{кг}$ движется со скоростью $v_0 = 2\\,\\text{м/с}$. На него действует сила $F = 15\\,\\text{Н}$ в направлении движения в течение $t = 4\\,\\text{с}$. Найдите конечную скорость тела.",
hint: "$\\Delta p = Ft$; $v = v_0 + Ft/m$.",
unit: "м/с", a: 14,
ex: "$v = 2 + \\dfrac{15\\cdot4}{5} = 2+12 = 14\\,\\text{м/с}$"
},
// ── §32 ──────────────────────────────────────────
{
para: "§32",
q: "Пуля массой $m = 0{,}01\\,\\text{кг}$ летит со скоростью $v = 400\\,\\text{м/с}$ и застревает в деревянном брусе массой $M = 3{,}99\\,\\text{кг}$. Найдите скорость бруса с пулей после удара.",
hint: "Абсолютно неупругий удар: $mv = (m+M)V$.",
unit: "м/с", a: 1,
ex: "$V = \\dfrac{mv}{m+M} = \\dfrac{0{,}01\\cdot400}{4{,}00} = 1\\,\\text{м/с}$"
},
{
para: "§32",
q: "Ружьё массой $M = 3\\,\\text{кг}$ выстреливает пулю массой $m = 0{,}02\\,\\text{кг}$ со скоростью $v = 600\\,\\text{м/с}$. Найдите скорость отдачи ружья.",
hint: "До выстрела система покоилась: $0 = MV + mv$.",
unit: "м/с", a: 4,
ex: "$V = \\dfrac{mv}{M} = \\dfrac{0{,}02\\cdot600}{3} = 4\\,\\text{м/с}$"
},
{
para: "§32",
q: "Снаряд массой $m = 0{,}5\\,\\text{кг}$ покоится и разрывается на два осколка. Осколок $m_1 = 0{,}3\\,\\text{кг}$ летит вправо со скоростью $v_1 = 200\\,\\text{м/с}$. Найдите скорость второго осколка ($m_2 = 0{,}2\\,\\text{кг}$).",
hint: "$p_0 = 0$: $m_1 v_1 + m_2 v_2 = 0$.",
unit: "м/с", a: 300,
ex: "$v_2 = \\dfrac{m_1 v_1}{m_2} = \\dfrac{0{,}3\\cdot200}{0{,}2} = 300\\,\\text{м/с}$ (влево)"
},
{
para: "§32",
q: "Вагон $m_1 = 20\\,\\text{т}$, $v_1 = 2\\,\\text{м/с}$ догоняет вагон $m_2 = 30\\,\\text{т}$, $v_2 = 1\\,\\text{м/с}$ (в том же направлении). После сцепки найдите скорость вагонов.",
hint: "$m_1 v_1 + m_2 v_2 = (m_1+m_2)v$.",
unit: "м/с", a: 1.4,
ex: "$v = \\dfrac{20\\cdot2+30\\cdot1}{50} = \\dfrac{70}{50} = 1{,}4\\,\\text{м/с}$"
},
{
para: "§32",
q: "Лодка ($m_1 = 120\\,\\text{кг}$) с человеком ($m_2 = 60\\,\\text{кг}$) движется со скоростью $v_0 = 2\\,\\text{м/с}$. Человек прыгает вперёд со скоростью $v_2 = 4\\,\\text{м/с}$ относительно берега. Найдите скорость лодки после прыжка.",
hint: "$(m_1+m_2)v_0 = m_1 v_1 + m_2 v_2$.",
unit: "м/с", a: 1,
ex: "$v_1 = \\dfrac{180\\cdot2 - 60\\cdot4}{120} = \\dfrac{120}{120} = 1\\,\\text{м/с}$"
},
{
para: "§32",
q: "Тележки сталкиваются: $m_1 = 5\\,\\text{кг}$, $v_1 = 4\\,\\text{м/с}$; $m_2 = 3\\,\\text{кг}$, $v_2 = 6\\,\\text{м/с}$ навстречу. Абсолютно неупругий удар. Найдите скорость после удара.",
hint: "Ось — вдоль $v_1$. $m_1 v_1 - m_2 v_2 = (m_1+m_2)v$.",
unit: "м/с", a: 0.25,
ex: "$v = \\dfrac{5\\cdot4 - 3\\cdot6}{8} = \\dfrac{2}{8} = 0{,}25\\,\\text{м/с}$"
},
{
para: "§32",
q: "Два конькобёжца стоят неподвижно и отталкиваются. $m_1 = 60\\,\\text{кг}$, $m_2 = 40\\,\\text{кг}$. Второй приобрёл скорость $v_2 = 3\\,\\text{м/с}$. Найдите скорость первого.",
hint: "$p_0 = 0$: $m_1 v_1 + m_2 v_2 = 0$.",
unit: "м/с", a: 2,
ex: "$v_1 = \\dfrac{m_2 v_2}{m_1} = \\dfrac{40\\cdot3}{60} = 2\\,\\text{м/с}$"
},
// ── §33 ──────────────────────────────────────────
{
para: "§33",
q: "Шкаф массой $m = 100\\,\\text{кг}$ перемещают по полу на расстояние $l = 3{,}0\\,\\text{м}$. Коэффициент трения скольжения $\\mu = 0{,}20$, $g = 10\\,\\text{м/с}^2$. Найдите минимальную работу, необходимую для этого перемещения.",
hint: "При минимальной работе тело движется равномерно: $F = F_{\\text{тр}} = \\mu mg$; $A = Fl$.",
unit: "Дж", a: 600,
ex: "$F = 0{,}20 \\cdot 100 \\cdot 10 = 200\\,\\text{Н}$; $A = 200 \\cdot 3 = 600\\,\\text{Дж}$"
},
{
para: "§33",
q: "Автомобиль массой $m = 2000\\,\\text{кг}$ равномерно поднимается в гору под углом $\\alpha = 30°$ ($\\sin 30° = 0{,}5$) со скоростью $v = 10\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите мощность двигателя (сопротивление не учитывать).",
hint: "При равномерном движении $F = mg\\sin\\alpha$; $P = Fv$.",
unit: "Вт", a: 100000,
ex: "$F = 2000\\cdot10\\cdot0{,}5 = 10000\\,\\text{Н}$; $P = 10000\\cdot10 = 100000\\,\\text{Вт} = 100\\,\\text{кВт}$"
},
{
para: "§33",
q: "Кабину лифта массой $m = 400\\,\\text{кг}$ поднимают на высоту $h = 15\\,\\text{м}$ с ускорением $a = 0{,}60\\,\\text{м/с}^2$ вверх, $g = 10\\,\\text{м/с}^2$. Найдите работу силы натяжения троса.",
hint: "Сила натяжения: $T = m(g+a)$; $A = Th$.",
unit: "Дж", a: 63600,
ex: "$T = 400\\cdot10{,}6 = 4240\\,\\text{Н}$; $A = 4240\\cdot15 = 63600\\,\\text{Дж}$"
},
// ── §34 ──────────────────────────────────────────
{
para: "§34",
q: "Пружина жёсткостью $k = 200\\,\\text{Н/м}$ накоплена потенциальная энергия $E_\\text{п} = 0{,}25\\,\\text{Дж}$. Найдите деформацию пружины.",
hint: "$E_\\text{п} = kx^2/2 \\Rightarrow x = \\sqrt{2E_\\text{п}/k}$",
unit: "м", a: 0.05,
ex: "$x = \\sqrt{2\\cdot0{,}25/200} = \\sqrt{0{,}0025} = 0{,}05\\,\\text{м}$"
},
{
para: "§34",
q: "Тело массой $m = 3\\,\\text{кг}$ опустилось с высоты $h_1 = 8\\,\\text{м}$ до $h_2 = 2\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите работу силы тяжести.",
hint: "$A = mg(h_1 - h_2)$",
unit: "Дж", a: 180,
ex: "$A = 3\\cdot10\\cdot(8-2) = 3\\cdot10\\cdot6 = 180\\,\\text{Дж}$"
},
{
para: "§34",
q: "Два тела: $m_1 = 2\\,\\text{кг}$ на высоте $h_1 = 10\\,\\text{м}$ и $m_2 = 3\\,\\text{кг}$ на высоте $h_2 = 4\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите суммарную потенциальную энергию системы тел.",
hint: "$E_\\text{п} = m_1 g h_1 + m_2 g h_2$",
unit: "Дж", a: 320,
ex: "$E_\\text{п} = 2\\cdot10\\cdot10 + 3\\cdot10\\cdot4 = 200+120 = 320\\,\\text{Дж}$"
},
// ── §35 ──────────────────────────────────────────
{
para: "§35",
q: "Автомобиль массой $m = 1200\\,\\text{кг}$ разгоняется с нуля до $v = 20\\,\\text{м/с}$. Сила тяги $F = 6000\\,\\text{Н}$. Найдите расстояние разгона (пренебречь трением).",
hint: "По теореме о $E_\\text{к}$: $A = \\Delta E_\\text{к} = mv^2/2$; $s = A/F$.",
unit: "м", a: 40,
ex: "$A = \\dfrac{1200 \\cdot 400}{2} = 240\\,000\\,\\text{Дж}$; $s = \\dfrac{240\\,000}{6000} = 40\\,\\text{м}$"
},
{
para: "§35",
q: "Тело массой $m = 2\\,\\text{кг}$ движется со скоростью $v_0 = 6\\,\\text{м/с}$. Сила трения $F_\\text{тр} = 4\\,\\text{Н}$ действует на пути $s = 5\\,\\text{м}$. Найдите скорость тела в конце пути.",
hint: "$E_{\\text{к}2} = E_{\\text{к}1} + A_\\text{тр}$; $A_\\text{тр} = -F_\\text{тр} \\cdot s$.",
unit: "м/с", a: 4,
ex: "$E_{\\text{к}1} = 2\\cdot36/2 = 36\\,\\text{Дж}$; $A_\\text{тр} = -20\\,\\text{Дж}$; $E_{\\text{к}2} = 16\\,\\text{Дж}$; $v = \\sqrt{2\\cdot16/2} = 4\\,\\text{м/с}$"
},
{
para: "§35",
q: "Тело движется равномерно. Чему равна работа результирующей всех сил, действующих на него?",
opts: [
"$A = mv^2$",
"$A = mv^2/2$",
"$A = 0$, так как $\\Delta E_\\text{к} = 0$",
"$A = mgh$"
],
a: 2,
ex: "Равномерное движение → $v = \\text{const}$ → $E_\\text{к} = \\text{const}$ → $\\Delta E_\\text{к} = 0$ → $A_\\text{рез} = 0$."
},
{
para: "§35",
q: "На тело массой $m = 8\\,\\text{кг}$ действуют: сила тяги $F_1 = 50\\,\\text{Н}$ и сила трения $F_2 = 10\\,\\text{Н}$ (противоположна движению). Тело прошло путь $s = 10\\,\\text{м}$ из состояния покоя. Найдите скорость тела.",
hint: "$A_\\text{рез} = (F_1 - F_2)\\,s = \\Delta E_\\text{к}$; затем $v = \\sqrt{2E_\\text{к}/m}$.",
unit: "м/с", a: 10,
ex: "$A_\\text{рез} = (50-10)\\cdot10 = 400\\,\\text{Дж}$; $v = \\sqrt{\\dfrac{2\\cdot400}{8}} = \\sqrt{100} = 10\\,\\text{м/с}$"
},
{
para: "§35",
q: "Тело массой $m = 2\\,\\text{кг}$ тормозит с $v_0 = 15\\,\\text{м/с}$ до $v = 5\\,\\text{м/с}$ на пути $s = 20\\,\\text{м}$. Найдите силу торможения.",
hint: "$A_\\text{тр} = \\Delta E_\\text{к} = mv^2/2 - mv_0^2/2$; $F = |A_\\text{тр}|/s$.",
unit: "Н", a: 10,
ex: "$\\Delta E_\\text{к} = \\dfrac{2\\cdot25}{2} - \\dfrac{2\\cdot225}{2} = 25 - 225 = -200\\,\\text{Дж}$; $F = 200/20 = 10\\,\\text{Н}$"
},
{
para: "§35",
q: "Шарик массой $m = 0{,}2\\,\\text{кг}$ бросают вертикально вверх с $v_0 = 10\\,\\text{м/с}$ с высоты $h_0 = 5\\,\\text{м}$ над землёй. $g = 10\\,\\text{м/с}^2$. Найдите механическую энергию шарика относительно земли в начальный момент.",
hint: "$E_\\text{мех} = mv_0^2/2 + mgh_0$",
unit: "Дж", a: 20,
ex: "$E_\\text{мех} = \\dfrac{0{,}2\\cdot100}{2} + 0{,}2\\cdot10\\cdot5 = 10 + 10 = 20\\,\\text{Дж}$"
},
{
para: "§35",
q: "В какой точке траектории тела, брошенного без сопротивления воздуха, механическая энергия максимальна?",
opts: [
"В начальной точке броска",
"В высшей точке траектории",
"В конечной точке",
"Механическая энергия одинакова во всех точках (без трения)"
],
a: 3,
ex: "Без трения воздуха работают только консервативные силы, поэтому $E_\\text{мех} = \\text{const}$ — одинакова в любой точке траектории."
},
// ── §36 ──────────────────────────────────────────
{
para: "§36",
q: "Маятник отклонили так, что шарик поднялся на высоту $h = 0{,}45\\,\\text{м}$ над нижней точкой. $g = 10\\,\\text{м/с}^2$. Без трения. Найдите скорость шарика в нижней точке.",
hint: "$mgh = mv^2/2 \\Rightarrow v = \\sqrt{2gh}$",
unit: "м/с", a: 3,
ex: "$v = \\sqrt{2 \\cdot 10 \\cdot 0{,}45} = \\sqrt{9} = 3\\,\\text{м/с}$"
},
{
para: "§36",
q: "Тело массой $m = 2\\,\\text{кг}$ брошено горизонтально с высоты $h = 8\\,\\text{м}$ со скоростью $v_0 = 6\\,\\text{м/с}$. $g = 10\\,\\text{м/с}^2$. Без трения. Найдите скорость тела у земли.",
hint: "ЗСЭ: $mv_0^2/2 + mgh = mv^2/2 \\Rightarrow v^2 = v_0^2 + 2gh$",
unit: "м/с", a: 14,
ex: "$v^2 = 36 + 2\\cdot10\\cdot8 = 36 + 160 = 196 \\Rightarrow v = 14\\,\\text{м/с}$"
},
{
para: "§36",
q: "Пружину жёсткостью $k = 2000\\,\\text{Н/м}$ сжали на $x = 0{,}1\\,\\text{м}$. Отпустили шарик массой $m = 0{,}2\\,\\text{кг}$, который полетел вертикально вверх. $g = 10\\,\\text{м/с}^2$. Найдите максимальную высоту.",
hint: "$E_\\text{п(пружина)} = kx^2/2 = mgh$",
unit: "м", a: 5,
ex: "$kx^2/2 = 2000 \\cdot 0{,}01/2 = 10\\,\\text{Дж}$; $h = \\dfrac{10}{0{,}2 \\cdot 10} = 5\\,\\text{м}$"
},
{
para: "§36",
q: "Пружину жёсткостью $k = 1000\\,\\text{Н/м}$ сжали на $x = 0{,}1\\,\\text{м}$ и отпустили тело массой $m = 1\\,\\text{кг}$ на горизонтальной поверхности. На участке трения совершена работа $A_\\text{тр} = -3\\,\\text{Дж}$. Найдите скорость тела после участка трения.",
hint: "$E_\\text{п(пружина)} + A_\\text{тр} = mv^2/2$",
unit: "м/с", a: 2,
ex: "$E_\\text{п} = 1000\\cdot0{,}01/2 = 5\\,\\text{Дж}$; $E_\\text{к} = 5 - 3 = 2\\,\\text{Дж}$; $v = \\sqrt{2\\cdot2/1} = 2\\,\\text{м/с}$"
},
{
para: "§36",
q: "Велосипедист с велосипедом (масса $m = 80\\,\\text{кг}$) съезжает с горки высотой $h = 5\\,\\text{м}$. У основания скорость $v = 8\\,\\text{м/с}$. $g = 10\\,\\text{м/с}^2$. Найдите потери механической энергии на трение.",
hint: "Потери $= E_{\\text{мех}1} - E_{\\text{мех}2} = mgh - mv^2/2$",
unit: "Дж", a: 1440,
ex: "$E_{\\text{мех}1} = 80\\cdot10\\cdot5 = 4000\\,\\text{Дж}$; $E_{\\text{мех}2} = 80\\cdot64/2 = 2560\\,\\text{Дж}$; потери $= 1440\\,\\text{Дж}$"
},
{
para: "§36",
q: "Тело бросают вертикально вверх с $v_0 = 10\\,\\text{м/с}$. Без трения, $g = 10\\,\\text{м/с}^2$. На какой высоте скорость тела равна $6\\,\\text{м/с}$?",
hint: "ЗСЭ: $mv_0^2/2 = mv^2/2 + mgh \\Rightarrow h = (v_0^2 - v^2)/(2g)$",
unit: "м", a: 3.2,
ex: "$h = \\dfrac{100 - 36}{20} = \\dfrac{64}{20} = 3{,}2\\,\\text{м}$"
},
{
para: "§36",
q: "Мяч бросают вертикально вверх и ловят на той же высоте. Что можно утверждать о скоростях броска и поимки? (сопротивление воздуха не учитывать)",
opts: [
"Скорость при поимке больше — тело ускорялось при падении",
"Скорость при поимке меньше — тело потеряло энергию",
"Скорости равны по модулю, так как $E_\\text{мех} = \\text{const}$",
"Зависит от высоты броска"
],
a: 2,
ex: "Без трения $E_\\text{мех} = \\text{const}$. На одной высоте $E_\\text{п}$ одинакова, значит $E_\\text{к}$ — тоже одинакова, поэтому $v = v_0$ по модулю."
},
];
// ══ §33 Механическая работа. Мощность ══
const TASKS_P33 = [
{
q: "Сила $F = 100\\,\\text{Н}$ действует вдоль перемещения $\\Delta r = 5\\,\\text{м}$ ($\\alpha = 0°$). Найдите работу силы.",
hint: "$A = F\\Delta r\\cos\\alpha$, $\\cos 0° = 1$",
unit: "Дж", a: 500,
ex: "$A = 100 \\cdot 5 \\cdot 1 = 500\\,\\text{Дж}$"
},
{
q: "Тело тянут под углом $\\alpha = 60°$ к горизонту силой $F = 80\\,\\text{Н}$. Перемещение $\\Delta r = 10\\,\\text{м}$. Найдите работу силы.",
hint: "$A = F\\Delta r\\cos\\alpha$, $\\cos 60° = 0{,}5$",
unit: "Дж", a: 400,
ex: "$A = 80 \\cdot 10 \\cdot 0{,}5 = 400\\,\\text{Дж}$"
},
{
q: "Тело массой $m = 50\\,\\text{кг}$ подняли на высоту $h = 3\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите работу по подъёму.",
hint: "$A = mgh$",
unit: "Дж", a: 1500,
ex: "$A = 50 \\cdot 10 \\cdot 3 = 1500\\,\\text{Дж}$"
},
{
q: "Пружину жёсткостью $k = 400\\,\\text{Н/м}$ сжали на $x = 0{,}1\\,\\text{м}$. Найдите работу внешней силы.",
hint: "$A = kx^2/2$",
unit: "Дж", a: 2,
ex: "$A = 400 \\cdot 0{,}01 / 2 = 2\\,\\text{Дж}$"
},
{
q: "За время $\\Delta t = 2\\,\\text{с}$ совершена работа $A = 600\\,\\text{Дж}$. Найдите мощность.",
hint: "$P = A/\\Delta t$",
unit: "Вт", a: 300,
ex: "$P = 600/2 = 300\\,\\text{Вт}$"
},
{
q: "Двигатель тянет тело с силой $F = 500\\,\\text{Н}$ со скоростью $v = 20\\,\\text{м/с}$ (сила вдоль движения). Найдите мощность.",
hint: "$P = Fv$",
unit: "Вт", a: 10000,
ex: "$P = 500 \\cdot 20 = 10000\\,\\text{Вт} = 10\\,\\text{кВт}$"
},
{
q: "Кран поднимает поддон с кирпичами массой $m = 800\\,\\text{кг}$ на высоту $h = 9 \\cdot 3{,}5 = 31{,}5\\,\\text{м}$ (9 этажей), $g = 10\\,\\text{м/с}^2$. Найдите работу силы натяжения троса.",
hint: "$A = mgh$",
unit: "Дж", a: 252000,
ex: "$A = 800 \\cdot 10 \\cdot 31{,}5 = 252\\,000\\,\\text{Дж} = 252\\,\\text{кДж}$"
},
{
q: "Найдите силу тяги двигателя, если при скорости $v = 15\\,\\text{м/с}$ мощность $P = 45\\,\\text{кВт} = 45000\\,\\text{Вт}$.",
hint: "$F = P/v$",
unit: "Н", a: 3000,
ex: "$F = P/v = 45000/15 = 3000\\,\\text{Н}$"
},
{
q: "При каком угле между силой и перемещением работа силы отрицательна?",
opts: [
"При $\\alpha = 0°$",
"При $\\alpha = 45°$",
"При $\\alpha = 90°$",
"При $\\alpha = 120°$"
],
a: 3,
ex: "При $\\alpha > 90°$ имеем $\\cos\\alpha < 0$, поэтому $A = F\\Delta r\\cos\\alpha < 0$."
},
{
q: "Какую работу совершает сила реакции опоры при движении тела по горизонтальной поверхности?",
opts: [
"Положительную",
"Отрицательную",
"Равную нулю, так как сила перпендикулярна перемещению",
"Зависит от скорости движения"
],
a: 2,
ex: "Сила реакции опоры перпендикулярна перемещению ($\\alpha = 90°$), поэтому $A = F\\Delta r\\cos 90° = 0$."
},
];
// ══ §34 Потенциальная энергия ══
const TASKS_P34 = [
{
q: "Тело массой $m = 2\\,\\text{кг}$ находится на высоте $h = 5\\,\\text{м}$ над нулевым уровнем, $g = 10\\,\\text{м/с}^2$. Найдите потенциальную энергию.",
hint: "$E_\\text{п} = mgh$",
unit: "Дж", a: 100,
ex: "$E_\\text{п} = 2 \\cdot 10 \\cdot 5 = 100\\,\\text{Дж}$"
},
{
q: "Потенциальная энергия тела $E_\\text{п} = 500\\,\\text{Дж}$, масса $m = 5\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$. Найдите высоту над нулевым уровнем.",
hint: "$h = E_\\text{п}/(mg)$",
unit: "м", a: 10,
ex: "$h = 500/(5 \\cdot 10) = 10\\,\\text{м}$"
},
{
q: "Пружину жёсткостью $k = 400\\,\\text{Н/м}$ деформировали на $x = 0{,}1\\,\\text{м}$. Найдите потенциальную энергию пружины.",
hint: "$E_\\text{п} = kx^2/2$",
unit: "Дж", a: 2,
ex: "$E_\\text{п} = 400 \\cdot 0{,}01/2 = 2\\,\\text{Дж}$"
},
{
q: "Камень медленно поднимают из ямы глубиной $h = 2{,}0\\,\\text{м}$ на поверхность, $g = 10\\,\\text{м/с}^2$. При этом совершена работа $A = 100\\,\\text{Дж}$. Найдите массу камня.",
hint: "$A = mgh \\Rightarrow m = A/(gh)$",
unit: "кг", a: 5,
ex: "$m = 100/(10 \\cdot 2{,}0) = 5\\,\\text{кг}$"
},
{
q: "В результате растяжения пружина приобрела потенциальную энергию $E_\\text{п} = 0{,}32\\,\\text{Дж}$. Деформация $\\Delta l = 8{,}0\\,\\text{см} = 0{,}08\\,\\text{м}$. Найдите жёсткость пружины.",
hint: "$E_\\text{п} = kx^2/2 \\Rightarrow k = 2E_\\text{п}/x^2$",
unit: "Н/м", a: 100,
ex: "$k = 2 \\cdot 0{,}32 / 0{,}08^2 = 0{,}64/0{,}0064 = 100\\,\\text{Н/м}$"
},
{
q: "Тело опускается с высоты $h_1 = 10\\,\\text{м}$ до $h_2 = 4\\,\\text{м}$, масса $m = 3\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$. Найдите работу силы тяжести.",
hint: "$A = mg(h_1 - h_2)$",
unit: "Дж", a: 180,
ex: "$A = 3 \\cdot 10 \\cdot (10-4) = 180\\,\\text{Дж}$"
},
{
q: "В каких случаях тело обладает потенциальной энергией?",
opts: [
"Только при движении с большой скоростью",
"Только в состоянии покоя",
"Когда тело взаимодействует с другими телами (поднято над Землёй или деформировано)",
"Только при наличии заряда"
],
a: 2,
ex: "Потенциальная энергия — мера способности сил взаимодействия совершать работу. Тело обладает ею при взаимодействии: гравитационном ($mgh$) или упругом ($kx^2/2$)."
},
{
q: "Как изменится потенциальная энергия тела в поле тяжести, если высоту увеличить в 3 раза?",
opts: [
"Увеличится в 9 раз",
"Увеличится в 3 раза",
"Увеличится в $\\sqrt{3}$ раз",
"Не изменится"
],
a: 1,
ex: "$E_\\text{п} = mgh$ — прямо пропорциональна высоте: увеличится в 3 раза."
},
{
q: "Как изменится потенциальная энергия пружины, если деформацию увеличить в 2 раза?",
opts: [
"Увеличится в 2 раза",
"Увеличится в 4 раза",
"Уменьшится в 2 раза",
"Не изменится"
],
a: 1,
ex: "$E_\\text{п} = kx^2/2$ — пропорциональна квадрату деформации: при $x' = 2x$ → $E_\\text{п}' = 4E_\\text{п}$."
},
];
// ══ §35 Кинетическая энергия. Полная энергия ══
const TASKS_P35 = [
{
q: "Мяч массой $m = 0{,}5\\,\\text{кг}$ летит со скоростью $v = 8\\,\\text{м/с}$. Найдите его кинетическую энергию.",
hint: "$E_\\text{к} = mv^2/2$",
unit: "Дж", a: 16,
ex: "$E_\\text{к} = \\dfrac{0{,}5 \\cdot 64}{2} = 16\\,\\text{Дж}$"
},
{
q: "Тело массой $m = 4\\,\\text{кг}$ имеет кинетическую энергию $E_\\text{к} = 50\\,\\text{Дж}$. Найдите скорость тела.",
hint: "$v = \\sqrt{2E_\\text{к}/m}$",
unit: "м/с", a: 5,
ex: "$v = \\sqrt{\\dfrac{2 \\cdot 50}{4}} = \\sqrt{25} = 5\\,\\text{м/с}$"
},
{
q: "Тело массой $m = 2\\,\\text{кг}$ разгоняется с нуля до $v = 6\\,\\text{м/с}$. Найдите работу, совершённую над телом.",
hint: "$A = \\Delta E_\\text{к} = mv^2/2 - 0$",
unit: "Дж", a: 36,
ex: "$A = \\Delta E_\\text{к} = \\dfrac{2 \\cdot 36}{2} = 36\\,\\text{Дж}$"
},
{
q: "Тело массой $m = 2\\,\\text{кг}$ тормозит с $v_0 = 7\\,\\text{м/с}$ до $v = 3\\,\\text{м/с}$. На сколько уменьшилась кинетическая энергия тела?",
hint: "$|\\Delta E_\\text{к}| = mv_0^2/2 - mv^2/2$",
unit: "Дж", a: 40,
ex: "$|\\Delta E_\\text{к}| = \\dfrac{2 \\cdot 49}{2} - \\dfrac{2 \\cdot 9}{2} = 49 - 9 = 40\\,\\text{Дж}$"
},
{
q: "Шар массой $m = 0{,}4\\,\\text{кг}$ бросают вертикально вверх с $v_0 = 10\\,\\text{м/с}$ с уровня $h = 0$, $g = 10\\,\\text{м/с}^2$. Найдите механическую энергию шара в начальный момент.",
hint: "$E_\\text{мех} = E_\\text{к} + E_\\text{п} = mv_0^2/2 + mgh$",
unit: "Дж", a: 20,
ex: "$E_\\text{мех} = \\dfrac{0{,}4 \\cdot 100}{2} + 0 = 20\\,\\text{Дж}$"
},
{
q: "Тело массой $m = 3\\,\\text{кг}$ находится на высоте $h = 5\\,\\text{м}$ и движется со скоростью $v = 4\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите его механическую энергию.",
hint: "$E_\\text{мех} = mv^2/2 + mgh$",
unit: "Дж", a: 174,
ex: "$E_\\text{мех} = \\dfrac{3 \\cdot 16}{2} + 3 \\cdot 10 \\cdot 5 = 24 + 150 = 174\\,\\text{Дж}$"
},
{
q: "Как изменится кинетическая энергия тела при увеличении его скорости в 3 раза?",
opts: [
"Увеличится в 3 раза",
"Увеличится в 6 раз",
"Увеличится в 9 раз",
"Уменьшится в 3 раза"
],
a: 2,
ex: "$E_\\text{к} = mv^2/2$ — пропорциональна $v^2$. При $v' = 3v$: $E_\\text{к}' = m(3v)^2/2 = 9\\,E_\\text{к}$."
},
{
q: "Что гласит теорема о кинетической энергии?",
opts: [
"Кинетическая энергия тела сохраняется при любом движении",
"Изменение кинетической энергии тела равно работе всех сил, действующих на него",
"Кинетическая энергия равна произведению массы на скорость",
"Кинетическая энергия тела не зависит от направления скорости"
],
a: 1,
ex: "Теорема: $\\Delta E_\\text{к} = A_\\text{рез}$. Именно все силы сразу определяют изменение $E_\\text{к}$."
},
];
// ══ §36 Закон сохранения энергии ══
const TASKS_P36 = [
{
q: "Шарик массой $m = 0{,}2\\,\\text{кг}$ падает без трения с высоты $h = 5\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите его скорость у земли.",
hint: "$mgh = mv^2/2 \\Rightarrow v = \\sqrt{2gh}$",
unit: "м/с", a: 10,
ex: "$v = \\sqrt{2 \\cdot 10 \\cdot 5} = \\sqrt{100} = 10\\,\\text{м/с}$"
},
{
q: "Шарик массой $m = 0{,}5\\,\\text{кг}$ бросают вертикально вверх с $v_0 = 20\\,\\text{м/с}$. Без трения, $g = 10\\,\\text{м/с}^2$. Найдите максимальную высоту подъёма.",
hint: "$mv_0^2/2 = mgh \\Rightarrow h = v_0^2/(2g)$",
unit: "м", a: 20,
ex: "$h = \\dfrac{v_0^2}{2g} = \\dfrac{400}{20} = 20\\,\\text{м}$"
},
{
q: "Шар катится с горки высотой $h = 3{,}2\\,\\text{м}$ без трения. $g = 10\\,\\text{м/с}^2$. Найдите скорость шара у подножия горки.",
hint: "$mgh = mv^2/2 \\Rightarrow v = \\sqrt{2gh}$",
unit: "м/с", a: 8,
ex: "$v = \\sqrt{2 \\cdot 10 \\cdot 3{,}2} = \\sqrt{64} = 8\\,\\text{м/с}$"
},
{
q: "Маятник отклонили так, что шарик поднялся на высоту $h = 0{,}2\\,\\text{м}$ над положением равновесия. Без трения, $g = 10\\,\\text{м/с}^2$. Найдите скорость шарика в нижней точке.",
hint: "$mgh = mv^2/2 \\Rightarrow v = \\sqrt{2gh}$",
unit: "м/с", a: 2,
ex: "$v = \\sqrt{2 \\cdot 10 \\cdot 0{,}2} = \\sqrt{4} = 2\\,\\text{м/с}$"
},
{
q: "Тело массой $m = 1\\,\\text{кг}$ скользит с горки высотой $h = 4\\,\\text{м}$. Внизу скорость $v = 6\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите потери механической энергии на трение (величину, без знака).",
hint: "Потери $= E_{\\text{мех}1} - E_{\\text{мех}2} = mgh - mv^2/2$",
unit: "Дж", a: 22,
ex: "Потери $= 1 \\cdot 10 \\cdot 4 - \\dfrac{1 \\cdot 36}{2} = 40 - 18 = 22\\,\\text{Дж}$ (столько ушло в тепло)"
},
{
q: "Тело свободно падает с высоты $h = 45\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите скорость тела у земли.",
hint: "$v = \\sqrt{2gh}$ (из ЗСЭ)",
unit: "м/с", a: 30,
ex: "$v = \\sqrt{2 \\cdot 10 \\cdot 45} = \\sqrt{900} = 30\\,\\text{м/с}$"
},
{
q: "При каком условии механическая энергия тела сохраняется?",
opts: [
"При любом равномерном движении",
"Когда на тело не действуют никакие силы",
"Когда на тело действуют только консервативные силы: тяжесть и упругость (нет трения)",
"Только при свободном падении"
],
a: 2,
ex: "$E_\\text{мех} = \\text{const}$ только при отсутствии сил трения и других диссипативных сил. Тяжесть и упругость — консервативные: их работа не приводит к потере механической энергии."
},
{
q: "Как связаны изменение механической энергии тела и работа внешних (диссипативных) сил?",
opts: [
"$\\Delta E_\\text{мех} = 2A_\\text{внеш}$",
"$\\Delta E_\\text{мех} = A_\\text{внеш}$",
"$E_\\text{мех} + A_\\text{внеш} = mv^2$",
"$\\Delta E_\\text{мех} = -A_\\text{внеш}$"
],
a: 1,
ex: "По теореме: $\\Delta E_\\text{мех} = A_\\text{внеш}$. При трении $A_\\text{тр} < 0$, поэтому $E_\\text{мех}$ уменьшается."
},
];
// ══ §1 Механическое движение ══
var TASKS_P1 = [
{
q: "Что называют механическим движением?",
opts: ["Изменение формы тела", "Изменение положения тела в пространстве относительно других тел", "Изменение массы тела", "Нагревание тела"],
a: 1,
ex: "Механическое движение — это изменение положения тела в пространстве относительно других тел с течением времени."
},
{
q: "Тело движется по прямой. За 5 с оно прошло 40 м. Какова его средняя скорость?",
hint: "$v = s/t$",
unit: "м/с", a: 8,
ex: "$v = 40/5 = 8\\,\\text{м/с}$"
},
{
q: "Какое из движений является равномерным?",
opts: ["Автобус разгоняется на светофоре", "Поезд идёт со скоростью 60 км/ч без изменений", "Мяч летит после броска", "Самолёт делает разворот"],
a: 1,
ex: "Равномерное движение — скорость не изменяется ни по модулю, ни по направлению."
},
{
q: "Велосипедист едет 10 минут со скоростью 6 м/с. Какой путь он проехал?",
hint: "$s = v \\cdot t$, перевести минуты в секунды",
unit: "м", a: 3600,
ex: "$t = 10 \\cdot 60 = 600\\,\\text{с}$; $s = 6 \\cdot 600 = 3600\\,\\text{м}$"
},
{
q: "Какое движение называют прямолинейным?",
opts: ["Движение по кривой", "Движение, при котором траектория — прямая линия", "Движение с постоянной скоростью", "Движение без трения"],
a: 1,
ex: "Прямолинейное движение — траектория является прямой линией."
},
{
q: "Автомобиль проехал 180 км за 2 часа. Его средняя скорость в км/ч:",
hint: "$v = s/t$",
unit: "км/ч", a: 90,
ex: "$v = 180/2 = 90\\,\\text{км/ч}$"
},
{
q: "Что такое траектория движения?",
opts: ["Расстояние между начальной и конечной точками", "Линия, которую описывает тело при движении", "Скорость тела", "Время движения"],
a: 1,
ex: "Траектория — воображаемая линия, которую описывает материальная точка при своём движении."
},
{
q: "Пешеход шёл 30 минут. За это время он прошёл 2100 м. Найдите его скорость.",
hint: "$v = s/t$",
unit: "м/с", a: 1.167, tol: 0.05,
ex: "$t = 30 \\cdot 60 = 1800\\,\\text{с}$; $v = 2100/1800 \\approx 1{,}17\\,\\text{м/с}$"
}
];
// ══ §2 Относительность движения. Система отсчёта ══
var TASKS_P2 = [
{
q: "Что такое система отсчёта?",
opts: ["Прибор для измерения времени", "Тело отсчёта + система координат + часы", "Единица измерения пути", "Направление движения"],
a: 1,
ex: "Система отсчёта: тело отсчёта, связанная с ним система координат и часы для отсчёта времени."
},
{
q: "Пассажир в вагоне идёт вперёд со скоростью 2 м/с. Поезд движется со скоростью 20 м/с. Скорость пассажира относительно земли:",
hint: "$v = v_1 + v_2$",
unit: "м/с", a: 22,
ex: "$v = 20 + 2 = 22\\,\\text{м/с}$ (движутся в одну сторону)"
},
{
q: "Относительно чего определяется движение тела?",
opts: ["Только относительно Земли", "Только относительно Солнца", "Относительно выбранного тела отсчёта", "Относительно воздуха"],
a: 2,
ex: "Движение всегда относительно — оно характеризуется относительно выбранного тела отсчёта."
},
{
q: "Два поезда движутся навстречу друг другу. Скорость первого 60 км/ч, второго — 80 км/ч. Скорость сближения:",
hint: "Сложить скорости при встречном движении",
unit: "км/ч", a: 140,
ex: "$v_{\\text{сбл}} = 60 + 80 = 140\\,\\text{км/ч}$"
},
{
q: "Человек стоит в вагоне поезда. Относительно другого пассажира в том же вагоне он:",
opts: ["Движется", "Покоится", "Движется вертикально", "Движется по кругу"],
a: 1,
ex: "Оба пассажира движутся вместе с поездом, поэтому относительно друг друга — в покое."
},
{
q: "Два велосипедиста едут в одном направлении: первый 4 м/с, второй 6 м/с. Скорость второго относительно первого:",
hint: "$v_{\\text{отн}} = v_2 - v_1$",
unit: "м/с", a: 2,
ex: "$v_{\\text{отн}} = 6 - 4 = 2\\,\\text{м/с}$ (в направлении движения)"
},
{
q: "Что описывает система координат?",
opts: ["Время", "Положение тела в пространстве", "Скорость тела", "Силу, действующую на тело"],
a: 1,
ex: "Система координат задаёт способ описания положения тела в пространстве."
},
{
q: "Лодка плывёт поперёк реки шириной 60 м. Скорость лодки относительно воды 3 м/с. Время переправы:",
hint: "$t = d/v_\\text{лодки}$",
unit: "с", a: 20,
ex: "$t = 60/3 = 20\\,\\text{с}$"
}
];
// ══ §3 Скаляры и векторы. Сложение векторов ══
var TASKS_P3 = [
{
q: "Какая из величин является векторной?",
opts: ["Масса", "Температура", "Скорость", "Объём"],
a: 2,
ex: "Скорость — векторная величина, так как имеет и модуль, и направление."
},
{
q: "Два вектора направлены в одну сторону: $a = 30\\,\\text{м}$, $b = 50\\,\\text{м}$. Модуль суммы:",
hint: "Сонаправленные векторы: $|\\vec{a}+\\vec{b}| = a+b$",
unit: "м", a: 80,
ex: "$|\\vec{a}+\\vec{b}| = 30 + 50 = 80\\,\\text{м}$"
},
{
q: "Два противоположно направленных вектора: $a = 50\\,\\text{м}$, $b = 30\\,\\text{м}$. Модуль суммы:",
hint: "Противоположные векторы: $|\\vec{a}+\\vec{b}| = |a-b|$",
unit: "м", a: 20,
ex: "$|\\vec{a}+\\vec{b}| = |50 - 30| = 20\\,\\text{м}$"
},
{
q: "Что называют модулем вектора?",
opts: ["Направление вектора", "Длина (числовое значение) вектора без учёта направления", "Угол вектора", "Проекция вектора"],
a: 1,
ex: "Модуль вектора — его длина, числовое значение без учёта направления."
},
{
q: "Два взаимно перпендикулярных вектора: $a = 3\\,\\text{м}$, $b = 4\\,\\text{м}$. Модуль суммы:",
hint: "Теорема Пифагора: $c = \\sqrt{a^2+b^2}$",
unit: "м", a: 5,
ex: "$|\\vec{a}+\\vec{b}| = \\sqrt{3^2 + 4^2} = \\sqrt{9+16} = 5\\,\\text{м}$"
},
{
q: "Какая из величин является скалярной?",
opts: ["Перемещение", "Ускорение", "Сила", "Температура"],
a: 3,
ex: "Температура — скалярная величина, не имеет направления."
},
{
q: "Правило параллелограмма используется для:",
opts: ["Деления векторов", "Нахождения суммы (и разности) двух векторов", "Нахождения проекции", "Умножения на число"],
a: 1,
ex: "Правило параллелограмма: диагональ параллелограмма, построенного на двух векторах, равна их сумме."
},
{
q: "Векторы $\\vec{a}$ и $\\vec{b}$ перпендикулярны. $a = 5\\,\\text{м}$, $b = 12\\,\\text{м}$. Найдите модуль суммы.",
hint: "$c = \\sqrt{a^2+b^2}$",
unit: "м", a: 13,
ex: "$c = \\sqrt{25 + 144} = \\sqrt{169} = 13\\,\\text{м}$"
}
];
// ══ §4 Проекции вектора ══
var TASKS_P4 = [
{
q: "Как вычислить проекцию вектора $\\vec{a}$ на ось $x$?",
opts: ["$a_x = a / \\cos\\varphi$", "$a_x = a \\cdot \\sin\\varphi$", "$a_x = a \\cdot \\cos\\varphi$", "$a_x = a^2$"],
a: 2,
ex: "Проекция на ось x: $a_x = a \\cdot \\cos\\varphi$, где $\\varphi$ — угол между вектором и осью x."
},
{
q: "Вектор длиной $10\\,\\text{м}$ направлен под углом $0°$ к оси $x$. Проекция на ось $x$:",
hint: "$a_x = a \\cdot \\cos 0°$",
unit: "м", a: 10,
ex: "$a_x = 10 \\cdot \\cos 0° = 10 \\cdot 1 = 10\\,\\text{м}$"
},
{
q: "Вектор длиной $20\\,\\text{м}$ направлен под углом $90°$ к оси $x$. Проекция на ось $x$:",
hint: "$\\cos 90° = 0$",
unit: "м", a: 0,
ex: "$a_x = 20 \\cdot \\cos 90° = 20 \\cdot 0 = 0\\,\\text{м}$"
},
{
q: "Вектор $a = 8\\,\\text{м}$ направлен под углом $60°$ к оси $x$. Найдите $a_x$.",
hint: "$\\cos 60° = 0{,}5$",
unit: "м", a: 4,
ex: "$a_x = 8 \\cdot \\cos 60° = 8 \\cdot 0{,}5 = 4\\,\\text{м}$"
},
{
q: "Вектор $a = 10\\,\\text{м}$ направлен под углом $30°$ к оси $x$. Найдите $a_y$.",
hint: "$a_y = a \\cdot \\sin 30°$, $\\sin 30° = 0{,}5$",
unit: "м", a: 5,
ex: "$a_y = 10 \\cdot \\sin 30° = 10 \\cdot 0{,}5 = 5\\,\\text{м}$"
},
{
q: "Если $a_x > 0$ и $a_y > 0$, то вектор направлен:",
opts: ["В первый квадрант (вправо-вверх)", "Во второй квадрант (влево-вверх)", "В третий квадрант", "В четвёртый квадрант"],
a: 0,
ex: "Положительные обе проекции — вектор в первом квадранте."
},
{
q: "Известны проекции: $a_x = 6\\,\\text{м}$, $a_y = 8\\,\\text{м}$. Модуль вектора:",
hint: "$a = \\sqrt{a_x^2 + a_y^2}$",
unit: "м", a: 10,
ex: "$a = \\sqrt{36 + 64} = \\sqrt{100} = 10\\,\\text{м}$"
},
{
q: "Вектор $a = 20\\,\\text{м}$ направлен под углом $45°$ к оси $x$. Найдите $a_x$. ($\\sin 45° = \\cos 45° \\approx 0{,}707$)",
hint: "$a_x = a \\cdot \\cos 45°$",
unit: "м", a: 14.14, tol: 0.05,
ex: "$a_x = 20 \\cdot 0{,}707 \\approx 14{,}14\\,\\text{м}$"
}
];
// ══ §5 Путь и перемещение ══
var TASKS_P5 = [
{
q: "В чём разница между путём и перемещением?",
opts: ["Это одно и то же", "Путь — скалярная длина траектории; перемещение — вектор от начальной до конечной точки", "Перемещение всегда больше пути", "Путь — вектор, перемещение — скаляр"],
a: 1,
ex: "Путь $s$ — длина траектории (скаляр). Перемещение $\\vec{\\Delta r}$ — вектор из начальной точки в конечную."
},
{
q: "Человек прошёл 4 м на восток и 3 м на север. Модуль его перемещения:",
hint: "$|\\Delta r| = \\sqrt{4^2+3^2}$",
unit: "м", a: 5,
ex: "$|\\Delta r| = \\sqrt{16+9} = 5\\,\\text{м}$"
},
{
q: "В каком случае путь равен модулю перемещения?",
opts: ["Всегда", "При движении по кривой", "При прямолинейном движении в одном направлении", "Только при движении по кругу"],
a: 2,
ex: "При прямолинейном движении в одну сторону $s = |\\Delta r|$."
},
{
q: "Спортсмен пробежал по стадиону один круг длиной 400 м и вернулся в начальную точку. Модуль перемещения:",
hint: "Начальная и конечная точки совпадают",
unit: "м", a: 0,
ex: "После полного круга начальная и конечная точки совпадают, поэтому $|\\Delta r| = 0\\,\\text{м}$."
},
{
q: "Тело прошло путь $s = 10\\,\\text{м}$. Наименьший возможный модуль перемещения равен:",
hint: "Модуль перемещения не превышает путь",
unit: "м", a: 0,
ex: "Если тело вернулось в исходную точку, $|\\Delta r| = 0$. Минимальное значение — 0."
},
{
q: "Тело переместилось из точки $x_1 = 3\\,\\text{м}$ в точку $x_2 = 8\\,\\text{м}$. Перемещение:",
hint: "$\\Delta x = x_2 - x_1$",
unit: "м", a: 5,
ex: "$\\Delta x = 8 - 3 = 5\\,\\text{м}$"
},
{
q: "Тело переместилось из точки $x_1 = 7\\,\\text{м}$ в точку $x_2 = 2\\,\\text{м}$. Перемещение:",
hint: "$\\Delta x = x_2 - x_1$ (может быть отрицательным)",
unit: "м", a: -5,
ex: "$\\Delta x = 2 - 7 = -5\\,\\text{м}$ (движение в отрицательном направлении)"
},
{
q: "Велосипедист проехал 3 км на запад и 4 км на север. Путь равен:",
hint: "$s = s_1 + s_2$",
unit: "км", a: 7,
ex: "$s = 3 + 4 = 7\\,\\text{км}$ (путь — сумма всех расстояний)"
}
];
// ══ §6 Равномерное прямолинейное движение ══
var TASKS_P6 = [
{
q: "Что такое равномерное прямолинейное движение?",
opts: ["Движение с постоянным ускорением", "Движение, при котором скорость постоянна по модулю и направлению", "Движение по кривой", "Движение с нулевой скоростью"],
a: 1,
ex: "Равномерное прямолинейное движение — скорость тела постоянна по модулю и направлению."
},
{
q: "Автомобиль движется равномерно. За 4 с он проехал 80 м. Скорость автомобиля:",
hint: "$v = s/t$",
unit: "м/с", a: 20,
ex: "$v = 80/4 = 20\\,\\text{м/с}$"
},
{
q: "Поезд движется со скоростью 25 м/с. Какой путь он пройдёт за 3 минуты?",
hint: "$s = v \\cdot t$",
unit: "м", a: 4500,
ex: "$t = 180\\,\\text{с}$; $s = 25 \\cdot 180 = 4500\\,\\text{м}$"
},
{
q: "За какое время автомобиль со скоростью 30 м/с проедет 1,5 км?",
hint: "$t = s/v$",
unit: "с", a: 50,
ex: "$t = 1500/30 = 50\\,\\text{с}$"
},
{
q: "График $x(t)$ для равномерного движения — это:",
opts: ["Парабола", "Прямая линия", "Синусоида", "Гипербола"],
a: 1,
ex: "При равномерном движении $x = x_0 + vt$ — линейная зависимость, прямая линия."
},
{
q: "Тело начинает движение из точки $x_0 = 5\\,\\text{м}$ со скоростью $v = 3\\,\\text{м/с}$. Координата через $t = 4\\,\\text{с}$:",
hint: "$x = x_0 + vt$",
unit: "м", a: 17,
ex: "$x = 5 + 3 \\cdot 4 = 5 + 12 = 17\\,\\text{м}$"
},
{
q: "Что даёт угол наклона прямой на графике $x(t)$?",
opts: ["Ускорение", "Путь", "Скорость движения", "Время"],
a: 2,
ex: "Тангенс угла наклона прямой $x(t)$ численно равен скорости тела."
},
{
q: "Тело движется равномерно со скоростью $v = 2\\,\\text{м/с}$. Начальная координата $x_0 = 0$. Когда координата достигнет $x = 14\\,\\text{м}$?",
hint: "$t = (x - x_0)/v$",
unit: "с", a: 7,
ex: "$t = 14/2 = 7\\,\\text{с}$"
}
];
// ══ §7 Движение двух тел на одной прямой ══
var TASKS_P7 = [
{
q: "Два тела движутся навстречу из точек $x_1=0$ и $x_2=100\\,\\text{м}$ со скоростями $v_1=5\\,\\text{м/с}$ и $v_2=5\\,\\text{м/с}$. Когда встретятся?",
hint: "$t = (x_2-x_1)/(v_1+v_2)$",
unit: "с", a: 10,
ex: "$t = 100/(5+5) = 10\\,\\text{с}$"
},
{
q: "Два тела движутся в одном направлении. Первое: $x_0=0$, $v_1=10\\,\\text{м/с}$. Второе: $x_0=30\\,\\text{м}$, $v_2=4\\,\\text{м/с}$. Когда первое догонит второе?",
hint: "$t = \\Delta x_0/(v_1-v_2)$",
unit: "с", a: 5,
ex: "$t = 30/(10-4) = 5\\,\\text{с}$"
},
{
q: "Где на числовой оси встретятся два тела, если $x_1=0$ ($v_1=6\\,\\text{м/с}$) и $x_2=90\\,\\text{м}$ ($v_2=3\\,\\text{м/с}$) движутся навстречу?",
hint: "Сначала найди время встречи, потом координату",
unit: "м", a: 60,
ex: "$t = 90/9 = 10\\,\\text{с}$; $x = 6 \\cdot 10 = 60\\,\\text{м}$"
},
{
q: "Что означает, что два тела «встретились»?",
opts: ["Они имеют одинаковую скорость", "Они находятся в одной точке в один момент времени", "Они движутся с одинаковым ускорением", "Они одновременно остановились"],
a: 1,
ex: "Встреча — тела находятся в одной точке пространства в один момент времени: $x_1(t) = x_2(t)$."
},
{
q: "На графике $x(t)$ встреча двух тел определяется как:",
opts: ["Параллельные прямые", "Точка пересечения прямых двух тел", "Максимум функции", "Точка, где прямая горизонтальна"],
a: 1,
ex: "Точка пересечения прямых на $x(t)$-графике — момент и место встречи."
},
{
q: "Два тела движутся навстречу. Расстояние между ними 120 м. Скорости: $v_1 = 8\\,\\text{м/с}$, $v_2 = 4\\,\\text{м/с}$. Встреча через:",
hint: "$t = d/(v_1+v_2)$",
unit: "с", a: 10,
ex: "$t = 120/(8+4) = 10\\,\\text{с}$"
},
{
q: "Тело А впереди тела Б на 40 м и движется в том же направлении со скоростью 3 м/с. Тело Б догоняет со скоростью 7 м/с. Через сколько секунд Б догонит А?",
hint: "$t = \\Delta x_0/(v_\\text{Б}-v_\\text{А})$",
unit: "с", a: 10,
ex: "$t = 40/(7-3) = 10\\,\\text{с}$"
},
{
q: "Два тела одновременно выехали навстречу. Расстояние 200 м. $v_1=10\\,\\text{м/с}$, $v_2=15\\,\\text{м/с}$. Где встретятся от точки старта первого тела?",
hint: "$t = 200/25$, $x = v_1 \\cdot t$",
unit: "м", a: 80,
ex: "$t = 200/25 = 8\\,\\text{с}$; $x = 10 \\cdot 8 = 80\\,\\text{м}$"
}
];
// ══ §8 Средняя скорость ══
var TASKS_P8 = [
{
q: "Средняя скорость движения определяется как:",
opts: ["Полный путь делённый на время", "Полуразность максимальной и минимальной скоростей", "Скорость в середине пути", "Сумма скоростей делённая на 2"],
a: 0,
ex: "Средняя скорость: $\\langle v \\rangle = s_{\\text{полн}} / t_{\\text{полн}}$"
},
{
q: "Первую половину пути тело шло 20 мин, вторую — 40 мин. Средняя скорость в два раза меньше скорости на первом участке. Верно ли?",
opts: ["Да, средняя скорость = (v₁+v₂)/2", "Нет. Средняя скорость ≠ среднеарифметическому, если времена разные", "Да, всегда", "Нет, средняя скорость = 0"],
a: 1,
ex: "$\\langle v \\rangle = s/t$ — отношение пути ко времени. Среднеарифметическое скоростей не даёт истинную среднюю скорость."
},
{
q: "Тело прошло 60 м за 4 с, затем 80 м за 6 с. Средняя скорость всего пути:",
hint: "$\\langle v \\rangle = (s_1+s_2)/(t_1+t_2)$",
unit: "м/с", a: 14,
ex: "$\\langle v \\rangle = (60+80)/(4+6) = 140/10 = 14\\,\\text{м/с}$"
},
{
q: "Автомобиль ехал 2 ч со скоростью 60 км/ч, затем 1 ч со скоростью 90 км/ч. Средняя скорость всей поездки:",
hint: "$\\langle v \\rangle = (s_1+s_2)/(t_1+t_2)$",
unit: "км/ч", a: 70,
ex: "$s_1 = 120$, $s_2 = 90$; $\\langle v \\rangle = (120+90)/3 = 70\\,\\text{км/ч}$"
},
{
q: "Велосипедист первые 5 км ехал 20 мин, следующие 5 км — 40 мин. Средняя скорость всего пути:",
hint: "$\\langle v \\rangle = 10\\,\\text{км}/60\\,\\text{мин}$",
unit: "км/ч", a: 10,
ex: "$\\langle v \\rangle = 10/1 = 10\\,\\text{км/ч}$"
},
{
q: "Почему средняя скорость может быть меньше, чем каждая из частичных скоростей?",
opts: ["Это невозможно", "Средняя скорость усредняет по пути, поэтому большее время на малой скорости снижает среднюю", "Скорости прибавляются неправильно", "Из-за ошибок измерений"],
a: 1,
ex: "Если на меньшей скорости тратится больше времени, средняя скорость тянется к меньшему значению."
},
{
q: "Тело 3 с двигалось со скоростью 4 м/с, потом 7 с со скоростью 6 м/с. Средняя скорость:",
hint: "$\\langle v \\rangle = (3 \\cdot 4 + 7 \\cdot 6)/(3+7)$",
unit: "м/с", a: 5.4,
ex: "$\\langle v \\rangle = (12+42)/10 = 54/10 = 5{,}4\\,\\text{м/с}$"
},
{
q: "Автомобиль проехал 150 км. Первые 90 км за 1 ч, остальные 60 км за 2 ч. Средняя скорость:",
hint: "$\\langle v \\rangle = 150/3$",
unit: "км/ч", a: 50,
ex: "$\\langle v \\rangle = 150/3 = 50\\,\\text{км/ч}$"
}
];
// ══ §9 Сложение скоростей (кинематика) ══
var TASKS_P9 = [
{
q: "Лодка движется относительно воды со скоростью 5 м/с. Течение реки 3 м/с. Скорость лодки относительно берега (по течению):",
hint: "Скорости направлены в одну сторону",
unit: "м/с", a: 8,
ex: "$v = 5 + 3 = 8\\,\\text{м/с}$"
},
{
q: "Лодка движется против течения со скоростью 5 м/с. Скорость течения 2 м/с. Скорость лодки относительно берега:",
hint: "Вычитаем скорость течения",
unit: "м/с", a: 3,
ex: "$v = 5 - 2 = 3\\,\\text{м/с}$"
},
{
q: "Лодка движется поперёк реки (перпендикулярно берегу). Скорость лодки 4 м/с, течение 3 м/с. Скорость лодки относительно берега:",
hint: "$v = \\sqrt{v_\\text{лод}^2 + v_\\text{теч}^2}$",
unit: "м/с", a: 5,
ex: "$v = \\sqrt{16+9} = \\sqrt{25} = 5\\,\\text{м/с}$"
},
{
q: "Самолёт летит на восток со скоростью 200 м/с. Боковой ветер с севера 50 м/с. Модуль результирующей скорости:",
hint: "Перпендикулярные скорости: теорема Пифагора",
unit: "м/с", a: 206, tol: 0.02,
ex: "$v = \\sqrt{200^2+50^2} = \\sqrt{40000+2500} \\approx 206\\,\\text{м/с}$"
},
{
q: "Закон сложения скоростей гласит:",
opts: ["$\\vec{v}_{13} = \\vec{v}_{12} \\cdot \\vec{v}_{23}$", "$\\vec{v}_{13} = \\vec{v}_{12} + \\vec{v}_{23}$", "$\\vec{v}_{13} = \\vec{v}_{12} - 2\\vec{v}_{23}$", "$v_{13} = v_{12}^2 + v_{23}^2$"],
a: 1,
ex: "Скорость тела 1 относительно тела 3 равна векторной сумме скоростей: $\\vec{v}_{13} = \\vec{v}_{12} + \\vec{v}_{23}$."
},
{
q: "Пешеход идёт в вагоне поезда назад со скоростью 1 м/с. Поезд идёт вперёд 20 м/с. Скорость пешехода относительно земли:",
hint: "Вычитаем скорость пешехода относительно вагона",
unit: "м/с", a: 19,
ex: "$v = 20 - 1 = 19\\,\\text{м/с}$ (относительно земли)"
},
{
q: "Река шириной 120 м. Лодка движется поперёк со скоростью 4 м/с. Течение 3 м/с. За сколько секунд переплывёт реку?",
hint: "Время зависит только от поперечной составляющей",
unit: "с", a: 30,
ex: "$t = 120/4 = 30\\,\\text{с}$"
},
{
q: "На сколько метров снесёт лодку течением при переправе из предыдущей задачи ($t=30\\,\\text{с}$, течение 3 м/с)?",
hint: "$x_\\text{снос} = v_\\text{теч} \\cdot t$",
unit: "м", a: 90,
ex: "$x_\\text{снос} = 3 \\cdot 30 = 90\\,\\text{м}$"
}
];
// ══ §10 Ускорение ══
var TASKS_P10 = [
{
q: "Что называют ускорением тела?",
opts: ["Пройденный путь за единицу времени", "Изменение скорости за единицу времени", "Произведение скорости на время", "Скорость в начальный момент"],
a: 1,
ex: "Ускорение $\\vec{a} = \\Delta\\vec{v}/\\Delta t$ — векторная физическая величина."
},
{
q: "Автомобиль разогнался с 0 до 20 м/с за 5 с. Ускорение:",
hint: "$a = \\Delta v / t$",
unit: "м/с²", a: 4,
ex: "$a = 20/5 = 4\\,\\text{м/с}^2$"
},
{
q: "Тело двигалось со скоростью 30 м/с и затормозило до 10 м/с за 4 с. Ускорение торможения (модуль):",
hint: "$a = |\\Delta v|/t = (v_0-v)/t$",
unit: "м/с²", a: 5,
ex: "$a = (30-10)/4 = 5\\,\\text{м/с}^2$"
},
{
q: "Единица измерения ускорения в СИ:",
opts: ["м/с", "м/с²", "Н·с", "кг·м/с"],
a: 1,
ex: "Ускорение измеряется в метрах в секунду в квадрате: м/с²."
},
{
q: "Тело движется с ускорением $a = 3\\,\\text{м/с}^2$. Начальная скорость $v_0 = 2\\,\\text{м/с}$. Скорость через $t = 4\\,\\text{с}$:",
hint: "$v = v_0 + at$",
unit: "м/с", a: 14,
ex: "$v = 2 + 3 \\cdot 4 = 14\\,\\text{м/с}$"
},
{
q: "Мяч брошен вертикально вверх с $v_0 = 15\\,\\text{м/с}$. Ускорение свободного падения $g = 10\\,\\text{м/с}^2$. Через сколько секунд мяч остановится?",
hint: "$t = v_0/g$",
unit: "с", a: 1.5,
ex: "$t = 15/10 = 1{,}5\\,\\text{с}$"
},
{
q: "Если скорость тела возрастает, ускорение направлено:",
opts: ["Против движения", "В сторону движения", "Перпендикулярно движению", "Направление не важно"],
a: 1,
ex: "При разгоне скорость и ускорение направлены одинаково."
},
{
q: "Поезд тормозит с $v_0 = 36\\,\\text{м/с}$ с ускорением $a = 1\\,\\text{м/с}^2$. Через сколько секунд он остановится?",
hint: "$t = v_0/a$",
unit: "с", a: 36,
ex: "$t = 36/1 = 36\\,\\text{с}$"
}
];
// ══ §11 Равноускоренное движение: скорость ══
var TASKS_P11 = [
{
q: "Формула скорости при равноускоренном движении:",
opts: ["$v = v_0 / (at)$", "$v = v_0 + at$", "$v = v_0 \\cdot a \\cdot t$", "$v = at^2$"],
a: 1,
ex: "При равноускоренном движении: $v = v_0 + at$."
},
{
q: "Тело начинает движение из покоя с ускорением $a = 5\\,\\text{м/с}^2$. Скорость через $t = 6\\,\\text{с}$:",
hint: "$v = 0 + at$",
unit: "м/с", a: 30,
ex: "$v = 5 \\cdot 6 = 30\\,\\text{м/с}$"
},
{
q: "При равноускоренном движении график $v(t)$ — это:",
opts: ["Парабола", "Прямая линия", "Гипербола", "Синусоида"],
a: 1,
ex: "$v = v_0 + at$ — линейная функция от $t$, прямая линия."
},
{
q: "Из графика $v(t)$ можно определить ускорение как:",
opts: ["Ординату при $t=0$", "Площадь под графиком", "Тангенс угла наклона прямой", "Максимальную скорость"],
a: 2,
ex: "Наклон прямой $v(t)$ — ускорение: $a = \\tan\\alpha = \\Delta v/\\Delta t$."
},
{
q: "Автомобиль движется со скоростью $v_0 = 10\\,\\text{м/с}$ и разгоняется с $a = 2\\,\\text{м/с}^2$. Скорость через $t = 5\\,\\text{с}$:",
hint: "$v = v_0 + at$",
unit: "м/с", a: 20,
ex: "$v = 10 + 2 \\cdot 5 = 20\\,\\text{м/с}$"
},
{
q: "Тело тормозит: $v_0 = 25\\,\\text{м/с}$, $a = -5\\,\\text{м/с}^2$. Через сколько секунд остановится?",
hint: "$0 = v_0 + at \\Rightarrow t = v_0/|a|$",
unit: "с", a: 5,
ex: "$t = 25/5 = 5\\,\\text{с}$"
},
{
q: "Велосипедист имеет начальную скорость 4 м/с и разгоняется с ускорением 1 м/с². Какова его скорость через 8 с?",
hint: "$v = v_0 + at$",
unit: "м/с", a: 12,
ex: "$v = 4 + 1 \\cdot 8 = 12\\,\\text{м/с}$"
},
{
q: "Площадь под графиком $v(t)$ при равноускоренном движении соответствует:",
opts: ["Ускорению", "Пути, пройденному телом", "Силе", "Мощности"],
a: 1,
ex: "Площадь под $v(t)$ — это путь: $s = \\int v\\,dt$."
}
];
// ══ §12 Равноускоренное движение: координата x(t) ══
var TASKS_P12 = [
{
q: "Формула перемещения при равноускоренном движении (из покоя):",
opts: ["$s = v_0 t$", "$s = at$", "$s = \\dfrac{at^2}{2}$", "$s = v_0^2/(2a)$"],
a: 2,
ex: "Из покоя ($v_0=0$): $s = \\dfrac{at^2}{2}$."
},
{
q: "Тело начинает движение из покоя с ускорением $a = 2\\,\\text{м/с}^2$. Путь за $t = 4\\,\\text{с}$:",
hint: "$s = at^2/2$",
unit: "м", a: 16,
ex: "$s = 2 \\cdot 16/2 = 16\\,\\text{м}$"
},
{
q: "Тело: $v_0 = 6\\,\\text{м/с}$, $a = 2\\,\\text{м/с}^2$, $t = 5\\,\\text{с}$. Путь:",
hint: "$s = v_0 t + at^2/2$",
unit: "м", a: 55,
ex: "$s = 6 \\cdot 5 + 2 \\cdot 25/2 = 30+25 = 55\\,\\text{м}$"
},
{
q: "Автомобиль разгонялся с места. За первые 3 с прошёл 9 м. Ускорение:",
hint: "$s = at^2/2 \\Rightarrow a = 2s/t^2$",
unit: "м/с²", a: 2,
ex: "$a = 2 \\cdot 9/9 = 2\\,\\text{м/с}^2$"
},
{
q: "График $x(t)$ при равноускоренном движении из покоя — это:",
opts: ["Прямая линия", "Парабола", "Горизонтальная линия", "Гипербола"],
a: 1,
ex: "$x = x_0 + v_0 t + at^2/2$ — при $v_0=0$: $x \\propto t^2$ — парабола."
},
{
q: "Тело тормозит: $v_0 = 20\\,\\text{м/с}$, $a = -4\\,\\text{м/с}^2$. Путь до остановки:",
hint: "$v^2 = v_0^2 - 2as \\Rightarrow s = v_0^2/(2a)$",
unit: "м", a: 50,
ex: "$s = 20^2/(2 \\cdot 4) = 400/8 = 50\\,\\text{м}$"
},
{
q: "Тело: $x_0 = 10\\,\\text{м}$, $v_0 = 0$, $a = 3\\,\\text{м/с}^2$. Координата через $t = 4\\,\\text{с}$:",
hint: "$x = x_0 + at^2/2$",
unit: "м", a: 34,
ex: "$x = 10 + 3 \\cdot 16/2 = 10+24 = 34\\,\\text{м}$"
},
{
q: "При равноускоренном движении путь за $n$-ю секунду больше, чем за $(n-1)$-ю. Почему?",
opts: ["Скорость уменьшается", "Ускорение возрастает", "Скорость возрастает — за каждую следующую секунду тело проходит больший путь", "Это неверно"],
a: 2,
ex: "При разгоне скорость растёт, поэтому расстояния за равные промежутки времени нарастают."
}
];
// ══ §13 Равномерное движение по окружности ══
var TASKS_P13 = [
{
q: "Что такое период обращения?",
opts: ["Скорость движения по окружности", "Время одного полного оборота", "Число оборотов в секунду", "Радиус окружности"],
a: 1,
ex: "Период $T$ — время одного полного оборота."
},
{
q: "Что такое частота вращения?",
opts: ["Время одного оборота", "Число оборотов в единицу времени", "Длина окружности", "Ускорение"],
a: 1,
ex: "Частота $\\nu = 1/T$ — число оборотов за единицу времени (единица — Гц = 1/с)."
},
{
q: "Тело совершает 5 оборотов за 2 с. Период обращения:",
hint: "$T = t/N$",
unit: "с", a: 0.4,
ex: "$T = 2/5 = 0{,}4\\,\\text{с}$"
},
{
q: "Скорость движения по окружности: колесо радиуса $r = 0{,}5\\,\\text{м}$ делает $n = 10\\,\\text{об/с}$. Линейная скорость:",
hint: "$v = 2\\pi r / T = 2\\pi r \\cdot \\nu$",
unit: "м/с", a: 31.4, tol: 0.03,
ex: "$v = 2\\pi \\cdot 0{,}5 \\cdot 10 \\approx 31{,}4\\,\\text{м/с}$"
},
{
q: "Направление скорости при движении по окружности:",
opts: ["По радиусу к центру", "По радиусу от центра", "По касательной к окружности", "Вдоль оси вращения"],
a: 2,
ex: "Мгновенная скорость всегда направлена по касательной к траектории."
},
{
q: "Тело равномерно движется по окружности. Его скорость:",
opts: ["Не изменяется совсем", "Постоянна по модулю, но изменяется по направлению", "Постоянно возрастает", "Равна нулю"],
a: 1,
ex: "При равномерном движении по окружности: $|v| = \\text{const}$, но направление меняется непрерывно."
},
{
q: "Колесо вращается с периодом $T = 0{,}2\\,\\text{с}$. Частота вращения:",
hint: "$\\nu = 1/T$",
unit: "об/с", a: 5,
ex: "$\\nu = 1/0{,}2 = 5\\,\\text{об/с}$"
},
{
q: "Точка находится на радиусе $r = 2\\,\\text{м}$ вращающегося диска с $T = 4\\,\\text{с}$. Линейная скорость точки:",
hint: "$v = 2\\pi r/T$",
unit: "м/с", a: 3.14, tol: 0.03,
ex: "$v = 2\\pi \\cdot 2/4 = \\pi \\approx 3{,}14\\,\\text{м/с}$"
}
];
// ══ §14 Центростремительное ускорение ══
var TASKS_P14 = [
{
q: "Центростремительное ускорение направлено:",
opts: ["По касательной к траектории", "В сторону движения", "К центру окружности", "Против движения"],
a: 2,
ex: "Центростремительное ускорение всегда направлено к центру окружности."
},
{
q: "Формула центростремительного ускорения:",
opts: ["$a = v \\cdot T$", "$a = v^2/r$", "$a = vr$", "$a = r/v$"],
a: 1,
ex: "$a_\\text{цс} = v^2/r = \\omega^2 r$"
},
{
q: "Тело движется по окружности радиуса $r = 4\\,\\text{м}$ со скоростью $v = 8\\,\\text{м/с}$. Центростремительное ускорение:",
hint: "$a = v^2/r$",
unit: "м/с²", a: 16,
ex: "$a = 64/4 = 16\\,\\text{м/с}^2$"
},
{
q: "Спутник летит по круговой орбите радиуса $R = 7000\\,\\text{км}$ со скоростью $v = 7{,}8\\,\\text{км/с}$. Центростремительное ускорение (в м/с²):",
hint: "$a = v^2/R$; перевести единицы",
unit: "м/с²", a: 8.69, tol: 0.05,
ex: "$a = (7800)^2/(7\\cdot10^6) \\approx 8{,}69\\,\\text{м/с}^2$"
},
{
q: "Центростремительное ускорение обеспечивается:",
opts: ["Только силой тяжести", "Равнодействующей сил, направленной к центру орбиты", "Скоростью тела", "Инерцией"],
a: 1,
ex: "Центростремительное ускорение вызывается силой, направленной к центру: $F = ma_\\text{цс}$."
},
{
q: "Автомобиль проходит поворот радиуса $r = 50\\,\\text{м}$ со скоростью $v = 20\\,\\text{м/с}$. Центростремительное ускорение:",
hint: "$a = v^2/r$",
unit: "м/с²", a: 8,
ex: "$a = 400/50 = 8\\,\\text{м/с}^2$"
},
{
q: "Если радиус окружности удвоить, а скорость оставить прежней, центростремительное ускорение:",
opts: ["Удвоится", "Уменьшится в 2 раза", "Увеличится в 4 раза", "Не изменится"],
a: 1,
ex: "$a = v^2/r$. При удвоении $r$ ускорение уменьшается в 2 раза."
},
{
q: "Точка на ободе колеса радиуса $r = 0{,}3\\,\\text{м}$ вращается с частотой $\\nu = 5\\,\\text{об/с}$. Центростремительное ускорение:",
hint: "$v = 2\\pi r\\nu$, $a = v^2/r = 4\\pi^2 r \\nu^2$",
unit: "м/с²", a: 296.1, tol: 0.03,
ex: "$a = 4\\pi^2 \\cdot 0{,}3 \\cdot 25 \\approx 296\\,\\text{м/с}^2$"
}
];
// ══ §15 Первый закон Ньютона ══
var TASKS_P15 = [
{
q: "Тело движется равномерно прямолинейно. Сила тяги $F_\text{тяга} = 80\,\text{Н}$. Чему равна сила трения?",
hint: "$\\vec{F}_\\text{рез} = 0 \\Rightarrow F_\\text{тяга} = F_\\text{тр}$",
unit: "Н", a: 80,
ex: "При равномерном движении $a = 0$, значит $F_\\text{рез} = 0$: $F_\\text{тр} = F_\\text{тяга} = 80\\,\\text{Н}$."
},
{
q: "Тело равномерно едет по горизонтальной поверхности. Сила сопротивления $F_\\text{сопр} = 200\\,\\text{Н}$. Чему равна сила тяги двигателя?",
hint: "Равномерное движение: $\\vec{F}_\\text{рез} = 0$",
unit: "Н", a: 200,
ex: "При $a = 0$: $F_\\text{тяга} = F_\\text{сопр} = 200\\,\\text{Н}$."
},
{
q: "Что такое инерция?",
opts: [
"Сила, действующая на тело при ускорении",
"Свойство тела сохранять скорость в отсутствие сил или при скомпенсированных силах",
"Ускорение тела под действием тяги",
"Сила тяжести"
],
a: 1,
ex: "Инерция — свойство тела сохранять скорость (и её направление) при $\\vec{F}_\\text{рез} = 0$."
},
{
q: "Пассажир в автобусе откидывается назад при резком старте. Причина?",
opts: [
"На пассажира действует сила тяги двигателя",
"Пассажир обладает инерцией и стремится остаться в покое",
"Реакция опоры уменьшилась",
"Сила трения исчезает при ускорении"
],
a: 1,
ex: "Тело (пассажир) стремится сохранить исходное состояние покоя по инерции, пока автобус ускоряется вперёд."
},
{
q: "Что такое инерциальная система отсчёта (ИСО)?",
opts: [
"Система отсчёта, связанная с покоящимся телом",
"Система отсчёта, в которой выполняется первый закон Ньютона",
"Система отсчёта, связанная с ускоряющимся телом",
"Любая система отсчёта, связанная с Землёй"
],
a: 1,
ex: "ИСО — та, в которой тело без действия сил покоится или движется равномерно прямолинейно (1-й закон)."
},
{
q: "Мяч брошен горизонтально. Какова равнодействующая всех сил во время полёта (без учёта сопротивления воздуха)?",
opts: [
"Равна нулю",
"Равна силе тяжести, направлена вертикально вниз",
"Равна начальной силе броска",
"Равна силе нормального давления"
],
a: 1,
ex: "В полёте на мяч действует только сила тяжести (воздух не учитываем). $\\vec{F}_\\text{рез} = m\\vec{g}$ — вертикально вниз."
},
{
q: "На тело одновременно действуют сила тяги $F_1 = 150\\,\\text{Н}$ вправо и сила трения $F_2 = 150\\,\\text{Н}$ влево. Каково ускорение тела?",
opts: [
"$a = 300/m$",
"$a = 150/m$",
"$a = 0$",
"Зависит от массы тела"
],
a: 2,
ex: "$\\vec{F}_\\text{рез} = 150 - 150 = 0\\,\\text{Н}$, поэтому $a = 0$. Тело движется равномерно (или стоит)."
},
{
q: "Теннисный мяч летит горизонтально. Никаких сил нет. Что произойдёт?",
opts: [
"Мяч начнёт ускоряться",
"Мяч замедлится и остановится",
"Мяч будет двигаться равномерно прямолинейно вечно",
"Мяч упадёт под действием инерции"
],
a: 2,
ex: "По 1-му закону Ньютона: без сил $\\vec{F}_\\text{рез} = 0 \\Rightarrow a = 0$ — мяч движется равномерно прямолинейно."
},
];
// ══ §16 Масса. Сила тяжести ══
var TASKS_P16 = [
{
q: "Найдите силу тяжести тела массой $m = 8\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$.",
hint: "$F_\\text{т} = mg$",
unit: "Н", a: 80,
ex: "$F_\\text{т} = 8 \\cdot 10 = 80\\,\\text{Н}$"
},
{
q: "Сила тяжести тела $F_\\text{т} = 250\\,\\text{Н}$, $g = 10\\,\\text{м/с}^2$. Найдите массу тела.",
hint: "$m = F_\\text{т}/g$",
unit: "кг", a: 25,
ex: "$m = 250/10 = 25\\,\\text{кг}$"
},
{
q: "Плотность вещества $\\rho = 2700\\,\\text{кг/м}^3$ (алюминий), объём $V = 0{,}002\\,\\text{м}^3$. Найдите массу тела.",
hint: "$m = \\rho V$",
unit: "кг", a: 5.4,
ex: "$m = 2700 \\cdot 0{,}002 = 5{,}4\\,\\text{кг}$"
},
{
q: "Масса тела $m = 10\\,\\text{кг}$. Найдите силу тяжести на Луне, где $g_\\text{Л} = 1{,}6\\,\\text{м/с}^2$.",
hint: "$F_\\text{т} = mg_\\text{Л}$",
unit: "Н", a: 16,
ex: "$F_\\text{т} = 10 \\cdot 1{,}6 = 16\\,\\text{Н}$"
},
{
q: "Что характеризует масса тела?",
opts: [
"Объём тела",
"Меру инертности тела",
"Силу тяжести тела",
"Скорость тела"
],
a: 1,
ex: "Масса — количественная мера инертности: чем больше масса, тем труднее разогнать или затормозить тело."
},
{
q: "Как изменится масса тела при перемещении с Земли на Луну?",
opts: [
"Уменьшится в 6 раз",
"Увеличится в 6 раз",
"Не изменится",
"Зависит от скорости перемещения"
],
a: 2,
ex: "Масса — фундаментальная характеристика тела, не зависящая от гравитационного поля и положения."
},
{
q: "Воздух в комнате $6 \\times 4 \\times 3\\,\\text{м}$, плотность воздуха $\\rho = 1{,}25\\,\\text{кг/м}^3$. Найдите массу воздуха в комнате.",
hint: "$V = 6 \\cdot 4 \\cdot 3\\,\\text{м}^3$; $m = \\rho V$",
unit: "кг", a: 90,
ex: "$V = 72\\,\\text{м}^3$; $m = 1{,}25 \\cdot 72 = 90\\,\\text{кг}$"
},
{
q: "Тело весит на Земле $F_\\text{т} = 600\\,\\text{Н}$. На Луне ($g_\\text{Л} = 1{,}6\\,\\text{м/с}^2$) сила тяжести равна?",
hint: "Сначала найди массу: $m = F_\\text{т}/g$, затем $F_\\text{Л} = mg_\\text{Л}$",
unit: "Н", a: 96,
ex: "$m = 600/10 = 60\\,\\text{кг}$; $F_\\text{Л} = 60 \\cdot 1{,}6 = 96\\,\\text{Н}$"
},
];
// ══ §17 Второй закон Ньютона ══
var TASKS_P17 = [
{
q: "Тело массой $m = 5\\,\\text{кг}$ движется с ускорением $a = 4\\,\\text{м/с}^2$. Найдите равнодействующую сил.",
hint: "$F = ma$",
unit: "Н", a: 20,
ex: "$F = 5 \\cdot 4 = 20\\,\\text{Н}$"
},
{
q: "На тело действует сила $F = 36\\,\\text{Н}$, ускорение $a = 4\\,\\text{м/с}^2$. Найдите массу тела.",
hint: "$m = F/a$",
unit: "кг", a: 9,
ex: "$m = 36/4 = 9\\,\\text{кг}$"
},
{
q: "Тело массой $m = 8\\,\\text{кг}$ тянут силой $F = 32\\,\\text{Н}$. Найдите ускорение тела (трение пренебречь).",
hint: "$a = F/m$",
unit: "м/с²", a: 4,
ex: "$a = 32/8 = 4\\,\\text{м/с}^2$"
},
{
q: "Тело массой $m = 10\\,\\text{кг}$: сила тяги $F_\\text{тяга} = 80\\,\\text{Н}$, сила трения $F_\\text{тр} = 30\\,\\text{Н}$. Найдите ускорение.",
hint: "$F_\\text{рез} = F_\\text{тяга} - F_\\text{тр}$; $a = F_\\text{рез}/m$",
unit: "м/с²", a: 5,
ex: "$F_\\text{рез} = 80 - 30 = 50\\,\\text{Н}$; $a = 50/10 = 5\\,\\text{м/с}^2$"
},
{
q: "Как изменится ускорение тела, если равнодействующую увеличить в 4 раза?",
opts: [
"Уменьшится в 4 раза",
"Увеличится в 4 раза",
"Увеличится в 2 раза",
"Не изменится"
],
a: 1,
ex: "$a = F/m$: при $F' = 4F$ и $m = \\text{const}$ получаем $a' = 4F/m = 4a$."
},
{
q: "Как изменится ускорение тела, если при постоянной силе массу уменьшить в 3 раза?",
opts: [
"Уменьшится в 3 раза",
"Увеличится в 9 раз",
"Увеличится в 3 раза",
"Не изменится"
],
a: 2,
ex: "$a = F/m$: при $m' = m/3$ получаем $a' = F/(m/3) = 3F/m = 3a$."
},
{
q: "Ракета массой $m = 500\\,\\text{кг}$. Сила тяги $F = 10000\\,\\text{Н}$ (вертикально вверх), $g = 10\\,\\text{м/с}^2$. Найдите ускорение ракеты.",
hint: "$F_\\text{рез} = F_\\text{тяга} - mg$; $a = F_\\text{рез}/m$",
unit: "м/с²", a: 10,
ex: "$F_\\text{рез} = 10000 - 500 \\cdot 10 = 5000\\,\\text{Н}$; $a = 5000/500 = 10\\,\\text{м/с}^2$"
},
{
q: "Сила $F = 1\\,\\text{Н}$ сообщает телу ускорение $a = 1\\,\\text{м/с}^2$. Какова масса тела?",
hint: "$m = F/a$",
unit: "кг", a: 1,
ex: "$m = 1/1 = 1\\,\\text{кг}$. Именно так определяется единица «1 Ньютон»."
},
{
q: "Автомобиль массой $m = 1000\\,\\text{кг}$ разгоняется с $v_0 = 0$ до $v = 20\\,\\text{м/с}$ за $\\Delta t = 10\\,\\text{с}$. Найдите силу тяги (трение пренебречь).",
hint: "$a = \\Delta v/\\Delta t$; $F = ma$",
unit: "Н", a: 2000,
ex: "$a = 20/10 = 2\\,\\text{м/с}^2$; $F = 1000 \\cdot 2 = 2000\\,\\text{Н}$"
},
];
// ══ §18 Третий закон Ньютона ══
var TASKS_P18 = [
{
q: "Тело A давит на тело B с силой $F = 120\\,\\text{Н}$. С какой силой тело B действует на тело A?",
opts: [
"$60\\,\\text{Н}$ в том же направлении",
"$120\\,\\text{Н}$ в противоположном направлении",
"$240\\,\\text{Н}$ в противоположном направлении",
"Нулевая — B неподвижно"
],
a: 1,
ex: "По 3-му закону Ньютона: $|\\vec{F}_{A \\to B}| = |\\vec{F}_{B \\to A}| = 120\\,\\text{Н}$, силы противоположны."
},
{
q: "Лошадь тянет телегу с силой $F = 500\\,\\text{Н}$. С какой силой телега действует на лошадь?",
hint: "$\\vec{F}_{1\\to2} = -\\vec{F}_{2\\to1}$",
unit: "Н", a: 500,
ex: "По 3-му закону: $|\\vec{F}_{\\text{телега} \\to \\text{лошадь}}| = 500\\,\\text{Н}$ (противоположно направлению тяги)."
},
{
q: "Чем отличаются силы пары по 3-му закону Ньютона от двух сил, уравновешивающих тело?",
opts: [
"Ничем не отличаются",
"Силы пары 3-го закона приложены к разным телам и не могут уравновесить одно тело",
"Силы пары 3-го закона всегда направлены в одну сторону",
"Силы пары 3-го закона могут иметь разную природу"
],
a: 1,
ex: "Пара 3-го закона приложена к <b>разным</b> телам — они не компенсируют друг друга. Уравновешивающие силы приложены к <b>одному</b> телу."
},
{
q: "Два конькобёжца стоят на льду и отталкиваются. Коньки не тормозят. Что произойдёт?",
opts: [
"Оба останутся на месте",
"Более тяжёлый останется на месте",
"Оба начнут двигаться в противоположных направлениях",
"Только лёгкий начнёт двигаться"
],
a: 2,
ex: "По 3-му закону: силы равны, но направлены в разные стороны. Оба конькобёжца получат ускорение (разное, зависящее от массы)."
},
{
q: "Что из перечисленного является примером применения 3-го закона Ньютона?",
opts: [
"Движение тела по инерции",
"Прыжок с лодки на берег (лодка отплывает назад)",
"Ускорение тела под действием силы",
"Равновесие тела на опоре"
],
a: 1,
ex: "При прыжке человек отталкивается от лодки: человек действует на лодку, лодка с равной силой действует на человека — они расходятся в разные стороны."
},
{
q: "Что означает принцип относительности Галилея?",
opts: [
"Скорость света одинакова во всех системах отсчёта",
"Все тела падают с одинаковым ускорением",
"Законы механики одинаковы во всех инерциальных системах отсчёта",
"Масса тела не зависит от скорости"
],
a: 2,
ex: "Принцип Галилея: механические явления протекают одинаково в любой ИСО. Физику нельзя отличить, находясь внутри равномерно движущегося вагона."
},
{
q: "Силы пары по 3-му закону Ньютона:",
opts: [
"Всегда разной природы",
"Всегда одинаковой природы",
"Могут быть разной природы",
"Обе всегда направлены вниз"
],
a: 1,
ex: "Если тела взаимодействуют гравитационно — обе силы гравитационные. Если упруго — обе упругие. Природа сил в паре всегда одна."
},
{
q: "Книга лежит на столе. Какие две силы образуют пару по 3-му закону Ньютона с силой тяжести книги $m\\vec{g}$?",
opts: [
"Сила реакции стола $\\vec{N}$ на книгу",
"Сила тяжести Земли, с которой книга притягивает Землю к себе",
"Давление воздуха на книгу",
"Трение между книгой и столом"
],
a: 1,
ex: "Сила тяжести книги — Земля тянет книгу вниз. Парная сила — книга тянет Землю вверх с той же силой. Обе гравитационные, на разных телах."
},
];
// ══ §19 Закон Гука ══
var TASKS_P19 = [
{
q: "Жёсткость пружины $k = 400\\,\\text{Н/м}$, деформация $\\Delta l = 0{,}05\\,\\text{м}$. Найдите силу упругости.",
hint: "$F_\\text{упр} = k|\\Delta l|$",
unit: "Н", a: 20,
ex: "$F_\\text{упр} = 400 \\cdot 0{,}05 = 20\\,\\text{Н}$"
},
{
q: "Сила упругости $F = 30\\,\\text{Н}$, жёсткость $k = 600\\,\\text{Н/м}$. Найдите деформацию пружины.",
hint: "$\\Delta l = F/k$",
unit: "м", a: 0.05,
ex: "$\\Delta l = 30/600 = 0{,}05\\,\\text{м} = 5\\,\\text{см}$"
},
{
q: "Пружина деформирована на $x = 0{,}08\\,\\text{м}$, сила упругости $F = 120\\,\\text{Н}$. Найдите жёсткость.",
hint: "$k = F/\\Delta l$",
unit: "Н/м", a: 1500,
ex: "$k = 120/0{,}08 = 1500\\,\\text{Н/м}$"
},
{
q: "На пружину жёсткостью $k = 100\\,\\text{Н/м}$ подвесили груз $m = 0{,}5\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$. Найдите деформацию пружины при равновесии.",
hint: "$F_\\text{упр} = F_\\text{т} = mg$; $\\Delta l = mg/k$",
unit: "м", a: 0.05,
ex: "$\\Delta l = mg/k = 0{,}5 \\cdot 10 / 100 = 0{,}05\\,\\text{м}$"
},
{
q: "Пружина жёсткостью $k = 200\\,\\text{Н/м}$ растянута силой $F = 50\\,\\text{Н}$. Найдите деформацию.",
hint: "$\\Delta l = F/k$",
unit: "м", a: 0.25,
ex: "$\\Delta l = 50/200 = 0{,}25\\,\\text{м} = 25\\,\\text{см}$"
},
{
q: "При какой деформации выполняется закон Гука?",
opts: [
"При любой деформации",
"Только при пластической деформации",
"Только при упругой деформации (не превышающей предела упругости)",
"Только при деформациях сжатия"
],
a: 2,
ex: "Закон Гука выполняется для упругой деформации — когда тело возвращается к исходной форме. При пластической деформации закон нарушается."
},
{
q: "Какова природа сил упругости?",
opts: [
"Гравитационная",
"Электромагнитная",
"Ядерная",
"Термодинамическая"
],
a: 1,
ex: "Силы упругости обусловлены электромагнитным взаимодействием атомов и молекул тела при деформации."
},
{
q: "Как изменится деформация пружины, если жёсткость увеличить в 2 раза при той же силе?",
opts: [
"Увеличится в 2 раза",
"Уменьшится в 2 раза",
"Не изменится",
"Увеличится в 4 раза"
],
a: 1,
ex: "$\\Delta l = F/k$: при $k' = 2k$ → $\\Delta l' = F/(2k) = \\Delta l/2$ — уменьшится в 2 раза."
},
{
q: "Груз $m = 2\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$ подвешен к пружине, удлинение $\\Delta l = 4\\,\\text{см} = 0{,}04\\,\\text{м}$. Найдите жёсткость пружины.",
hint: "При равновесии: $F_\\text{упр} = mg$; $k = mg/\\Delta l$",
unit: "Н/м", a: 500,
ex: "$k = mg/\\Delta l = 2 \\cdot 10 / 0{,}04 = 500\\,\\text{Н/м}$"
},
];
// ══ §20 Силы трения ══
var TASKS_P20 = [
{
q: "Коэффициент трения $\\mu = 0{,}4$, сила нормального давления $N = 150\\,\\text{Н}$. Найдите силу трения скольжения.",
hint: "$F_\\text{тр} = \\mu N$",
unit: "Н", a: 60,
ex: "$F_\\text{тр} = 0{,}4 \\cdot 150 = 60\\,\\text{Н}$"
},
{
q: "Сила трения $F_\\text{тр} = 45\\,\\text{Н}$, сила нормального давления $N = 150\\,\\text{Н}$. Найдите коэффициент трения.",
hint: "$\\mu = F_\\text{тр}/N$",
unit: "", a: 0.3, tol: 0.05,
ex: "$\\mu = 45/150 = 0{,}3$"
},
{
q: "Брусок массой $m = 5\\,\\text{кг}$ скользит по горизонтальной поверхности, $\\mu = 0{,}3$, $g = 10\\,\\text{м/с}^2$. Найдите силу трения скольжения.",
hint: "На горизонтали: $N = mg$; $F_\\text{тр} = \\mu mg$",
unit: "Н", a: 15,
ex: "$N = 5 \\cdot 10 = 50\\,\\text{Н}$; $F_\\text{тр} = 0{,}3 \\cdot 50 = 15\\,\\text{Н}$"
},
{
q: "Куда направлена сила трения скольжения?",
opts: [
"В направлении движения тела",
"Перпендикулярно поверхности",
"Против направления скорости скольжения",
"Всегда вертикально вниз"
],
a: 2,
ex: "Сила трения скольжения всегда направлена противоположно скорости скольжения тела относительно поверхности."
},
{
q: "Максимальная сила трения покоя при $\\mu_\\text{пок} = 0{,}5$, $N = 80\\,\\text{Н}$?",
hint: "$F_\\text{тр.пок}^{max} = \\mu_\\text{пок} N$",
unit: "Н", a: 40,
ex: "$F_\\text{тр.пок}^{max} = 0{,}5 \\cdot 80 = 40\\,\\text{Н}$"
},
{
q: "Тело движется равномерно. Сила тяги $F = 120\\,\\text{Н}$, масса $m = 30\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$. Найдите $\\mu$.",
hint: "При $a=0$: $F_\\text{тяга} = F_\\text{тр} = \\mu mg$; $\\mu = F/(mg)$",
unit: "", a: 0.4, tol: 0.05,
ex: "$\\mu = F/(mg) = 120/(30 \\cdot 10) = 0{,}4$"
},
{
q: "Зависит ли сила трения скольжения от площади соприкасающихся поверхностей?",
opts: [
"Да, больше площадь — больше трение",
"Нет, не зависит от площади контакта",
"Зависит, но только при малых скоростях",
"Зависит при смазке"
],
a: 1,
ex: "Сила трения $F_\\text{тр} = \\mu N$ — не зависит от площади контакта. Это экспериментальный факт (при одинаковой нормальной силе)."
},
{
q: "Тело массой $m = 10\\,\\text{кг}$ начали толкать силой $F = 20\\,\\text{Н}$. $\\mu_\\text{пок} = 0{,}3$, $g = 10\\,\\text{м/с}^2$. Тронется ли тело с места?",
opts: [
"Да, тронется — $F > F_\\text{тр.пок}^{max}$",
"Нет, не тронется — $F < F_\\text{тр.пок}^{max}$",
"Тронется только при $F = F_\\text{тр.пок}^{max}$",
"Зависит от времени действия силы"
],
a: 1,
ex: "$F_\\text{тр.пок}^{max} = 0{,}3 \\cdot 10 \\cdot 10 = 30\\,\\text{Н}$. $F = 20\\,\\text{Н} < 30\\,\\text{Н}$ → тело не тронется."
},
{
q: "Автомобиль $m = 800\\,\\text{кг}$ тормозит до остановки. $\\mu = 0{,}5$, $g = 10\\,\\text{м/с}^2$. Найдите тормозную силу.",
hint: "$F_\\text{тр} = \\mu mg$",
unit: "Н", a: 4000,
ex: "$F_\\text{тр} = 0{,}5 \\cdot 800 \\cdot 10 = 4000\\,\\text{Н}$"
},
];
// ══ §21 Движение тела под действием силы тяжести ══
var TASKS_P21 = [
{
q: "Тело падает свободно с высоты $h = 20\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите время падения.",
hint: "$t = \\sqrt{2h/g}$",
unit: "с", a: 2,
ex: "$t = \\sqrt{2 \\cdot 20/10} = \\sqrt{4} = 2\\,\\text{с}$"
},
{
q: "Тело падает свободно с высоты $h = 45\\,\\text{м}$, $g = 10\\,\\text{м/с}^2$. Найдите скорость тела у земли.",
hint: "$v = \\sqrt{2gh}$",
unit: "м/с", a: 30,
ex: "$v = \\sqrt{2 \\cdot 10 \\cdot 45} = \\sqrt{900} = 30\\,\\text{м/с}$"
},
{
q: "Тело падает $t = 3\\,\\text{с}$, $g = 10\\,\\text{м/с}^2$. Какое расстояние пролетело тело?",
hint: "$y = gt^2/2$",
unit: "м", a: 45,
ex: "$y = 10 \\cdot 9/2 = 45\\,\\text{м}$"
},
{
q: "Что такое свободное падение?",
opts: [
"Любое падение предмета с высоты",
"Движение тела под действием только силы тяжести (без сопротивления воздуха)",
"Падение в вакууме со скоростью $g$",
"Равномерное движение вниз"
],
a: 1,
ex: "Свободное падение — движение тела, на которое действует <b>только сила тяжести</b> (воздух не учитывается)."
},
{
q: "Шарик брошен горизонтально с высоты $h = 20\\,\\text{м}$ со скоростью $v_0 = 5\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите горизонтальную дальность полёта.",
hint: "$t = \\sqrt{2h/g}$; $l = v_0 t$",
unit: "м", a: 10,
ex: "$t = \\sqrt{2 \\cdot 20/10} = 2\\,\\text{с}$; $l = 5 \\cdot 2 = 10\\,\\text{м}$"
},
{
q: "Мяч брошен вертикально вверх со скоростью $v_0 = 30\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите максимальную высоту подъёма.",
hint: "$H = v_0^2/(2g)$",
unit: "м", a: 45,
ex: "$H = 900/20 = 45\\,\\text{м}$"
},
{
q: "Какова форма траектории тела, брошенного горизонтально (без учёта сопротивления воздуха)?",
opts: [
"Прямая линия",
"Парабола",
"Окружность",
"Гипербола"
],
a: 1,
ex: "Горизонтальное движение равномерное ($x = v_0 t$), вертикальное — равноускоренное ($y = gt^2/2$). Исключая $t$: $y = gx^2/(2v_0^2)$ — уравнение параболы."
},
{
q: "Тело падает $t = 5\\,\\text{с}$, $g = 10\\,\\text{м/с}^2$. Найдите скорость тела в момент удара о землю.",
hint: "$v = gt$",
unit: "м/с", a: 50,
ex: "$v = g \\cdot t = 10 \\cdot 5 = 50\\,\\text{м/с}$"
},
{
q: "Камешек бросают горизонтально с высоты $h = 1{,}25\\,\\text{м}$ над водой со скоростью $v_0 = 4\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите дальность полёта.",
hint: "$t = \\sqrt{2h/g}$; $l = v_0 t$",
unit: "м", a: 2,
ex: "$t = \\sqrt{2 \\cdot 1{,}25/10} = \\sqrt{0{,}25} = 0{,}5\\,\\text{с}$; $l = 4 \\cdot 0{,}5 = 2\\,\\text{м}$"
},
];
// ══ §22 Бросок тела под углом к горизонту ══
var TASKS_P22 = [
{
q: "Тело брошено под углом $\\alpha = 30°$ к горизонту с начальной скоростью $v_0 = 20\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите горизонтальную дальность полёта.",
hint: "$L = v_0^2 \\sin 2\\alpha / g$",
unit: "м", a: 34.6, tol: 0.5,
ex: "$L = 20^2 \\cdot \\sin 60° / 10 = 400 \\cdot 0{,}866 / 10 \\approx 34{,}6\\,\\text{м}$"
},
{
q: "При каком угле броска горизонтальная дальность полёта максимальна (без учёта сопротивления воздуха)?",
opts: ["30°","45°","60°","90°"],
a: 1,
ex: "$L = v_0^2 \\sin 2\\alpha / g$ максимально при $\\sin 2\\alpha = 1$, то есть при $2\\alpha = 90°$, $\\alpha = 45°$."
},
{
q: "Тело брошено под углом $45°$ к горизонту с $v_0 = 30\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите максимальную высоту подъёма.",
hint: "$H = v_0^2 \\sin^2\\!\\alpha / (2g)$",
unit: "м", a: 22.5,
ex: "$H = 30^2 \\cdot \\sin^2 45° / 20 = 900 \\cdot 0{,}5 / 20 = 22{,}5\\,\\text{м}$"
},
{
q: "Что происходит с горизонтальной составляющей скорости тела в полёте (без учёта воздуха)?",
opts: [
"Уменьшается под действием силы тяжести",
"Не изменяется (остаётся постоянной)",
"Сначала уменьшается, затем увеличивается",
"Увеличивается"
],
a: 1,
ex: "Сила тяжести направлена вертикально и изменяет только вертикальную составляющую. Горизонтальная составляющая $v_x = v_0\\cos\\alpha = \\text{const}$."
},
{
q: "Снаряд выпущен с $v_0 = 50\\,\\text{м/с}$ под углом $\\alpha = 60°$. Найдите полное время полёта. $g = 10\\,\\text{м/с}^2$.",
hint: "$T = 2v_0\\sin\\alpha / g$",
unit: "с", a: 8.66, tol: 0.1,
ex: "$T = 2 \\cdot 50 \\cdot \\sin 60° / 10 = 100 \\cdot 0{,}866 / 10 \\approx 8{,}66\\,\\text{с}$"
},
{
q: "Мяч брошен под углом $45°$ к горизонту, $v_0 = 10\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите горизонтальную дальность полёта.",
hint: "$L = v_0^2 \\sin 2\\alpha / g$",
unit: "м", a: 10,
ex: "$L = 100 \\cdot \\sin 90° / 10 = 100/10 = 10\\,\\text{м}$"
},
{
q: "Какова форма траектории тела, брошенного под углом к горизонту (без учёта воздуха)?",
opts: ["Прямая линия","Окружность","Парабола","Эллипс"],
a: 2,
ex: "Горизонтально — равномерно ($x = v_0\\cos\\alpha\\cdot t$), вертикально — равноускоренно ($y = v_0\\sin\\alpha\\cdot t - gt^2/2$). Исключая $t$ — получаем уравнение параболы."
},
{
q: "Тело брошено под углом $\\alpha = 90°$ (вертикально вверх) с $v_0 = 20\\,\\text{м/с}$, $g = 10\\,\\text{м/с}^2$. Найдите максимальную высоту подъёма.",
hint: "$H = v_0^2 / (2g)$ при $\\alpha = 90°$",
unit: "м", a: 20,
ex: "$H = v_0^2 \\sin^2 90° / (2g) = 400 \\cdot 1 / 20 = 20\\,\\text{м}$"
},
];
// ══ §23 Закон всемирного тяготения ══
var TASKS_P23 = [
{
q: "Расстояние между двумя телами уменьшили в 3 раза. Как изменилась сила тяготения между ними?",
opts: [
"Уменьшилась в 3 раза",
"Увеличилась в 3 раза",
"Увеличилась в 9 раз",
"Уменьшилась в 9 раз"
],
a: 2,
ex: "$F = Gm_1m_2/r^2$. При $r' = r/3$: $F' = Gm_1m_2/(r/3)^2 = 9Gm_1m_2/r^2 = 9F$. Сила увеличилась в 9 раз."
},
{
q: "Чему равна гравитационная постоянная $G$?",
opts: [
"$9{,}8\\,\\text{Н}{\\cdot}\\text{м}^2/\\text{кг}^2$",
"$6{,}67 \\cdot 10^{-11}\\,\\text{Н}{\\cdot}\\text{м}^2/\\text{кг}^2$",
"$3 \\cdot 10^8\\,\\text{Н}{\\cdot}\\text{м}^2/\\text{кг}^2$",
"$1{,}67 \\cdot 10^{-27}\\,\\text{Н}{\\cdot}\\text{м}^2/\\text{кг}^2$"
],
a: 1,
ex: "$G = 6{,}67 \\cdot 10^{-11}\\,\\text{Н}{\\cdot}\\text{м}^2/\\text{кг}^2$ — гравитационная постоянная, измеренная Кавендишем в 1798 году."
},
{
q: "Ускорение свободного падения на поверхности Луны $g_\\text{Л} \\approx 1{,}6\\,\\text{м/с}^2$. Масса тела $m = 60\\,\\text{кг}$. Найдите его вес на Луне.",
hint: "$F_\\text{т} = mg$",
unit: "Н", a: 96,
ex: "$F_\\text{т} = 60 \\cdot 1{,}6 = 96\\,\\text{Н}$"
},
{
q: "Как изменится сила тяготения между двумя телами, если массу одного из них увеличить в 4 раза, а расстояние увеличить в 2 раза?",
opts: [
"Увеличится в 4 раза",
"Останется прежней",
"Уменьшится в 2 раза",
"Увеличится в 2 раза"
],
a: 1,
ex: "$F' = G(4m_1)m_2/(2r)^2 = 4Gm_1m_2/(4r^2) = Gm_1m_2/r^2 = F$. Сила не изменилась!"
},
{
q: "Первая космическая скорость для Земли ($g = 9{,}8\\,\\text{м/с}^2$, $R = 6400\\,\\text{км}$). Найдите $v_1$ (в км/с).",
hint: "$v_1 = \\sqrt{gR}$",
unit: "км/с", a: 7.9, tol: 0.1,
ex: "$v_1 = \\sqrt{9{,}8 \\cdot 6{,}4 \\cdot 10^6} = \\sqrt{6{,}27 \\cdot 10^7} \\approx 7920\\,\\text{м/с} \\approx 7{,}9\\,\\text{км/с}$"
},
{
q: "Два шара массами $m_1 = 2\\,\\text{кг}$ и $m_2 = 5\\,\\text{кг}$ находятся на расстоянии $r = 1\\,\\text{м}$. Найдите силу тяготения между ними ($G = 6{,}67 \\cdot 10^{-11}$).",
hint: "$F = Gm_1m_2/r^2$",
unit: "нН", a: 0.667, tol: 0.05,
ex: "$F = 6{,}67 \\cdot 10^{-11} \\cdot 2 \\cdot 5 / 1 = 6{,}67 \\cdot 10^{-10}\\,\\text{Н} = 0{,}667\\,\\text{нН}$"
},
{
q: "Что такое первая космическая скорость?",
opts: [
"Скорость освобождения от гравитации Земли",
"Минимальная скорость для орбитального полёта у поверхности Земли",
"Скорость вращения Земли вокруг Солнца",
"Скорость света в вакууме"
],
a: 1,
ex: "Первая космическая скорость — минимальная скорость для круговой орбиты у поверхности Земли: $v_1 = \\sqrt{gR} \\approx 7{,}9\\,\\text{км/с}$."
},
{
q: "Ускорение свободного падения на поверхности планеты. Масса планеты увеличилась в 4 раза, радиус — в 2 раза. Как изменилось $g$?",
opts: [
"Не изменилось",
"Увеличилось в 2 раза",
"Уменьшилось в 2 раза",
"Увеличилось в 4 раза"
],
a: 0,
ex: "$g = GM/R^2$. $g' = G(4M)/(2R)^2 = 4GM/(4R^2) = GM/R^2 = g$. Не изменилось!"
},
];
// ══ §24 Вес тела. Невесомость ══
var TASKS_P24 = [
{
q: "Человек массой $m = 70\\,\\text{кг}$ стоит в лифте. Лифт движется вверх с ускорением $a = 2\\,\\text{м/с}^2$, $g = 10\\,\\text{м/с}^2$. Найдите вес человека.",
hint: "$P = m(g + a)$",
unit: "Н", a: 840,
ex: "$P = 70 \\cdot (10 + 2) = 70 \\cdot 12 = 840\\,\\text{Н}$"
},
{
q: "Человек массой $m = 70\\,\\text{кг}$ стоит в лифте. Лифт движется вниз с ускорением $a = 3\\,\\text{м/с}^2$, $g = 10\\,\\text{м/с}^2$. Найдите вес человека.",
hint: "$P = m(g - a)$",
unit: "Н", a: 490,
ex: "$P = 70 \\cdot (10 - 3) = 70 \\cdot 7 = 490\\,\\text{Н}$"
},
{
q: "При каком условии тело находится в состоянии невесомости?",
opts: [
"Тело движется с постоянной скоростью",
"Тело движется только под действием силы тяжести (свободное падение)",
"Тело находится на большой высоте, где нет воздуха",
"Тело движется горизонтально"
],
a: 1,
ex: "Невесомость — состояние, при котором исчезает сила давления на опору. Наступает при свободном падении: тело движется только под действием силы тяжести, реакция опоры = 0."
},
{
q: "Человек стоит на весах в лифте. Весы показывают $85\\,\\text{кг}$. Масса человека $70\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$. Найдите ускорение лифта.",
hint: "$P = m(g+a) \\Rightarrow a = P/m - g$",
unit: "м/с²", a: 2.14, tol: 0.1,
ex: "$P = 85 \\cdot 10 = 850\\,\\text{Н}$; $a = P/m - g = 850/70 - 10 \\approx 12{,}14 - 10 \\approx 2{,}14\\,\\text{м/с}^2$ (вверх)"
},
{
q: "Чем отличается вес тела от силы тяжести?",
opts: [
"Это одно и то же — оба равны $mg$",
"Вес зависит от ускорения тела, сила тяжести — нет",
"Сила тяжести зависит от ускорения, вес — нет",
"Вес всегда больше силы тяжести"
],
a: 1,
ex: "Сила тяжести $F_\\text{т} = mg$ определяется только массой и $g$. Вес $P$ — сила, с которой тело давит на опору. При ускорении $P = m(g \\pm a)$."
},
{
q: "Тело массой $m = 5\\,\\text{кг}$ брошено вертикально вниз. В полёте (без опоры) его вес равен:",
opts: [
"$50\\,\\text{Н}$",
"$25\\,\\text{Н}$",
"$0\\,\\text{Н}$ (невесомость)",
"Зависит от скорости"
],
a: 2,
ex: "В свободном падении нет опоры, нет реакции опоры. Вес как сила давления на опору равен нулю — невесомость. Сила тяжести при этом остаётся $F_\\text{т} = mg = 50\\,\\text{Н}$."
},
{
q: "Человек $m = 60\\,\\text{кг}$ в лифте. Лифт движется равномерно вниз. Найдите вес человека. $g = 10\\,\\text{м/с}^2$.",
hint: "$a = 0 \\Rightarrow P = mg$",
unit: "Н", a: 600,
ex: "При равномерном движении $a = 0$: $P = mg = 60 \\cdot 10 = 600\\,\\text{Н}$ — такой же, как и в покое."
},
{
q: "Почему космонавты на МКС испытывают невесомость, хотя на высоте 400 км гравитация составляет около 88% от земной?",
opts: [
"Потому что на такой высоте нет воздуха",
"Потому что станция находится в постоянном свободном падении вокруг Земли",
"Потому что вдали от Земли масса тел уменьшается",
"Потому что на высоте 400 км сила тяжести обнуляется"
],
a: 1,
ex: "МКС и всё, что в ней, постоянно «падает» вокруг Земли (орбитальный полёт = свободное падение, только быстрое). Опора не давит на тело → $P = 0$ → невесомость."
},
];
// ══ §25 Момент силы. Условия равновесия ══
var TASKS_P25 = [
{
q: "Что называется плечом силы?",
opts: [
"Расстояние от оси до точки приложения силы",
"Кратчайшее расстояние от оси вращения до линии действия силы",
"Проекция силы на ось",
"Расстояние между двумя точками приложения сил"
],
a: 1,
ex: "Плечо силы — это <b>перпендикуляр</b> из оси вращения на линию действия силы (не до точки приложения!)."
},
{
q: "Сила $F = 75\\,\\text{Н}$ приложена на расстоянии $l = 0{,}20\\,\\text{м}$ от оси. Найдите момент силы.",
hint: "$M = F \\cdot l$",
unit: "Н·м", a: 15,
ex: "$M = 75 \\cdot 0{,}20 = 15\\,\\text{Н}\\cdot\\text{м}$"
},
{
q: "Каковы оба условия равновесия тела?",
opts: [
"Тело покоится и не нагревается",
"Векторная сумма сил = 0 и алгебраическая сумма моментов = 0",
"Скорость = 0 и ускорение = 0",
"Нет внешних сил"
],
a: 1,
ex: "1-е условие: $\\sum \\vec{F} = \\vec{0}$ (нет поступательного ускорения). 2-е условие: $\\sum M = 0$ (нет вращения)."
},
{
q: "Момент силы $M = 24\\,\\text{Н}\\cdot\\text{м}$, плечо $l = 0{,}6\\,\\text{м}$. Найдите силу.",
hint: "$F = M / l$",
unit: "Н", a: 40,
ex: "$F = 24 / 0{,}6 = 40\\,\\text{Н}$"
},
{
q: "На рычаг действует сила $F = 50\\,\\text{Н}$, плечо $l = 0{,}4\\,\\text{м}$. Вычислите момент.",
hint: "$M = F \\cdot l$",
unit: "Н·м", a: 20,
ex: "$M = 50 \\cdot 0{,}4 = 20\\,\\text{Н}\\cdot\\text{м}$"
},
{
q: "Рычаг в равновесии: $F_1 = 40\\,\\text{Н}$, $l_1 = 0{,}3\\,\\text{м}$, $l_2 = 0{,}6\\,\\text{м}$. Найдите $F_2$.",
hint: "$F_1 l_1 = F_2 l_2$",
unit: "Н", a: 20,
ex: "$F_2 = F_1 l_1 / l_2 = 40 \\cdot 0{,}3 / 0{,}6 = 20\\,\\text{Н}$"
},
{
q: "Что надо увеличить, чтобы меньшей силой создать тот же момент?",
opts: [
"Массу тела",
"Плечо силы",
"Число точек приложения",
"Скорость вращения"
],
a: 1,
ex: "$M = F \\cdot l$ — при том же $F$ увеличение плеча $l$ увеличивает момент. Поэтому у гаечных ключей длинные рукоятки."
},
{
q: "Рычаг в равновесии: $F_1 = 60\\,\\text{Н}$, $l_1 = 0{,}5\\,\\text{м}$. Если $l_2 = 0{,}3\\,\\text{м}$, найдите $F_2$.",
hint: "$F_1 l_1 = F_2 l_2$",
unit: "Н", a: 100,
ex: "$F_2 = 60 \\cdot 0{,}5 / 0{,}3 = 100\\,\\text{Н}$"
},
];
// ══ §26 Рычаги и блоки ══
var TASKS_P26 = [
{
q: "Что называется выигрышем в силе?",
opts: [
"Разность сил $F_2 - F_1$",
"Во сколько раз сила нагрузки больше приложенной силы ($F_2/F_1$)",
"Отношение плеч $l_1/l_2$",
"Ответы 2 и 3 верны"
],
a: 3,
ex: "Выигрыш в силе — это $F_2/F_1 = l_1/l_2$. Оба определения равнозначны (следуют из условия равновесия рычага)."
},
{
q: "Рычаг: $l_1 = 0{,}8\\,\\text{м}$, $l_2 = 0{,}2\\,\\text{м}$, нагрузка $F_2 = 200\\,\\text{Н}$. Найдите нужную силу $F_1$.",
hint: "$F_1 = F_2 \\cdot l_2 / l_1$",
unit: "Н", a: 50,
ex: "$F_1 = 200 \\cdot 0{,}2 / 0{,}8 = 50\\,\\text{Н}$. Выигрыш в силе = 4."
},
{
q: "Что даёт неподвижный блок?",
opts: [
"Выигрыш в силе в 2 раза",
"Только изменяет направление силы (выигрыш = 1)",
"Выигрыш в работе",
"Проигрыш в силе в 2 раза"
],
a: 1,
ex: "Неподвижный блок — лишь <b>изменяет направление</b>: тянем вниз, груз поднимается вверх. В силе выигрыша нет."
},
{
q: "Подвижный блок: груз $G = 240\\,\\text{Н}$. Какую силу нужно приложить (без учёта масс блока и нити)?",
hint: "Подвижный блок: $F = G/2$",
unit: "Н", a: 120,
ex: "Подвижный блок даёт выигрыш в 2 раза: $F = G/2 = 240/2 = 120\\,\\text{Н}$."
},
{
q: "Рычаг: $l_1 = 1{,}5\\,\\text{м}$, $l_2 = 0{,}3\\,\\text{м}$. Во сколько раз выигрыш в силе?",
hint: "Выигрыш $= l_1/l_2$",
unit: "раз", a: 5,
ex: "Выигрыш $= l_1/l_2 = 1{,}5/0{,}3 = 5$. Сила нужна в 5 раз меньше нагрузки."
},
{
q: "Тело массой $m = 60\\,\\text{кг}$, $g = 10\\,\\text{м/с}^2$ надо поднять рычагом: $l_1 = 1{,}2\\,\\text{м}$, $l_2 = 0{,}3\\,\\text{м}$. Найдите нужную силу.",
hint: "$F_1 = mg \\cdot l_2/l_1$",
unit: "Н", a: 150,
ex: "$F_1 = 60 \\cdot 10 \\cdot 0{,}3/1{,}2 = 150\\,\\text{Н}$. Выигрыш в силе = 4."
},
{
q: "«Золотое правило механики» означает: нет выигрыша в...",
opts: [
"Силе",
"Расстоянии",
"Работе",
"Скорости"
],
a: 2,
ex: "Любой механизм: $A_\\text{затр} \\geq A_\\text{пол}$. Выиграл в силе $n$ раз — проиграл в пути $n$ раз. Работа та же."
},
{
q: "Какую силу надо приложить для подъёма груза $G = 400\\,\\text{Н}$ с помощью системы из двух подвижных блоков?",
hint: "Два подвижных блока: выигрыш = 4",
unit: "Н", a: 100,
ex: "Каждый подвижный блок даёт выигрыш ×2. Два блока: $F = G/4 = 400/4 = 100\\,\\text{Н}$."
},
];
// ══ §27 Наклонная плоскость. КПД ══
var TASKS_P27 = [
{
q: "Что показывает КПД механизма?",
opts: [
"Во сколько раз механизм выигрывает в силе",
"Долю полезной работы от затраченной (в %)",
"Мощность механизма",
"Отношение скоростей"
],
a: 1,
ex: "$\\eta = A_\\text{пол}/A_\\text{затр} \\cdot 100\\%$ — КПД показывает, <b>какая доля работы используется с пользой</b>. Остаток — потери на трение и нагрев."
},
{
q: "$A_\\text{полез} = 600\\,\\text{Дж}$, $A_\\text{затрач} = 800\\,\\text{Дж}$. Найдите КПД.",
hint: "$\\eta = A_\\text{пол}/A_\\text{затр} \\cdot 100\\%$",
unit: "%", a: 75,
ex: "$\\eta = 600/800 \\cdot 100\\% = 75\\%$"
},
{
q: "Наклонная плоскость: длина $l = 5\\,\\text{м}$, высота $h = 1\\,\\text{м}$. Во сколько раз выигрыш в силе?",
hint: "Выигрыш $= l/h$",
unit: "раз", a: 5,
ex: "Выигрыш $= l/h = 5/1 = 5$. Нужная сила в 5 раз меньше веса груза (без трения)."
},
{
q: "«Золотое правило»: если выигрываем в силе в 3 раза, то в пути...",
opts: [
"Тоже выигрываем в 3 раза",
"Проигрываем в 3 раза (путь в 3 раза длиннее)",
"Ничего не меняется",
"Выигрываем в 9 раз"
],
a: 1,
ex: "Золотое правило: $F_1 \\cdot s_1 = F_2 \\cdot s_2$. Уменьшил силу в 3 раза → увеличил путь в 3 раза. Работа та же."
},
{
q: "Груз $m = 30\\,\\text{кг}$ затащили по наклонной плоскости $l = 6\\,\\text{м}$, $h = 2\\,\\text{м}$, без трения. Найдите нужную силу.",
hint: "$F = mg \\cdot h/l$",
unit: "Н", a: 100,
ex: "$F = 30 \\cdot 10 \\cdot 2/6 = 100\\,\\text{Н}$. Без трения: сила в $l/h = 3$ раза меньше веса."
},
{
q: "$A_\\text{затрач} = 500\\,\\text{Дж}$, $\\eta = 80\\%$. Найдите полезную работу.",
hint: "$A_\\text{пол} = \\eta \\cdot A_\\text{затр} / 100$",
unit: "Дж", a: 400,
ex: "$A_\\text{пол} = 0{,}80 \\cdot 500 = 400\\,\\text{Дж}$"
},
{
q: "Может ли КПД механизма быть больше 100%?",
opts: [
"Да, при идеальном механизме",
"Да, если нет трения",
"Нет, КПД всегда меньше 100%",
"Да, при использовании смазки"
],
a: 2,
ex: "КПД <b>никогда не превышает 100%</b>: полезная работа не может быть больше затраченной (закон сохранения энергии). Трение всегда «ворует» часть работы."
},
{
q: "Груз $m = 20\\,\\text{кг}$ подняли по наклонной плоскости $l = 5\\,\\text{м}$, $h = 2\\,\\text{м}$, приложив силу $F = 100\\,\\text{Н}$. Найдите КПД.",
hint: "$A_\\text{пол} = mgh$; $A_\\text{затр} = Fl$",
unit: "%", a: 80,
ex: "$A_\\text{пол} = 20\\cdot10\\cdot2 = 400\\,\\text{Дж}$; $A_\\text{затр} = 100\\cdot5 = 500\\,\\text{Дж}$; $\\eta = 400/500 \\cdot 100\\% = 80\\%$"
},
];
// ══ §28 Центр тяжести. Виды равновесия ══
var TASKS_P28 = [
{
q: "Что такое центр тяжести тела?",
opts: [
"Геометрический центр тела",
"Точка, через которую проходит равнодействующая всех сил тяжести, действующих на тело",
"Точка наибольшей массы тела",
"Точка опоры тела"
],
a: 1,
ex: "Центр тяжести — точка, через которую проходит равнодействующая всех сил тяжести. Для однородного тела совпадает с геометрическим центром."
},
{
q: "Два тела массами $m_1 = 3\\,\\text{кг}$ и $m_2 = 7\\,\\text{кг}$ находятся на расстоянии $10\\,\\text{м}$ друг от друга. Найдите расстояние от первого тела до центра тяжести системы.",
hint: "$x_c = m_2 \\cdot d / (m_1 + m_2)$",
unit: "м", a: 7,
ex: "$x_c = m_2 \\cdot d/(m_1+m_2) = 7 \\cdot 10/10 = 7\\,\\text{м}$ от первого тела (ЦТ ближе к тяжёлому)"
},
{
q: "Какой вид равновесия у шарика, лежащего в сферической лунке?",
opts: ["Неустойчивое","Устойчивое","Безразличное","Нейтральное"],
a: 1,
ex: "В лунке при отклонении возникает возвращающая сила. Центр тяжести поднимается при отклонении → при отпускании тело возвращается. Это устойчивое равновесие."
},
{
q: "Какой вид равновесия у карандаша, поставленного на острие?",
opts: ["Устойчивое","Безразличное","Неустойчивое","Вынужденное"],
a: 2,
ex: "Центр тяжести карандаша выше точки опоры. При малейшем отклонении равнодействующая сил не возвращает карандаш в вертикальное положение — он падает. Неустойчивое равновесие."
},
{
q: "При каком условии тело, стоящее на наклонной поверхности, не опрокидывается?",
opts: [
"Масса тела достаточно велика",
"Вертикаль через центр тяжести проходит внутри площади опоры",
"Угол наклона не превышает 45°",
"Трение между телом и поверхностью достаточно большое"
],
a: 1,
ex: "Тело не опрокидывается, если вертикальная прямая через ЦТ пересекает площадь опоры. Как только эта вертикаль выходит за её пределы — тело опрокидывается."
},
{
q: "Как изменить устойчивость тела?",
opts: [
"Увеличить массу",
"Понизить центр тяжести и расширить площадь опоры",
"Повысить центр тяжести",
"Уменьшить площадь опоры"
],
a: 1,
ex: "Устойчивость повышается при понижении ЦТ (меньше опрокидывающий момент) и расширении площади опоры (вертикаль через ЦТ труднее выходит за её пределы)."
},
{
q: "Какой вид равновесия у однородного шара на горизонтальной плоскости?",
opts: ["Устойчивое","Неустойчивое","Безразличное","Вынужденное"],
a: 2,
ex: "При любом перемещении шара по плоскости высота ЦТ не меняется. Тело остаётся в новом положении. Это безразличное равновесие."
},
{
q: "Нижний конец стержня закреплён в шарнире. Стержень стоит вертикально (свободный конец вверху). Это равновесие:",
opts: [
"Устойчивое — центр тяжести внизу",
"Неустойчивое — центр тяжести выше точки опоры",
"Безразличное — центр тяжести у шарнира",
"Невозможно определить"
],
a: 1,
ex: "Центр тяжести вертикального стержня находится выше точки опоры (шарнира). Малейшее отклонение — стержень падает. Неустойчивое равновесие."
},
];
// ══ §29 Закон Архимеда. Плавание тел ══
var TASKS_P29 = [
{
q: "Тело объёмом $V = 200\\,\\text{см}^3$ полностью погружено в воду ($\\rho_\\text{в} = 1000\\,\\text{кг/м}^3$, $g = 10\\,\\text{м/с}^2$). Найдите архимедову силу.",
hint: "$F_\\text{выт} = \\rho_\\text{ж} g V$",
unit: "Н", a: 2,
ex: "$V = 200\\,\\text{см}^3 = 2 \\cdot 10^{-4}\\,\\text{м}^3$; $F_\\text{выт} = 1000 \\cdot 10 \\cdot 2 \\cdot 10^{-4} = 2\\,\\text{Н}$"
},
{
q: "Кусок льда плотностью $\\rho_\\text{л} = 900\\,\\text{кг/м}^3$ плавает в воде ($\\rho_\\text{в} = 1000$). Какая доля объёма льда находится под водой?",
hint: "$V_\\text{погр}/V = \\rho_\\text{т}/\\rho_\\text{ж}$",
unit: "%", a: 90,
ex: "$V_\\text{погр}/V = \\rho_\\text{л}/\\rho_\\text{в} = 900/1000 = 0{,}9 = 90\\%$. Именно поэтому видна только верхушка айсберга."
},
{
q: "Деревянный кубик плотностью $600\\,\\text{кг/м}^3$ плавает в воде. Потонет ли он в ртути ($\\rho_\\text{Hg} = 13600\\,\\text{кг/м}^3$)?",
opts: [
"Потонет — ртуть тяжелее дерева",
"Будет плавать — ртуть тяжелее дерева, выталкивающая сила больше",
"Зависит от размера кубика",
"Зависит от температуры"
],
a: 1,
ex: "$\\rho_\\text{дерева} = 600 < \\rho_\\text{Hg} = 13600$ — тело плавает. В ртути дерево будет почти полностью над поверхностью: $V_\\text{погр}/V = 600/13600 \\approx 4{,}4\\%$."
},
{
q: "Тело весит в воздухе $F_\\text{возд} = 50\\,\\text{Н}$, а в воде — $F_\\text{в воде} = 38\\,\\text{Н}$. Найдите архимедову силу.",
hint: "$F_\\text{выт} = F_\\text{возд} - F_\\text{в воде}$",
unit: "Н", a: 12,
ex: "$F_\\text{выт} = 50 - 38 = 12\\,\\text{Н}$. Это прямой способ измерения архимедовой силы — взвешивание в жидкости."
},
{
q: "От чего зависит архимедова сила?",
opts: [
"От материала тела и его формы",
"От плотности жидкости и объёма погружённой части тела",
"От глубины погружения тела",
"От скорости движения тела в жидкости"
],
a: 1,
ex: "$F_\\text{выт} = \\rho_\\text{ж} g V_\\text{погр}$ зависит только от плотности жидкости и объёма погружённой части. Форма тела, материал и глубина — не имеют значения."
},
{
q: "Тело плотностью $\\rho_\\text{т} = 800\\,\\text{кг/м}^3$ объёмом $V = 0{,}5\\,\\text{л}$ плавает в воде. Найдите объём погружённой части.",
hint: "$V_\\text{погр} = V \\cdot \\rho_\\text{т}/\\rho_\\text{ж}$",
unit: "л", a: 0.4,
ex: "$V_\\text{погр}/V = \\rho_\\text{т}/\\rho_\\text{ж} = 800/1000 = 0{,}8$; $V_\\text{погр} = 0{,}5 \\cdot 0{,}8 = 0{,}4\\,\\text{л}$"
},
{
q: "Камень объёмом $V = 100\\,\\text{см}^3$ и плотностью $\\rho_\\text{т} = 2500\\,\\text{кг/м}^3$ погружён в воду. Найдите его кажущийся вес в воде ($g = 10$).",
hint: "$F_\\text{каж} = mg - F_\\text{выт}$",
unit: "Н", a: 1.5,
ex: "$m = \\rho_\\text{т}V = 2500 \\cdot 10^{-4} = 0{,}25\\,\\text{кг}$; $F_\\text{выт} = 1000 \\cdot 10 \\cdot 10^{-4} = 1\\,\\text{Н}$; $F = 2{,}5 - 1 = 1{,}5\\,\\text{Н}$"
},
{
q: "Тело потонет в жидкости, если:",
opts: [
"$\\rho_\\text{тела} < \\rho_\\text{жидкости}$",
"$\\rho_\\text{тела} = \\rho_\\text{жидкости}$",
"$\\rho_\\text{тела} > \\rho_\\text{жидкости}$",
"Тело всегда тонет"
],
a: 2,
ex: "При $\\rho_\\text{т} > \\rho_\\text{ж}$: $F_\\text{выт} < mg$ даже при полном погружении → тело тонет. При $\\rho_\\text{т} < \\rho_\\text{ж}$ — тело плавает. При $\\rho_\\text{т} = \\rho_\\text{ж}$ — нейтральная плавучесть."
},
{
q: "Одно и то же тело взвесили в воде и в масле ($\\rho_\\text{масло} = 800\\,\\text{кг/м}^3$). В какой жидкости архимедова сила больше?",
opts: [
"В масле — оно более вязкое",
"В воде — она плотнее масла",
"Одинаковая в обоих случаях",
"Зависит от формы тела"
],
a: 1,
ex: "$F_\\text{выт} = \\rho_\\text{ж} g V_\\text{погр}$. Объём тела одинаков, $g$ одинаково, но $\\rho_\\text{воды} = 1000 > \\rho_\\text{масло} = 800$ → в воде сила больше."
},
];
// ══ §30 Плавание судов. Воздухоплавание ══
var TASKS_P30 = [
{
q: "Стальной корабль плавает, хотя сталь тяжелее воды. Почему?",
opts: [
"Потому что сталь при намокании становится легче",
"Потому что средняя плотность корабля (металл + воздух внутри) меньше плотности воды",
"Потому что вода выталкивает металлические объекты с большой силой",
"Потому что скорость хода не даёт кораблю затонуть"
],
a: 1,
ex: "Внутри корпуса корабля — воздух. Средняя плотность (вся масса / весь объём корпуса) меньше плотности воды → корабль плавает."
},
{
q: "Корабль водоизмещением $m = 5000\\,\\text{т}$ плавает в морской воде ($\\rho = 1025\\,\\text{кг/м}^3$, $g = 10\\,\\text{м/с}^2$). Найдите объём вытесненной воды.",
hint: "$V = m/\\rho$",
unit: "м³", a: 4878, tol: 50,
ex: "$V = m/\\rho = 5{,}0 \\cdot 10^6 / 1025 \\approx 4878\\,\\text{м}^3$"
},
{
q: "Как изменится осадка корабля при переходе из пресной воды в морскую (солёную)?",
opts: [
"Осадка увеличится",
"Осадка уменьшится — плотность воды больше, выталкивающая сила при меньшей осадке та же",
"Осадка не изменится",
"Зависит от водоизмещения"
],
a: 1,
ex: "В морской воде ($\\rho = 1025$) при том же объёме погружённой части архимедова сила больше. Значит, нужен меньший объём → корабль всплывёт немного выше."
},
{
q: "Воздушный шар объёмом $V = 200\\,\\text{м}^3$ заполнен горячим воздухом ($\\rho_\\text{гор} = 0{,}9\\,\\text{кг/м}^3$). Атмосферный воздух: $\\rho_\\text{атм} = 1{,}29\\,\\text{кг/м}^3$. Найдите максимальный вес полезного груза ($g = 10$).",
hint: "$F_\\text{подъём} = (\\rho_\\text{атм} - \\rho_\\text{гор}) \\cdot g \\cdot V$",
unit: "Н", a: 780,
ex: "$(1{,}29 - 0{,}9) \\cdot 10 \\cdot 200 = 0{,}39 \\cdot 2000 = 780\\,\\text{Н}$ (без учёта массы оболочки)"
},
{
q: "Что такое линия Плимсоля?",
opts: [
"Граница между килем и корпусом",
"Метка на борту судна, указывающая максимально допустимую осадку",
"Линия курса корабля на карте",
"Граница прибоя у берега"
],
a: 1,
ex: "Линия Плимсоля — обязательная марка на корпусе судна. Показывает максимальную допустимую осадку в разных условиях (морская, тропическая, пресная вода)."
},
{
q: "Деревянный ящик плотностью $\\rho = 600\\,\\text{кг/м}^3$ объёмом $0{,}1\\,\\text{м}^3$ плавает в воде. Найдите архимедову силу, действующую на него. $g = 10\\,\\text{м/с}^2$.",
hint: "При плавании $F_\\text{выт} = mg = \\rho_\\text{т} g V$",
unit: "Н", a: 600,
ex: "При плавании $F_\\text{выт} = mg = \\rho_\\text{т} g V = 600 \\cdot 10 \\cdot 0{,}1 = 600\\,\\text{Н}$"
},
{
q: "Как подводная лодка ныряет?",
opts: [
"Включает мощные двигатели и уходит вниз",
"Заполняет балластные цистерны водой, увеличивая среднюю плотность",
"Складывает паруса",
"Открывает специальные клапаны снизу"
],
a: 1,
ex: "Балластные цистерны заполняются забортной водой → общая масса лодки растёт → средняя плотность превышает плотность воды → лодка тонет."
},
{
q: "Дирижабль заполнен гелием ($\\rho_\\text{He} = 0{,}178\\,\\text{кг/м}^3$), объём $V = 5000\\,\\text{м}^3$. Плотность воздуха $1{,}29\\,\\text{кг/м}^3$. Найдите подъёмную силу ($g = 10$).",
hint: "$F_\\text{подъём} = (\\rho_\\text{возд} - \\rho_\\text{газа}) g V$",
unit: "кН", a: 55.6, tol: 1,
ex: "$(1{,}29 - 0{,}178) \\cdot 10 \\cdot 5000 = 1{,}112 \\cdot 50000 = 55600\\,\\text{Н} = 55{,}6\\,\\text{кН}$"
},
];
// ══════════════════════════════════════════════
// ПУЛЫ — единая таблица
// ══════════════════════════════════════════════
const POOLS = {
p1: TASKS_P1, p2: TASKS_P2, p3: TASKS_P3, p4: TASKS_P4, p5: TASKS_P5,
p6: TASKS_P6, p7: TASKS_P7, p8: TASKS_P8, p9: TASKS_P9, p10: TASKS_P10,
p11: TASKS_P11, p12: TASKS_P12, p13: TASKS_P13, p14: TASKS_P14,
p15: TASKS_P15,
p16: TASKS_P16,
p17: TASKS_P17,
p18: TASKS_P18,
p19: TASKS_P19,
p20: TASKS_P20,
p21: TASKS_P21,
p22: TASKS_P22,
p23: TASKS_P23,
p24: TASKS_P24,
p25: TASKS_P25,
p26: TASKS_P26,
p27: TASKS_P27,
p28: TASKS_P28,
p29: TASKS_P29,
p30: TASKS_P30,
p31: TASKS_P31,
p32: TASKS_P32,
p33: TASKS_P33,
p34: TASKS_P34,
p35: TASKS_P35,
p36: TASKS_P36,
hard: TASKS_HARD,
};
// ══════════════════════════════════════════════
// СОСТОЯНИЕ
// ══════════════════════════════════════════════
function mkState(pool) {
return {idx:0, answered:false, results:Array(pool.length).fill(null), selections:Array(pool.length).fill(null)};
}
const STATE = {
p1: mkState(TASKS_P1), p2: mkState(TASKS_P2), p3: mkState(TASKS_P3),
p4: mkState(TASKS_P4), p5: mkState(TASKS_P5), p6: mkState(TASKS_P6),
p7: mkState(TASKS_P7), p8: mkState(TASKS_P8), p9: mkState(TASKS_P9),
p10: mkState(TASKS_P10), p11: mkState(TASKS_P11), p12: mkState(TASKS_P12),
p13: mkState(TASKS_P13), p14: mkState(TASKS_P14),
p15: mkState(TASKS_P15),
p16: mkState(TASKS_P16),
p17: mkState(TASKS_P17),
p18: mkState(TASKS_P18),
p19: mkState(TASKS_P19),
p20: mkState(TASKS_P20),
p21: mkState(TASKS_P21),
p22: mkState(TASKS_P22),
p23: mkState(TASKS_P23),
p24: mkState(TASKS_P24),
p25: mkState(TASKS_P25),
p26: mkState(TASKS_P26),
p27: mkState(TASKS_P27),
p28: mkState(TASKS_P28),
p29: mkState(TASKS_P29),
p30: mkState(TASKS_P30),
p31: mkState(TASKS_P31),
p32: mkState(TASKS_P32),
p33: mkState(TASKS_P33),
p34: mkState(TASKS_P34),
p35: mkState(TASKS_P35),
p36: mkState(TASKS_P36),
hard: mkState(TASKS_HARD),
};
// ══════════════════════════════════════════════
// KaTeX рендеринг
// ══════════════════════════════════════════════
function doRender(el) {
if (!window.renderMathInElement) return;
renderMathInElement(el, {
delimiters:[{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true}],
throwOnError:false
});
}
// ══════════════════════════════════════════════
// ТАБЫ
// ══════════════════════════════════════════════
document.querySelectorAll('.tab').forEach(t => {
t.addEventListener('click', () => {
document.querySelectorAll('.tab').forEach(x => x.classList.remove('active'));
document.querySelectorAll('.content').forEach(x => x.classList.remove('active'));
t.classList.add('active');
document.getElementById('tab-' + t.dataset.tab).classList.add('active');
// Trigger canvas draws when switching to these tabs
var tn = t.dataset.tab;
if (tn === 'ref1') setTimeout(startAnim1, 60);
else if (tn === 'ref2') setTimeout(function(){ upd2(); }, 60);
else if (tn === 'ref3') setTimeout(function(){ upd3(); }, 60);
else if (tn === 'ref4') setTimeout(function(){ upd4(); }, 60);
else if (tn === 'ref5') setTimeout(function(){ upd5(); }, 60);
else if (tn === 'ref6') setTimeout(function(){ upd6(); }, 60);
else if (tn === 'ref7') setTimeout(function(){ upd7(); }, 60);
else if (tn === 'ref8') setTimeout(function(){ upd8(); }, 60);
else if (tn === 'ref9') setTimeout(function(){ upd9(); }, 60);
else if (tn === 'ref10') setTimeout(function(){ upd10(); }, 60);
else if (tn === 'ref11') setTimeout(function(){ upd11(); }, 60);
else if (tn === 'ref12') setTimeout(function(){ upd12(); }, 60);
else if (tn === 'ref13') setTimeout(function(){ upd13(); }, 60);
else if (tn === 'ref14') setTimeout(function(){ upd14(); }, 60);
else if (tn === 'ref15') setTimeout(startAnim15, 60);
else if (tn === 'ref17') setTimeout(startAnim17, 60);
else if (tn === 'ref18') setTimeout(startAnim18, 60);
else if (tn === 'ref19') setTimeout(drawSpring19, 60);
else if (tn === 'ref20') setTimeout(drawFriction20, 60);
else if (tn === 'ref21') setTimeout(startAnim21, 60);
else if (tn === 'ref22') setTimeout(function(){ upd22(); }, 60);
else if (tn === 'ref23') setTimeout(function(){ upd23(); }, 60);
else if (tn === 'ref24') setTimeout(function(){ upd24(); }, 60);
else if (tn === 'ref25') setTimeout(function(){ upd25(); }, 60);
else if (tn === 'ref26') setTimeout(function(){ upd26(); }, 60);
else if (tn === 'ref27') setTimeout(function(){ upd27(); upd27mu(); }, 60);
else if (tn === 'ref28') setTimeout(function(){ upd28(); }, 60);
else if (tn === 'ref29') setTimeout(function(){ upd29(); }, 60);
else if (tn === 'ref30') setTimeout(function(){ upd30(); }, 60);
});
});
// ══════════════════════════════════════════════
// CHAPTER NAVIGATION
// ══════════════════════════════════════════════
document.querySelectorAll('.ch-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
document.querySelectorAll('.ch-btn').forEach(function(b) { b.classList.remove('active'); });
document.querySelectorAll('.sec-group').forEach(function(g) { g.classList.remove('show'); });
btn.classList.add('active');
var grp = document.querySelector('.sec-group[data-chg="' + btn.dataset.ch + '"]');
if (grp) {
grp.classList.add('show');
if (!grp.querySelector('.tab.active')) {
var first = grp.querySelector('.tab');
if (first) first.click();
}
}
});
});
// ══════════════════════════════════════════════
// ПЕРЕКЛЮЧАТЕЛЬ ПАРАГРАФОВ
// ══════════════════════════════════════════════
function setParaTab(para) {
['p1','p2','p3','p4','p5','p6','p7','p8','p9','p10','p11','p12','p13','p14','p15','p16','p17','p18','p19','p20','p21','p22','p23','p24','p25','p26','p27','p28','p29','p30','p31','p32','p33','p34','p35','p36','hard'].forEach(p => {
const el = document.getElementById('ptab-' + p);
if (el) el.style.display = p === para ? 'block' : 'none';
document.querySelectorAll('.para-pill[data-para="' + p + '"]').forEach(b =>
b.classList.toggle('active', p === para)
);
});
}
// ══════════════════════════════════════════════
// НАВИГАЦИЯ
// ══════════════════════════════════════════════
function renderNav(sec) {
const pool = POOLS[sec];
const s = STATE[sec];
const el = document.getElementById('navDots' + sec);
if (!el) return;
el.innerHTML = pool.map((_, i) => {
let cls = 'nav-dot';
if (i === s.idx) cls += ' nd-cur';
else if (s.results[i] === true) cls += ' nd-ok';
else if (s.results[i] === false) cls += ' nd-fail';
return `<button class="${cls}" onclick="goToTask('${sec}',${i})" title="Задача ${i+1}">${i+1}</button>`;
}).join('');
}
function goToTask(sec, idx) {
const s = STATE[sec];
s.idx = idx;
s.answered = s.results[idx] !== null;
renderTask(sec);
}
// ══════════════════════════════════════════════
// ОТРИСОВКА ЗАДАЧ (numeric + MCQ)
// ══════════════════════════════════════════════
function renderTask(sec) {
const pool = POOLS[sec];
const s = STATE[sec];
const area = document.getElementById('taskArea' + sec);
const fb = document.getElementById('fb' + sec);
document.getElementById('sum' + sec).classList.remove('show');
const q = pool[s.idx];
const done = s.results[s.idx] !== null;
s.answered = done;
const isMcq = !!q.opts;
const paraBadge = q.para
? `<span class="para-badge ${q.para==='§1'?'b1':q.para==='§2'?'b2':q.para==='§3'?'b3':q.para==='§4'?'b4':q.para==='§5'?'b5':q.para==='§6'?'b6':q.para==='§7'?'b7':q.para==='§8'?'b8':q.para==='§9'?'b9':q.para==='§10'?'b10':q.para==='§11'?'b11':q.para==='§12'?'b12':q.para==='§13'?'b13':q.para==='§14'?'b14':q.para==='§22'?'b22':q.para==='§23'?'b23':q.para==='§24'?'b24':q.para==='§25'?'b25':q.para==='§26'?'b26':q.para==='§27'?'b27':q.para==='§28'?'b28':q.para==='§29'?'b29':q.para==='§30'?'b30':q.para==='§32'?'b32':q.para==='§33'?'b33':q.para==='§34'?'b34':q.para==='§35'?'b35':q.para==='§36'?'b36':''}">${q.para}</span>`
: '';
if (isMcq) {
const selIdx = s.selections[s.idx];
area.innerHTML = `
<div class="task-card">
<div class="task-num">Задача ${s.idx+1} из ${pool.length} · Тест${paraBadge}</div>
<div class="task-text">${q.q}</div>
<div class="mcq-opts">
${q.opts.map((opt, i) => {
let cls = 'mcq-opt';
if (done) {
if (i === q.a) cls += ' mcq-cor';
else if (i === selIdx) cls += ' mcq-wrong';
}
return `<button class="${cls}" id="mcqOpt${sec}_${i}"
onclick="${done ? '' : `selectMcq('${sec}',${i})`}"
${done ? 'disabled' : ''}>
<span style="font-weight:800;margin-right:6px">${String.fromCharCode(65+i)}.</span>${opt}
</button>`;
}).join('')}
</div>
</div>`;
} else {
area.innerHTML = `
<div class="task-card">
<div class="task-num">Задача ${s.idx+1} из ${pool.length}${paraBadge}</div>
<div class="task-text">${q.q}</div>
<div class="task-hint"><i class="fas fa-lightbulb"></i><span>${q.hint}</span></div>
<div class="ans-row">
<label style="font-weight:700;font-size:.88rem">Ответ:</label>
<input class="ans-inp" type="text" id="ainp${sec}" placeholder="?"
autocomplete="off"
${done ? `disabled style="border-color:var(--${s.results[s.idx] ? 'ok' : 'fail'})"` : ''}>
<span class="unit-lbl">${q.unit}</span>
${done ? '' : `<button class="btn btn-pri" onclick="checkNum('${sec}')"><i class="fas fa-check"></i> Проверить</button>`}
</div>
</div>`;
}
if (done) {
const ok = s.results[s.idx];
fb.className = 'feedback show ' + (ok ? 'fb-ok' : 'fb-fail');
if (isMcq) {
fb.innerHTML = ok
? `✓ Верно!&ensp;${q.ex || ''}`
: `✗ Неверно. Правильный ответ: <strong>${q.opts[q.a]}</strong>&ensp;${q.ex || ''}`;
} else {
fb.innerHTML = ok
? `✓ Верно!&ensp;${q.ex}`
: `✗ Неверно. Правильный ответ: <strong>${q.a}&nbsp;${q.unit}</strong>&ensp;${q.ex}`;
}
document.getElementById('nextBtn' + sec).style.display = 'inline-flex';
doRender(fb);
} else {
fb.className = 'feedback';
document.getElementById('nextBtn' + sec).style.display = 'none';
}
updateScoreBar(sec);
renderNav(sec);
doRender(area);
if (!done && !isMcq) {
const inp = document.getElementById('ainp' + sec);
setTimeout(() => inp && inp.focus(), 80);
inp && inp.addEventListener('keydown', e => { if (e.key === 'Enter') checkNum(sec); });
}
}
// ══════════════════════════════════════════════
// ПРОВЕРКА MCQ
// ══════════════════════════════════════════════
function selectMcq(sec, i) {
const s = STATE[sec];
if (s.answered) return;
const pool = POOLS[sec];
const q = pool[s.idx];
const ok = i === q.a;
s.results[s.idx] = ok;
s.selections[s.idx] = i;
s.answered = true;
updateScoreBar(sec);
renderNav(sec);
q.opts.forEach((_, j) => {
const btn = document.getElementById(`mcqOpt${sec}_${j}`);
if (!btn) return;
btn.disabled = true;
if (j === q.a) btn.classList.add('mcq-cor');
else if (j === i && !ok) btn.classList.add('mcq-wrong');
});
const fb = document.getElementById('fb' + sec);
fb.className = 'feedback show ' + (ok ? 'fb-ok' : 'fb-fail');
fb.innerHTML = ok
? `✓ Верно!&ensp;${q.ex || ''}`
: `✗ Неверно. Правильный ответ: <strong>${q.opts[q.a]}</strong>&ensp;${q.ex || ''}`;
doRender(fb);
document.getElementById('nextBtn' + sec).style.display = 'inline-flex';
if (s.results.every(r => r !== null)) {
setTimeout(() => showSummary(sec), 2200);
}
}
// ══════════════════════════════════════════════
// ПРОВЕРКА ЧИСЛОВЫХ
// ══════════════════════════════════════════════
function checkNum(sec) {
const s = STATE[sec];
if (s.answered) return;
const pool = POOLS[sec];
const q = pool[s.idx];
const inp = document.getElementById('ainp' + sec);
const fb = document.getElementById('fb' + sec);
const val = inp.value.trim().replace(',', '.');
const num = parseFloat(val);
if (!val || isNaN(num)) {
fb.className = 'feedback show fb-fail';
fb.innerHTML = '⚠️ Введите числовой ответ!';
return;
}
s.answered = true;
// Относительная погрешность 3%, для нуля — абсолютная 0.05
const tol = q.tol !== undefined ? q.tol : 0.03;
const ok = q.a === 0
? Math.abs(num) < 0.05
: Math.abs((num - q.a) / q.a) < tol;
s.results[s.idx] = ok;
updateScoreBar(sec);
renderNav(sec);
inp.disabled = true;
inp.style.borderColor = ok ? 'var(--ok)' : 'var(--fail)';
fb.className = 'feedback show ' + (ok ? 'fb-ok' : 'fb-fail');
fb.innerHTML = ok
? `✓ Верно!&ensp;${q.ex}`
: `✗ Неверно. Правильный ответ: <strong>${q.a}&nbsp;${q.unit}</strong>&ensp;${q.ex}`;
doRender(fb);
document.getElementById('nextBtn' + sec).style.display = 'inline-flex';
if (s.results.every(r => r !== null)) {
setTimeout(() => showSummary(sec), 2200);
}
}
// Обратная совместимость — старый вызов check(sec) из HTML уже заменён, но на случай остатков:
function check(sec) { checkNum(sec); }
// ══════════════════════════════════════════════
// ИНТЕРАКТИВНЫЕ СХЕМЫ
// ══════════════════════════════════════════════
// ── §1 — Анимация: виды движения ──────────────────────────
var anim1Id = null;
function startAnim1() {
var cv = document.getElementById('cv1');
if (!cv || cv.offsetWidth === 0) return;
if (anim1Id) { cancelAnimationFrame(anim1Id); anim1Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 160;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var t = 0;
function frame() {
t += 0.018;
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0, 0, W, H);
ctx.font = '11px Inter,sans-serif';
// Row 1: uniform
var y1 = H * 0.23;
ctx.fillStyle = dark ? '#94a3b8' : '#475569';
ctx.fillText('Равномерное (v = const)', 6, y1 - 9);
ctx.strokeStyle = dark ? '#334155' : '#e2e8f0'; ctx.lineWidth = 1;
ctx.beginPath(); ctx.moveTo(0, y1); ctx.lineTo(W, y1); ctx.stroke();
var x1 = ((t * 65) % (W + 22)) - 11;
ctx.fillStyle = '#3b82f6';
ctx.beginPath(); ctx.arc(x1, y1 - 11, 9, 0, 2*Math.PI); ctx.fill();
// Row 2: accelerated
var y2 = H * 0.57;
ctx.fillStyle = dark ? '#94a3b8' : '#475569';
ctx.fillText('Равноускоренное (a > 0)', 6, y2 - 9);
ctx.strokeStyle = dark ? '#334155' : '#e2e8f0';
ctx.beginPath(); ctx.moveTo(0, y2); ctx.lineTo(W, y2); ctx.stroke();
var ph2 = (t * 0.55) % 2.2;
var x2 = ph2 * ph2 * W * 0.21;
ctx.fillStyle = '#10b981';
ctx.beginPath(); ctx.arc(Math.min(x2, W+9), y2 - 11, 9, 0, 2*Math.PI); ctx.fill();
// Row 3: decelerated
var y3 = H * 0.91;
ctx.fillStyle = dark ? '#94a3b8' : '#475569';
ctx.fillText('Равнозамедленное (a < 0)', 6, y3 - 9);
ctx.strokeStyle = dark ? '#334155' : '#e2e8f0';
ctx.beginPath(); ctx.moveTo(0, y3); ctx.lineTo(W, y3); ctx.stroke();
var ph3 = (t * 0.55) % 2.2;
var x3 = W * (2*ph3 - 0.45*ph3*ph3) * 0.22;
ctx.fillStyle = '#f97316';
ctx.beginPath(); ctx.arc(Math.min(x3, W+9), y3 - 11, 9, 0, 2*Math.PI); ctx.fill();
anim1Id = requestAnimationFrame(frame);
}
frame();
}
// ── §2 — Относительность движения ─────────────────────────
function upd2() {
var cv = document.getElementById('cv2');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 160;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var vp = +(document.getElementById('sl2v') ? document.getElementById('sl2v').value : 5);
var vt = 20;
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f0f9ff';
ctx.fillRect(0,0,W,H);
// Ground
var gy = H*0.88;
ctx.strokeStyle = dark ? '#475569' : '#94a3b8'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(0,gy); ctx.lineTo(W,gy); ctx.stroke();
ctx.strokeStyle = dark ? '#475569' : '#cbd5e1'; ctx.lineWidth = 1;
for (var xi = 0; xi < W; xi += 30) {
ctx.beginPath(); ctx.moveTo(xi,gy); ctx.lineTo(xi+12,gy+6); ctx.stroke();
}
// Train body
var tx = W*0.1, tw = W*0.6, th = 44, ty = gy - th - 8;
ctx.fillStyle = dark ? '#1e3a5f' : '#dbeafe';
ctx.strokeStyle = dark ? '#3b82f6' : '#1d4ed8'; ctx.lineWidth = 2;
ctx.beginPath(); roundRect(ctx, tx, ty, tw, th, 8); ctx.fill(); ctx.stroke();
// Wheels
[tx+18, tx+tw-18].forEach(function(wx) {
ctx.fillStyle = dark ? '#475569' : '#64748b';
ctx.beginPath(); ctx.arc(wx, gy-4, 8, 0, 2*Math.PI); ctx.fill();
ctx.fillStyle = '#fff'; ctx.beginPath(); ctx.arc(wx, gy-4, 3, 0, 2*Math.PI); ctx.fill();
});
// Train label
ctx.font = 'bold 11px Inter,sans-serif';
ctx.fillStyle = dark ? '#93c5fd' : '#1d4ed8';
ctx.fillText('Поезд: v₁ = '+vt+' м/с', tx+8, ty+16);
// Passenger dot
var px = tx + tw*0.5;
ctx.fillStyle = '#ef4444';
ctx.beginPath(); ctx.arc(px, ty+th*0.5+2, 11, 0, 2*Math.PI); ctx.fill();
ctx.font = 'bold 9px Inter,sans-serif'; ctx.fillStyle = '#fff';
ctx.textAlign = 'center';
ctx.fillText('+'+vp, px, ty+th*0.5+6); ctx.textAlign = 'left';
// Arrow: absolute speed
var ay = ty - 12, scale = (W*0.7) / (vt + 10);
var aLen = (vt + vp) * scale;
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(tx, ay); ctx.lineTo(tx + aLen, ay); ctx.stroke();
ctx.fillStyle = '#10b981';
ctx.beginPath(); ctx.moveTo(tx+aLen,ay); ctx.lineTo(tx+aLen-8,ay-5); ctx.lineTo(tx+aLen-8,ay+5); ctx.fill();
ctx.font = '11px Inter,sans-serif';
ctx.fillText('v_пас = '+vt+'+'+vp+' = '+(vt+vp)+' м/с', tx, ay - 5);
var el = document.getElementById('res2');
if (el) el.textContent = 'Скорость относительно земли = ' + (vt+vp) + ' м/с';
var ev = document.getElementById('v2v');
if (ev) ev.textContent = vp + ' м/с';
}
function roundRect(ctx, x, y, w, h, r) {
ctx.beginPath();
ctx.moveTo(x+r,y); ctx.lineTo(x+w-r,y); ctx.quadraticCurveTo(x+w,y,x+w,y+r);
ctx.lineTo(x+w,y+h-r); ctx.quadraticCurveTo(x+w,y+h,x+w-r,y+h);
ctx.lineTo(x+r,y+h); ctx.quadraticCurveTo(x,y+h,x,y+h-r);
ctx.lineTo(x,y+r); ctx.quadraticCurveTo(x,y,x+r,y); ctx.closePath();
}
// ── §3 — Сложение векторов ─────────────────────────────────
function upd3() {
var cv = document.getElementById('cv3');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 180;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var a = +(document.getElementById('sl3a') ? document.getElementById('sl3a').value : 60);
var b = +(document.getElementById('sl3b') ? document.getElementById('sl3b').value : 50);
var ang = +(document.getElementById('sl3ang') ? document.getElementById('sl3ang').value : 60);
var angR = ang * Math.PI / 180;
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var ox = W*0.18, oy = H*0.65, sc = (W*0.55) / 120;
// Vector a (horizontal)
var ax = a * sc, ay = 0;
drawArrow3(ctx, ox, oy, ox+ax, oy+ay, '#3b82f6', 'a='+a, true, dark);
// Vector b (at angle)
var bx = b*sc*Math.cos(angR), by = -b*sc*Math.sin(angR);
drawArrow3(ctx, ox, oy, ox+bx, oy+by, '#ef4444', 'b='+b, true, dark);
// Result vector (parallelogram diagonal)
var rx = ax+bx, ry = ay+by;
var cLen = Math.sqrt(rx*rx+ry*ry)/sc;
drawArrow3(ctx, ox, oy, ox+rx, oy+ry, '#10b981', 'c='+cLen.toFixed(1), false, dark);
// Dashed parallelogram lines
ctx.strokeStyle = dark ? '#475569' : '#cbd5e1'; ctx.lineWidth = 1;
ctx.setLineDash([4,3]);
ctx.beginPath(); ctx.moveTo(ox+ax,oy+ay); ctx.lineTo(ox+rx,oy+ry); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox+bx,oy+by); ctx.lineTo(ox+rx,oy+ry); ctx.stroke();
ctx.setLineDash([]);
var el3a=document.getElementById('v3a'); if(el3a) el3a.textContent=a;
var el3b=document.getElementById('v3b'); if(el3b) el3b.textContent=b;
var el3ang=document.getElementById('v3ang'); if(el3ang) el3ang.textContent=ang+'°';
var el = document.getElementById('res3');
if (el) { el.textContent = '|c| = √(a²+b²+2ab·cos α) = ' + cLen.toFixed(2); doRender(el); }
}
function drawArrow3(ctx, x1, y1, x2, y2, col, lbl, dashed, dark) {
ctx.strokeStyle = col; ctx.lineWidth = dashed ? 2 : 3;
if (dashed) { ctx.setLineDash([]); }
ctx.beginPath(); ctx.moveTo(x1,y1); ctx.lineTo(x2,y2); ctx.stroke();
var ang = Math.atan2(y2-y1,x2-x1);
ctx.fillStyle = col;
ctx.beginPath(); ctx.moveTo(x2,y2);
ctx.lineTo(x2-10*Math.cos(ang-0.4),y2-10*Math.sin(ang-0.4));
ctx.lineTo(x2-10*Math.cos(ang+0.4),y2-10*Math.sin(ang+0.4));
ctx.fill();
var mx = (x1+x2)/2, my = (y1+y2)/2 - 10;
ctx.font = 'bold 11px Inter,sans-serif'; ctx.fillStyle = col;
ctx.fillText(lbl, mx, my);
}
// ── §4 — Проекции вектора ──────────────────────────────────
function upd4() {
var cv = document.getElementById('cv4');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 160;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var phi = +(document.getElementById('sl4phi') ? document.getElementById('sl4phi').value : 37);
var am = +(document.getElementById('sl4a') ? document.getElementById('sl4a').value : 70);
var phiR = phi * Math.PI / 180;
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var ox = W*0.18, oy = H*0.72, sc = (W*0.6)/120;
var vx = am*sc*Math.cos(phiR), vy = -am*sc*Math.sin(phiR);
// Axes
ctx.strokeStyle = dark ? '#475569' : '#94a3b8'; ctx.lineWidth = 1;
ctx.beginPath(); ctx.moveTo(ox-10,oy); ctx.lineTo(ox+W*0.72,oy); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox,oy+10); ctx.lineTo(ox,oy-H*0.7); ctx.stroke();
ctx.fillStyle = dark ? '#94a3b8' : '#475569'; ctx.font = '11px Inter,sans-serif';
ctx.fillText('x', ox+W*0.72-6, oy+14); ctx.fillText('y', ox+4, oy-H*0.7+12);
// Vector
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(ox,oy); ctx.lineTo(ox+vx,oy+vy); ctx.stroke();
ctx.fillStyle = '#3b82f6';
var ang = Math.atan2(vy,vx);
ctx.beginPath(); ctx.moveTo(ox+vx,oy+vy);
ctx.lineTo(ox+vx-9*Math.cos(ang-0.4),oy+vy-9*Math.sin(ang-0.4));
ctx.lineTo(ox+vx-9*Math.cos(ang+0.4),oy+vy-9*Math.sin(ang+0.4)); ctx.fill();
ctx.fillText('a='+am, ox+vx/2-8, oy+vy/2-8);
// Projection lines dashed
ctx.strokeStyle = dark ? '#475569' : '#cbd5e1'; ctx.lineWidth = 1.2; ctx.setLineDash([4,3]);
ctx.beginPath(); ctx.moveTo(ox+vx,oy+vy); ctx.lineTo(ox+vx,oy); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox+vx,oy+vy); ctx.lineTo(ox,oy+vy); ctx.stroke();
ctx.setLineDash([]);
// Projection arrows
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(ox,oy); ctx.lineTo(ox+vx,oy); ctx.stroke();
ctx.fillStyle = '#ef4444'; ctx.font = 'bold 11px Inter,sans-serif';
var axVal = (am*Math.cos(phiR)).toFixed(1);
ctx.fillText('ax='+axVal, ox+vx/2-10, oy+16);
ctx.strokeStyle = '#f59e0b'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(ox,oy); ctx.lineTo(ox,oy+vy); ctx.stroke();
ctx.fillStyle = '#f59e0b';
var ayVal = (am*Math.sin(phiR)).toFixed(1);
ctx.fillText('ay='+ayVal, ox+6, oy+vy/2);
// Angle arc
ctx.strokeStyle = '#8b5cf6'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.arc(ox,oy,28,0,-phiR,true); ctx.stroke();
ctx.fillStyle = '#8b5cf6'; ctx.font = '11px Inter,sans-serif';
ctx.fillText('φ='+phi+'°', ox+30, oy-8);
var el4phi=document.getElementById('v4phi'); if(el4phi) el4phi.textContent=phi+'°';
var el4a=document.getElementById('v4a'); if(el4a) el4a.textContent=am;
var el = document.getElementById('res4');
if (el) el.textContent = 'ax = '+axVal+', ay = '+ayVal;
}
// ── §5 — Путь и перемещение ───────────────────────────────
function upd5() {
var cv = document.getElementById('cv5');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 130;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var s1 = +(document.getElementById('sl5s1') ? document.getElementById('sl5s1').value : 120);
var s2 = +(document.getElementById('sl5s2') ? document.getElementById('sl5s2').value : 60);
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var pad = W*0.08, sc = (W*0.84)/(s1+50);
var y = H*0.48, r = 8;
// Start point A
var xa = pad, xb = pad + s1*sc, xc = pad + (s1-s2)*sc;
// Draw detour arc (path above)
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2.5;
ctx.beginPath();
ctx.moveTo(xa,y); ctx.quadraticCurveTo((xa+xb)/2, y-38, xb, y);
ctx.stroke();
ctx.fillStyle = '#ef4444'; ctx.font = '11px Inter,sans-serif';
ctx.fillText('Путь s₁='+s1+' м', (xa+xb)/2-24, y-42);
// Return path (dashed below)
ctx.strokeStyle = '#f97316'; ctx.lineWidth = 2; ctx.setLineDash([5,3]);
ctx.beginPath(); ctx.moveTo(xb,y); ctx.lineTo(xc,y); ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle = '#f97316';
ctx.fillText('s₂='+s2, (xb+xc)/2-10, y+18);
// Displacement arrow
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(xa, y+30); ctx.lineTo(xc-4, y+30); ctx.stroke();
ctx.fillStyle = '#3b82f6';
var disp = s1-s2;
ctx.beginPath(); ctx.moveTo(xc,y+30); ctx.lineTo(xc-10,y+25); ctx.lineTo(xc-10,y+35); ctx.fill();
ctx.fillText('Перемещение |Δr| = '+(disp)+' м', xa, y+46);
// Points
[[xa,'A','#1d4ed8'],[xb,'B','#dc2626'],[xc,'C','#c2410c']].forEach(function(p){
ctx.fillStyle = p[2]; ctx.beginPath(); ctx.arc(p[0],y,r,0,2*Math.PI); ctx.fill();
ctx.fillStyle = dark ? '#e2e8f0' : '#1e293b'; ctx.font = 'bold 11px Inter,sans-serif';
ctx.fillText(p[1], p[0]-4, y-r-4);
});
[['sl5s1','v5s1',s1],['sl5s2','v5s2',s2]].forEach(function(p){
var el=document.getElementById(p[1]); if(el) el.textContent=p[2]+' м';
});
var el = document.getElementById('res5');
if (el) el.textContent = 'Путь = '+(s1+s2)+' м, Перемещение = '+(s1-s2)+' м';
}
// ── §6 — График x(t) равномерного движения ────────────────
function upd6() {
var cv = document.getElementById('cv6');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 180;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var v = +(document.getElementById('sl6v') ? document.getElementById('sl6v').value : 10);
var x0 = +(document.getElementById('sl6x0') ? document.getElementById('sl6x0').value : 0);
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var lpad = 44, bpad = 28, rpad = 18, tpad = 18;
var gw = W-lpad-rpad, gh = H-tpad-bpad;
var ox = lpad, oy = tpad+gh;
// Grid
ctx.strokeStyle = dark ? '#1e3a5f' : '#e2e8f0'; ctx.lineWidth = 1;
var tmax = 8, xmin = -60, xmax = 100;
for (var ti = 0; ti <= tmax; ti++) {
var gx = ox + ti*(gw/tmax);
ctx.beginPath(); ctx.moveTo(gx,tpad); ctx.lineTo(gx,oy); ctx.stroke();
ctx.fillStyle = dark ? '#64748b' : '#94a3b8'; ctx.font = '10px Inter,sans-serif';
ctx.fillText(ti, gx-3, oy+14);
}
var xstep = 20, nsteps = Math.ceil((xmax-xmin)/xstep);
for (var xi = 0; xi <= nsteps; xi++) {
var xv = xmin + xi*xstep;
var gy = oy - (xv-xmin)/(xmax-xmin)*gh;
if (gy < tpad-1 || gy > oy+1) continue;
ctx.beginPath(); ctx.moveTo(ox,gy); ctx.lineTo(ox+gw,gy); ctx.stroke();
ctx.fillStyle = dark ? '#64748b' : '#94a3b8'; ctx.font = '10px Inter,sans-serif';
ctx.fillText(xv, ox-28, gy+4);
}
// Axes
ctx.strokeStyle = dark ? '#94a3b8' : '#475569'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(ox,tpad-4); ctx.lineTo(ox,oy+2); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox-2,oy); ctx.lineTo(ox+gw+4,oy); ctx.stroke();
ctx.fillStyle = dark ? '#94a3b8' : '#475569'; ctx.font = '11px Inter,sans-serif';
ctx.fillText('t, с', ox+gw-4, oy+14); ctx.fillText('x, м', ox+4, tpad-6);
// Line x(t)
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth = 2.5;
ctx.beginPath();
for (var tc = 0; tc <= tmax; tc++) {
var xc2 = x0 + v * tc;
var gxc = ox + tc*(gw/tmax);
var gyc = oy - (xc2-xmin)/(xmax-xmin)*gh;
if (tc === 0) ctx.moveTo(gxc, gyc); else ctx.lineTo(gxc, gyc);
}
ctx.stroke();
ctx.fillStyle = '#3b82f6'; ctx.font = 'bold 11px Inter,sans-serif';
ctx.fillText('x = '+x0+(v>=0?'+':'')+v+'·t', ox+gw*0.4, tpad+12);
[['v6v',v+' м/с'],['v6x0',x0+' м']].forEach(function(p){
var el=document.getElementById(p[0]); if(el) el.textContent=p[1];
});
var el = document.getElementById('res6');
if (el) el.textContent = 'x(t) = '+x0+(v>=0?'+':'')+v+'·t';
}
// ── §7 — Движение двух тел: встреча ──────────────────────
function upd7() {
var cv = document.getElementById('cv7');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 200;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var v1 = +(document.getElementById('sl7v1') ? document.getElementById('sl7v1').value : 6);
var x01 = +(document.getElementById('sl7x1') ? document.getElementById('sl7x1').value : 0);
var v2 = +(document.getElementById('sl7v2') ? document.getElementById('sl7v2').value : 4);
var x02 = +(document.getElementById('sl7x2') ? document.getElementById('sl7x2').value : 100);
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
// Parameters
var lpad = 44, bpad = 28, rpad = 16, tpad = 18;
var gw = W-lpad-rpad, gh = H-tpad-bpad;
var ox = lpad, oy = tpad+gh;
var tmax = 15, xmin = -10, xmax = 110;
// Grid
ctx.strokeStyle = dark ? '#1e3a5f' : '#e2e8f0'; ctx.lineWidth = 1;
for (var ti = 0; ti <= tmax; ti += 3) {
var gx = ox + ti*(gw/tmax);
ctx.beginPath(); ctx.moveTo(gx,tpad); ctx.lineTo(gx,oy); ctx.stroke();
ctx.fillStyle = dark ? '#64748b' : '#94a3b8'; ctx.font = '10px Inter,sans-serif';
ctx.fillText(ti, gx-3, oy+14);
}
for (var xi = 0; xi <= 110; xi += 20) {
var gy = oy - (xi-xmin)/(xmax-xmin)*gh;
if (gy < tpad-1 || gy > oy+1) continue;
ctx.beginPath(); ctx.moveTo(ox,gy); ctx.lineTo(ox+gw,gy); ctx.stroke();
ctx.fillStyle = dark ? '#64748b' : '#94a3b8'; ctx.font = '10px Inter,sans-serif';
ctx.fillText(xi, ox-26, gy+4);
}
// Axes
ctx.strokeStyle = dark ? '#94a3b8' : '#475569'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(ox,tpad-4); ctx.lineTo(ox,oy+2); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox-2,oy); ctx.lineTo(ox+gw+4,oy); ctx.stroke();
ctx.fillStyle = dark ? '#94a3b8' : '#475569'; ctx.font = '11px Inter,sans-serif';
ctx.fillText('t, с', ox+gw-4, oy+14); ctx.fillText('x, м', ox+4, tpad-6);
// Line 1
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth = 2.5;
ctx.beginPath();
for (var tc = 0; tc <= tmax; tc++) {
var xv = x01 + v1*tc;
ctx.lineTo(ox+tc*(gw/tmax), oy-(xv-xmin)/(xmax-xmin)*gh);
if (tc===0) ctx.moveTo(ox, oy-(x01-xmin)/(xmax-xmin)*gh);
}
ctx.stroke();
ctx.fillStyle = '#3b82f6'; ctx.font = 'bold 10px Inter,sans-serif';
ctx.fillText('Тело 1 (v='+v1+')', ox+4, oy-(x01-xmin)/(xmax-xmin)*gh - 5);
// Line 2
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2.5;
ctx.beginPath();
ctx.moveTo(ox, oy-(x02-xmin)/(xmax-xmin)*gh);
for (var tc2 = 0; tc2 <= tmax; tc2++) {
var xv2 = x02 - v2*tc2;
ctx.lineTo(ox+tc2*(gw/tmax), oy-(xv2-xmin)/(xmax-xmin)*gh);
}
ctx.stroke();
ctx.fillStyle = '#ef4444';
ctx.fillText('Тело 2 (v='+v2+')', ox+gw*0.55, oy-(x02-xmin)/(xmax-xmin)*gh + 14);
// Meeting point
var dv = v1 + v2, dx = x02 - x01;
if (dv > 0) {
var tmeet = dx / dv;
var xmeet = x01 + v1*tmeet;
if (tmeet > 0 && tmeet < tmax && xmeet >= xmin && xmeet <= xmax) {
var gxm = ox+tmeet*(gw/tmax);
var gym = oy-(xmeet-xmin)/(xmax-xmin)*gh;
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 1; ctx.setLineDash([4,3]);
ctx.beginPath(); ctx.moveTo(gxm,gym); ctx.lineTo(gxm,oy); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox,gym); ctx.lineTo(gxm,gym); ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle = '#10b981';
ctx.beginPath(); ctx.arc(gxm,gym,5,0,2*Math.PI); ctx.fill();
ctx.font = '10px Inter,sans-serif';
ctx.fillText('t='+tmeet.toFixed(1)+' с', gxm+3, gym-5);
}
}
[['v7v1',v1+' м/с'],['v7v2',v2+' м/с'],['v7x1',x01+' м'],['v7x2',x02+' м']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
var el = document.getElementById('res7');
if (el && dv > 0) {
var tm = dx/dv;
el.textContent = tm > 0 ? 'Встреча через t = '+tm.toFixed(2)+' с, в точке x = '+(x01+v1*tm).toFixed(1)+' м' : 'Движутся прочь друг от друга';
}
}
// ── §8 — Средняя скорость ─────────────────────────────────
function upd8() {
var cv = document.getElementById('cv8');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 140;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var v1 = +(document.getElementById('sl8v1') ? document.getElementById('sl8v1').value : 40);
var v2 = +(document.getElementById('sl8v2') ? document.getElementById('sl8v2').value : 60);
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
// Two segments of equal length
var pad = W*0.08, segW = W*0.38, y = H*0.42, h = 22;
// Segment 1
ctx.fillStyle = dark ? '#1e3a5f' : '#dbeafe';
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth = 2;
ctx.fillRect(pad, y, segW, h); ctx.strokeRect(pad, y, segW, h);
ctx.fillStyle = dark ? '#93c5fd' : '#1d4ed8'; ctx.font = 'bold 11px Inter,sans-serif';
ctx.textAlign = 'center';
ctx.fillText('v₁ = '+v1+' км/ч', pad+segW/2, y+15);
// Segment 2
ctx.fillStyle = dark ? '#1c2d0f' : '#d1fae5';
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2;
ctx.fillRect(pad+segW, y, segW, h); ctx.strokeRect(pad+segW, y, segW, h);
ctx.fillStyle = dark ? '#6ee7b7' : '#065f46';
ctx.fillText('v₂ = '+v2+' км/ч', pad+segW+segW/2, y+15);
ctx.textAlign = 'left';
// Labels
ctx.fillStyle = dark ? '#94a3b8' : '#475569'; ctx.font = '11px Inter,sans-serif';
ctx.fillText('s/2', pad, y-8); ctx.fillText('s/2', pad+segW, y-8);
// Average speed formula
var vavg = 2*v1*v2/(v1+v2);
ctx.fillStyle = dark ? '#e2e8f0' : '#1e293b'; ctx.font = 'bold 12px Inter,sans-serif';
ctx.fillText('⟨v⟩ = 2v₁v₂/(v₁+v₂) = '+vavg.toFixed(1)+' км/ч', pad, y+h+26);
ctx.font = '10px Inter,sans-serif'; ctx.fillStyle = dark ? '#64748b' : '#94a3b8';
ctx.fillText('(среднеарифметическое: '+(v1+v2)/2+' ≠ среднее по пути)', pad, y+h+42);
[['v8v1',v1+' км/ч'],['v8v2',v2+' км/ч']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
var el = document.getElementById('res8');
if (el) el.textContent = '⟨v⟩ = ' + vavg.toFixed(2) + ' км/ч';
}
// ── §9 — Сложение скоростей (лодка на реке) ───────────────
var anim9Id = null;
function upd9() {
var cv = document.getElementById('cv9');
if (!cv) return;
if (anim9Id) { cancelAnimationFrame(anim9Id); anim9Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 180;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var vb = +(document.getElementById('sl9vb') ? document.getElementById('sl9vb').value : 4);
var vu = +(document.getElementById('sl9vu') ? document.getElementById('sl9vu').value : 3);
var d = +(document.getElementById('sl9d') ? document.getElementById('sl9d').value : 60);
var vres = Math.sqrt(vb*vb+vu*vu);
var t = d/vb;
var drift = vu*t;
var dark = document.body.classList.contains('dark');
var anim9t = 0;
function frame9() {
anim9t += 0.012;
var ph = anim9t % 1;
ctx.fillStyle = dark ? '#1e293b' : '#e0f2fe';
ctx.fillRect(0,0,W,H);
// River banks
var bank1 = H*0.12, bank2 = H*0.88, riverH = bank2-bank1;
ctx.fillStyle = dark ? '#0c4a6e' : '#bae6fd';
ctx.fillRect(0, bank1, W, riverH);
ctx.fillStyle = dark ? '#1e3a5f' : '#7dd3fc';
// Ripples
for (var ri = 0; ri < 5; ri++) {
ctx.strokeStyle = dark ? '#1e3a5f' : '#38bdf8'; ctx.lineWidth = 1;
ctx.beginPath(); ctx.moveTo(40+ri*60, (bank1+bank2)/2); ctx.lineTo(80+ri*60, (bank1+bank2)/2); ctx.stroke();
}
ctx.fillStyle = dark ? '#64748b' : '#475569';
ctx.fillRect(0, 0, W, bank1); ctx.fillRect(0, bank2, W, H-bank2);
ctx.font = 'bold 10px Inter,sans-serif';
ctx.fillStyle = dark ? '#94a3b8' : '#334155';
ctx.fillText('Берег 1', 6, bank1-4);
ctx.fillText('Берег 2', 6, bank2+12);
// Current arrows
ctx.strokeStyle = '#0ea5e9'; ctx.lineWidth = 1.5;
for (var ci = 0; ci < 4; ci++) {
var cy = bank1 + riverH*(0.2+ci*0.2);
ctx.beginPath(); ctx.moveTo(W*0.1+ci*20, cy); ctx.lineTo(W*0.1+ci*20+vu*8, cy); ctx.stroke();
ctx.fillStyle = '#0ea5e9';
ctx.beginPath(); ctx.moveTo(W*0.1+ci*20+vu*8,cy);
ctx.lineTo(W*0.1+ci*20+vu*8-6,cy-3); ctx.lineTo(W*0.1+ci*20+vu*8-6,cy+3); ctx.fill();
}
// Boat position
var scX = (W*0.75)/Math.max(drift+20,40);
var scY = riverH;
var bx = W*0.12 + ph*drift*scX;
var by = bank1 + ph*scY;
ctx.fillStyle = '#f59e0b';
ctx.beginPath(); ctx.arc(bx, by, 8, 0, 2*Math.PI); ctx.fill();
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter,sans-serif';
ctx.textAlign = 'center'; ctx.fillText('⛵', bx, by+4); ctx.textAlign = 'left';
// Result
var el = document.getElementById('res9');
if (el) el.textContent = '|v_рез| = '+vres.toFixed(2)+' м/с, снос = '+drift.toFixed(1)+' м, t = '+t.toFixed(1)+' с';
[['v9vb',vb+' м/с'],['v9vu',vu+' м/с'],['v9d',d+' м']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
anim9Id = requestAnimationFrame(frame9);
}
frame9();
}
// ── §10 — Ускорение ───────────────────────────────────────
function upd10() {
var cv = document.getElementById('cv10');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 160;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var v0 = +(document.getElementById('sl10v0') ? document.getElementById('sl10v0').value : 10);
var a = +(document.getElementById('sl10a') ? document.getElementById('sl10a').value : 2);
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
// Show v(t) for a few seconds
var tmax = 8, vmax = Math.max(v0+a*tmax, 5)+5;
var lpad=44, bpad=28, rpad=16, tpad=18;
var gw=W-lpad-rpad, gh=H-tpad-bpad;
var ox=lpad, oy=tpad+gh;
ctx.strokeStyle = dark ? '#1e3a5f' : '#e2e8f0'; ctx.lineWidth = 1;
for (var ti=0; ti<=tmax; ti+=2) {
var gx = ox+ti*(gw/tmax);
ctx.beginPath(); ctx.moveTo(gx,tpad); ctx.lineTo(gx,oy); ctx.stroke();
ctx.fillStyle = dark?'#64748b':'#94a3b8'; ctx.font='10px Inter,sans-serif';
ctx.fillText(ti, gx-3, oy+14);
}
var vstep = vmax > 40 ? 20 : 10;
for (var vi=0; vi<=vmax; vi+=vstep) {
var gy = oy-vi/vmax*gh;
if (gy < tpad-1) continue;
ctx.beginPath(); ctx.moveTo(ox,gy); ctx.lineTo(ox+gw,gy); ctx.stroke();
ctx.fillText(vi, ox-24, gy+4);
}
ctx.strokeStyle = dark?'#94a3b8':'#475569'; ctx.lineWidth=1.5;
ctx.beginPath(); ctx.moveTo(ox,tpad-4); ctx.lineTo(ox,oy+2); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox-2,oy); ctx.lineTo(ox+gw+4,oy); ctx.stroke();
ctx.fillStyle = dark?'#94a3b8':'#475569'; ctx.font='11px Inter,sans-serif';
ctx.fillText('t,с', ox+gw-4, oy+14); ctx.fillText('v,м/с', ox+4, tpad-6);
// v(t) line
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth=2.5;
ctx.beginPath();
ctx.moveTo(ox, oy-v0/vmax*gh);
for (var tc=0; tc<=tmax; tc++) {
var vc = v0+a*tc;
if (vc < 0) vc = 0;
ctx.lineTo(ox+tc*(gw/tmax), oy-Math.min(vc,vmax)/vmax*gh);
}
ctx.stroke();
ctx.fillStyle='#3b82f6'; ctx.font='bold 11px Inter,sans-serif';
ctx.fillText('v = '+v0+(a>=0?'+':'')+a+'·t', ox+gw*0.3, tpad+14);
// a annotation
ctx.strokeStyle='#ef4444'; ctx.lineWidth=1.5; ctx.setLineDash([4,3]);
var gx1=ox+(gw/tmax), gx2=ox+2*(gw/tmax);
var vy1=oy-(v0+a)/vmax*gh, vy2=oy-(v0+2*a)/vmax*gh;
ctx.beginPath(); ctx.moveTo(gx1,vy1); ctx.lineTo(gx2,vy1); ctx.lineTo(gx2,vy2); ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle='#ef4444'; ctx.font='10px Inter,sans-serif';
ctx.fillText('a='+a, gx2+3, (vy1+vy2)/2+4);
[['v10v0',v0+' м/с'],['v10a',a+' м/с²']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
var vFinal = v0+a*tmax;
var el = document.getElementById('res10');
if (el) el.textContent = 'Через '+tmax+' с: v = '+v0+(a>=0?'+':'')+a+'·'+tmax+' = '+(v0+a*tmax)+' м/с';
}
// ── §11 — Равноускоренное движение: v(t) ─────────────────
function upd11() {
var cv = document.getElementById('cv11');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 180;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var v0 = +(document.getElementById('sl11v0') ? document.getElementById('sl11v0').value : 5);
var a = +(document.getElementById('sl11a') ? document.getElementById('sl11a').value : 3);
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var tmax = 10, vmax = Math.max(v0+a*tmax+4, 10);
var lpad=44, bpad=28, rpad=16, tpad=18;
var gw=W-lpad-rpad, gh=H-tpad-bpad;
var ox=lpad, oy=tpad+gh;
// Grid
ctx.strokeStyle = dark?'#1e3a5f':'#e2e8f0'; ctx.lineWidth=1;
for (var ti=0; ti<=tmax; ti+=2) {
var gx=ox+ti*(gw/tmax);
ctx.beginPath(); ctx.moveTo(gx,tpad); ctx.lineTo(gx,oy); ctx.stroke();
ctx.fillStyle=dark?'#64748b':'#94a3b8'; ctx.font='10px Inter,sans-serif';
ctx.fillText(ti, gx-3, oy+14);
}
var vstep = vmax > 60 ? 20 : 10;
for (var vi=0; vi<=vmax; vi+=vstep) {
var gy=oy-vi/vmax*gh; if(gy<tpad-1) continue;
ctx.beginPath(); ctx.moveTo(ox,gy); ctx.lineTo(ox+gw,gy); ctx.stroke();
ctx.fillText(vi, ox-24, gy+4);
}
// Axes
ctx.strokeStyle=dark?'#94a3b8':'#475569'; ctx.lineWidth=1.5;
ctx.beginPath(); ctx.moveTo(ox,tpad-4); ctx.lineTo(ox,oy+2); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox-2,oy); ctx.lineTo(ox+gw+4,oy); ctx.stroke();
ctx.fillStyle=dark?'#94a3b8':'#475569'; ctx.font='11px Inter,sans-serif';
ctx.fillText('t,с',ox+gw-4,oy+14); ctx.fillText('v,м/с',ox+4,tpad-6);
// v(t) line with area fill
ctx.fillStyle = dark ? 'rgba(59,130,246,0.15)' : 'rgba(59,130,246,0.1)';
ctx.beginPath(); ctx.moveTo(ox,oy);
ctx.lineTo(ox, oy-Math.min(v0,vmax)/vmax*gh);
for (var tc=0; tc<=tmax; tc++) {
var vc=v0+a*tc; if(vc<0) vc=0;
ctx.lineTo(ox+tc*(gw/tmax), oy-Math.min(vc,vmax)/vmax*gh);
}
ctx.lineTo(ox+gw,oy); ctx.closePath(); ctx.fill();
ctx.strokeStyle='#3b82f6'; ctx.lineWidth=2.5;
ctx.beginPath(); ctx.moveTo(ox, oy-Math.min(v0,vmax)/vmax*gh);
for (var tc2=0; tc2<=tmax; tc2++) {
var vc2=v0+a*tc2; if(vc2<0) vc2=0;
ctx.lineTo(ox+tc2*(gw/tmax), oy-Math.min(vc2,vmax)/vmax*gh);
}
ctx.stroke();
// Slope annotation
ctx.fillStyle='#3b82f6'; ctx.font='bold 11px Inter,sans-serif';
ctx.fillText('v = '+v0+(a>=0?'+':'')+a+'·t', ox+gw*0.45, tpad+14);
ctx.fillStyle=dark?'#94a3b8':'#64748b'; ctx.font='10px Inter,sans-serif';
ctx.fillText('Площадь = путь s', ox+gw*0.22, oy-gh*0.28);
[['v11v0',v0+' м/с'],['v11a',a+' м/с²']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
var el=document.getElementById('res11');
if (el) el.textContent = 'v('+tmax+'с) = '+(v0+a*tmax)+' м/с; s = '+(v0*tmax+a*tmax*tmax/2).toFixed(1)+' м';
}
// ── §12 — x(t) при равноускоренном движении ──────────────
function upd12() {
var cv = document.getElementById('cv12');
if (!cv) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 200;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var v0 = +(document.getElementById('sl12v0') ? document.getElementById('sl12v0').value : 0);
var a = +(document.getElementById('sl12a') ? document.getElementById('sl12a').value : 2);
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var tmax = 8;
var xmax = v0*tmax + 0.5*a*tmax*tmax;
var xmin = Math.min(0, xmax);
if (xmax < 5 && xmax > -5) xmax = 20;
if (xmin > -5) xmin = -5;
var lpad=44, bpad=28, rpad=16, tpad=18;
var gw=W-lpad-rpad, gh=H-tpad-bpad;
var ox=lpad, oy=tpad+gh;
// Grid
ctx.strokeStyle=dark?'#1e3a5f':'#e2e8f0'; ctx.lineWidth=1;
for (var ti=0; ti<=tmax; ti+=2) {
var gx=ox+ti*(gw/tmax);
ctx.beginPath(); ctx.moveTo(gx,tpad); ctx.lineTo(gx,oy); ctx.stroke();
ctx.fillStyle=dark?'#64748b':'#94a3b8'; ctx.font='10px Inter,sans-serif';
ctx.fillText(ti, gx-3, oy+14);
}
var xstep = (xmax-xmin) > 80 ? 40 : 20;
for (var xi=Math.ceil(xmin/xstep)*xstep; xi<=xmax; xi+=xstep) {
var gy=oy-(xi-xmin)/(xmax-xmin)*gh; if(gy<tpad-1||gy>oy+1) continue;
ctx.beginPath(); ctx.moveTo(ox,gy); ctx.lineTo(ox+gw,gy); ctx.stroke();
ctx.fillText(xi.toFixed(0), ox-30, gy+4);
}
// Axes
ctx.strokeStyle=dark?'#94a3b8':'#475569'; ctx.lineWidth=1.5;
ctx.beginPath(); ctx.moveTo(ox,tpad-4); ctx.lineTo(ox,oy+2); ctx.stroke();
ctx.beginPath(); ctx.moveTo(ox-2,oy); ctx.lineTo(ox+gw+4,oy); ctx.stroke();
ctx.fillStyle=dark?'#94a3b8':'#475569'; ctx.font='11px Inter,sans-serif';
ctx.fillText('t,с',ox+gw-4,oy+14); ctx.fillText('x,м',ox+4,tpad-6);
// x(t) curve (parabola)
ctx.strokeStyle='#10b981'; ctx.lineWidth=2.5;
ctx.beginPath();
for (var tc=0; tc<=tmax*20; tc++) {
var t2=tc/(tmax*20)*tmax;
var xv=v0*t2+0.5*a*t2*t2;
var gxc=ox+t2/tmax*gw;
var gyc=oy-(xv-xmin)/(xmax-xmin)*gh;
if (tc===0) ctx.moveTo(gxc,gyc); else ctx.lineTo(gxc,gyc);
}
ctx.stroke();
ctx.fillStyle='#10b981'; ctx.font='bold 11px Inter,sans-serif';
ctx.fillText('x = '+v0+'t + '+a+'/2·t²', ox+gw*0.3, tpad+14);
[['v12v0',v0+' м/с'],['v12a',a+' м/с²']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
var el=document.getElementById('res12');
if (el) el.textContent = 'x('+tmax+'с) = '+(v0*tmax+0.5*a*tmax*tmax).toFixed(1)+' м';
}
// ── §13 — Равномерное движение по окружности ─────────────
var anim13Id = null;
function upd13() {
var cv = document.getElementById('cv13');
if (!cv) return;
if (anim13Id) { cancelAnimationFrame(anim13Id); anim13Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 180;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var r = +(document.getElementById('sl13r') ? document.getElementById('sl13r').value : 3);
var nu = +(document.getElementById('sl13nu') ? document.getElementById('sl13nu').value : 2);
var v = 2*Math.PI*r*nu;
var anim13t = 0;
function frame13() {
anim13t += 0.016;
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var cx = W*0.35, cy = H*0.5;
var sc = Math.min(H*0.35, W*0.28) / 5;
var R = r * sc;
// Circle
ctx.strokeStyle = dark ? '#334155' : '#e2e8f0'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.arc(cx,cy,R,0,2*Math.PI); ctx.stroke();
// Radius
var angle = 2*Math.PI*nu * anim13t;
var px = cx + R*Math.cos(angle), py = cy + R*Math.sin(angle);
ctx.strokeStyle = dark ? '#475569' : '#94a3b8'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(cx,cy); ctx.lineTo(px,py); ctx.stroke();
ctx.fillStyle = dark ? '#94a3b8' : '#64748b'; ctx.font = '10px Inter,sans-serif';
ctx.fillText('r='+r+' м', cx+3, cy-4);
// Point
ctx.fillStyle = '#3b82f6';
ctx.beginPath(); ctx.arc(px,py,7,0,2*Math.PI); ctx.fill();
// Velocity vector (tangential)
var tangX = -Math.sin(angle)*v*0.5*sc*0.8;
var tangY = Math.cos(angle)*v*0.5*sc*0.8;
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(px,py); ctx.lineTo(px+tangX,py+tangY); ctx.stroke();
ctx.fillStyle = '#10b981';
ctx.beginPath(); ctx.moveTo(px+tangX,py+tangY);
ctx.lineTo(px+tangX-7*Math.cos(Math.atan2(tangY,tangX)-0.4),py+tangY-7*Math.sin(Math.atan2(tangY,tangX)-0.4));
ctx.lineTo(px+tangX-7*Math.cos(Math.atan2(tangY,tangX)+0.4),py+tangY-7*Math.sin(Math.atan2(tangY,tangX)+0.4));
ctx.fill();
ctx.font = '10px Inter,sans-serif';
ctx.fillText('v', px+tangX+3, py+tangY-3);
// Info panel
var ix = W*0.63, iy = H*0.12;
ctx.fillStyle = dark ? '#1e293b' : '#f1f5f9';
ctx.strokeStyle = dark ? '#334155' : '#e2e8f0'; ctx.lineWidth = 1;
ctx.fillRect(ix-4,iy-16,W*0.36,80);
ctx.font = '11px Inter,sans-serif';
ctx.fillStyle = dark ? '#e2e8f0' : '#1e293b';
ctx.fillText('r = '+r+' м', ix, iy);
ctx.fillText('ν = '+nu+' об/с', ix, iy+18);
ctx.fillText('T = '+(1/nu).toFixed(2)+' с', ix, iy+36);
ctx.fillText('v = '+v.toFixed(1)+' м/с', ix, iy+54);
[['v13r',r+' м'],['v13nu',nu+' об/с']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
var el=document.getElementById('res13');
if (el) el.textContent = 'v = 2π·'+r+'·'+nu+' ≈ '+v.toFixed(2)+' м/с; T = '+(1/nu).toFixed(2)+' с';
anim13Id = requestAnimationFrame(frame13);
}
frame13();
}
// ── §14 — Центростремительное ускорение ──────────────────
var anim14Id = null;
function upd14() {
var cv = document.getElementById('cv14');
if (!cv) return;
if (anim14Id) { cancelAnimationFrame(anim14Id); anim14Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth || 420, H = cv.offsetHeight || 180;
cv.width = Math.round(W*dpr); cv.height = Math.round(H*dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr,0,0,dpr,0,0);
var vms = +(document.getElementById('sl14v') ? document.getElementById('sl14v').value : 10);
var r = +(document.getElementById('sl14r') ? document.getElementById('sl14r').value : 5);
var ac = vms*vms/r;
var anim14t = 0;
function frame14() {
anim14t += 0.016;
var dark = document.body.classList.contains('dark');
ctx.fillStyle = dark ? '#1e293b' : '#f8fafc';
ctx.fillRect(0,0,W,H);
var cx = W*0.35, cy = H*0.5;
var sc = Math.min(H*0.35, W*0.28)/Math.max(r,3);
var R = r*sc;
var omega = vms/r;
var angle = omega * anim14t;
var px = cx + R*Math.cos(angle), py = cy + R*Math.sin(angle);
// Circle
ctx.strokeStyle = dark?'#334155':'#e2e8f0'; ctx.lineWidth=2;
ctx.beginPath(); ctx.arc(cx,cy,R,0,2*Math.PI); ctx.stroke();
// Radius
ctx.strokeStyle = dark?'#475569':'#94a3b8'; ctx.lineWidth=1.5;
ctx.beginPath(); ctx.moveTo(cx,cy); ctx.lineTo(px,py); ctx.stroke();
// Center dot
ctx.fillStyle = dark?'#475569':'#94a3b8';
ctx.beginPath(); ctx.arc(cx,cy,4,0,2*Math.PI); ctx.fill();
ctx.fillStyle=dark?'#94a3b8':'#64748b'; ctx.font='10px Inter,sans-serif';
ctx.fillText('r='+r, cx+4, cy-4);
// Point
ctx.fillStyle='#f97316';
ctx.beginPath(); ctx.arc(px,py,7,0,2*Math.PI); ctx.fill();
// Velocity arrow (tangent) — green
var scV = 0.45*sc;
var tvx = -Math.sin(angle)*vms*scV, tvy = Math.cos(angle)*vms*scV;
ctx.strokeStyle='#10b981'; ctx.lineWidth=2;
ctx.beginPath(); ctx.moveTo(px,py); ctx.lineTo(px+tvx,py+tvy); ctx.stroke();
ctx.fillStyle='#10b981';
var va=Math.atan2(tvy,tvx);
ctx.beginPath(); ctx.moveTo(px+tvx,py+tvy);
ctx.lineTo(px+tvx-7*Math.cos(va-0.4),py+tvy-7*Math.sin(va-0.4));
ctx.lineTo(px+tvx-7*Math.cos(va+0.4),py+tvy-7*Math.sin(va+0.4)); ctx.fill();
ctx.font='10px Inter,sans-serif'; ctx.fillText('v',px+tvx+3,py+tvy-3);
// Centripetal acceleration arrow — red (toward center)
var scA = 0.5*sc;
var avx = (cx-px)/r * ac * scA, avy = (cy-py)/r * ac * scA;
var aLen = Math.min(Math.sqrt(avx*avx+avy*avy), R*0.7);
var aang = Math.atan2(cy-py, cx-px);
var eax = px + Math.cos(aang)*aLen, eay = py + Math.sin(aang)*aLen;
ctx.strokeStyle='#ef4444'; ctx.lineWidth=2.5;
ctx.beginPath(); ctx.moveTo(px,py); ctx.lineTo(eax,eay); ctx.stroke();
ctx.fillStyle='#ef4444';
ctx.beginPath(); ctx.moveTo(eax,eay);
ctx.lineTo(eax-8*Math.cos(aang-0.4),eay-8*Math.sin(aang-0.4));
ctx.lineTo(eax-8*Math.cos(aang+0.4),eay-8*Math.sin(aang+0.4)); ctx.fill();
ctx.font='10px Inter,sans-serif'; ctx.fillText('aцс',eax+3,eay-3);
// Info panel
var ix=W*0.63, iy=H*0.12;
ctx.fillStyle=dark?'#1e293b':'#f1f5f9';
ctx.strokeStyle=dark?'#334155':'#e2e8f0'; ctx.lineWidth=1;
ctx.fillRect(ix-4,iy-16,W*0.37,68);
ctx.font='11px Inter,sans-serif'; ctx.fillStyle=dark?'#e2e8f0':'#1e293b';
ctx.fillText('v = '+vms+' м/с', ix, iy);
ctx.fillText('r = '+r+' м', ix, iy+18);
ctx.fillText('aцс = v²/r = '+ac.toFixed(1)+' м/с²', ix, iy+36);
[['v14v',vms+' м/с'],['v14r',r+' м']].forEach(function(p){ var el=document.getElementById(p[0]); if(el) el.textContent=p[1]; });
var el=document.getElementById('res14');
if (el) el.textContent = 'aцс = '+vms+'²/'+r+' = '+ac.toFixed(2)+' м/с²';
anim14Id = requestAnimationFrame(frame14);
}
frame14();
}
// §16 — F_т = mg
function upd16() {
var m = +document.getElementById('sl16m').value;
var g = +document.getElementById('sl16g').value;
document.getElementById('v16m').textContent = m + ' кг';
document.getElementById('v16g').textContent = g + ' м/с²';
var F = m * g;
var el = document.getElementById('res16');
if (el) { el.textContent = 'Fт = ' + m + ' · ' + g + ' = ' + F.toFixed(0) + ' Н'; doRender(el); }
}
// §17 — a = F/m
function upd17() {
var F = +document.getElementById('sl17f').value;
var m = +document.getElementById('sl17m').value;
document.getElementById('v17f').textContent = F + ' Н';
document.getElementById('v17m').textContent = m + ' кг';
var a = (F / m).toFixed(2).replace('.', ',');
var el = document.getElementById('res17');
if (el) { el.textContent = 'a = ' + F + ' / ' + m + ' = ' + a + ' м/с²'; doRender(el); }
}
// §19 — F_упр = k·Δl
function upd19() {
var k = +document.getElementById('sl19k').value;
var xcm = +document.getElementById('sl19x').value;
document.getElementById('v19k').textContent = k + ' Н/м';
document.getElementById('v19x').textContent = xcm + ' см';
var xm = xcm / 100;
var F = (k * xm).toFixed(1).replace('.', ',');
var xStr = xm.toFixed(2).replace('.', ',');
var el = document.getElementById('res19');
if (el) { el.textContent = 'Fупр = ' + k + ' · ' + xStr + ' = ' + F + ' Н'; doRender(el); }
drawSpring19();
}
// §20 — F_тр = μ·N
function upd20() {
var muInt = +document.getElementById('sl20mu').value;
var m = +document.getElementById('sl20m').value;
var mu = (muInt / 100).toFixed(2);
document.getElementById('v20mu').textContent = mu;
document.getElementById('v20m').textContent = m + ' кг';
var N = m * 10;
var F = (muInt / 100 * N).toFixed(1).replace('.', ',');
var el = document.getElementById('res20');
if (el) { el.textContent = 'Fтр = ' + mu + ' · ' + N + ' = ' + F + ' Н'; doRender(el); }
drawFriction20();
}
// §21 — t_пад, v_пад
function upd21() {
var h = +document.getElementById('sl21h').value;
document.getElementById('v21h').textContent = h + ' м';
var t = Math.sqrt(2 * h / 10).toFixed(2).replace('.', ',');
var v = Math.sqrt(2 * 10 * h).toFixed(1).replace('.', ',');
var el = document.getElementById('res21');
if (el) { el.textContent = 't = √(2·' + h + '/10) = ' + t + ' с; v = √(2·10·' + h + ') = ' + v + ' м/с'; doRender(el); }
// Restart parabola animation with new height
if (document.getElementById('tab-ref21') && document.getElementById('tab-ref21').classList.contains('active')) {
startAnim21();
}
}
// ══════════════════════════════════════════════
// §22 — БРОСОК ПОД УГЛОМ: ИНТЕРАКТИВ
// ══════════════════════════════════════════════
function upd22() {
var deg = +document.getElementById('sl22a').value;
var v0 = +document.getElementById('sl22v').value;
document.getElementById('v22a').textContent = deg + '°';
document.getElementById('v22v').textContent = v0 + ' м/с';
var g = 10, rad = deg * Math.PI / 180;
var L = v0 * v0 * Math.sin(2 * rad) / g;
var H = v0 * v0 * Math.sin(rad) * Math.sin(rad) / (2 * g);
var T = 2 * v0 * Math.sin(rad) / g;
var el = document.getElementById('res22');
if (el) el.textContent = 'L = ' + L.toFixed(1) + ' м | H = ' + H.toFixed(1) + ' м | T = ' + T.toFixed(2) + ' с';
drawAngularThrow22(deg, v0);
}
function drawAngularThrow22(deg, v0) {
var cv = document.getElementById('cv22');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H2 = cv.offsetHeight || 200;
cv.width = Math.round(W * dpr); cv.height = Math.round(H2 * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var dark = document.body.classList.contains('dark');
ctx.clearRect(0, 0, W, H2);
var g = 10, rad = deg * Math.PI / 180;
var L = v0 * v0 * Math.sin(2 * rad) / g;
var Hmax = v0 * v0 * Math.sin(rad) * Math.sin(rad) / (2 * g);
var pad = 30, bH = H2 - 30;
var scX = (W - 2 * pad) / (L || 1);
var scY = (bH - 20) / (Hmax || 1);
// Ground
ctx.strokeStyle = dark ? '#334155' : '#cbd5e1';
ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(pad, bH); ctx.lineTo(W - pad, bH); ctx.stroke();
// Parabola
ctx.strokeStyle = '#0369a1';
ctx.lineWidth = 2.5;
ctx.beginPath();
var T = 2 * v0 * Math.sin(rad) / g;
for (var i = 0; i <= 120; i++) {
var t = T * i / 120;
var x = pad + v0 * Math.cos(rad) * t * scX;
var y = bH - (v0 * Math.sin(rad) * t - 0.5 * g * t * t) * scY;
if (i === 0) ctx.moveTo(x, y); else ctx.lineTo(x, y);
}
ctx.stroke();
// Ball
var tMid = T * 0.5;
var bx = pad + v0 * Math.cos(rad) * tMid * scX;
var by = bH - (v0 * Math.sin(rad) * tMid - 0.5 * g * tMid * tMid) * scY;
ctx.beginPath(); ctx.arc(bx, by, 7, 0, Math.PI * 2);
ctx.fillStyle = '#f97316'; ctx.fill();
// Angle arc
ctx.strokeStyle = '#0369a1'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.arc(pad, bH, 28, -rad, 0, true); ctx.stroke();
ctx.fillStyle = '#0369a1'; ctx.font = 'bold 11px Inter';
ctx.fillText(deg + '°', pad + 30, bH - 8);
// Labels
ctx.fillStyle = dark ? '#94a3b8' : '#64748b'; ctx.font = '11px Inter';
ctx.fillText('L = ' + L.toFixed(1) + ' м', pad + 5, bH + 18);
ctx.fillText('H = ' + Hmax.toFixed(1) + ' м', bx - 20, by - 10);
// Launch arrow
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2;
var arLen = 40;
ctx.beginPath();
ctx.moveTo(pad, bH);
ctx.lineTo(pad + arLen * Math.cos(rad), bH - arLen * Math.sin(rad));
ctx.stroke();
}
// ══════════════════════════════════════════════
// §23 — ЗАКОН ТЯГОТЕНИЯ: ИНТЕРАКТИВ
// ══════════════════════════════════════════════
function upd23() {
var m1 = +document.getElementById('sl23m1').value;
var m2 = +document.getElementById('sl23m2').value;
var r = +document.getElementById('sl23r').value;
document.getElementById('v23m1').textContent = m1 + ' кг';
document.getElementById('v23m2').textContent = m2 + ' кг';
document.getElementById('v23r').textContent = r + ' м';
var G = 6.674e-11;
var F = G * m1 * m2 / (r * r);
var el = document.getElementById('res23');
if (el) el.textContent = 'F = ' + F.toExponential(3) + ' Н';
drawGravity23(m1, m2, r, F);
}
function drawGravity23(m1, m2, r, F) {
var cv = document.getElementById('cv23');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 160;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var dark = document.body.classList.contains('dark');
ctx.clearRect(0, 0, W, H);
var cy = H / 2;
var r1 = Math.max(12, Math.min(35, 8 + m1 * 0.4));
var r2 = Math.max(12, Math.min(35, 8 + m2 * 0.4));
var gap = Math.max(40, Math.min(W - 2 * r1 - 2 * r2 - 60, (r / 20) * (W - 80)));
var x1 = 50, x2 = x1 + 2 * r1 + gap + 2 * r2;
if (x2 > W - 30) x2 = W - 30;
// Body 1
ctx.beginPath(); ctx.arc(x1 + r1, cy, r1, 0, Math.PI * 2);
ctx.fillStyle = '#1d4ed8'; ctx.fill();
ctx.fillStyle = '#fff'; ctx.font = 'bold 11px Inter'; ctx.textAlign = 'center';
ctx.fillText(m1 + ' кг', x1 + r1, cy + 4);
// Body 2
ctx.beginPath(); ctx.arc(x2 - r2, cy, r2, 0, Math.PI * 2);
ctx.fillStyle = '#0369a1'; ctx.fill();
ctx.fillStyle = '#fff'; ctx.font = 'bold 11px Inter';
ctx.fillText(m2 + ' кг', x2 - r2, cy + 4);
// Arrows
var maxArr = 60, normF = Math.log10(F + 1e-11) + 11;
var arrLen = Math.max(8, Math.min(maxArr, normF * 8));
ctx.strokeStyle = '#f97316'; ctx.lineWidth = 2.5;
// Left arrow (toward right)
ctx.beginPath(); ctx.moveTo(x1 + r1, cy); ctx.lineTo(x1 + r1 + arrLen, cy); ctx.stroke();
ctx.beginPath(); ctx.moveTo(x1 + r1 + arrLen, cy - 5); ctx.lineTo(x1 + r1 + arrLen + 8, cy); ctx.lineTo(x1 + r1 + arrLen, cy + 5); ctx.fillStyle = '#f97316'; ctx.fill();
// Right arrow (toward left)
ctx.beginPath(); ctx.moveTo(x2 - r2, cy); ctx.lineTo(x2 - r2 - arrLen, cy); ctx.stroke();
ctx.beginPath(); ctx.moveTo(x2 - r2 - arrLen, cy - 5); ctx.lineTo(x2 - r2 - arrLen - 8, cy); ctx.lineTo(x2 - r2 - arrLen, cy + 5); ctx.fill();
// r label
ctx.fillStyle = dark ? '#94a3b8' : '#64748b'; ctx.font = '11px Inter'; ctx.textAlign = 'center';
ctx.fillText('r = ' + r + ' м', (x1 + r1 + x2 - r2) / 2, cy + 30);
// F label
ctx.fillStyle = '#f97316'; ctx.font = 'bold 12px Inter';
ctx.fillText('F = ' + F.toExponential(2) + ' Н', (x1 + r1 + x2 - r2) / 2, cy - 20);
ctx.textAlign = 'left';
}
// ══════════════════════════════════════════════
// §24 — ВЕС ТЕЛА В ЛИФТЕ: ИНТЕРАКТИВ
// ══════════════════════════════════════════════
function upd24() {
var m = +document.getElementById('sl24m').value;
var a = +document.getElementById('sl24a').value;
document.getElementById('v24m').textContent = m + ' кг';
document.getElementById('v24a').textContent = a > 0 ? '+' + a + ' м/с²' : (a < 0 ? a + ' м/с²' : '0 м/с² (покой/равном.)');
var g = 10;
var Ft = m * g;
var P = m * (g + a);
var el = document.getElementById('res24');
if (el) {
var status = a > 0 ? ' (перегрузка ⬆️)' : (a < 0 ? ' (облегчение ⬇️)' : ' (норма)');
if (a <= -10) status = ' ⚠️ НЕВЕСОМОСТЬ!';
el.textContent = 'P = ' + P.toFixed(0) + ' Н | F_т = ' + Ft.toFixed(0) + ' Н' + status;
}
drawElevator24(m, a, P, Ft);
}
function drawElevator24(m, a, P, Ft) {
var cv = document.getElementById('cv24');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 200;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var dark = document.body.classList.contains('dark');
ctx.clearRect(0, 0, W, H);
var cx = W / 2, bY = H - 20;
// Elevator cabin
var ew = 120, eh = 80, ex = cx - ew / 2, ey = bY - eh - 60;
ctx.strokeStyle = dark ? '#475569' : '#94a3b8'; ctx.lineWidth = 2;
ctx.strokeRect(ex, ey, ew, eh);
// Cable
ctx.strokeStyle = dark ? '#64748b' : '#94a3b8'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(cx, ey); ctx.lineTo(cx, 20); ctx.stroke();
// Person inside elevator
var px = cx, pBase = ey + eh - 5;
ctx.fillStyle = dark ? '#93c5fd' : '#1d4ed8';
ctx.beginPath(); ctx.arc(px, pBase - 30, 12, 0, Math.PI * 2); ctx.fill();
ctx.strokeStyle = dark ? '#93c5fd' : '#1d4ed8'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(px, pBase - 18); ctx.lineTo(px, pBase - 5); ctx.stroke();
ctx.beginPath(); ctx.moveTo(px - 10, pBase - 10); ctx.lineTo(px + 10, pBase - 10); ctx.stroke();
// Weight arrow (F_t - downward, red)
var g = 10, sc = Math.max(15, Math.min(60, Ft / (m * g) * 35));
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(px + 25, pBase - 20); ctx.lineTo(px + 25, pBase - 20 + sc); ctx.stroke();
ctx.beginPath(); ctx.moveTo(px + 22, pBase - 20 + sc - 6); ctx.lineTo(px + 25, pBase - 20 + sc + 4); ctx.lineTo(px + 28, pBase - 20 + sc - 6); ctx.fillStyle = '#ef4444'; ctx.fill();
ctx.fillStyle = '#ef4444'; ctx.font = '10px Inter'; ctx.textAlign = 'left';
ctx.fillText('F_т=' + Ft.toFixed(0) + 'Н', px + 30, pBase - 20 + sc / 2);
// Reaction (P - upward, green), clamped to 0 if weightless
var Pdisp = Math.max(0, P);
var scP = Math.max(0, Math.min(60, Pdisp / (m * g) * 35));
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(px - 25, pBase); ctx.lineTo(px - 25, pBase - scP); ctx.stroke();
if (scP > 3) {
ctx.beginPath(); ctx.moveTo(px - 28, pBase - scP + 6); ctx.lineTo(px - 25, pBase - scP - 4); ctx.lineTo(px - 22, pBase - scP + 6); ctx.fillStyle = '#10b981'; ctx.fill();
}
ctx.fillStyle = '#10b981'; ctx.font = '10px Inter'; ctx.textAlign = 'right';
ctx.fillText('P=' + Pdisp.toFixed(0) + 'Н', px - 28, pBase - scP / 2);
// Acceleration arrow
if (a !== 0) {
ctx.strokeStyle = '#f97316'; ctx.lineWidth = 2;
var arDir = a > 0 ? -1 : 1;
ctx.beginPath(); ctx.moveTo(ex - 20, ey + eh / 2); ctx.lineTo(ex - 20, ey + eh / 2 + arDir * 35); ctx.stroke();
ctx.beginPath();
var arTip = ey + eh / 2 + arDir * 35;
ctx.moveTo(ex - 23, arTip - arDir * 6); ctx.lineTo(ex - 20, arTip + arDir * 4); ctx.lineTo(ex - 17, arTip - arDir * 6);
ctx.fillStyle = '#f97316'; ctx.fill();
ctx.fillStyle = '#f97316'; ctx.font = 'bold 10px Inter'; ctx.textAlign = 'center';
ctx.fillText('a=' + (a > 0 ? '+' : '') + a + ' м/с²', ex - 20, ey + eh / 2 + arDir * 50 + (a > 0 ? -5 : 10));
}
// Label
ctx.fillStyle = dark ? '#e2e8f0' : '#1e293b'; ctx.font = 'bold 12px Inter'; ctx.textAlign = 'center';
var statusText = a > -10 ? 'P = ' + P.toFixed(0) + ' Н' : '⚠️ НЕВЕСОМОСТЬ!';
ctx.fillStyle = a <= -10 ? '#f97316' : (P > Ft + 1 ? '#0369a1' : (P < Ft - 1 ? '#7e22ce' : (dark ? '#e2e8f0' : '#1e293b')));
ctx.fillText(statusText, cx, H - 5);
ctx.textAlign = 'left';
}
// ══════════════════════════════════════════════
// §25 — МОМЕНТ СИЛЫ: КАЧЕЛИ + РЕЗУЛЬТАТ
// ══════════════════════════════════════════════
function upd25() {
var l1 = +document.getElementById('sl25l1').value / 10; // 0.12.0 m
var l2 = +document.getElementById('sl25l2').value / 10;
document.getElementById('v25l1').textContent = l1.toFixed(1) + ' м';
document.getElementById('v25l2').textContent = l2.toFixed(1) + ' м';
var m1 = 4, m2 = 6, g = 10;
var M1 = (m1 * g * l1).toFixed(1);
var M2 = (m2 * g * l2).toFixed(1);
var diff = Math.abs(parseFloat(M1) - parseFloat(M2));
var status = diff < 1.0 ? '⚖️ РАВНОВЕСИЕ!' : (parseFloat(M1) > parseFloat(M2) ? '← наклон влево' : 'наклон вправо →');
var el = document.getElementById('res25');
if (el) { el.textContent = 'M₁ = ' + M1 + ' Н·м | M₂ = ' + M2 + ' Н·м — ' + status; doRender(el); }
drawSeesaw25();
}
function drawSeesaw25() {
var cv = document.getElementById('cv25');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 180;
if (cv.width !== Math.round(W * dpr) || cv.height !== Math.round(H * dpr)) {
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
}
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
var l1 = +document.getElementById('sl25l1').value / 10;
var l2 = +document.getElementById('sl25l2').value / 10;
var m1 = 4, m2 = 6, g = 10;
var M1 = m1 * g * l1, M2 = m2 * g * l2;
var maxL = 2.0;
var cx = W / 2, pivotY = H * 0.58;
var scale = (W * 0.43) / maxL; // pixels per meter
// Tilt angle based on moment imbalance
var tilt = Math.min(0.36, Math.max(-0.36, (M1 - M2) / 80));
// Draw pivot support (triangle)
ctx.beginPath();
ctx.moveTo(cx, pivotY + 2);
ctx.lineTo(cx - 18, pivotY + 34);
ctx.lineTo(cx + 18, pivotY + 34);
ctx.closePath();
ctx.fillStyle = dk ? '#475569' : '#94a3b8'; ctx.fill();
ctx.strokeStyle = dk ? '#64748b' : '#64748b'; ctx.lineWidth = 1.5; ctx.stroke();
// Base
ctx.fillStyle = dk ? '#334155' : '#cbd5e1';
ctx.fillRect(cx - 28, pivotY + 34, 56, 10);
// Beam (tilted)
var beamLen = (l1 + l2) * scale;
ctx.save();
ctx.translate(cx, pivotY);
ctx.rotate(tilt);
// Beam rect
ctx.fillStyle = dk ? '#64748b' : '#94a3b8';
ctx.fillRect(-beamLen * l1 / (l1 + l2) - 4, -6, beamLen + 8, 12);
ctx.strokeStyle = dk ? '#475569' : '#64748b'; ctx.lineWidth = 1; ctx.strokeRect(-beamLen * l1 / (l1 + l2) - 4, -6, beamLen + 8, 12);
// Left weight (blue, m1=4kg) at distance l1
var x1 = -l1 * scale;
var bH = 30 + m1 * 4;
ctx.fillStyle = '#3b82f6';
ctx.fillRect(x1 - 20, -6 - bH, 40, bH);
ctx.strokeStyle = '#1d4ed8'; ctx.lineWidth = 2; ctx.strokeRect(x1 - 20, -6 - bH, 40, bH);
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter'; ctx.textAlign = 'center';
ctx.fillText(m1 + ' кг', x1, -6 - bH/2 + 4);
// l1 label
ctx.fillStyle = '#3b82f6'; ctx.font = '8px Inter';
ctx.fillText('l₁=' + l1.toFixed(1) + 'м', x1/2, 16);
// M1 label
ctx.fillStyle = '#3b82f6'; ctx.font = 'bold 9px Inter';
ctx.fillText('M₁=' + M1.toFixed(0) + ' Н·м', x1, -6 - bH - 10);
// Right weight (orange, m2=6kg) at distance l2
var x2 = l2 * scale;
var bH2 = 30 + m2 * 4;
ctx.fillStyle = '#f97316';
ctx.fillRect(x2 - 20, -6 - bH2, 40, bH2);
ctx.strokeStyle = '#ea580c'; ctx.lineWidth = 2; ctx.strokeRect(x2 - 20, -6 - bH2, 40, bH2);
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter';
ctx.fillText(m2 + ' кг', x2, -6 - bH2/2 + 4);
// l2 label
ctx.fillStyle = '#f97316'; ctx.font = '8px Inter';
ctx.fillText('l₂=' + l2.toFixed(1) + 'м', x2/2, 16);
// M2 label
ctx.fillStyle = '#f97316'; ctx.font = 'bold 9px Inter';
ctx.fillText('M₂=' + M2.toFixed(0) + ' Н·м', x2, -6 - bH2 - 10);
ctx.textAlign = 'left';
ctx.restore();
// Balance indicator
var diff = Math.abs(M1 - M2);
ctx.font = 'bold 11px Inter'; ctx.textAlign = 'center';
if (diff < 1.5) {
ctx.fillStyle = '#10b981';
ctx.fillText('⚖️ РАВНОВЕСИЕ! M₁ = M₂', W/2, H - 8);
} else {
ctx.fillStyle = dk ? '#94a3b8' : '#64748b';
ctx.fillText('Наклон: ΔM = ' + diff.toFixed(0) + ' Н·м', W/2, H - 8);
}
ctx.textAlign = 'left';
}
// ══════════════════════════════════════════════
// §26 — РЫЧАГ: ИНТЕРАКТИВ
// ══════════════════════════════════════════════
function upd26() {
var l2 = +document.getElementById('sl26l2').value / 10; // нагрузка
var l1 = +document.getElementById('sl26l1').value / 10; // сила
document.getElementById('v26l2').textContent = l2.toFixed(1) + ' м';
document.getElementById('v26l1').textContent = l1.toFixed(1) + ' м';
var mg = 500; // 50 кг × 10
var F = (mg * l2 / l1).toFixed(0);
var gain = (l1 / l2).toFixed(1);
var el = document.getElementById('res26');
if (el) { el.textContent = 'F = ' + F + ' Н | Выигрыш = ' + gain + '× | Нагрузка 50 кг'; doRender(el); }
drawLever26();
}
function drawLever26() {
var cv = document.getElementById('cv26');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 160;
if (cv.width !== Math.round(W * dpr) || cv.height !== Math.round(H * dpr)) {
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
}
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
var l2 = +document.getElementById('sl26l2').value / 10;
var l1 = +document.getElementById('sl26l1').value / 10;
var mg = 500, F = mg * l2 / l1;
var gain = l1 / l2;
var pivotY = H * 0.52, cx = W * 0.42;
var scale = Math.min((W - 40) / (l1 + l2 + 0.3), 90);
var x_load = cx - l2 * scale; // left side: load
var x_force = cx + l1 * scale; // right side: force applied
// Ground
ctx.fillStyle = dk ? '#334155' : '#e2e8f0'; ctx.fillRect(0, pivotY + 28, W, H - pivotY - 28);
ctx.strokeStyle = dk ? '#64748b' : '#94a3b8'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(0, pivotY + 28); ctx.lineTo(W, pivotY + 28); ctx.stroke();
// Fulcrum
ctx.beginPath();
ctx.moveTo(cx, pivotY + 3);
ctx.lineTo(cx - 15, pivotY + 28);
ctx.lineTo(cx + 15, pivotY + 28);
ctx.closePath();
ctx.fillStyle = '#f97316'; ctx.fill();
// Beam
ctx.fillStyle = dk ? '#64748b' : '#94a3b8';
ctx.fillRect(x_load - 4, pivotY - 5, x_force - x_load + 8, 10);
ctx.strokeStyle = dk ? '#475569' : '#64748b'; ctx.lineWidth = 1; ctx.stroke();
// Load (left, down) — mg arrow
var arrowScale = Math.min(55, mg * 0.055);
ctx.beginPath(); ctx.moveTo(x_load, pivotY - 5); ctx.lineTo(x_load, pivotY - 5 - arrowScale);
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2.5; ctx.stroke();
ctx.beginPath(); ctx.moveTo(x_load, pivotY - 5 - arrowScale);
ctx.lineTo(x_load - 6, pivotY - 5 - arrowScale + 12); ctx.lineTo(x_load + 6, pivotY - 5 - arrowScale + 12);
ctx.fillStyle = '#ef4444'; ctx.fill();
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#ef4444'; ctx.textAlign = 'center';
ctx.fillText('G = ' + mg + ' Н', x_load, pivotY - 5 - arrowScale - 5);
// Applied force (right, down)
var fArrow = Math.min(55, F * 0.055);
ctx.beginPath(); ctx.moveTo(x_force, pivotY - 5); ctx.lineTo(x_force, pivotY - 5 - fArrow);
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth = 2.5; ctx.stroke();
ctx.beginPath(); ctx.moveTo(x_force, pivotY - 5 - fArrow);
ctx.lineTo(x_force - 6, pivotY - 5 - fArrow + 12); ctx.lineTo(x_force + 6, pivotY - 5 - fArrow + 12);
ctx.fillStyle = '#3b82f6'; ctx.fill();
ctx.fillStyle = '#3b82f6'; ctx.font = 'bold 9px Inter';
ctx.fillText('F = ' + F.toFixed(0) + ' Н', x_force, pivotY - 5 - fArrow - 5);
// l1 and l2 labels
ctx.font = '9px Inter'; ctx.fillStyle = '#ef4444';
ctx.fillText('l₂ = ' + l2.toFixed(1) + ' м', (x_load + cx) / 2, pivotY + 20);
ctx.fillStyle = '#3b82f6';
ctx.fillText('l₁ = ' + l1.toFixed(1) + ' м', (cx + x_force) / 2, pivotY + 20);
// Gain badge
ctx.font = 'bold 11px Inter'; ctx.fillStyle = '#10b981'; ctx.textAlign = 'center';
ctx.fillText('Выигрыш = ' + gain.toFixed(1) + '× → F в ' + gain.toFixed(1) + ' раз меньше нагрузки!', W/2, H - 8);
ctx.textAlign = 'left';
}
// ══════════════════════════════════════════════
// §27 — НАКЛОННАЯ ПЛОСКОСТЬ + КПД
// ══════════════════════════════════════════════
function upd27() {
var alpha = +document.getElementById('sl27a').value;
var m = +document.getElementById('sl27m').value;
document.getElementById('v27a').textContent = alpha + '°';
document.getElementById('v27m').textContent = m + ' кг';
var rad = alpha * Math.PI / 180;
var F = (m * 10 * Math.sin(rad)).toFixed(0);
var gain = (1 / Math.sin(rad)).toFixed(1);
var el = document.getElementById('res27');
if (el) { el.textContent = 'F = ' + F + ' Н (против ' + (m*10) + ' Н напрямую) | Выигрыш = ' + gain + '×'; doRender(el); }
drawIncline27();
}
function upd27mu() {
var muInt = +document.getElementById('sl27mu').value;
var mu = (muInt / 100).toFixed(2);
document.getElementById('v27mu').textContent = mu;
var alpha = +document.getElementById('sl27a').value;
var rad = alpha * Math.PI / 180;
var sinA = Math.sin(rad), cosA = Math.cos(rad);
var eta, label;
if (sinA < 0.001) {
eta = 100;
} else {
// F_ideal = mg*sin(a), F_real = mg*(sin(a)+mu*cos(a))
// eta = F_ideal/F_real = sin/(sin+mu*cos)
eta = Math.min(100, (sinA / (sinA + mu * cosA) * 100)).toFixed(0);
}
var loss = (100 - eta);
var el = document.getElementById('res27mu');
if (el) { el.textContent = 'КПД = ' + eta + '% | Потери на трение: ' + loss + '%'; doRender(el); }
drawEfficiency27(+eta);
}
function drawIncline27() {
var cv = document.getElementById('cv27');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 180;
if (cv.width !== Math.round(W * dpr) || cv.height !== Math.round(H * dpr)) {
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
}
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
var alpha = +document.getElementById('sl27a').value;
var m = +document.getElementById('sl27m').value;
var rad = alpha * Math.PI / 180;
var mg = m * 10;
var F = mg * Math.sin(rad);
var N = mg * Math.cos(rad);
// Draw inclined plane (triangle)
var bX = 20, bY = H - 30, triW = W - 40, triH = triW * Math.tan(rad);
if (triH > H - 55) { triH = H - 55; triW = triH / Math.tan(rad); bX = 20; }
var topX = bX, topY = bY - triH;
var rightX = bX + triW, rightY = bY;
ctx.beginPath();
ctx.moveTo(bX, bY); ctx.lineTo(rightX, rightY); ctx.lineTo(topX, topY);
ctx.closePath();
ctx.fillStyle = dk ? 'rgba(71,85,105,.35)' : 'rgba(203,213,225,.65)'; ctx.fill();
ctx.strokeStyle = dk ? '#64748b' : '#94a3b8'; ctx.lineWidth = 2; ctx.stroke();
// Angle arc
ctx.beginPath(); ctx.arc(rightX, rightY, 28, Math.PI - rad, Math.PI);
ctx.strokeStyle = '#f59e0b'; ctx.lineWidth = 1.5; ctx.stroke();
ctx.font = 'bold 10px Inter'; ctx.fillStyle = '#f59e0b';
ctx.fillText('α=' + alpha + '°', rightX - 52, rightY - 10);
// Block on slope
var blockDist = 0.35; // fraction along slope from top
var slopeLen = Math.sqrt(triW * triW + triH * triH);
var bBlockX = topX + blockDist * triW;
var bBlockY = topY + blockDist * triH;
var bW = 30, bH = 20;
ctx.save();
ctx.translate(bBlockX, bBlockY);
ctx.rotate(Math.atan2(triH, triW));
ctx.fillStyle = '#6366f1';
ctx.fillRect(-bW/2, -bH, bW, bH);
ctx.strokeStyle = '#4338ca'; ctx.lineWidth = 2; ctx.strokeRect(-bW/2, -bH, bW, bH);
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter'; ctx.textAlign = 'center';
ctx.fillText(m + ' кг', 0, -bH/2 + 4);
ctx.textAlign = 'left';
ctx.restore();
// mg arrow (vertical down)
var arLen = Math.min(55, mg * 0.25);
ctx.beginPath(); ctx.moveTo(bBlockX, bBlockY); ctx.lineTo(bBlockX, bBlockY + arLen);
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2.5; ctx.stroke();
ctx.beginPath(); ctx.moveTo(bBlockX, bBlockY+arLen); ctx.lineTo(bBlockX-5,bBlockY+arLen-10); ctx.lineTo(bBlockX+5,bBlockY+arLen-10);
ctx.fillStyle = '#ef4444'; ctx.fill();
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#ef4444'; ctx.textAlign = 'left';
ctx.fillText('mg=' + mg + 'Н', bBlockX + 6, bBlockY + arLen - 2);
// F arrow (along slope, up)
var fLen = Math.min(50, F * 0.55);
var slopeUx = -triW / slopeLen, slopeUy = -triH / slopeLen; // up the slope
ctx.beginPath(); ctx.moveTo(bBlockX, bBlockY);
ctx.lineTo(bBlockX + slopeUx * fLen, bBlockY + slopeUy * fLen);
ctx.strokeStyle = '#3b82f6'; ctx.lineWidth = 2.5; ctx.stroke();
var ax2 = bBlockX + slopeUx * fLen, ay2 = bBlockY + slopeUy * fLen;
ctx.beginPath(); ctx.moveTo(ax2, ay2);
ctx.lineTo(ax2 - slopeUx * 12 + slopeUy * 5, ay2 - slopeUy * 12 - slopeUx * 5);
ctx.lineTo(ax2 - slopeUx * 12 - slopeUy * 5, ay2 - slopeUy * 12 + slopeUx * 5);
ctx.fillStyle = '#3b82f6'; ctx.fill();
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#3b82f6';
ctx.fillText('F=' + F.toFixed(0) + 'Н', ax2 + 5, ay2 - 3);
// N arrow (perpendicular to slope, outward)
var nLen = Math.min(45, N * 0.22);
var nUx = triH / slopeLen, nUy = -triW / slopeLen; // outward normal
ctx.beginPath(); ctx.moveTo(bBlockX, bBlockY);
ctx.lineTo(bBlockX + nUx * nLen, bBlockY + nUy * nLen);
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2; ctx.stroke();
ctx.font = '9px Inter'; ctx.fillStyle = '#10b981';
ctx.fillText('N=' + N.toFixed(0) + 'Н', bBlockX + nUx * nLen + 3, bBlockY + nUy * nLen - 2);
// h and l labels
ctx.font = '9px Inter'; ctx.fillStyle = dk ? '#94a3b8' : '#64748b';
ctx.textAlign = 'center';
ctx.fillText('l = ' + (slopeLen * 0.035).toFixed(1) + 'м (условно)', (topX + rightX)/2, bY + 16);
ctx.fillText('h', topX - 14, (topY + bY)/2);
ctx.textAlign = 'left';
}
function drawEfficiency27(eta) {
var cv = document.getElementById('cv27eff');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 70;
if (cv.width !== Math.round(W * dpr) || cv.height !== Math.round(H * dpr)) {
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
}
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
var barH = 30, barY = (H - barH) / 2, pad = 16;
// Background bar
ctx.fillStyle = dk ? '#334155' : '#e2e8f0';
ctx.beginPath();
if (ctx.roundRect) ctx.roundRect(pad, barY, W - pad*2, barH, 8);
else ctx.rect(pad, barY, W - pad*2, barH);
ctx.fill();
// Useful work (green)
var usefulW = Math.max(0, (eta / 100) * (W - pad*2));
if (usefulW > 0) {
ctx.fillStyle = '#10b981';
ctx.beginPath();
if (ctx.roundRect) ctx.roundRect(pad, barY, usefulW, barH, 8);
else ctx.rect(pad, barY, usefulW, barH);
ctx.fill();
}
// Waste (red)
var wasteW = (W - pad*2) - usefulW;
if (wasteW > 4) {
ctx.fillStyle = '#ef4444';
ctx.beginPath();
ctx.rect(pad + usefulW, barY, wasteW, barH);
ctx.fill();
// Round right corner
if (ctx.roundRect) {
ctx.beginPath(); ctx.roundRect(pad + usefulW, barY, wasteW, barH, [0, 8, 8, 0]); ctx.fill();
}
}
// Labels
ctx.font = 'bold 10px Inter'; ctx.fillStyle = '#fff'; ctx.textAlign = 'center';
if (usefulW > 60) ctx.fillText('Полезная ' + eta + '%', pad + usefulW / 2, barY + barH/2 + 4);
if (wasteW > 50) ctx.fillText('Потери ' + (100 - eta) + '%', pad + usefulW + wasteW/2, barY + barH/2 + 4);
ctx.textAlign = 'left';
}
// ══════════════════════════════════════════════
// §15 — АНИМАЦИЯ ИНЕРЦИИ
// ══════════════════════════════════════════════
var anim15Id = null;
function startAnim15() {
var cv = document.getElementById('cv15');
if (!cv || cv.offsetWidth === 0) return;
if (anim15Id) { cancelAnimationFrame(anim15Id); anim15Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 170;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var x_ice = 30, x_asp = 30, v_ice = 3.2, v_asp = 3.2, t15 = 0;
function fr15() {
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
var mid = H / 2;
// Ice track
ctx.fillStyle = dk ? 'rgba(186,230,253,.12)' : 'rgba(224,242,254,.7)';
ctx.fillRect(0, 4, W, mid - 8);
ctx.beginPath(); ctx.moveTo(0, mid - 2); ctx.lineTo(W, mid - 2);
ctx.strokeStyle = '#7dd3fc'; ctx.lineWidth = 2; ctx.stroke();
// Asphalt track
ctx.fillStyle = dk ? 'rgba(120,113,108,.15)' : 'rgba(231,229,228,.65)';
ctx.fillRect(0, mid + 4, W, H - mid - 8);
ctx.strokeStyle = dk ? '#78716c' : '#a8a29e'; ctx.lineWidth = 1;
for (var bx = 8; bx < W; bx += 20) {
ctx.beginPath(); ctx.arc(bx, H - 12, 3, 0, Math.PI); ctx.stroke();
}
// Track labels
ctx.font = 'bold 10px Inter,sans-serif';
ctx.fillStyle = '#0284c7'; ctx.fillText('❄️ Лёд — без трения', 8, 18);
ctx.fillStyle = '#78716c'; ctx.fillText('🛣️ Асфальт — трение', 8, mid + 18);
// Physics
x_ice += v_ice;
if (x_ice > W - 18) { x_ice = W - 18; v_ice = -Math.abs(v_ice); }
if (x_ice < 18) { x_ice = 18; v_ice = Math.abs(v_ice); }
if (v_asp > 0) v_asp = Math.max(0, v_asp - 0.038);
x_asp += v_asp;
if (x_asp > W - 18) x_asp = W - 18;
// Ice ball (blue)
var yIce = mid / 2;
ctx.beginPath(); ctx.arc(x_ice, yIce, 13, 0, Math.PI * 2);
ctx.fillStyle = '#38bdf8'; ctx.fill();
ctx.strokeStyle = '#0284c7'; ctx.lineWidth = 2; ctx.stroke();
if (Math.abs(v_ice) > 0.3) {
var d = v_ice > 0 ? 1 : -1;
ctx.beginPath(); ctx.moveTo(x_ice + d*14, yIce); ctx.lineTo(x_ice + d*28, yIce);
ctx.strokeStyle = '#0284c7'; ctx.lineWidth = 2; ctx.stroke();
ctx.beginPath(); ctx.moveTo(x_ice+d*28, yIce); ctx.lineTo(x_ice+d*21,yIce-5); ctx.lineTo(x_ice+d*21,yIce+5);
ctx.fillStyle = '#0284c7'; ctx.fill();
}
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#0284c7';
ctx.fillText('v=' + Math.abs(v_ice).toFixed(1), x_ice - 12, yIce + 24);
// Asphalt ball (orange)
var yAsp = mid + (H - mid) / 2;
ctx.beginPath(); ctx.arc(x_asp, yAsp, 13, 0, Math.PI * 2);
ctx.fillStyle = '#fb923c'; ctx.fill();
ctx.strokeStyle = '#ea580c'; ctx.lineWidth = 2; ctx.stroke();
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#ea580c';
if (v_asp > 0.3) {
ctx.beginPath(); ctx.moveTo(x_asp+14,yAsp); ctx.lineTo(x_asp+28,yAsp);
ctx.strokeStyle = '#ea580c'; ctx.lineWidth = 2; ctx.stroke();
ctx.beginPath(); ctx.moveTo(x_asp+28,yAsp); ctx.lineTo(x_asp+21,yAsp-5); ctx.lineTo(x_asp+21,yAsp+5);
ctx.fillStyle = '#ea580c'; ctx.fill();
ctx.fillText('v=' + v_asp.toFixed(1), x_asp - 12, yAsp - 17);
} else {
ctx.fillText('⛔ СТОИТ', x_asp - 18, yAsp - 17);
}
t15++;
if (t15 < 420) anim15Id = requestAnimationFrame(fr15);
}
x_ice = 30; x_asp = 30; v_ice = 3.2; v_asp = 3.2; t15 = 0; fr15();
}
// ══════════════════════════════════════════════
// §16 — ПЛАНЕТНАЯ СЕТКА
// ══════════════════════════════════════════════
function initPlanetGrid16() {
var grid = document.getElementById('planetGrid16');
if (!grid) return;
var planets = [
{ name: 'Земля', icon: '🌍', g: 9.8, color: '#3b82f6' },
{ name: 'Луна', icon: '🌕', g: 1.6, color: '#94a3b8' },
{ name: 'Марс', icon: '🔴', g: 3.7, color: '#ef4444' },
{ name: 'Юпитер', icon: '🪐', g: 25.0, color: '#f59e0b' },
{ name: 'Венера', icon: '💫', g: 8.9, color: '#fbbf24' }
];
var m = 60;
var html = '';
for (var i = 0; i < planets.length; i++) {
var p = planets[i];
var F = (m * p.g).toFixed(0);
var pct = Math.min(100, (p.g / 25 * 100)).toFixed(0);
html += '<div style="background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:10px 8px;text-align:center">' +
'<div style="font-size:1.5rem;margin-bottom:4px">' + p.icon + '</div>' +
'<div style="font-weight:800;font-size:.82rem">' + p.name + '</div>' +
'<div style="font-size:.74rem;color:var(--muted);margin:2px 0">g = ' + p.g + ' м/с²</div>' +
'<div style="font-weight:700;font-size:.95rem;color:' + p.color + '">' + F + ' Н</div>' +
'<div style="margin-top:5px;height:5px;background:var(--border);border-radius:3px;overflow:hidden">' +
'<div style="height:100%;width:' + pct + '%;background:' + p.color + ';border-radius:3px"></div></div>' +
'</div>';
}
grid.innerHTML = html;
}
// ══════════════════════════════════════════════
// §17 — АНИМАЦИЯ F=ma
// ══════════════════════════════════════════════
var anim17Id = null;
function startAnim17() {
var cv = document.getElementById('cv17');
if (!cv || cv.offsetWidth === 0) return;
if (anim17Id) { cancelAnimationFrame(anim17Id); anim17Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 120;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var F17 = +document.getElementById('sl17f').value;
var m17 = +document.getElementById('sl17m').value;
var a17 = F17 / m17;
var x17 = 20, v17 = 0, t17 = 0;
function fr17() {
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
// Ground
ctx.fillStyle = dk ? '#334155' : '#e2e8f0';
ctx.fillRect(0, H * 0.72, W, H - H * 0.72);
ctx.strokeStyle = dk ? '#64748b' : '#94a3b8'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(0, H * 0.72); ctx.lineTo(W, H * 0.72); ctx.stroke();
var bW = 42, bH = 30, by = H * 0.72 - bH;
// Block
ctx.fillStyle = '#6366f1';
ctx.fillRect(x17, by, bW, bH);
ctx.strokeStyle = '#4338ca'; ctx.lineWidth = 2; ctx.stroke();
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter'; ctx.textAlign = 'center';
ctx.fillText(m17 + ' кг', x17 + bW / 2, by + bH / 2 + 4); ctx.textAlign = 'left';
// Force arrow
var aLen = Math.min(55, F17 * 1.1);
ctx.beginPath(); ctx.moveTo(x17 + bW, by + bH / 2); ctx.lineTo(x17 + bW + aLen, by + bH / 2);
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 3; ctx.stroke();
ctx.beginPath(); var ax = x17 + bW + aLen;
ctx.moveTo(ax, by+bH/2); ctx.lineTo(ax-11,by+bH/2-5); ctx.lineTo(ax-11,by+bH/2+5);
ctx.fillStyle = '#ef4444'; ctx.fill();
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#ef4444';
ctx.fillText('F=' + F17 + 'Н', x17 + bW + 2, by - 4);
// Velocity
if (v17 > 0.5) {
ctx.font = 'bold 9px Inter'; ctx.fillStyle = dk ? '#818cf8' : '#4338ca';
ctx.fillText('v = ' + v17.toFixed(1) + ' м/с →', x17, by - 16);
}
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#10b981';
ctx.fillText('a = ' + a17.toFixed(1) + ' м/с²', 6, 14);
// Physics
v17 += a17 * 0.06; x17 += v17 * 0.7; t17++;
if (x17 < W - 70 && t17 < 280) {
anim17Id = requestAnimationFrame(fr17);
} else {
ctx.font = 'bold 12px Inter'; ctx.fillStyle = '#10b981'; ctx.textAlign = 'center';
ctx.fillText('🏁 v = ' + v17.toFixed(0) + ' м/с | a = ' + a17.toFixed(1) + ' м/с²', W/2, H/2 - 5);
ctx.font = '10px Inter'; ctx.fillStyle = dk?'#94a3b8':'#64748b';
ctx.fillText('Поменяй ползунки и нажми «Запустить снова»', W/2, H/2 + 12);
ctx.textAlign = 'left';
}
}
x17 = 20; v17 = 0; t17 = 0; fr17();
}
// ══════════════════════════════════════════════
// §18 — АНИМАЦИЯ ОТДАЧИ (3-й закон)
// ══════════════════════════════════════════════
var anim18Id = null;
function startAnim18() {
var cv = document.getElementById('cv18');
if (!cv || cv.offsetWidth === 0) return;
if (anim18Id) { cancelAnimationFrame(anim18Id); anim18Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 120;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var cx18 = W / 2;
var x1 = cx18 - 18, x2 = cx18 + 18; // inner edges
var v1 = 0, v2 = 0, phase18 = 0, pt18 = 0, t18 = 0;
var m18a = 3, m18b = 9; // masses
function fr18() {
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
// Ground
ctx.fillStyle = dk ? '#334155' : '#e2e8f0'; ctx.fillRect(0, H * 0.75, W, H * 0.25);
ctx.strokeStyle = dk ? '#64748b' : '#94a3b8'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(0, H * 0.75); ctx.lineTo(W, H * 0.75); ctx.stroke();
var bH = 34, y = H * 0.75 - bH;
if (phase18 === 0) {
// Static with spring
ctx.fillStyle = '#6366f1'; ctx.fillRect(x1 - 34, y, 34, bH);
ctx.fillStyle = '#f97316'; ctx.fillRect(x2, y, 44, bH);
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter'; ctx.textAlign = 'center';
ctx.fillText(m18a + ' кг', x1 - 17, y + bH/2 + 4);
ctx.fillText(m18b + ' кг', x2 + 22, y + bH/2 + 4); ctx.textAlign = 'left';
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2; ctx.beginPath();
for (var ss = x1; ss < x2; ss += 4) {
ctx.lineTo(ss, y + (ss % 8 < 4 ? bH * 0.25 : bH * 0.75));
}
ctx.stroke();
ctx.font = 'bold 10px Inter'; ctx.fillStyle = dk ? '#e2e8f0' : '#1e293b';
ctx.textAlign = 'center'; ctx.fillText('Сжатая пружина — сейчас разожмётся!', W/2, 16); ctx.textAlign = 'left';
pt18++;
if (pt18 > 55) { phase18 = 1; pt18 = 0; }
} else {
// Flying
var a1 = 40 / m18a, a2 = 40 / m18b;
if (phase18 === 1 && pt18 < 18) {
v1 -= a1 * 0.06; v2 += a2 * 0.06;
pt18++;
if (pt18 >= 18) phase18 = 2;
}
x1 += v1; x2 += v2;
ctx.fillStyle = '#6366f1'; ctx.fillRect(x1 - 34, y, 34, bH);
ctx.fillStyle = '#f97316'; ctx.fillRect(x2, y, 44, bH);
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter'; ctx.textAlign = 'center';
ctx.fillText(m18a + ' кг', x1 - 17, y + bH/2 + 4);
ctx.fillText(m18b + ' кг', x2 + 22, y + bH/2 + 4); ctx.textAlign = 'left';
ctx.font = 'bold 9px Inter';
ctx.fillStyle = '#818cf8';
ctx.fillText('← v₁=' + Math.abs(v1).toFixed(1), x1 - 60, y - 5);
ctx.fillStyle = '#fb923c';
ctx.fillText('v₂=' + v2.toFixed(1) + ' →', x2 + 50, y - 5);
ctx.font = '9px Inter'; ctx.fillStyle = dk ? '#94a3b8' : '#64748b';
ctx.textAlign = 'center';
ctx.fillText('F₁₂ = F₂₁, но m₁ < m₂ → |v₁| > |v₂|', W/2, H - 6);
ctx.textAlign = 'left';
}
t18++;
if (x1 > -70 && x2 < W + 50 && t18 < 380) anim18Id = requestAnimationFrame(fr18);
}
cx18 = W/2; x1 = cx18-18; x2 = cx18+18; v1 = 0; v2 = 0; phase18 = 0; pt18 = 0; t18 = 0; fr18();
}
// ══════════════════════════════════════════════
// §19 — ПРУЖИНА (рисуется при движении слайдеров)
// ══════════════════════════════════════════════
function drawSpring19() {
var cv = document.getElementById('cv19');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 160;
if (cv.width !== Math.round(W * dpr) || cv.height !== Math.round(H * dpr)) {
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
}
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
var k = +document.getElementById('sl19k').value;
var xcm = +document.getElementById('sl19x').value;
var xm = xcm / 100;
var F = k * xm;
// Wall
ctx.fillStyle = dk ? '#334155' : '#cbd5e1'; ctx.fillRect(4, 18, 14, H - 28);
ctx.strokeStyle = dk ? '#475569' : '#94a3b8'; ctx.lineWidth = 1;
for (var hy = 22; hy < H - 18; hy += 12) {
ctx.beginPath(); ctx.moveTo(4, hy); ctx.lineTo(17, hy + 7); ctx.stroke();
}
// Spring coils
var sx0 = 18, sx1 = 18 + 80 + xcm * 1.4;
var sy = H / 2, coils = 8;
var cW = (sx1 - sx0) / coils, cH = 17;
var springCol = xcm > 30 ? '#ef4444' : xcm > 12 ? '#f59e0b' : '#10b981';
ctx.beginPath(); ctx.moveTo(sx0, sy);
for (var ci = 0; ci < coils; ci++) {
var px = sx0 + ci * cW;
ctx.lineTo(px + cW * 0.25, sy - cH);
ctx.lineTo(px + cW * 0.75, sy + cH);
ctx.lineTo(px + cW, sy);
}
ctx.strokeStyle = springCol; ctx.lineWidth = 2.5; ctx.stroke();
// Block
var bX = sx1, bW = 38, bH = 38;
ctx.fillStyle = '#6366f1'; ctx.fillRect(bX, sy - bH/2, bW, bH);
ctx.strokeStyle = '#4338ca'; ctx.lineWidth = 2; ctx.stroke();
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter'; ctx.textAlign = 'center';
ctx.fillText('груз', bX + bW/2, sy + 2);
ctx.fillText(xcm + ' см', bX + bW/2, sy + 13); ctx.textAlign = 'left';
// F arrow (back toward wall)
var arLen = Math.min(65, F * 0.55);
if (arLen > 4) {
ctx.beginPath(); ctx.moveTo(bX, sy); ctx.lineTo(bX - arLen, sy);
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2.5; ctx.stroke();
ctx.beginPath();
ctx.moveTo(bX - arLen, sy); ctx.lineTo(bX - arLen + 11, sy - 5); ctx.lineTo(bX - arLen + 11, sy + 5);
ctx.fillStyle = '#ef4444'; ctx.fill();
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#ef4444';
ctx.fillText('F = ' + F.toFixed(1) + ' Н', bX - arLen - 2, sy + 15);
}
ctx.font = '9px Inter'; ctx.fillStyle = dk ? '#94a3b8' : '#64748b';
ctx.fillText('∆l = ' + xcm + ' см', sx0 + 2, sy - cH - 5);
ctx.fillText('k = ' + k + ' Н/м', sx0 + 2, 14);
}
// ══════════════════════════════════════════════
// §20 — ДИАГРАММА СИЛ ТРЕНИЯ
// ══════════════════════════════════════════════
function drawFriction20() {
var cv = document.getElementById('cv20');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 150;
if (cv.width !== Math.round(W * dpr) || cv.height !== Math.round(H * dpr)) {
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
}
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#f0f9ff'; ctx.fillRect(0, 0, W, H);
var muInt = +document.getElementById('sl20mu').value;
var m20 = +document.getElementById('sl20m').value;
var mu = muInt / 100, N20 = m20 * 10, Ftr = mu * N20;
// Ground
ctx.fillStyle = dk ? '#334155' : '#e2e8f0'; ctx.fillRect(0, H * 0.73, W, H * 0.27);
ctx.strokeStyle = dk ? '#64748b' : '#94a3b8'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(0, H * 0.73); ctx.lineTo(W, H * 0.73); ctx.stroke();
ctx.strokeStyle = dk ? '#475569' : '#b0b0b0'; ctx.lineWidth = 1;
for (var tx = 18; tx < W; tx += 22) {
ctx.beginPath(); ctx.moveTo(tx, H * 0.73); ctx.lineTo(tx - 9, H * 0.73 + 11); ctx.stroke();
}
var bW = 58, bH = 38, cx20 = W / 2;
var bx20 = cx20 - bW/2, by20 = H * 0.73 - bH;
ctx.fillStyle = '#6366f1'; ctx.fillRect(bx20, by20, bW, bH);
ctx.strokeStyle = '#4338ca'; ctx.lineWidth = 2; ctx.stroke();
ctx.fillStyle = '#fff'; ctx.font = 'bold 9px Inter'; ctx.textAlign = 'center';
ctx.fillText(m20 + ' кг', cx20, by20 + bH/2 + 4); ctx.textAlign = 'left';
function arr(x1, y1, x2, y2, col, lbl, side) {
var dx = x2-x1, dy = y2-y1, len = Math.sqrt(dx*dx+dy*dy);
if (len < 4) return;
var ux = dx/len, uy = dy/len;
ctx.beginPath(); ctx.moveTo(x1,y1); ctx.lineTo(x2,y2);
ctx.strokeStyle = col; ctx.lineWidth = 2.5; ctx.stroke();
var hw = 5;
ctx.beginPath(); ctx.moveTo(x2,y2);
ctx.lineTo(x2-ux*11-uy*hw, y2-uy*11+ux*hw);
ctx.lineTo(x2-ux*11+uy*hw, y2-uy*11-ux*hw);
ctx.fillStyle = col; ctx.fill();
ctx.font = 'bold 9px Inter'; ctx.fillStyle = col;
if (side==='r') ctx.fillText(lbl, x2+4, y2+4);
else if (side==='l') { ctx.textAlign='right'; ctx.fillText(lbl, x2-4, y2+4); ctx.textAlign='left'; }
else if (side==='t') { ctx.textAlign='center'; ctx.fillText(lbl,(x1+x2)/2,Math.min(y1,y2)-4); ctx.textAlign='left'; }
else if (side==='b') { ctx.textAlign='center'; ctx.fillText(lbl,(x1+x2)/2,Math.max(y1,y2)+12); ctx.textAlign='left'; }
}
var midX20 = cx20, midY20 = by20 + bH/2;
var sc = 0.45;
var mgLen = Math.min(52, N20 * sc);
arr(midX20, by20+bH, midX20, by20+bH+mgLen, '#ef4444', 'mg='+N20+'Н', 'r');
arr(midX20, by20, midX20, by20-mgLen, '#10b981', 'N='+N20+'Н', 'r');
var fLen = Math.max(8, Math.min(60, Ftr * sc));
arr(cx20+bW/2, midY20, cx20+bW/2+fLen, midY20, '#3b82f6', 'F тяги', 'r');
if (Ftr > 0) arr(cx20-bW/2, midY20, cx20-bW/2-fLen, midY20, '#f59e0b', 'Fтр='+Ftr.toFixed(0)+'Н', 'l');
ctx.font = 'bold 10px Inter'; ctx.fillStyle = dk ? '#e2e8f0' : '#1e293b';
ctx.fillText('μ = ' + mu.toFixed(2), 7, 14);
}
// ══════════════════════════════════════════════
// §21 — АНИМАЦИЯ ГОРИЗОНТАЛЬНОГО БРОСКА
// ══════════════════════════════════════════════
var anim21Id = null;
function startAnim21() {
var cv = document.getElementById('cv21');
if (!cv || cv.offsetWidth === 0) return;
if (anim21Id) { cancelAnimationFrame(anim21Id); anim21Id = null; }
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 220;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var h21 = +document.getElementById('sl21h').value;
var g21 = 10, v0_21 = 18;
var tTotal = Math.sqrt(2 * h21 / g21);
var frames21 = 110, t21 = 0;
var margin21 = 22;
var groundY21 = H - margin21;
var scaleY21 = (groundY21 - margin21) / h21;
var startX21 = 28;
var scaleX21 = (W - startX21 - 22) / (v0_21 * tTotal);
var trail21 = [], landed21 = false;
function fr21() {
ctx.clearRect(0, 0, W, H);
var dk = document.body.classList.contains('dark');
ctx.fillStyle = dk ? '#1e293b' : '#e0f2fe'; ctx.fillRect(0, 0, W, groundY21);
// Ground
ctx.fillStyle = dk ? '#14532d' : '#bbf7d0'; ctx.fillRect(0, groundY21, W, H - groundY21);
ctx.strokeStyle = dk ? '#166534' : '#16a34a'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(0, groundY21); ctx.lineTo(W, groundY21); ctx.stroke();
// Height dashed line
ctx.setLineDash([4, 4]); ctx.strokeStyle = dk ? '#475569' : '#94a3b8'; ctx.lineWidth = 1;
ctx.beginPath(); ctx.moveTo(startX21 - 4, margin21); ctx.lineTo(startX21 - 4, groundY21); ctx.stroke();
ctx.setLineDash([]);
ctx.font = '9px Inter'; ctx.fillStyle = dk ? '#94a3b8' : '#64748b'; ctx.textAlign = 'center';
ctx.fillText('h=' + h21 + 'м', startX21 - 14, (margin21 + groundY21) / 2); ctx.textAlign = 'left';
var frac21 = t21 / frames21;
var simT21 = frac21 * tTotal;
var fallY_m = 0.5 * g21 * simT21 * simT21;
var fallY_px = margin21 + fallY_m * scaleY21;
if (fallY_px > groundY21) fallY_px = groundY21;
var thrX_px = startX21 + v0_21 * simT21 * scaleX21;
var thrY_px = margin21 + fallY_m * scaleY21;
if (thrY_px > groundY21) thrY_px = groundY21;
if (thrX_px > W - 12) thrX_px = W - 12;
if (t21 % 2 === 0 && thrY_px < groundY21) trail21.push({ x: thrX_px, y: thrY_px });
// Parabola trail
if (trail21.length > 1) {
ctx.beginPath(); ctx.moveTo(trail21[0].x, trail21[0].y);
for (var ti = 1; ti < trail21.length; ti++) ctx.lineTo(trail21[ti].x, trail21[ti].y);
ctx.strokeStyle = 'rgba(56,189,248,0.55)'; ctx.lineWidth = 2; ctx.setLineDash([3,2]); ctx.stroke(); ctx.setLineDash([]);
}
// Drop ball (orange)
ctx.beginPath(); ctx.arc(startX21, fallY_px, 11, 0, Math.PI * 2);
ctx.fillStyle = '#fb923c'; ctx.fill(); ctx.strokeStyle = '#ea580c'; ctx.lineWidth = 2; ctx.stroke();
// Thrown ball (blue)
ctx.beginPath(); ctx.arc(thrX_px, thrY_px, 11, 0, Math.PI * 2);
ctx.fillStyle = '#38bdf8'; ctx.fill(); ctx.strokeStyle = '#0284c7'; ctx.lineWidth = 2; ctx.stroke();
// Labels (first frame only)
if (t21 < 4) {
ctx.font = 'bold 9px Inter'; ctx.fillStyle = '#ea580c';
ctx.fillText('🟠 падение', startX21 + 14, fallY_px);
ctx.fillStyle = '#0284c7';
ctx.fillText('🔵 бросок →', thrX_px + 14, thrY_px - 4);
}
// Velocity components on thrown ball
if (thrY_px < groundY21 - 8 && t21 > 3) {
var vxL = Math.min(22, v0_21 * scaleX21 * 0.3);
var vyL = Math.min(22, g21 * simT21 * scaleY21 * 0.3);
ctx.beginPath(); ctx.moveTo(thrX_px+12, thrY_px); ctx.lineTo(thrX_px+12+vxL, thrY_px);
ctx.strokeStyle = '#0284c7'; ctx.lineWidth = 1.5; ctx.stroke();
ctx.beginPath(); ctx.moveTo(thrX_px, thrY_px+12); ctx.lineTo(thrX_px, thrY_px+12+vyL);
ctx.strokeStyle = '#7c3aed'; ctx.lineWidth = 1.5; ctx.stroke();
}
if (frac21 >= 1.0) landed21 = true;
if (landed21) {
ctx.fillStyle = '#10b981'; ctx.font = 'bold 13px Inter'; ctx.textAlign = 'center';
ctx.fillText('🎯 Упали ОДНОВРЕМЕННО! t = ' + tTotal.toFixed(1) + ' с', W/2, groundY21 - 16);
ctx.font = '10px Inter'; ctx.fillStyle = dk ? '#94a3b8' : '#475569';
ctx.fillText('Горизонтальная скорость не влияет на время падения!', W/2, groundY21 - 3);
ctx.textAlign = 'left';
} else {
ctx.font = '9px Inter'; ctx.fillStyle = dk ? '#94a3b8' : '#475569';
ctx.fillText('t = ' + simT21.toFixed(2) + ' с', W - 68, 13);
}
t21++;
if (t21 <= frames21 + 50) anim21Id = requestAnimationFrame(fr21);
}
trail21 = []; landed21 = false; t21 = 0; fr21();
}
// ══════════════════════════════════════════════
// §28 — ВИДЫ РАВНОВЕСИЯ: ИНТЕРАКТИВ
// ══════════════════════════════════════════════
function upd28() {
var typeIdx = +document.getElementById('sl28type').value;
var ang = +document.getElementById('sl28angle').value;
var types = ['Устойчивое', 'Неустойчивое', 'Безразличное'];
document.getElementById('v28type').textContent = types[typeIdx];
document.getElementById('v28angle').textContent = ang + '°';
var msg = typeIdx === 0 ? 'Устойчивое: тело вернётся в исходное положение!'
: typeIdx === 1 ? (Math.abs(ang) > 5 ? '⚠️ Неустойчивое: тело УПАДЁТ!' : 'Неустойчивое: малейшее отклонение — и тело упадёт')
: 'Безразличное: тело останется в новом положении';
var el = document.getElementById('res28');
if (el) el.textContent = msg;
drawEquilibrium28(typeIdx, ang);
}
function drawEquilibrium28(typeIdx, ang) {
var cv = document.getElementById('cv28');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 220;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var dark = document.body.classList.contains('dark');
ctx.clearRect(0, 0, W, H);
var rad = ang * Math.PI / 180;
// Ground
ctx.strokeStyle = dark ? '#334155' : '#cbd5e1'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(20, H - 30); ctx.lineTo(W - 20, H - 30); ctx.stroke();
// Draw depending on type
if (typeIdx === 0) {
// Stable: pendulum from top pivot, CG below
var px = W / 2, pivY = 60, rodLen = 100;
var bx = px + rodLen * Math.sin(rad), by = pivY + rodLen * Math.cos(rad);
ctx.strokeStyle = dark ? '#475569' : '#94a3b8'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(px, pivY); ctx.lineTo(bx, by); ctx.stroke();
ctx.beginPath(); ctx.arc(px, pivY, 6, 0, Math.PI * 2);
ctx.fillStyle = dark ? '#64748b' : '#94a3b8'; ctx.fill();
ctx.beginPath(); ctx.arc(bx, by, 18, 0, Math.PI * 2);
ctx.fillStyle = '#1d4ed8'; ctx.fill();
ctx.fillStyle = '#fff'; ctx.font = 'bold 10px Inter'; ctx.textAlign = 'center';
ctx.fillText('ЦТ', bx, by + 4);
// Restore arrow
if (Math.abs(ang) > 5) {
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.arc(px, pivY, rodLen + 15, Math.PI/2, Math.PI/2 - rad * 0.5, rad > 0);
ctx.stroke();
}
ctx.fillStyle = dark ? '#94a3b8' : '#64748b'; ctx.font = '12px Inter'; ctx.textAlign = 'center';
ctx.fillText('Устойчивое: ЦТ ниже опоры', W / 2, H - 5);
} else if (typeIdx === 1) {
// Unstable: inverted pendulum, CG above
var px2 = W / 2, pivY2 = H - 80, rodLen2 = 100;
var bx2 = px2 + rodLen2 * Math.sin(rad), by2 = pivY2 - rodLen2 * Math.cos(rad);
ctx.strokeStyle = dark ? '#475569' : '#94a3b8'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(px2, pivY2); ctx.lineTo(bx2, by2); ctx.stroke();
ctx.beginPath(); ctx.arc(px2, pivY2, 6, 0, Math.PI * 2);
ctx.fillStyle = dark ? '#64748b' : '#94a3b8'; ctx.fill();
ctx.beginPath(); ctx.arc(bx2, by2, 18, 0, Math.PI * 2);
var falling = Math.abs(ang) > 5;
ctx.fillStyle = falling ? '#ef4444' : '#f97316'; ctx.fill();
ctx.fillStyle = '#fff'; ctx.font = 'bold 10px Inter'; ctx.textAlign = 'center';
ctx.fillText('ЦТ', bx2, by2 + 4);
ctx.fillStyle = dark ? '#94a3b8' : '#64748b'; ctx.font = '12px Inter';
ctx.fillText('Неустойчивое: ЦТ выше опоры', W / 2, H - 5);
} else {
// Neutral: ball on flat surface
var ballX = W / 2 + ang * 3, ballY = H - 30 - 22;
ctx.beginPath(); ctx.arc(ballX, ballY, 22, 0, Math.PI * 2);
ctx.fillStyle = '#0ea5e9'; ctx.fill();
ctx.fillStyle = '#fff'; ctx.font = 'bold 10px Inter'; ctx.textAlign = 'center';
ctx.fillText('ЦТ', ballX, ballY + 4);
ctx.fillStyle = dark ? '#94a3b8' : '#64748b'; ctx.font = '12px Inter';
ctx.fillText('Безразличное: ЦТ = ось вращения', W / 2, H - 5);
}
ctx.textAlign = 'left';
}
// ══════════════════════════════════════════════
// §29 — АРХИМЕДОВА СИЛА: ИНТЕРАКТИВ
// ══════════════════════════════════════════════
function upd29() {
var rhoT = +document.getElementById('sl29rho').value;
var Vdm = +document.getElementById('sl29v').value;
document.getElementById('v29rho').textContent = rhoT + ' кг/м³';
document.getElementById('v29v').textContent = Vdm + ' дм³';
var rhoW = 1000, g = 10;
var V = Vdm * 1e-3; // m^3
var Fout = rhoT * g * V;
var Farch = rhoW * g * V;
var el = document.getElementById('res29');
if (el) {
var status = rhoT < rhoW ? '⬆️ ПЛАВАЕТ' : (rhoT > rhoW ? '⬇️ ТОНЕТ' : '⇔ нейтральная плавучесть');
el.textContent = 'F_выт = ' + Farch.toFixed(1) + ' Н | F_т = ' + Fout.toFixed(1) + ' Н — ' + status;
}
drawArchimedes29(rhoT, V, Fout, Farch);
}
function drawArchimedes29(rhoT, V, Ft, Farch) {
var cv = document.getElementById('cv29');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 200;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var dark = document.body.classList.contains('dark');
ctx.clearRect(0, 0, W, H);
var rhoW = 1000;
// Water fill
var waterY = H * 0.45;
ctx.fillStyle = dark ? 'rgba(30,100,180,0.25)' : 'rgba(186,230,253,0.6)';
ctx.fillRect(30, waterY, W - 60, H - waterY - 20);
ctx.strokeStyle = dark ? '#0369a1' : '#0ea5e9'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(30, waterY); ctx.lineTo(W - 30, waterY); ctx.stroke();
ctx.fillStyle = dark ? '#38bdf8' : '#0284c7'; ctx.font = '11px Inter'; ctx.textAlign = 'left';
ctx.fillText('вода ρ = 1000 кг/м³', 36, waterY - 5);
// Block
var cx = W / 2;
var blockSize = 40;
var subFrac = Math.min(1, rhoT / rhoW);
var subH = blockSize * subFrac;
var aboveH = blockSize - subH;
var blockTopY = waterY - aboveH;
var blockY = blockTopY;
ctx.fillStyle = rhoT < rhoW ? '#1d4ed8' : (rhoT > rhoW ? '#ef4444' : '#10b981');
ctx.fillRect(cx - blockSize / 2, blockY, blockSize, blockSize);
ctx.strokeStyle = '#fff'; ctx.lineWidth = 1;
ctx.strokeRect(cx - blockSize / 2, blockY, blockSize, blockSize);
ctx.fillStyle = '#fff'; ctx.font = 'bold 10px Inter'; ctx.textAlign = 'center';
ctx.fillText(rhoT, cx, blockY + blockSize / 2 + 4);
// Archimedes arrow (up, green)
var sc = Math.max(10, Math.min(60, Farch / 10));
ctx.strokeStyle = '#10b981'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(cx + 35, blockY + blockSize); ctx.lineTo(cx + 35, blockY + blockSize - sc); ctx.stroke();
ctx.beginPath(); ctx.moveTo(cx + 32, blockY + blockSize - sc + 6); ctx.lineTo(cx + 35, blockY + blockSize - sc - 4); ctx.lineTo(cx + 38, blockY + blockSize - sc + 6);
ctx.fillStyle = '#10b981'; ctx.fill();
ctx.font = '10px Inter'; ctx.textAlign = 'left';
ctx.fillText('F_выт=' + Farch.toFixed(0) + 'Н', cx + 40, blockY + blockSize - sc / 2 + 4);
// Weight arrow (down, red)
var scFt = Math.max(10, Math.min(60, Ft / 10));
ctx.strokeStyle = '#ef4444'; ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(cx - 35, blockY); ctx.lineTo(cx - 35, blockY + scFt); ctx.stroke();
ctx.beginPath(); ctx.moveTo(cx - 38, blockY + scFt - 6); ctx.lineTo(cx - 35, blockY + scFt + 4); ctx.lineTo(cx - 32, blockY + scFt - 6);
ctx.fillStyle = '#ef4444'; ctx.fill();
ctx.font = '10px Inter'; ctx.textAlign = 'right';
ctx.fillText('F_т=' + Ft.toFixed(0) + 'Н', cx - 40, blockY + scFt / 2 + 4);
ctx.textAlign = 'left';
}
// ══════════════════════════════════════════════
// §30 — КОРАБЛЬ С ГРУЗОМ: ИНТЕРАКТИВ
// ══════════════════════════════════════════════
function upd30() {
var ms = +document.getElementById('sl30ms').value; // tons
var mg = +document.getElementById('sl30mg').value; // tons
var Vc = +document.getElementById('sl30v').value; // m^3
document.getElementById('v30ms').textContent = ms + ' т';
document.getElementById('v30mg').textContent = mg + ' т';
document.getElementById('v30v').textContent = Vc + ' м³';
var rhoW = 1000, g = 10;
var totalMass = (ms + mg) * 1000; // kg
var rhoAvg = totalMass / Vc;
var Vpogr = totalMass / rhoW; // m^3 submerged (for floating)
var el = document.getElementById('res30');
if (el) {
var status = rhoAvg < rhoW ? ('⚓ Плавает | осадка ≈ ' + (Vpogr / Vc * 100).toFixed(0) + '% корпуса') : '⚠️ ТОНЕТ! Перегружен!';
el.textContent = 'ρ_ср = ' + rhoAvg.toFixed(0) + ' кг/м³ — ' + status;
}
drawShip30(ms, mg, Vc, rhoAvg);
}
function drawShip30(ms, mg, Vc, rhoAvg) {
var cv = document.getElementById('cv30');
if (!cv || cv.offsetWidth === 0) return;
var dpr = window.devicePixelRatio || 1;
var W = cv.offsetWidth, H = cv.offsetHeight || 200;
cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr);
var ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
var dark = document.body.classList.contains('dark');
ctx.clearRect(0, 0, W, H);
var rhoW = 1000;
var sinking = rhoAvg >= rhoW;
// Water
var waterY = H * 0.5;
ctx.fillStyle = dark ? 'rgba(30,100,180,0.3)' : 'rgba(186,230,253,0.7)';
ctx.fillRect(0, waterY, W, H - waterY);
ctx.strokeStyle = dark ? '#0369a1' : '#0ea5e9'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(0, waterY); ctx.lineTo(W, waterY); ctx.stroke();
// Ship hull
var subFrac = sinking ? 1.0 : Math.min(0.95, rhoAvg / rhoW);
var shipH = 60, shipW = 160;
var cx = W / 2;
var shipTop = waterY - shipH * (1 - subFrac);
ctx.beginPath();
ctx.moveTo(cx - shipW / 2, shipTop);
ctx.lineTo(cx + shipW / 2, shipTop);
ctx.lineTo(cx + shipW / 2 - 10, shipTop + shipH);
ctx.lineTo(cx - shipW / 2 + 10, shipTop + shipH);
ctx.closePath();
ctx.fillStyle = sinking ? '#ef4444' : (dark ? '#334155' : '#94a3b8'); ctx.fill();
ctx.strokeStyle = sinking ? '#b91c1c' : (dark ? '#475569' : '#64748b'); ctx.lineWidth = 2; ctx.stroke();
// Cabin/superstructure (only if not sinking)
if (!sinking) {
ctx.fillStyle = dark ? '#1e293b' : '#e2e8f0';
ctx.fillRect(cx - 30, shipTop - 28, 60, 28);
ctx.strokeStyle = dark ? '#475569' : '#94a3b8'; ctx.lineWidth = 1.5;
ctx.strokeRect(cx - 30, shipTop - 28, 60, 28);
}
// Waterline label
ctx.fillStyle = dark ? '#38bdf8' : '#0284c7'; ctx.font = '11px Inter'; ctx.textAlign = 'right';
ctx.fillText('ватерлиния', W - 35, waterY - 4);
// Status
ctx.fillStyle = sinking ? '#ef4444' : '#065f46'; ctx.font = 'bold 13px Inter'; ctx.textAlign = 'center';
ctx.fillText(sinking ? '⚠️ ТОНЕТ! ρ_ср = ' + rhoAvg.toFixed(0) + ' > 1000' : '⚓ ρ_ср = ' + rhoAvg.toFixed(0) + ' кг/м³', cx, H - 5);
// Waves
ctx.strokeStyle = dark ? 'rgba(56,189,248,0.3)' : 'rgba(14,165,233,0.3)'; ctx.lineWidth = 1.5;
for (var wx = 20; wx < W - 20; wx += 40) {
ctx.beginPath(); ctx.arc(wx, waterY, 10, Math.PI, 0); ctx.stroke();
}
ctx.textAlign = 'left';
}
// §31 — p = mv
function upd31() {
const m = +document.getElementById('sl31m').value;
const v = +document.getElementById('sl31v').value;
document.getElementById('v31m').textContent = m + ' кг';
document.getElementById('v31v').textContent = v + ' м/с';
const p = m * v;
document.getElementById('res31').innerHTML =
'p = ' + m + ' × ' + v + ' = <b style="font-size:1.1em;color:var(--pri)">' + p + '</b> кг·м/с';
const w = Math.max(8, Math.min(374, (p / 600) * 374));
document.getElementById('bar31').setAttribute('width', w);
document.getElementById('barlbl31').textContent = p + ' кг·м/с';
}
// §33 — угол α и работа
function upd33() {
const a = +document.getElementById('sl33a').value;
document.getElementById('v33a').textContent = a + '°';
document.getElementById('aval33').textContent = a;
const rad = a * Math.PI / 180;
const cosA = Math.cos(rad);
document.getElementById('cosval33').textContent = cosA.toFixed(2);
// F vector: origin = body centre (80, 75), length 40
const ox = 80, oy = 75, len = 40;
const fx2 = ox + len * Math.cos(rad);
const fy2 = oy - len * Math.sin(rad); // SVG y is inverted
document.getElementById('fline33').setAttribute('x2', fx2.toFixed(1));
document.getElementById('fline33').setAttribute('y2', fy2.toFixed(1));
// arrowhead
const dx = fx2 - ox, dy = fy2 - oy;
const ll = Math.sqrt(dx * dx + dy * dy);
const ux = dx / ll, uy = dy / ll;
const bx = fx2 - ux * 12, by = fy2 - uy * 12;
const nx = -uy * 5, ny = ux * 5;
document.getElementById('farrow33').setAttribute('points',
fx2.toFixed(1) + ',' + fy2.toFixed(1) + ' ' +
(bx + nx).toFixed(1) + ',' + (by + ny).toFixed(1) + ' ' +
(bx - nx).toFixed(1) + ',' + (by - ny).toFixed(1));
document.getElementById('ftxt33').setAttribute('x', (fx2 + 4).toFixed(1));
document.getElementById('ftxt33').setAttribute('y', (fy2 - 3).toFixed(1));
// α label position
const mid = rad / 2;
document.getElementById('albl33').setAttribute('x', (ox + 22 * Math.cos(mid)).toFixed(1));
document.getElementById('albl33').setAttribute('y', (oy - 22 * Math.sin(mid) + 4).toFixed(1));
// color
const color = cosA > 0.02 ? '#10b981' : cosA > -0.02 ? '#f59e0b' : '#ef4444';
['fline33', 'farrow33', 'ftxt33'].forEach(id => {
const el = document.getElementById(id);
if (el) { el.setAttribute('stroke', color); el.setAttribute('fill', color); }
});
document.getElementById('fline33').setAttribute('stroke', color);
// work sign
let sign = '', cls = '', desc = '';
if (cosA > 0.02) { sign = 'A &gt; 0 — положительная'; cls = 'work-pos'; desc = 'Сила «помогает» движению'; }
else if (cosA > -0.02) { sign = 'A = 0 — равна нулю'; cls = 'work-zero'; desc = 'Сила ⊥ перемещению, работы нет'; }
else { sign = 'A &lt; 0 — отрицательная'; cls = 'work-neg'; desc = 'Сила «тормозит» движение'; }
document.getElementById('worksign33').innerHTML = '<span class="' + cls + '">' + sign + '</span>';
document.getElementById('workdesc33').textContent = desc;
}
// §34 — нулевой уровень
// 1 м = 22px. Реальный пол = 0 м → y=196. Земля (улица) = -1 м → y=218.
// Шар А реальная высота 2 м → cy=140 (фиксировано). Шар Б 5 м → cy=74.
function upd34zero() {
const z = +document.getElementById('sl34zero').value; // 06 м
const m = 2, g = 10;
// реальные высоты шаров
const hA_real = 2, hB_real = 5;
// высоты относительно нулевого уровня
const h1 = +(hA_real - z).toFixed(1);
const h2 = +(hB_real - z).toFixed(1);
const Ep1 = +(m * g * h1).toFixed(0);
const Ep2 = +(m * g * h2).toFixed(0);
const dEp = +(m * g * (hB_real - hA_real)).toFixed(0); // всегда 600
document.getElementById('h1val').textContent = h1;
document.getElementById('h2val').textContent = h2;
document.getElementById('ep1val').textContent = Ep1;
document.getElementById('ep2val').textContent = Ep2;
document.getElementById('depval').textContent = dEp;
document.getElementById('dep_note').textContent =
'= ' + m + ' × ' + g + ' × ' + (hB_real - hA_real) + ' = не меняется!';
// Метка слайдера
const names = {0:'пол (0 м)',1:'1 м над полом',2:'2 м (нижняя полка)',
3:'3 м',4:'4 м',5:'5 м (верхняя полка)',6:'6 м (потолок)'};
document.getElementById('v34zero').textContent = names[z] || z + ' м';
// Позиция зелёной линии в SVG: y = 196 - z*22
const zy = 196 - z * 22;
document.getElementById('zline34').setAttribute('y1', zy);
document.getElementById('zline34').setAttribute('y2', zy);
document.getElementById('zlbl34').setAttribute('y', zy - 4);
// Стрелки h₁: от zy до cy=140 (шар А)
const cyA = 140;
document.getElementById('za_line').setAttribute('y1', zy);
document.getElementById('za_line').setAttribute('y2', cyA);
// наконечники
if (zy > cyA) {
document.getElementById('za_arr1').setAttribute('points', `22,${cyA} 18,${cyA+11} 26,${cyA+11}`);
document.getElementById('za_arr2').setAttribute('points', `22,${zy} 18,${zy-11} 26,${zy-11}`);
} else {
document.getElementById('za_arr1').setAttribute('points', `22,${cyA} 18,${cyA-11} 26,${cyA-11}`);
document.getElementById('za_arr2').setAttribute('points', `22,${zy} 18,${zy+11} 26,${zy+11}`);
}
document.getElementById('za_lbl').setAttribute('y', ((zy + cyA) / 2 + 3).toFixed(0));
document.getElementById('za_lbl').setAttribute('fill', h1 < 0 ? '#ef4444' : '#1d4ed8');
document.getElementById('za_lbl').textContent = h1 >= 0 ? 'h₁' : 'h₁<0';
// Стрелки h₂: от zy до cy=74 (шар Б)
const cyB = 74;
document.getElementById('zb_line').setAttribute('y1', zy);
document.getElementById('zb_line').setAttribute('y2', cyB);
if (zy > cyB) {
document.getElementById('zb_arr1').setAttribute('points', `33,${cyB} 29,${cyB+11} 37,${cyB+11}`);
document.getElementById('zb_arr2').setAttribute('points', `33,${zy} 29,${zy-11} 37,${zy-11}`);
} else {
document.getElementById('zb_arr1').setAttribute('points', `33,${cyB} 29,${cyB-11} 37,${cyB-11}`);
document.getElementById('zb_arr2').setAttribute('points', `33,${zy} 29,${zy+11} 37,${zy+11}`);
}
document.getElementById('zb_lbl').setAttribute('y', ((zy + cyB) / 2 + 3).toFixed(0));
document.getElementById('zb_lbl').setAttribute('fill', h2 < 0 ? '#ef4444' : '#7c3aed');
document.getElementById('zb_lbl').textContent = h2 >= 0 ? 'h₂' : 'h₂<0';
// Цвет Eп₁ и Eп₂ — красный если отрицательная
document.getElementById('ep1val').style.color = Ep1 < 0 ? '#ef4444' : '#1d4ed8';
document.getElementById('ep2val').style.color = Ep2 < 0 ? '#ef4444' : '#7c3aed';
}
// §34 — Eп = mgh
function upd34() {
const m = +document.getElementById('sl34m').value;
const h = +document.getElementById('sl34h').value;
document.getElementById('v34m').textContent = m + ' кг';
document.getElementById('v34h').textContent = h + ' м';
const Ep = m * 10 * h;
document.getElementById('res34').innerHTML =
'Eп = ' + m + ' × 10 × ' + h + ' = <b style="font-size:1.1em;color:var(--pri)">' + Ep + '</b> Дж';
const maxEp = 4000;
const barH = Math.max(2, Math.min(96, (Ep / maxEp) * 96));
const barY = 101 - barH;
document.getElementById('liftbar34').setAttribute('height', barH);
document.getElementById('liftbar34').setAttribute('y', barY);
const ballY = Math.max(15, barY - 11);
document.getElementById('liftball34').setAttribute('cy', ballY);
const txt = document.getElementById('liftballtxt');
if (txt) txt.setAttribute('y', ballY + 4);
}
// §35 — Eк = mv²/2
function upd35() {
const m = +document.getElementById('sl35m').value;
const v = +document.getElementById('sl35v').value;
document.getElementById('v35m').textContent = m + ' кг';
document.getElementById('v35v').textContent = v + ' м/с';
const Ek = m * v * v / 2;
document.getElementById('res35').innerHTML =
'Eк = ' + m + ' × ' + v + '² / 2 = <b style="font-size:1.1em;color:var(--pri)">' + Ek + '</b> Дж';
const maxEk = 4500;
const w = Math.max(2, Math.min(100, (Ek / maxEk) * 100));
document.getElementById('bar35').style.width = w + '%';
}
// §36 — маятник анимация
let pend36Timer = null;
let pend36Angle = Math.PI / 4; // начальный угол (рад)
let pend36Phase = 0;
const PEND36_AMP = Math.PI / 4; // 45°
const PEND36_L = 151; // длина нити (px, от y=14 до cy=165)
function pend36Frame() {
pend36Phase += 0.04;
const angle = PEND36_AMP * Math.cos(pend36Phase);
const cx = 100 + PEND36_L * Math.sin(angle);
const cy = 14 + PEND36_L * Math.cos(angle);
const rope = document.getElementById('pend-rope');
const ball = document.getElementById('pend-ball');
const ekBar = document.getElementById('bar-ek36');
const epBar = document.getElementById('bar-ep36');
const pendEk = document.getElementById('pend-ek');
const pendEp = document.getElementById('pend-ep');
if (!rope || !ball) return;
rope.setAttribute('x2', cx.toFixed(1));
rope.setAttribute('y2', cy.toFixed(1));
ball.setAttribute('cx', cx.toFixed(1));
ball.setAttribute('cy', cy.toFixed(1));
// высота над нижней точкой (cy_bottom = 14 + PEND36_L = 165)
const h = 165 - cy;
// h_max = 165 - (14 + PEND36_L*(1-cos(AMP))) ≈ PEND36_L*(1-cos(AMP))
const h_max = PEND36_L * (1 - Math.cos(PEND36_AMP));
const epFrac = Math.max(0, Math.min(1, h / h_max));
const ekFrac = 1 - epFrac;
ekBar.style.width = (ekFrac * 100).toFixed(1) + '%';
epBar.style.width = (epFrac * 100).toFixed(1) + '%';
pendEk.textContent = 'Eк = ' + (ekFrac * 100).toFixed(0) + '%';
pendEp.textContent = 'Eп = ' + (epFrac * 100).toFixed(0) + '%';
// Velocity arrow at ball
const vline = document.getElementById('pend-vline');
const varr = document.getElementById('pend-varr');
if (vline && varr) {
const v = ekFrac;
const ex = cx - Math.sin(angle) * 30 * v;
const ey = cy + Math.cos(angle) * 30 * v;
const sign = Math.sin(pend36Phase) > 0 ? 1 : -1;
const vex = cx + (-Math.cos(angle)) * 25 * v * sign;
const vey = cy + (-Math.sin(angle)) * 25 * v * sign;
vline.setAttribute('x1', cx.toFixed(1)); vline.setAttribute('y1', cy.toFixed(1));
vline.setAttribute('x2', vex.toFixed(1)); vline.setAttribute('y2', vey.toFixed(1));
vline.setAttribute('stroke', ekFrac > 0.05 ? '#6d28d9' : 'transparent');
varr.setAttribute('fill', ekFrac > 0.05 ? '#6d28d9' : 'transparent');
// arrowhead
const dx = vex - cx, dy = vey - cy;
const ll = Math.sqrt(dx*dx+dy*dy) || 1;
const ux = dx/ll, uy = dy/ll;
const bx = vex - ux*9, by = vey - uy*9;
const nx = -uy*4, ny = ux*4;
varr.setAttribute('points',
vex.toFixed(1)+','+vey.toFixed(1)+' '+(bx+nx).toFixed(1)+','+(by+ny).toFixed(1)+' '+(bx-nx).toFixed(1)+','+(by-ny).toFixed(1));
}
// h-line
const hline = document.getElementById('pend-hline');
const hlbl = document.getElementById('pend-hlbl');
if (hline && h > 2) {
hline.setAttribute('x1', (cx+5).toFixed(1)); hline.setAttribute('y1', cy.toFixed(1));
hline.setAttribute('x2', (cx+5).toFixed(1)); hline.setAttribute('y2', '165');
hlbl.setAttribute('x', (cx+9).toFixed(1));
hlbl.setAttribute('y', ((cy+165)/2+4).toFixed(1));
hlbl.textContent = 'h';
} else if (hline) {
hline.setAttribute('x1','0'); hline.setAttribute('y1','0');
hline.setAttribute('x2','0'); hline.setAttribute('y2','0');
if (hlbl) hlbl.textContent = '';
}
}
function togglePend36() {
const btn = document.getElementById('pendBtn36');
if (pend36Timer) {
clearInterval(pend36Timer);
pend36Timer = null;
if (btn) btn.innerHTML = '<i class="fas fa-play"></i> Запустить';
} else {
pend36Timer = setInterval(pend36Frame, 30);
if (btn) btn.innerHTML = '<i class="fas fa-pause"></i> Стоп';
}
}
function nextTask(sec) {
const pool = POOLS[sec];
const s = STATE[sec];
let next = -1;
for (let i = s.idx + 1; i < pool.length; i++) {
if (s.results[i] === null) { next = i; break; }
}
if (next === -1) {
for (let i = 0; i < s.idx; i++) {
if (s.results[i] === null) { next = i; break; }
}
}
if (next === -1) { showSummary(sec); return; }
s.idx = next;
s.answered = false;
renderTask(sec);
}
function resetTasks(sec) {
STATE[sec] = mkState(POOLS[sec]);
document.getElementById('sum' + sec).classList.remove('show');
renderTask(sec);
}
function updateScoreBar(sec) {
const pool = POOLS[sec];
const s = STATE[sec];
const okCnt = s.results.filter(r => r === true).length;
const doneCnt = s.results.filter(r => r !== null).length;
document.getElementById('ok' + sec).textContent = okCnt;
document.getElementById('cur' + sec).textContent = doneCnt;
document.getElementById('max' + sec).textContent = pool.length;
document.getElementById('prog' + sec).style.width = (doneCnt / pool.length * 100) + '%';
}
function showSummary(sec) {
const pool = POOLS[sec];
const s = STATE[sec];
document.getElementById('prog' + sec).style.width = '100%';
document.getElementById('sum' + sec).classList.add('show');
const okCnt = s.results.filter(r => r === true).length;
document.getElementById('sumScore' + sec).textContent = `${okCnt} / ${pool.length}`;
const p = okCnt / pool.length;
document.getElementById('sumGrade' + sec).textContent =
p >= .9 ? '🏆 Отлично — тема освоена!' :
p >= .75 ? '⭐ Хорошо! Разбери пропущенные задачи.' :
p >= .5 ? '👍 Неплохо. Повтори формулы и попробуй ещё раз.' :
'📖 Прочитай теорию и реши снова.';
}
// ══════════════════════════════════════════════
// ЛАБ. РАБОТА №11 — Проверка ЗСИ
// ══════════════════════════════════════════════
const L11 = { rows: [], g: 9.81, H: 0.15 };
function l11ph() {
const m1 = +document.getElementById('l11m1').value / 1000;
const m2 = +document.getElementById('l11m2').value / 1000;
const h = +document.getElementById('l11h').value / 100;
const v0 = Math.sqrt(2 * L11.g * h);
const tF = Math.sqrt(2 * L11.H / L11.g);
const v1p = (m1 - m2) / (m1 + m2) * v0;
const v2p = 2 * m1 / (m1 + m2) * v0;
return { m1, m2, h, v0, v1p, v2p, tF,
l1: v0 * tF, l1p: v1p * tF, l2p: v2p * tF };
}
function updLab11() {
const p = l11ph();
document.getElementById('l11m1v').textContent = (+document.getElementById('l11m1').value);
document.getElementById('l11m2v').textContent = (+document.getElementById('l11m2').value);
document.getElementById('l11hv').textContent = (+document.getElementById('l11h').value);
document.getElementById('l11r1').textContent = p.l1.toFixed(3);
document.getElementById('l11r1p').textContent = Math.abs(p.l1p).toFixed(3);
document.getElementById('l11r2p').textContent = p.l2p.toFixed(3);
drawLab11();
}
function drawLab11() {
const cv = document.getElementById('cvLab11');
if (!cv) return;
// ── HiDPI: resize canvas to physical pixels ──────────────────
const dpr = window.devicePixelRatio || 1;
const cssW = cv.clientWidth || 540;
const cssH = 195; // logical CSS height (canvas keeps aspect via style)
if (cv.width !== Math.round(cssW * dpr) ||
cv.height !== Math.round(cssH * dpr)) {
cv.width = Math.round(cssW * dpr);
cv.height = Math.round(cssH * dpr);
cv.style.height = cssH + 'px';
}
const ctx = cv.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0); // draw in CSS-pixel space
const W = cssW, Hc = cssH;
const dark = document.body.classList.contains('dark');
const p = l11ph();
// ── Layout (CSS px) ───────────────────────────────────────────
const FVH = 52; // floor-to-table vertical px (= H = 0.15m)
const FY = Hc - 20; // floor baseline (room below for labels)
const TY = FY - FVH; // table surface
const EX_F = 0.27; // table-edge x as fraction of W
const EX = Math.round(W * EX_F);
const SV = FVH / L11.H; // px / m (vertical)
const BR = 8;
// ── Auto-scale SH so all marks stay within canvas ─────────────
const rDist = Math.max(p.l1, Math.max(0, p.l1p), p.l2p, 0.05);
const lDist = Math.max(0, -p.l1p);
const rightAvail = W - EX - 14;
const leftAvail = EX - 46; // 46 px reserved for h-label on left
const SH = Math.min(
rightAvail / rDist,
lDist > 0.001 ? leftAvail / lDist : Infinity
) * 0.96;
// ── Colours ───────────────────────────────────────────────────
const cFloor = dark ? '#334155' : '#e2e8f0';
const cTab = dark ? '#1e3a5f' : '#dbeafe';
const cStr = dark ? '#475569' : '#94a3b8';
const cTxt = dark ? '#94a3b8' : '#475569';
const cRamp = dark ? '#93c5fd' : '#3b82f6';
const cL1 = '#818cf8'; // reference (indigo, faint)
const cL1p = '#3b82f6'; // ball 1 after (blue)
const cL2p = '#f97316'; // ball 2 after (orange)
ctx.clearRect(0, 0, W, Hc);
// ── Floor fill ────────────────────────────────────────────────
ctx.fillStyle = cFloor;
ctx.fillRect(EX - 3, FY, W - EX + 3, Hc - FY);
ctx.fillStyle = dark ? '#64748b' : '#94a3b8';
ctx.fillRect(EX - 3, FY, W - EX + 3, 1.5);
// ── Table legs ────────────────────────────────────────────────
ctx.fillStyle = cStr;
ctx.fillRect(32, TY + 4, 6, FY - TY - 4);
ctx.fillRect(EX - 15, TY + 4, 6, FY - TY - 4);
// ── Table surface ─────────────────────────────────────────────
ctx.fillStyle = cTab;
ctx.fillRect(28, TY, EX - 28, 5);
ctx.strokeStyle = dark ? '#93c5fd' : '#2563eb';
ctx.lineWidth = 1.5; ctx.setLineDash([]);
ctx.strokeRect(28, TY, EX - 28, 5);
// ── H dimension (right of edge) ───────────────────────────────
const hx = EX + 9;
ctx.strokeStyle = cTxt; ctx.lineWidth = 1; ctx.setLineDash([2.5, 2.5]);
ctx.beginPath(); ctx.moveTo(hx, TY); ctx.lineTo(hx, FY); ctx.stroke();
ctx.setLineDash([]);
const _arrowV = (x, y, dir) => {
ctx.beginPath();
ctx.moveTo(x-3, y+dir*5); ctx.lineTo(x, y); ctx.lineTo(x+3, y+dir*5);
ctx.stroke();
};
_arrowV(hx, TY, 1); _arrowV(hx, FY, -1);
ctx.fillStyle = cTxt; ctx.font = '9px Inter'; ctx.textAlign = 'left';
ctx.fillText('H=15 см', hx + 4, (TY + FY) / 2 + 4);
// ── Ramp ──────────────────────────────────────────────────────
const hPx = p.h * SV * 0.70;
const RW = Math.round(W * 0.20); // ramp horizontal extent
const RTX = EX - RW;
const RTY = TY - hPx;
ctx.beginPath();
ctx.moveTo(RTX, RTY); ctx.lineTo(EX, TY);
ctx.lineTo(EX, RTY + 6); ctx.lineTo(RTX, RTY + 6);
ctx.closePath();
ctx.fillStyle = cTab; ctx.fill();
ctx.strokeStyle = dark ? '#93c5fd' : '#2563eb'; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(RTX, RTY); ctx.lineTo(EX, TY); ctx.stroke();
// ── h dimension (left of ramp) ────────────────────────────────
const hax = RTX - 12;
ctx.strokeStyle = cTxt; ctx.lineWidth = 1; ctx.setLineDash([2.5, 2.5]);
ctx.beginPath(); ctx.moveTo(hax, RTY); ctx.lineTo(hax, TY); ctx.stroke();
ctx.setLineDash([]);
_arrowV(hax, RTY, 1); _arrowV(hax, TY, -1);
ctx.fillStyle = cTxt; ctx.font = '9px Inter'; ctx.textAlign = 'right';
const hVal = +document.getElementById('l11h').value;
ctx.fillText('h=' + hVal + 'см', hax - 3, (RTY + TY) / 2 + 4);
// ── Ball 1 on ramp ────────────────────────────────────────────
const ang = Math.atan2(TY - RTY, EX - RTX);
const bpx = RTX + (EX - RTX) * 0.28;
const bpy = RTY + (TY - RTY) * 0.28;
const b1x = bpx - Math.sin(ang) * (BR + 1);
const b1y = bpy + Math.cos(ang) * (BR + 1);
ctx.beginPath(); ctx.arc(b1x, b1y, BR, 0, Math.PI * 2);
ctx.fillStyle = '#2563eb'; ctx.fill();
ctx.strokeStyle = '#93c5fd'; ctx.lineWidth = 1.5; ctx.stroke();
ctx.fillStyle = '#fff'; ctx.font = 'bold 8px Inter'; ctx.textAlign = 'center';
ctx.fillText('1', b1x, b1y + 3);
// ── Ball 2 at edge ────────────────────────────────────────────
const b2x = EX + BR + 2, b2y = TY - BR;
ctx.beginPath(); ctx.arc(b2x, b2y, BR, 0, Math.PI * 2);
ctx.fillStyle = '#ea580c'; ctx.fill();
ctx.strokeStyle = '#fbbf24'; ctx.lineWidth = 1.5; ctx.stroke();
ctx.fillStyle = '#fff'; ctx.font = 'bold 8px Inter'; ctx.textAlign = 'center';
ctx.fillText('2', b2x, b2y + 3);
// ── Clip canvas so trajectories don't bleed outside ───────────
ctx.save();
ctx.beginPath();
ctx.rect(0, 0, W, Hc);
ctx.clip();
// ── Draw parabola + landing mark ──────────────────────────────
function parab(vx, col, lbl, alpha) {
if (!isFinite(vx) || isNaN(vx)) return;
ctx.globalAlpha = alpha || 1;
const landPx = EX + vx * p.tF * SH; // unclamped x of landing
const clampX = Math.max(6, Math.min(W - 6, landPx));
// Parabolic curve
ctx.strokeStyle = col; ctx.lineWidth = 1.8; ctx.setLineDash([5, 3.5]);
ctx.beginPath();
if (Math.abs(vx) < 0.001) {
// Falls straight down from edge
ctx.moveTo(EX, TY); ctx.lineTo(EX, FY);
} else {
const steps = 36;
for (let i = 0; i <= steps; i++) {
const t = i / steps * p.tF;
const cx = EX + vx * t * SH;
const cy = TY + 0.5 * L11.g * t * t * SV;
i === 0 ? ctx.moveTo(cx, cy) : ctx.lineTo(cx, cy);
}
}
ctx.stroke(); ctx.setLineDash([]);
// Landing tick mark
ctx.strokeStyle = col; ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(clampX, FY - 8); ctx.lineTo(clampX, FY + 1); ctx.stroke();
// Triangle pointer
ctx.beginPath();
ctx.moveTo(clampX - 4, FY - 3);
ctx.lineTo(clampX, FY + 4);
ctx.lineTo(clampX + 4, FY - 3);
ctx.fillStyle = col; ctx.fill();
// Label (stays within canvas)
ctx.globalAlpha = 1;
ctx.fillStyle = col;
ctx.font = 'bold 9.5px Inter'; ctx.textAlign = 'center';
const lblX = Math.max(14, Math.min(W - 14, clampX));
ctx.fillText(lbl, lblX, FY + 14);
ctx.globalAlpha = 1;
}
parab(p.v0, cL1, 'l₁', 0.40);
parab(p.v1p, cL1p, "l₁'", 1);
parab(p.v2p, cL2p, "l₂'", 1);
ctx.restore(); // remove clip
// ── Legend (top-right, outside clip so always visible) ────────
const lgX = W - 102, lgY = 7;
[[cL1,"l₁ (без м₂)",0.40],[cL1p,"l₁' (шар 1)",1],[cL2p,"l₂' (шар 2)",1]]
.forEach(([col, lbl, a], i) => {
const y = lgY + i * 15;
ctx.globalAlpha = a;
ctx.fillStyle = col;
ctx.fillRect(lgX, y + 3, 16, 3);
ctx.globalAlpha = 1;
ctx.fillStyle = cTxt;
ctx.font = '8.5px Inter'; ctx.textAlign = 'left';
ctx.fillText(lbl, lgX + 20, y + 8);
});
}
function l11noise() { return 1 + (Math.random()*0.04 - 0.02); }
function lab11add() {
if (L11.rows.length >= 5) return;
const p = l11ph();
L11.rows.push({
m1: p.m1, m2: p.m2,
l1: p.l1 * l11noise(),
l1p: Math.abs(p.l1p) * l11noise(),
l2p: p.l2p * l11noise()
});
l11tbl();
if (L11.rows.length >= 5) {
document.getElementById('lab11b1').disabled = true;
l11verif();
}
}
function lab11all() { while (L11.rows.length < 5) lab11add(); }
function lab11reset() {
L11.rows = [];
document.getElementById('lab11b1').disabled = false;
document.getElementById('lab11vrf').style.display = 'none';
l11tbl();
}
function l11tbl() {
const mn = k => L11.rows.length ? L11.rows.reduce((s,r)=>s+r[k],0)/L11.rows.length : 0;
let h = '';
for (let i=0; i<5; i++) {
const r = L11.rows[i];
h += r
? `<tr><td>${i+1}</td><td>${r.m1.toFixed(3)}</td><td>${r.m2.toFixed(3)}</td><td>${r.l1.toFixed(3)}</td><td>${r.l1p.toFixed(3)}</td><td>${r.l2p.toFixed(3)}</td></tr>`
: `<tr><td>${i+1}</td><td>—</td><td>—</td><td>—</td><td>—</td><td>—</td></tr>`;
}
if (L11.rows.length)
h += `<tr class="lab11-avg"><td>⟨⟩</td><td>${mn('m1').toFixed(3)}</td><td>${mn('m2').toFixed(3)}</td><td>${mn('l1').toFixed(3)}</td><td>${mn('l1p').toFixed(3)}</td><td>${mn('l2p').toFixed(3)}</td></tr>`;
document.getElementById('lab11tb').innerHTML = h;
}
function l11verif() {
document.getElementById('lab11vrf').style.display = 'block';
var avg = function(k) { return L11.rows.reduce(function(s,r){ return s + r[k]; }, 0) / 5; };
var m1 = avg('m1'), m2 = avg('m2');
var al1 = avg('l1'), al1p = avg('l1p'), al2p = avg('l2p');
var lhs = m1 * al1;
var rhs = m1 * al1p + m2 * al2p;
var dP = Math.abs(lhs - rhs);
var eps = dP / lhs * 100;
var l1arr = L11.rows.map(function(r){ return r.l1; });
var dL1 = Math.max.apply(null, l1arr.map(function(v){ return Math.abs(v - al1); }));
var ok = eps < 5;
function f3(v){ return '<span class="nb-v">' + v.toFixed(3) + '</span>'; }
function f4(v){ return '<span class="nb-v">' + v.toFixed(4) + '</span>'; }
function bx(s){ return '<span class="nb-box">' + s + '</span>'; }
var devRows = l1arr.map(function(v, i) {
var dev = Math.abs(v - al1);
return '<span class="nb-i">l<sub>' + (i+1) + '</sub>: |' +
v.toFixed(3) + ' &minus; ' + al1.toFixed(3) + '| = ' +
f3(dev) + '&nbsp;\u043c</span>';
}).join('');
var nb = [
'<div class="nb-wrap">',
'<div class="nb-hdr">\uD83D\uDCCB&nbsp; \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f (\u043a\u0430\u043a \u0432 \u0442\u0435\u0442\u0440\u0430\u0434\u0438)</div>',
'<div class="nb-dado">',
'<div><span class="nb-clbl">\u0414\u0430\u043d\u043e:</span><br>',
'm\u2081 = ' + f3(m1) + '&nbsp;\u043a\u0433<br>',
'm\u2082 = ' + f3(m2) + '&nbsp;\u043a\u0433<br>',
'\u27E8l\u2081\u27E9 = ' + f3(al1) + '&nbsp;\u043c<br>',
'\u27E8l\u2081\u2019\u27E9 = ' + f3(al1p) + '&nbsp;\u043c<br>',
'\u27E8l\u2082\u2019\u27E9 = ' + f3(al2p) + '&nbsp;\u043c</div>',
'<div><span class="nb-clbl">\u041d\u0430\u0439\u0442\u0438:</span><br>',
'p\u2081 = m\u2081\u27E8l\u2081\u27E9 \u2014 ?<br>',
'p\u2081\u2032 + p\u2082\u2032 \u2014 ?<br>',
'\u03B5 \u2014 ?<br>',
'\u0394l\u2081, \u03B4l\u2081 \u2014 ?</div>',
'</div>',
'<hr class="nb-div">',
'<div class="nb-sh">\u0420\u0435\u0448\u0435\u043d\u0438\u0435:</div>',
'<div class="nb-step">',
'<b>1.&nbsp; \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0417\u0421\u0418:</b><br>',
'<span class="nb-i"><em>\u041b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c:</em></span>',
'<span class="nb-i">p\u2081 = m\u2081&middot;\u27E8l\u2081\u27E9 = ' +
m1.toFixed(3) + '&nbsp;&middot;&nbsp;' + al1.toFixed(3) + ' = ' + bx(lhs.toFixed(4) + '&nbsp;\u043a\u0433&middot;\u043c') + '</span>',
'<span class="nb-i"><em>\u041f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c:</em></span>',
'<span class="nb-i">p\u2081\u2032 + p\u2082\u2032 = m\u2081&middot;\u27E8l\u2081\u2032\u27E9 + m\u2082&middot;\u27E8l\u2082\u2032\u27E9</span>',
'<span class="nb-i">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ' +
m1.toFixed(3) + '&middot;' + al1p.toFixed(3) + ' + ' + m2.toFixed(3) + '&middot;' + al2p.toFixed(3) + '</span>',
'<span class="nb-i">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ' +
(m1*al1p).toFixed(4) + ' + ' + (m2*al2p).toFixed(4) + '</span>',
'<span class="nb-i">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ' + bx(rhs.toFixed(4) + '&nbsp;\u043a\u0433&middot;\u043c') + '</span>',
'</div>',
'<div class="nb-step">',
'<b>2.&nbsp; \u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435:</b><br>',
'<span class="nb-i">\u03B5 = |p\u2081 &minus; (p\u2081\u2032+p\u2082\u2032)| / p\u2081 &middot; 100%</span>',
'<span class="nb-i">&nbsp;&nbsp;= |' + lhs.toFixed(4) + ' &minus; ' + rhs.toFixed(4) + '| / ' + lhs.toFixed(4) + ' &middot; 100%</span>',
'<span class="nb-i">&nbsp;&nbsp;= ' + dP.toFixed(4) + ' / ' + lhs.toFixed(4) + ' &middot; 100% = ' +
bx(eps.toFixed(1) + '%') + '&nbsp;<span class="' + (ok ? 'nb-ok' : 'nb-bad') + '">' +
(ok ? '&lt; 5%&nbsp;\u2713' : '&gt; 5%&nbsp;\u2717') + '</span></span>',
'</div>',
'<div class="nb-step">',
'<b>3.&nbsp; \u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u044f\u043c\u044b\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 l\u2081:</b><br>',
devRows,
'<span class="nb-i">\u0394l\u2081 = max|l<sub>i</sub> &minus; \u27E8l\u2081\u27E9| = ' + bx(dL1.toFixed(4) + '&nbsp;\u043c') + '</span>',
'<span class="nb-i">\u03B4l\u2081 = ' + dL1.toFixed(4) + ' / ' + al1.toFixed(3) +
' &middot; 100% = ' + bx((dL1/al1*100).toFixed(1) + '%') + '</span>',
'</div>',
'<div class="nb-ans">',
'\u041e\u0442\u0432\u0435\u0442:&nbsp;&nbsp; l\u2081 = (' + al1.toFixed(3) + ' &plusmn; ' + dL1.toFixed(3) + ')&nbsp;\u043c,&nbsp;&nbsp;' +
'\u03B4l\u2081 = ' + (dL1/al1*100).toFixed(1) + '%&nbsp;&nbsp;&nbsp;' +
'<span class="' + (ok ? 'nb-ok' : 'nb-bad') + '">' +
(ok ? '\u0417\u0421\u0418 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d \u2713' : '\u0420\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432\u0435\u043b\u0438\u043a\u043e \u2717') + '</span>',
'</div>',
'</div>'
].join('\n');
document.getElementById('lab11nb').innerHTML = nb;
var cn = document.getElementById('lab11cn');
cn.style.cssText = 'padding:14px 18px;border-radius:12px;font-size:.88rem;font-weight:700;line-height:1.7;background:' +
(ok ? 'var(--ok-bg);color:#065f46' : 'var(--warn-bg);color:#92400e');
cn.textContent = ok
? '\u2705 \u0417\u0430\u043a\u043e\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d: \u03B5 = ' + eps.toFixed(1) + '% < 5% \u2014 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438.'
: '\u26A0\uFE0F \u0420\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u03B5 = ' + eps.toFixed(1) + '% > 5%. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u044b \u0448\u0430\u0440\u043e\u0432 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043e\u043f\u044b\u0442.';
}
function toggleSuperAns() {
var el = document.getElementById('superAns');
var btn = document.getElementById('superAnsBtn');
if (el.style.display === 'none') {
el.style.display = 'block';
btn.innerHTML = '<i class="fas fa-eye-slash"></i>&nbsp; Скрыть решение';
} else {
el.style.display = 'none';
btn.innerHTML = '<i class="fas fa-lightbulb"></i>&nbsp; Показать решение';
}
}
// ══════════════════════════════════════════════
// ТЕМА (день/ночь)
// ══════════════════════════════════════════════
const themeBtn = document.getElementById('themeBtn');
themeBtn.addEventListener('click', () => {
const d = document.body.classList.toggle('dark');
themeBtn.innerHTML = d ? '<i class="fas fa-sun"></i>' : '<i class="fas fa-moon"></i>';
localStorage.setItem('phys9_theme', d ? '1' : '');
});
if (localStorage.getItem('phys9_theme') === '1') {
document.body.classList.add('dark');
themeBtn.innerHTML = '<i class="fas fa-sun"></i>';
}
// ══════════════════════════════════════════════
// СПРАВОЧНИК (плавающий)
// ══════════════════════════════════════════════
const refToggle = document.getElementById('refToggle');
const refPanel = document.getElementById('refPanel');
refToggle.addEventListener('click', e => { e.stopPropagation(); refPanel.classList.toggle('show'); });
document.addEventListener('click', e => {
if (!refPanel.contains(e.target) && e.target !== refToggle) refPanel.classList.remove('show');
});
// ══════════════════════════════════════════════
// ИНИЦИАЛИЗАЦИЯ
// ══════════════════════════════════════════════
['p1','p2','p3','p4','p5','p6','p7','p8','p9','p10','p11','p12','p13','p14','p15','p16','p17','p18','p19','p20','p21','p22','p23','p24','p25','p26','p27','p28','p29','p30','p31','p32','p33','p34','p35','p36','hard'].forEach(sec => renderTask(sec));
setParaTab('p1');
upd2(); upd3(); upd4(); upd5(); upd6(); upd7(); upd8(); upd10(); upd11(); upd12();
upd16(); upd17(); upd19(); upd20(); upd21();
upd22(); upd23(); upd24();
upd25(); upd26(); upd27(); upd27mu();
upd28(); upd29(); upd30();
upd31(); upd33(); upd34zero(); upd34(); upd35(); updLab11();
// §15–§21 init: planet grid + canvas draws for active tab
initPlanetGrid16();
startAnim1();
startAnim15();
// §9, §13, §14 are animation loops — deferred to tab click (hidden at load)
// §19 and §20 canvas draw is deferred: the tabs are hidden at load,
// drawSpring19/drawFriction20 are called via tab-click handler and upd* functions
// Redraw lab11 canvas when its tab becomes visible
if (window.ResizeObserver) {
const _ro11 = new ResizeObserver(entries => {
if (entries[0].contentRect.width > 0) drawLab11();
});
const _cv11 = document.getElementById('cvLab11');
if (_cv11) _ro11.observe(_cv11);
}
</script>
</main>
</div><!-- /.page-layout -->
<script src="/js/api.js"></script>
<script src="/js/textbook-tracker.js"></script>
</body>
</html>