e316d39264
F6. Симулятор скоростной дороги (§20 в ch2): - 5 покрытий: сухой/мокрый асфальт, гравий, снег, лёд (μ=0.7..0.08) - Slider скорости 20..180 км/ч - Автомобиль едет по дороге, кнопка ТОРМОЗ → тормозит до 0 - Расчёт: s = v²/(2μg), t = v/(μg) - На льду тормозной путь в ~8 раз длиннее асфальта F13. Маятник Фуко (§36 в ch4): - Маятник в виде розетки, плоскость вращается со скоростью ω = sin(φ) · 2π / 24h - Slider широты 0..90° (от экватора до полюса) - На полюсе — 24ч полного оборота, на экваторе — никогда - Slider «ускорение времени» × (100..20000) — чтобы увидеть розетку - Места: экватор/Каир/Рим/Минск/Москва/Заполярье/полюс F14. Резонанс пружинного маятника (§36 в ch4): - Слева: пружина с грузом + внешняя гармоническая сила - Slider'ы: m, k, ν_внешн, γ затухание - Кнопка «Настроить на резонанс» (ν_внешн = ν_собств) - Реальная физика затухания: m·x'' = -kx - γv + F0·cos(ωt) - Справа: график x(t) за последние 20 с - Классификация: вынужденные / близко к резонансу / РЕЗОНАНС! Подключение: - ch2: F6 на p20 - ch4: F13 + F14 оба на p36 (маятники) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2412 lines
168 KiB
HTML
2412 lines
168 KiB
HTML
<!doctype html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||
<meta http-equiv="Pragma" content="no-cache">
|
||
<meta http-equiv="Expires" content="0">
|
||
<title>Физика 9 · Глава 4 · «Законы сохранения»</title>
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
|
||
<link rel="stylesheet" href="/css/phys-textbook-widgets.css">
|
||
<link rel="stylesheet" href="/css/phys9-flagships.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:true},{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true},{left:'\\(',right:'\\)',display:false}],throwOnError:false})"></script>
|
||
<script src="/js/api.js" defer></script>
|
||
<script src="/js/xp.js" defer></script>
|
||
<script src="/js/phys.js?v=20260530" defer></script>
|
||
<script src="/js/phys9_palette.js?v=20260530" defer></script>
|
||
<script src="/js/phys9_legacy.js?v=20260530" defer></script>
|
||
<script src="/js/phys9_finals.js?v=20260530" defer></script>
|
||
<script src="/js/phys9_ch4_widgets.js?v=20260530" defer></script>
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@600;700;800;900&family=Unbounded:wght@700;800;900&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
:root{
|
||
--bg:#fafafa; --card:#fff; --card-soft:#f8fafc; --text:#0f172a; --ink:#0f172a; --muted:#64748b;
|
||
--border:#e2e8f0; --sh:0 1px 3px rgba(0,0,0,.06); --sh2:0 4px 14px rgba(0,0,0,.08);
|
||
--pri:#db2777; --pri2:#be185d; --pri-soft:#fce7f3;
|
||
--acc:#f472b6; --acc2:#db2777; --acc-soft:#fce7f3;
|
||
--ok:#10b981; --ok-bg:#d1fae5; --warn:#f59e0b; --warn-bg:#fef3c7;
|
||
--bad:#ef4444; --fail:#dc2626; --fail-bg:#fee2e2;
|
||
}
|
||
.dark{--bg:#0a0e1a; --card:#0f1727; --card-soft:#13192a; --text:#dbeafe; --ink:#dbeafe; --muted:#7c8fab; --border:#1e2a44}
|
||
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
|
||
html,body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55;font-size:15px}
|
||
button,input,select,textarea{font-family:inherit;font-size:inherit}
|
||
button{cursor:pointer;border:0;background:transparent;color:inherit}
|
||
a{color:inherit;text-decoration:none}
|
||
.ic{width:16px;height:16px;display:inline-block;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle}
|
||
|
||
.hdr{position:relative;background:linear-gradient(110deg,#831843 0%,#db2777 55%,#f472b6 100%);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid rgba(255,255,255,.2);min-height:130px}
|
||
.hdr::before{content:'ГЛАВА 4';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Unbounded',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none;user-select:none;z-index:0}
|
||
.hdr-row{position:relative;z-index:1;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
|
||
.hdr h1{font-family:'Unbounded',sans-serif;font-size:1.5rem;font-weight:900;letter-spacing:-.01em;line-height:1.3;padding-top:4px}
|
||
.hdr-sub{font-size:.85rem;opacity:.88;margin-top:6px;font-weight:500;line-height:1.4}
|
||
.hdr-side{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
|
||
.hdr-btn{padding:7px 12px;border-radius:9px;background:rgba(255,255,255,.14);color:#fff;font-weight:600;font-size:.82rem;display:inline-flex;align-items:center;gap:6px;transition:background .15s;text-decoration:none}
|
||
.hdr-btn:hover{background:rgba(255,255,255,.24)}
|
||
|
||
.main{max-width:1240px;margin:0 auto;padding:22px;width:100%;display:grid;grid-template-columns:1fr 280px;gap:24px}
|
||
@media(max-width:980px){.main{grid-template-columns:1fr;padding:14px}}
|
||
.col-main{min-width:0}
|
||
|
||
.hero{background:linear-gradient(135deg,var(--pri-soft) 0%,var(--acc-soft) 50%,var(--pri-soft) 100%);background-size:200% 200%;animation:heroShift 12s ease-in-out infinite;border:1px solid var(--border);border-radius:18px;padding:24px 22px;margin-bottom:24px;position:relative;overflow:hidden}
|
||
@keyframes heroShift{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
|
||
.hero::before{content:'p·E';position:absolute;right:0;top:-30px;font-size:clamp(2rem,12vw,8rem);font-weight:900;color:var(--pri);opacity:.10;line-height:1;pointer-events:none;font-family:'Unbounded',sans-serif}
|
||
.hero h2{font-family:'Unbounded',sans-serif;font-size:1.55rem;font-weight:800;color:var(--pri2);margin-bottom:10px;letter-spacing:-.01em}
|
||
.hero p{font-size:.95rem;color:var(--text);opacity:.88;margin-bottom:14px;max-width:640px}
|
||
.hero-row{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
|
||
.btn-primary{padding:11px 22px;background:linear-gradient(135deg,var(--pri),var(--pri2));color:#fff;border-radius:11px;font-weight:700;font-size:.92rem;display:inline-flex;align-items:center;gap:8px;box-shadow:var(--sh2);transition:transform .15s,box-shadow .15s}
|
||
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 8px 28px rgba(0,0,0,.18)}
|
||
.hero-progress{flex:1;min-width:200px;max-width:280px}
|
||
.hp-label{font-size:.74rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;display:block;margin-bottom:5px}
|
||
.hp-bar{height:8px;background:rgba(0,0,0,.12);border-radius:5px;overflow:hidden}
|
||
.hp-fill{height:100%;background:linear-gradient(90deg,var(--pri),var(--acc));border-radius:5px;width:0%;transition:width .6s cubic-bezier(.16,1,.3,1)}
|
||
.hp-text{font-size:.78rem;color:var(--muted);font-weight:700;margin-top:4px;display:block}
|
||
.hero-xp-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:linear-gradient(135deg,var(--warn,#f59e0b),var(--pri));color:#fff;border-radius:99px;font-size:.82rem;font-weight:800;letter-spacing:.02em;box-shadow:0 4px 12px rgba(0,0,0,.18);font-family:'Unbounded',sans-serif}
|
||
|
||
.psel{margin-bottom:24px}
|
||
.psel-title{font-size:.72rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}
|
||
.psel-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
|
||
.psel-card{background:var(--card);border:1.5px solid var(--border);border-radius:13px;padding:14px;cursor:pointer;transition:transform .2s,box-shadow .2s,border-color .2s;text-align:left;position:relative}
|
||
.psel-card:hover{transform:translateY(-3px);box-shadow:var(--sh2);border-color:var(--pri)}
|
||
.psel-card.active{border-color:var(--pri);background:linear-gradient(135deg,var(--pri-soft),var(--card));box-shadow:var(--sh2)}
|
||
.psel-card.active::after{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--pri),var(--acc));border-radius:13px 13px 0 0}
|
||
.psel-num{font-family:'Unbounded',sans-serif;font-size:.72rem;font-weight:800;color:var(--pri);text-transform:uppercase;letter-spacing:.08em;margin-bottom:5px}
|
||
.psel-name{font-size:.86rem;font-weight:700;color:var(--text);line-height:1.3;margin-bottom:8px}
|
||
.psel-prog{height:4px;background:rgba(0,0,0,.10);border-radius:3px;overflow:hidden}
|
||
.psel-prog-fill{height:100%;background:var(--pri);width:0%;transition:width .4s}
|
||
.psel-card.final{background:linear-gradient(135deg,var(--acc-soft),var(--pri-soft))}
|
||
.psel-card.final .psel-num{color:var(--warn)}
|
||
|
||
.sec[id="sec-p31"]{ --sec-acc:#db2777; --sec-acc-d:#be185d; --sec-acc-soft:#fce7f3; }
|
||
.sec[id="sec-p32"]{ --sec-acc:#db2777; --sec-acc-d:#be185d; --sec-acc-soft:#fce7f3; }
|
||
.sec[id="sec-p33"]{ --sec-acc:#db2777; --sec-acc-d:#be185d; --sec-acc-soft:#fce7f3; }
|
||
.sec[id="sec-p34"]{ --sec-acc:#db2777; --sec-acc-d:#be185d; --sec-acc-soft:#fce7f3; }
|
||
.sec[id="sec-p35"]{ --sec-acc:#db2777; --sec-acc-d:#be185d; --sec-acc-soft:#fce7f3; }
|
||
.sec[id="sec-p36"]{ --sec-acc:#db2777; --sec-acc-d:#be185d; --sec-acc-soft:#fce7f3; }
|
||
.sec[id="sec-final4"]{ --sec-acc:#db2777; --sec-acc-d:#be185d; --sec-acc-soft:#fce7f3; }
|
||
|
||
.sec{display:none;position:relative;animation:fadeIn .35s ease}
|
||
.sec.active{display:block}
|
||
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
|
||
.sec::before{content:attr(data-watermark);position:absolute;right:-20px;top:10%;font-family:'Unbounded',sans-serif;font-size:clamp(6rem,18vw,14rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px var(--sec-acc-soft,var(--pri-soft));line-height:1;pointer-events:none;user-select:none;z-index:0;opacity:.35}
|
||
.sec-header{margin-bottom:22px;padding-bottom:14px;border-bottom:2px solid var(--sec-acc-soft,var(--pri-soft));position:relative;z-index:1}
|
||
.sec-num{display:inline-block;padding:4px 10px;background:linear-gradient(135deg,var(--sec-acc,var(--pri)),var(--sec-acc-d,var(--pri2)));color:#fff;border-radius:7px;font-family:'Unbounded',sans-serif;font-size:.78rem;font-weight:800;letter-spacing:.04em;margin-bottom:8px}
|
||
.sec-h{font-family:'Unbounded',sans-serif;font-size:1.6rem;font-weight:800;color:var(--sec-acc-d,var(--pri2));letter-spacing:-.01em;line-height:1.25}
|
||
|
||
.card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:18px 20px;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,.04),0 8px 24px rgba(0,0,0,.04);position:relative;z-index:1;transition:transform .25s cubic-bezier(.16,1,.3,1),box-shadow .25s}
|
||
.card:hover{transform:translateY(-2px);box-shadow:0 4px 10px rgba(0,0,0,.06),0 16px 36px rgba(0,0,0,.08)}
|
||
.card-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px dashed var(--border)}
|
||
.card-icon{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}
|
||
.card-icon.theory{background:#8b5cf6}.card-icon.example{background:#10b981}.card-icon.lab{background:#0891b2}.card-icon.rule{background:#ec4899}
|
||
.card-icon .ic{width:18px;height:18px}
|
||
.card-title{font-family:'Unbounded',sans-serif;font-size:.82rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);flex:1}
|
||
.card-num{font-size:.74rem;font-weight:700;color:var(--muted);background:var(--sec-acc-soft,var(--pri-soft));padding:3px 7px;border-radius:5px}
|
||
.card-body{font-size:.94rem;line-height:1.65}
|
||
.card-body p{margin-bottom:8px}
|
||
.card-body p:last-child{margin-bottom:0}
|
||
|
||
.btn{padding:8px 16px;border-radius:8px;background:var(--card);color:var(--text);border:1.5px solid var(--border);font-weight:600;font-size:.88rem;transition:background .15s,border-color .15s,transform .1s}
|
||
.btn:hover{background:var(--sec-acc-soft,var(--pri-soft));border-color:var(--sec-acc,var(--pri))}
|
||
.btn:active{transform:scale(.96)}
|
||
.btn.primary{background:var(--sec-acc,var(--pri));color:#fff;border-color:var(--sec-acc,var(--pri))}
|
||
.btn.primary:hover{background:var(--sec-acc-d,var(--pri2));border-color:var(--sec-acc-d,var(--pri2))}
|
||
|
||
.col-side{position:sticky;top:14px;align-self:start;height:fit-content;max-height:calc(100vh - 28px);overflow-y:auto}
|
||
.sidecard{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:16px;margin-bottom:14px;box-shadow:var(--sh)}
|
||
.sidecard h4{font-family:'Unbounded',sans-serif;font-size:.74rem;font-weight:800;color:var(--pri2);text-transform:uppercase;letter-spacing:.07em;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
|
||
.sidecard-row{margin-bottom:8px;font-size:.86rem;line-height:1.6}
|
||
.sidecard-row b{color:var(--pri);font-weight:700}
|
||
.sidecard-row:last-child{margin-bottom:0}
|
||
@media(max-width:980px){.col-side{position:static;max-height:none}}
|
||
|
||
.xp-card{background:linear-gradient(135deg,var(--acc-soft),var(--pri-soft));border:1.5px solid var(--acc);border-radius:12px;padding:14px;margin-bottom:14px}
|
||
.xp-card-title{font-size:.68rem;font-weight:800;color:var(--acc2);text-transform:uppercase;letter-spacing:.07em;margin-bottom:8px;display:flex;align-items:center;justify-content:space-between}
|
||
.xp-level{font-size:1.1rem;font-weight:900;color:var(--acc2);font-family:'Unbounded',sans-serif}
|
||
.xp-bar{height:9px;background:rgba(0,0,0,.10);border-radius:6px;overflow:hidden;margin:7px 0}
|
||
.xp-fill{height:100%;background:linear-gradient(90deg,var(--acc),var(--pri));border-radius:6px;transition:width .5s cubic-bezier(.4,0,.2,1)}
|
||
.xp-nums{font-size:.74rem;color:var(--muted);display:flex;justify-content:space-between}
|
||
|
||
.sec-nav{display:flex;gap:10px;margin-top:24px;padding-top:20px;border-top:1px solid var(--border);justify-content:space-between;flex-wrap:wrap}
|
||
.foot{text-align:center;padding:30px 16px;color:var(--muted);font-size:.78rem;border-top:1px solid var(--border);margin-top:30px}
|
||
|
||
.ach-popup{position:fixed;top:80px;right:18px;background:linear-gradient(135deg,var(--pri),var(--acc));color:#fff;padding:12px 18px;border-radius:11px;font-weight:700;font-size:.9rem;box-shadow:0 8px 28px rgba(0,0,0,.32);z-index:1002;display:none;align-items:center;gap:8px;max-width:340px}
|
||
.ach-popup.show{display:flex}
|
||
|
||
.col-side-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.42);z-index:9990;display:none}
|
||
.col-side-backdrop.show{display:block}
|
||
@media(min-width:981px){#sidebar-btn{display:none}.col-side-backdrop.show{display:none}}
|
||
@media(max-width:980px){
|
||
.col-side{position:fixed;top:0;right:0;height:100vh;width:300px;max-width:88vw;background:var(--bg);box-shadow:-12px 0 24px rgba(0,0,0,.18);padding:18px 16px;overflow-y:auto;transform:translateX(100%);transition:transform .25s ease;z-index:9991;max-height:none}
|
||
.col-side.open{transform:none}
|
||
}
|
||
|
||
.search-modal{position:fixed;inset:0;background:rgba(15,23,42,.55);backdrop-filter:blur(4px);z-index:9993;display:none;align-items:flex-start;justify-content:center;padding-top:14vh}
|
||
.search-modal.show{display:flex}
|
||
.search-box{background:var(--bg);border:1px solid var(--border);border-radius:14px;width:560px;max-width:92vw;max-height:70vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 64px rgba(0,0,0,.4)}
|
||
.search-input{padding:14px 16px;font-size:1rem;border:0;border-bottom:1px solid var(--border);background:transparent;color:var(--text);outline:none}
|
||
.search-results{flex:1;overflow-y:auto;padding:6px 0}
|
||
.search-row{display:block;padding:8px 16px;cursor:pointer;border-bottom:1px solid var(--border);text-align:left;background:transparent;border:0;width:100%;color:var(--text)}
|
||
.search-row:hover,.search-row.active{background:var(--sec-acc-soft,var(--pri-soft))}
|
||
.search-row .sr-kind{font-size:.7rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:2px}
|
||
.search-row .sr-title{font-weight:700;font-size:.92rem;color:var(--text)}
|
||
.search-row .sr-desc{font-size:.8rem;color:var(--muted);margin-top:2px}
|
||
.search-empty{padding:20px;text-align:center;color:var(--muted);font-size:.88rem}
|
||
.search-foot{padding:8px 14px;border-top:1px solid var(--border);font-size:.74rem;color:var(--muted);display:flex;gap:14px}
|
||
.search-foot kbd{padding:2px 6px;background:var(--card);border:1px solid var(--border);border-radius:4px;font-family:'JetBrains Mono',monospace;font-size:.72rem}
|
||
|
||
.psel-card{position:relative}
|
||
.psel-card .psel-done{position:absolute;top:6px;right:6px;width:18px;height:18px;border-radius:50%;background:#10b981;display:none;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(16,185,129,.45);z-index:2}
|
||
.psel-card .psel-done svg{width:11px;height:11px;stroke:#fff;fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
|
||
.psel-card.done .psel-done{display:flex}
|
||
|
||
/* === MONOLITH CSS (migrated from physics_9.html) === */
|
||
|
||
: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}
|
||
/* ── §15–21 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}
|
||
|
||
/* === END MONOLITH CSS === */
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<header class="hdr">
|
||
<div class="hdr-row">
|
||
<div>
|
||
<h1>Физика 9 · Глава 4</h1>
|
||
<div class="hdr-sub">Импульс · реактивное движение · работа · мощность · кинетическая и потенциальная энергия · закон сохранения энергии</div>
|
||
</div>
|
||
<div class="hdr-side">
|
||
<a href="/textbook/physics-9" class="hdr-btn"><svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg> К физике 9</a>
|
||
<button id="search-btn" class="hdr-btn"><svg class="ic" viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="m21 21-4-4"/></svg> Поиск</button>
|
||
<button id="sidebar-btn" class="hdr-btn"><svg class="ic" viewBox="0 0 24 24"><line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="14" y2="18"/></svg> Шпаргалка</button>
|
||
<button id="theme-btn" class="hdr-btn"><svg class="ic" viewBox="0 0 24 24"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg><span id="theme-lab">Тёмная</span></button>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="main">
|
||
<div class="col-main">
|
||
|
||
<section class="hero">
|
||
<h2>Законы сохранения — фундамент физики</h2>
|
||
<p>Импульс и энергия сохраняются в замкнутых системах. Эти законы лежат в основе всего, от движения ракет до колебаний маятников.</p>
|
||
<div class="hero-row">
|
||
<button class="btn-primary" onclick="goTo('p31')"><svg class="ic" viewBox="0 0 24 24"><polygon points="6 4 20 12 6 20 6 4" fill="currentColor" stroke="none"/></svg> Начать § 31</button>
|
||
<div class="hero-progress">
|
||
<span class="hp-label">Прогресс по главе</span>
|
||
<div class="hp-bar"><div id="hero-hp-fill" class="hp-fill"></div></div>
|
||
<span id="hero-hp-text" class="hp-text">0%</span>
|
||
</div>
|
||
<div id="hero-xp-badge" class="hero-xp-badge"></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="psel">
|
||
<div class="psel-title">Параграфы главы</div>
|
||
<div id="psel-grid" class="psel-grid"></div>
|
||
</section>
|
||
|
||
<section id="sec-p31" class="sec" data-watermark="p=mv"><div class="sec-header"><span class="sec-num">§ 31</span><h2 class="sec-h">Импульс тела. Импульс системы тел</h2></div><div id="p31-body"></div></section>
|
||
<section id="sec-p32" class="sec" data-watermark="∑p"><div class="sec-header"><span class="sec-num">§ 32</span><h2 class="sec-h">Закон сохранения импульса. Реактивное движение</h2></div><div id="p32-body"></div></section>
|
||
<section id="sec-p33" class="sec" data-watermark="A"><div class="sec-header"><span class="sec-num">§ 33</span><h2 class="sec-h">Механическая работа. Мощность</h2></div><div id="p33-body"></div></section>
|
||
<section id="sec-p34" class="sec" data-watermark="mgh"><div class="sec-header"><span class="sec-num">§ 34</span><h2 class="sec-h">Потенциальная энергия</h2></div><div id="p34-body"></div></section>
|
||
<section id="sec-p35" class="sec" data-watermark="mv²/2"><div class="sec-header"><span class="sec-num">§ 35</span><h2 class="sec-h">Кинетическая энергия. Полная энергия системы тел</h2></div><div id="p35-body"></div></section>
|
||
<section id="sec-p36" class="sec" data-watermark="E=const"><div class="sec-header"><span class="sec-num">§ 36</span><h2 class="sec-h">Закон сохранения энергии</h2></div><div id="p36-body"></div></section>
|
||
<section id="sec-final4" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#db2777,#f472b6)">★</span><h2 class="sec-h">Финал главы</h2></div><div id="final4-body"></div></section>
|
||
|
||
</div>
|
||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||
<div class="col-side-backdrop" id="col-side-backdrop"></div>
|
||
</main>
|
||
|
||
<footer class="foot">Интерактивный учебник «Физика 9» · Глава 4 · «Законы сохранения» · LearnSpace</footer>
|
||
|
||
<div id="ach-popup" class="ach-popup"><svg class="ic" viewBox="0 0 24 24" style="width:22px;height:22px"><polygon points="12,2 22,20 2,20"/></svg><span id="ach-text">Достижение!</span></div>
|
||
<div id="search-modal" class="search-modal" role="dialog">
|
||
<div class="search-box">
|
||
<input type="text" id="search-input" class="search-input" placeholder="Поиск…" autocomplete="off">
|
||
<div id="search-results" class="search-results"></div>
|
||
<div class="search-foot"><span><kbd>↑↓</kbd> навигация</span><span><kbd>Enter</kbd> открыть</span><span><kbd>Esc</kbd> закрыть</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
'use strict';
|
||
|
||
const STATE = { current:'p31', progress:{}, achievements:new Map(), xp:0, level:1 };
|
||
const TOTAL_PARAS = 7;
|
||
const _TB_SLUG = 'physics-9-ch4';
|
||
|
||
const PARAS = [
|
||
{ id:"p31", num:"§ 31", name:"Импульс тела. Импульс системы тел", sub:"$\\vec p = m\\vec v$" },
|
||
{ id:"p32", num:"§ 32", name:"Закон сохранения импульса. Реактивное движение", sub:"$\\sum\\vec p = \\text{const}$" },
|
||
{ id:"p33", num:"§ 33", name:"Механическая работа. Мощность", sub:"$A = F\\Delta r\\cos\\alpha$" },
|
||
{ id:"p34", num:"§ 34", name:"Потенциальная энергия", sub:"$E_п = mgh$" },
|
||
{ id:"p35", num:"§ 35", name:"Кинетическая энергия. Полная энергия системы тел", sub:"$E_к = mv^2/2$" },
|
||
{ id:"p36", num:"§ 36", name:"Закон сохранения энергии", sub:"$E_к + E_п = \\text{const}$" },
|
||
{ id:"final4", num:'\u2605', name:'Финал главы', sub:"Итоги · боссы главы 4", final:true }
|
||
];
|
||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||
|
||
function calcLevel(xp){ return Math.floor(Math.sqrt((xp||0)/100))+1; }
|
||
function _xpForLevel(lv){ return (lv-1)*(lv-1)*100; }
|
||
|
||
const ACH_LABELS = {
|
||
start:"Начало главы 4!",
|
||
p31_done:"Импульс тела. Импульс системы тел освоен!",
|
||
p32_done:"Закон сохранения импульса. Реактивное движение освоен!",
|
||
p33_done:"Механическая работа. Мощность освоен!",
|
||
p34_done:"Потенциальная энергия освоен!",
|
||
p35_done:"Кинетическая энергия. Полная энергия системы тел освоен!",
|
||
p36_done:"Закон сохранения энергии освоен!",
|
||
ch4_done:"Глава 4 пройдена!"
|
||
};
|
||
|
||
function loadProgress(){
|
||
try{
|
||
const s=localStorage.getItem('physics9_ch4_progress'); if(s) Object.assign(STATE.progress, JSON.parse(s));
|
||
const a=localStorage.getItem('physics9_ch4_achievements');
|
||
if(a){ const p=JSON.parse(a); if(Array.isArray(p)) p.forEach(id=>STATE.achievements.set(id, ACH_LABELS[id]||id)); else if(p&&typeof p==='object'){ for(const[id,t] of Object.entries(p)) STATE.achievements.set(id,(t&&t!==id)?t:(ACH_LABELS[id]||id)); } }
|
||
STATE.xp=+(localStorage.getItem('physics9_xp')||0); STATE.level=calcLevel(STATE.xp);
|
||
}catch(e){}
|
||
}
|
||
function saveProgress(){
|
||
try{
|
||
localStorage.setItem('physics9_ch4_progress', JSON.stringify(STATE.progress));
|
||
localStorage.setItem('physics9_ch4_achievements', JSON.stringify(Object.fromEntries(STATE.achievements)));
|
||
localStorage.setItem('physics9_xp', String(STATE.xp));
|
||
}catch(e){}
|
||
}
|
||
function bumpProgress(key, delta){
|
||
STATE.progress[key]=Math.max(0,Math.min(100,(STATE.progress[key]||0)+delta));
|
||
saveProgress(); refreshProgressUI();
|
||
if(STATE.progress[key]>=50) markParaRead(key);
|
||
}
|
||
|
||
const _markedRead=new Set();
|
||
let _pendingProgressBody=null, _progressTimer=null;
|
||
function _flushProgress(){
|
||
const body=_pendingProgressBody; _pendingProgressBody=null; if(!body) return;
|
||
const tok=(window.LS&&LS.getToken)?LS.getToken():''; if(!tok) return;
|
||
fetch('/api/textbooks/'+_TB_SLUG+'/progress',{method:'POST',headers:{'Content-Type':'application/json','Authorization':'Bearer '+tok},body:JSON.stringify(body),keepalive:true}).catch(()=>{});
|
||
}
|
||
function _queueProgress(patch){ _pendingProgressBody=Object.assign(_pendingProgressBody||{},patch); if(_progressTimer) clearTimeout(_progressTimer); _progressTimer=setTimeout(_flushProgress, 600); }
|
||
function markLastPara(id){ _queueProgress({last_para:id}); }
|
||
function markParaRead(id){ if(_markedRead.has(id)) return; _markedRead.add(id); _queueProgress({mark_read:id}); }
|
||
window.addEventListener('beforeunload', _flushProgress);
|
||
function loadServerReadState(){
|
||
const tok=(window.LS&&LS.getToken)?LS.getToken():''; if(!tok) return;
|
||
fetch('/api/textbooks/'+_TB_SLUG,{headers:{'Authorization':'Bearer '+tok}}).then(r=>r.ok?r.json():null).then(d=>{
|
||
if(!d||!d.progress) return;
|
||
(d.progress.read||[]).forEach(k=>{_markedRead.add(k); if((STATE.progress[k]||0)<50) STATE.progress[k]=100;});
|
||
saveProgress(); refreshProgressUI();
|
||
}).catch(()=>{});
|
||
}
|
||
|
||
function addXp(n,src){
|
||
if(!n) return;
|
||
const prev=STATE.level; STATE.xp=Math.max(0,(STATE.xp||0)+n); STATE.level=calcLevel(STATE.xp);
|
||
saveProgress(); refreshProgressUI();
|
||
if(window.LS&&window.LS.xp) window.LS.xp.add(n,'physics9-ch4-'+(src||'misc'));
|
||
if(STATE.level>prev){
|
||
const pop=document.getElementById('ach-popup');
|
||
if(pop){ document.getElementById('ach-text').textContent='Уровень '+STATE.level+'!'; pop.classList.add('show'); setTimeout(()=>pop.classList.remove('show'),2600); }
|
||
}
|
||
}
|
||
|
||
function refreshProgressUI(){
|
||
const total=Math.round(Object.values(STATE.progress).reduce((a,b)=>a+b,0)/TOTAL_PARAS);
|
||
const f=document.getElementById('hero-hp-fill'); if(f) f.style.width=total+'%';
|
||
const t=document.getElementById('hero-hp-text'); if(t) t.textContent=total+'% пройдено';
|
||
document.querySelectorAll('[data-prog-card]').forEach(el=>{ const k=el.dataset.progCard; const fl=el.querySelector('.psel-prog-fill'); if(fl) fl.style.width=(STATE.progress[k]||0)+'%'; });
|
||
const xpBadge=document.getElementById('hero-xp-badge');
|
||
if(xpBadge){ xpBadge.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="width:13px;height:13px"><polygon points="12 2 22 20 2 20"/></svg> Ур. '+STATE.level+' \xb7 '+(STATE.xp||0)+' XP'; }
|
||
if(STATE.current && document.getElementById('sidebar-content')){ try{ buildSidebar(STATE.current); }catch(e){} }
|
||
refreshDoneMarks();
|
||
}
|
||
|
||
function refreshDoneMarks(){
|
||
try{
|
||
document.querySelectorAll('.psel-card').forEach(c=>{
|
||
const id = c.dataset.id || c.dataset.progCard;
|
||
if(!id) return;
|
||
const pct = +STATE.progress[id] || 0;
|
||
if(!c.querySelector('.psel-done')){
|
||
const s = document.createElement('span');
|
||
s.className = 'psel-done';
|
||
s.setAttribute('title','Прочитано');
|
||
s.innerHTML = '<svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>';
|
||
c.appendChild(s);
|
||
}
|
||
c.classList.toggle('done', pct >= 50);
|
||
});
|
||
}catch(e){}
|
||
}
|
||
|
||
function achievement(id,text){
|
||
if(STATE.achievements.has(id)) return;
|
||
STATE.achievements.set(id, text||ACH_LABELS[id]||id); saveProgress();
|
||
const pop=document.getElementById('ach-popup');
|
||
if(pop){ document.getElementById('ach-text').textContent=text||ACH_LABELS[id]||id; pop.classList.add('show'); setTimeout(()=>pop.classList.remove('show'),3300); }
|
||
addXp(20,'ach-'+id);
|
||
}
|
||
|
||
function buildParaSelector(){
|
||
const g=document.getElementById('psel-grid'); g.innerHTML='';
|
||
PARAS.forEach(p=>{
|
||
const card=document.createElement('div');
|
||
card.className='psel-card'+(p.final?' final':'');
|
||
card.dataset.id=p.id; card.dataset.progCard=p.id;
|
||
card.innerHTML='<div class="psel-num">'+p.num+'</div><div class="psel-name">'+p.name+'</div><div class="psel-prog"><div class="psel-prog-fill"></div></div>';
|
||
card.addEventListener('click', ()=>goTo(p.id));
|
||
g.appendChild(card);
|
||
});
|
||
}
|
||
|
||
const BUILT=new Set();
|
||
const BUILDERS = { p31:()=>build_p31(), p32:()=>build_p32(), p33:()=>build_p33(), p34:()=>build_p34(), p35:()=>build_p35(), p36:()=>build_p36(), final4:()=>build_final4() };
|
||
function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } }
|
||
|
||
function _makeTaskBlock(sec){
|
||
return ''
|
||
+ '<div class="legacy-tasks" id="ptab-' + sec + '" style="margin-top:20px;padding:16px 18px;background:var(--card,#fff);border:1.5px solid var(--border,#e2e8f0);border-radius:14px">'
|
||
+ '<div class="score-bar" style="display:flex;gap:10px;align-items:center;margin-bottom:10px;flex-wrap:wrap">'
|
||
+ '<div style="font-weight:700;color:var(--text)">Задачи параграфа</div>'
|
||
+ '<div class="chip chip-ok" style="margin-left:auto;padding:3px 10px;border-radius:99px;background:#dcfce7;color:#065f46;font-weight:700;font-size:.82rem"><span id="ok' + sec + '">0</span> верно</div>'
|
||
+ '<div class="chip chip-tot" style="padding:3px 10px;border-radius:99px;background:rgba(15,23,42,.06);color:var(--muted);font-weight:700;font-size:.82rem"><span id="cur' + sec + '">0</span>/<span id="max' + sec + '">?</span></div>'
|
||
+ '<button class="btn" onclick="if(window.resetTasks)window.resetTasks(\'' + sec + '\')" style="padding:5px 11px;font-size:.78rem;border-radius:8px;background:transparent;border:1px solid var(--border);color:var(--text)">Заново</button>'
|
||
+ '</div>'
|
||
+ '<div class="prog-wrap" style="height:5px;background:rgba(0,0,0,.07);border-radius:3px;overflow:hidden;margin-bottom:10px"><div id="prog' + sec + '" style="height:100%;width:0%;background:linear-gradient(90deg,var(--sec-acc,#2563eb),var(--sec-acc-d,#1d4ed8));transition:width .4s"></div></div>'
|
||
+ '<div class="nav-dots" id="navDots' + sec + '" style="display:flex;gap:5px;flex-wrap:wrap;margin-bottom:10px"></div>'
|
||
+ '<div id="taskArea' + sec + '"></div>'
|
||
+ '<div class="feedback" id="fb' + sec + '" style="margin-top:8px"></div>'
|
||
+ '<div style="display:flex;gap:10px;margin-top:10px;justify-content:flex-end"><button class="btn primary" id="nextBtn' + sec + '" onclick="if(window.nextTask)window.nextTask(\'' + sec + '\')" style="display:none;padding:8px 16px;border-radius:9px;background:var(--sec-acc,#2563eb);color:#fff;border:0;font-weight:700">Следующая →</button></div>'
|
||
+ '<div class="summary" id="sum' + sec + '" style="display:none;text-align:center;padding:16px;margin-top:10px;background:linear-gradient(135deg,var(--sec-acc-soft,#dbeafe),var(--card));border-radius:11px"><div style="font-weight:700;margin-bottom:6px">Параграф пройден!</div><div class="big-score" id="sumScore' + sec + '" style="font-size:1.6rem;font-weight:900;color:var(--sec-acc-d,#1d4ed8)"></div><div class="sum-grade" id="sumGrade' + sec + '" style="margin:6px 0;color:var(--muted)"></div></div>'
|
||
+ '</div>';
|
||
}
|
||
function _injectTasks(id){
|
||
if(!id || !id.startsWith('p')) return;
|
||
if(!window.POOLS || !window.POOLS[id]) return;
|
||
var body = document.getElementById(id + '-body');
|
||
if(!body || body.querySelector('.legacy-tasks')) return;
|
||
body.insertAdjacentHTML('beforeend', _makeTaskBlock(id));
|
||
setTimeout(function(){ try { if(window.renderTask) window.renderTask(id); if(window.renderNav) window.renderNav(id); } catch(e){} try { if(window.PHYS9_FINALS_INIT && /^final\d+$/.test(id)) window.PHYS9_FINALS_INIT(id); } catch(e){ console.warn("phys9 final init:", e.message); } try { if(window.PHYS9_CH4_WIDGETS && window.PHYS9_CH4_WIDGETS[id]) window.PHYS9_CH4_WIDGETS[id](); } catch(e){ console.warn('phys9 widget init:', e.message); } try { if(window.PHYS9_FLAG_BASE){ if(id==='p35') window.PHYS9_FLAG_BASE.mount('F12','p35'); else if(id==='p32') window.PHYS9_FLAG_BASE.mount('F11','p32'); else if(id==='final4') window.PHYS9_FLAG_BASE.mount('F19','final4'); else if(id==='p36'){ window.PHYS9_FLAG_BASE.mount('F13','p36'); window.PHYS9_FLAG_BASE.mount('F14','p36'); } } } catch(e){ console.warn('phys9 flag init:', e.message); } }, 60);
|
||
}
|
||
var _origEnsureBuilt = ensureBuilt;
|
||
ensureBuilt = function(id){ _origEnsureBuilt(id); _injectTasks(id); };
|
||
|
||
function goTo(id){
|
||
STATE.current=id; ensureBuilt(id);
|
||
document.querySelectorAll('.sec').forEach(s=>s.classList.remove('active'));
|
||
const el=document.getElementById('sec-'+id); if(el) el.classList.add('active');
|
||
document.querySelectorAll('.psel-card').forEach(c=>c.classList.toggle('active', c.dataset.id===id));
|
||
buildSidebar(id);
|
||
window.scrollTo({top:0,behavior:'smooth'});
|
||
if((STATE.progress[id]||0)<10) bumpProgress(id, 10);
|
||
if(window.renderMathInElement) setTimeout(()=>renderMath(el), 0);
|
||
// Auto-init legacy simulations: call upd<N>() / startAnim<N>() / draw<N>() if defined in phys9_legacy.js.
|
||
if(id.startsWith('p')){
|
||
const n = id.slice(1);
|
||
setTimeout(()=>{
|
||
['upd','startAnim','init','draw'].forEach(prefix=>{
|
||
const fn = window[prefix + n];
|
||
if(typeof fn === 'function'){ try{ fn(); }catch(e){ console.warn(prefix + n + ' init:', e.message); } }
|
||
});
|
||
}, 50);
|
||
} else if(id.startsWith('lr')){
|
||
const n = id.slice(2);
|
||
setTimeout(()=>{
|
||
['updLab','drawLab'].forEach(prefix=>{
|
||
const fn = window[prefix + n];
|
||
if(typeof fn === 'function'){ try{ fn(); }catch(e){} }
|
||
});
|
||
}, 50);
|
||
}
|
||
markLastPara(id);
|
||
}
|
||
|
||
const SIDEBARS = {
|
||
p31:{title:"Шпаргалка §31",rows:[["$\\vec p = m\\vec v$","импульс тела"],["Ед.","кг·м/с"],["Сумма","$\\vec p_{сист} = \\sum \\vec p_i$"]]},
|
||
p32:{title:"Шпаргалка §32",rows:[["ЗСИ","$\\sum\\vec p_{до} = \\sum\\vec p_{после}$"],["Замкн. сист.","без внеш. сил"],["Ракета","$m_р\\vec v_р + m_г\\vec v_г = 0$"]]},
|
||
p33:{title:"Шпаргалка §33",rows:[["$A = F\\Delta r\\cos\\alpha$",""],["Ед.","Дж"],["Мощность","$P = A/\\Delta t$, Вт"]]},
|
||
p34:{title:"Шпаргалка §34",rows:[["$E_п = mgh$","тяжести"],["$E_п = kx^2/2$","упругости"],["$A = -\\Delta E_п$",""]]},
|
||
p35:{title:"Шпаргалка §35",rows:[["$E_к = mv^2/2$",""],["Теорема","$A = \\Delta E_к$"],["$E = E_к + E_п$","полная"]]},
|
||
p36:{title:"Шпаргалка §36",rows:[["ЗСЭ","$E = \\text{const}$ в замкн. консервативной сист."],["Превращ.","один вид → другой"],["Трение","диссипация $\\to$ тепло"]]},
|
||
final4:{title:"Финал главы 4",rows:[["§§31–36","теория главы 4"],["Награда","+50 XP"]]}
|
||
};
|
||
|
||
const TIPS=[
|
||
{sec:"p31",html:"Импульс тела: $\\vec p = m\\vec v$ (кг·м/с). Импульс системы — сумма импульсов всех тел."},
|
||
{sec:"p32",html:"ЗСИ: в замкнутой системе $\\sum\\vec p = \\text{const}$. Реактивное движение: $m_р\\vec v_р + m_г\\vec v_г = 0$."},
|
||
{sec:"p33",html:"Работа силы: $A = F \\Delta r \\cos\\alpha$ (Дж). Мощность: $P = A/\\Delta t = Fv\\cos\\alpha$ (Вт)."},
|
||
{sec:"p34",html:"Потенц. энергия тяжести: $E_п = mgh$. Упругости: $E_п = kx^2/2$. Работа консерват. силы: $A = -\\Delta E_п$."},
|
||
{sec:"p35",html:"Кинет. энергия: $E_к = mv^2/2$. Теорема: $A = \\Delta E_к$. Полная мех. энергия: $E = E_к + E_п$."},
|
||
{sec:"p36",html:"ЗСЭ: в замкнутой консервативной системе $E_к + E_п = \\text{const}$. При трении мех. энергия превращается в тепло."},
|
||
{sec:"final4",html:"Финал главы 4 — интегрированные задачи по §§31–36. В разработке (Phase 4+)."}
|
||
];
|
||
|
||
function buildSidebar(id){
|
||
const box=document.getElementById('sidebar-content');
|
||
const sb=SIDEBARS[id]||SIDEBARS[PARAS[0].id];
|
||
let html='';
|
||
const xpForLv=_xpForLevel(STATE.level), xpNext=_xpForLevel(STATE.level+1);
|
||
const xpInLv=STATE.xp-xpForLv, xpRange=xpNext-xpForLv;
|
||
const xpPct=xpRange>0?Math.round(xpInLv/xpRange*100):100;
|
||
html+='<div class="xp-card"><div class="xp-card-title"><span>XP-прогресс</span><span class="xp-level">Ур. '+STATE.level+'</span></div><div class="xp-bar"><div class="xp-fill" style="width:'+xpPct+'%"></div></div><div class="xp-nums"><span>'+STATE.xp+' XP</span><span>'+xpNext+' XP</span></div></div>';
|
||
html+='<div class="sidecard"><h4>'+sb.title+'</h4>';
|
||
sb.rows.forEach(([k,v])=>{ html+='<div class="sidecard-row"><b>'+k+'</b>'+(v?' \u2014 '+v:'')+'</div>'; });
|
||
html+='</div>';
|
||
const tip=TIPS.find(t=>t.sec===id)||TIPS[0];
|
||
if(tip){
|
||
html+='<div class="sidecard" style="background:linear-gradient(135deg,var(--warn-bg,#fef3c7),var(--pri-soft));border-color:var(--warn,#f59e0b)"><h4 style="color:#92400e;display:flex;align-items:center;gap:6px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="width:14px;height:14px"><polygon points="12,2 22,20 2,20"/></svg>Подсказка</h4><div class="sidecard-row" style="margin-bottom:0;font-size:.84rem;line-height:1.55">'+tip.html+'</div></div>';
|
||
}
|
||
if(STATE.achievements.size>0){
|
||
html+='<div class="sidecard"><h4>Достижения <span style="color:var(--warn);float:right">'+STATE.achievements.size+'</span></h4>';
|
||
[...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='<div class="sidecard-row" style="font-size:.78rem;color:var(--ok)">✓ '+text+'</div>'; });
|
||
html+='</div>';
|
||
}
|
||
box.innerHTML=html;
|
||
if(window.renderMathInElement) try{ renderMath(box); }catch(e){}
|
||
}
|
||
|
||
function initTheme(){
|
||
const t=localStorage.getItem('physics9_ch4_theme')||'light';
|
||
if(t==='dark') document.documentElement.classList.add('dark');
|
||
document.getElementById('theme-lab').textContent=t==='dark'?'Светлая':'Тёмная';
|
||
document.getElementById('theme-btn').addEventListener('click', ()=>{
|
||
document.documentElement.classList.toggle('dark');
|
||
const dark=document.documentElement.classList.contains('dark');
|
||
localStorage.setItem('physics9_ch4_theme', dark?'dark':'light');
|
||
document.getElementById('theme-lab').textContent=dark?'Светлая':'Тёмная';
|
||
});
|
||
}
|
||
|
||
function renderMath(root){ if(window.renderMathInElement){ try{ renderMathInElement(root, {delimiters:[{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true},{left:'\\(',right:'\\)',display:false}],throwOnError:false}); }catch(e){} } }
|
||
|
||
const ICONS = {
|
||
theory:'<svg class="ic" viewBox="0 0 24 24"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg>',
|
||
example:'<svg class="ic" viewBox="0 0 24 24"><path d="M9 18h6"/><path d="M10 22h4"/><path d="M12 2a7 7 0 0 0-4 13c1 1 2 2 2 4h4c0-2 1-3 2-4a7 7 0 0 0-4-13z"/></svg>',
|
||
lab:'<svg class="ic" viewBox="0 0 24 24"><path d="M10 2v7.5L4.5 19a2 2 0 0 0 1.7 3h11.6a2 2 0 0 0 1.7-3L14 9.5V2"/><line x1="9" y1="2" x2="15" y2="2"/></svg>',
|
||
rule:'<svg class="ic" viewBox="0 0 24 24"><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/></svg>',
|
||
};
|
||
|
||
function makeCard(kind, title, num, body){
|
||
const labels = {theory:'Теория',example:'Пример',lab:'Лабораторная работа',rule:'Правило'};
|
||
return '<div class="card"><div class="card-header"><div class="card-icon '+kind+'">'+ICONS[kind]+'</div><div class="card-title">'+(labels[kind]||'')+(title&&title!==labels[kind]?' \xb7 '+title:'')+'</div>'+(num?'<div class="card-num">'+num+'</div>':'')+'</div><div class="card-body">'+body+'</div></div>';
|
||
}
|
||
|
||
function secNav(prev, next){
|
||
const NAMES = {p31:'\xA731',p32:'\xA732',p33:'\xA733',p34:'\xA734',p35:'\xA735',p36:'\xA736',final4:'Финал'};
|
||
let h='<div class="sec-nav">';
|
||
h+=prev?'<button class="btn" onclick="goTo(\''+prev+'\')"><svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg> '+NAMES[prev]+'</button>':'<span></span>';
|
||
h+=next?'<button class="btn primary" onclick="goTo(\''+next+'\')">'+NAMES[next]+' <svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg></button>':'<span></span>';
|
||
h+='</div>'; return h;
|
||
}
|
||
|
||
function readButton(paraId){
|
||
const p = PARAS.find(x => x.id === paraId);
|
||
const labelTail = p && p.final ? 'финал' : (p ? p.num : '?');
|
||
return '<div style="margin-top:18px;display:flex;justify-content:center">'
|
||
+'<button class="btn primary" id="'+paraId+'-read-btn">'
|
||
+'<svg class="ic" viewBox="0 0 24 24"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg>'
|
||
+' Я прочитал — '+labelTail+' (+10 XP)'
|
||
+'</button></div>';
|
||
}
|
||
function wireReadBtn(paraId){
|
||
const btn = document.getElementById(paraId+'-read-btn'); if(!btn) return;
|
||
btn.addEventListener('click', ()=>{
|
||
addXp(10, paraId+'-read'); bumpProgress(paraId, 30);
|
||
btn.textContent='Прочитано! +10 XP'; btn.disabled=true; btn.style.opacity=.6;
|
||
const aId = paraId+'_done';
|
||
if(ACH_LABELS[aId]) achievement(aId);
|
||
});
|
||
}
|
||
|
||
/* ===== STUB BUILDERS — наполнение в Phase 5 ===== */
|
||
|
||
function build_p31(){
|
||
const box = document.getElementById('p31-body');
|
||
let html = '';
|
||
html += makeCard('theory', "Импульс тела. Импульс системы тел", "§31", `
|
||
|
||
<!-- 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"> §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"> Запомни!</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"> Частые ошибки</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"> Пример решения задачи</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"> Контрольные вопросы</div>
|
||
<ol class="q-list">
|
||
<li>Что такое импульс тела? Как он направлен? В каких единицах измеряется?</li>
|
||
<li>Как можно изменить импульс тела? Почему это изменение направлено именно так?</li>
|
||
<li>Что называют механической системой? Что такое импульс системы тел?</li>
|
||
<li>Какие силы называют внутренними? Какие — внешними?</li>
|
||
<li>Какие силы могут изменить импульс механической системы? Почему?</li>
|
||
</ol>
|
||
|
||
`);
|
||
html += secNav(null, 'p32');
|
||
html += readButton('p31');
|
||
box.innerHTML = html;
|
||
renderMath(box);
|
||
wireReadBtn('p31');
|
||
// === Задачи §31 — task panel (auto-injected from monolith) ===
|
||
const tasksBlock = document.createElement('div');
|
||
tasksBlock.className = 'wg';
|
||
tasksBlock.style.marginTop = '20px';
|
||
tasksBlock.innerHTML = '<div class="wg-header"><span class="wg-badge">Задачи</span><div class="wg-title">Тренажёр §31</div></div>' + `<div id="ptab-p31">
|
||
<div class="score-bar">
|
||
<div class="chip chip-ok"> <span id="okp31">0</span></div>
|
||
<div class="chip chip-tot"><span id="curp31">0</span> / <span id="maxp31">12</span></div>
|
||
<button class="btn btn-ghost" onclick="resetTasks('p31')" style="padding:6px 13px;font-size:.74rem"> Заново</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"> Следующая</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')"> Ещё раз</button>
|
||
<button class="btn btn-ghost" onclick="setParaTab('p32')">→ §32</button>
|
||
</div>
|
||
</div>
|
||
</div>`;
|
||
box.appendChild(tasksBlock);
|
||
// Auto-render first task
|
||
setTimeout(() => {
|
||
try { if (typeof goToTask === 'function') goToTask('p31', 0); }
|
||
catch(e) { console.warn('p31 goToTask:', e.message); }
|
||
}, 80);
|
||
}
|
||
|
||
function build_p32(){
|
||
const box = document.getElementById('p32-body');
|
||
let html = '';
|
||
html += makeCard('theory', "Закон сохранения импульса. Реактивное движение", "§32", `
|
||
|
||
<!-- 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"> §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"> Запомни!</div>
|
||
<ul>
|
||
<li>ЗСИ работает только если <b>результирующая внешних сил = 0</b>. Трение, сила тяжести, реакция опоры — это всё внешние силы!</li>
|
||
<li>При ударе внутренние силы огромны (тысячи ньютонов), а внешние малы → ЗСИ применим даже для незамкнутой системы.</li>
|
||
<li>Ось выбирай сам. Всегда задавай положительное направление <b>до</b> составления уравнения.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="mistakes-box">
|
||
<div class="mistakes-box-title"> Частые ошибки</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"> Пример решения задачи</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"> Контрольные вопросы</div>
|
||
<ol class="q-list">
|
||
<li>Что происходит с импульсом системы, если внешние силы на неё не действуют?</li>
|
||
<li>В каких случаях закон сохранения импульса применим к незамкнутой системе?</li>
|
||
<li>Что такое реактивная сила? Приведите примеры.</li>
|
||
<li>Почему скорость ракеты увеличивается по мере её полёта?</li>
|
||
<li>Почему для запуска спутников применяют многоступенчатые ракеты?</li>
|
||
</ol>
|
||
|
||
`);
|
||
html += secNav('p31', 'p33');
|
||
html += readButton('p32');
|
||
box.innerHTML = html;
|
||
renderMath(box);
|
||
wireReadBtn('p32');
|
||
// === Задачи §32 — task panel (auto-injected from monolith) ===
|
||
const tasksBlock = document.createElement('div');
|
||
tasksBlock.className = 'wg';
|
||
tasksBlock.style.marginTop = '20px';
|
||
tasksBlock.innerHTML = '<div class="wg-header"><span class="wg-badge">Задачи</span><div class="wg-title">Тренажёр §32</div></div>' + `<div id="ptab-p32" style="display:none">
|
||
<div class="score-bar">
|
||
<div class="chip chip-ok"> <span id="okp32">0</span></div>
|
||
<div class="chip chip-tot"><span id="curp32">0</span> / <span id="maxp32">12</span></div>
|
||
<button class="btn btn-ghost" onclick="resetTasks('p32')" style="padding:6px 13px;font-size:.74rem"> Заново</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"> Следующая</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')"> Ещё раз</button>
|
||
<button class="btn btn-ghost" onclick="setParaTab('p33')">→ §33</button>
|
||
</div>
|
||
</div>
|
||
</div>`;
|
||
box.appendChild(tasksBlock);
|
||
// Auto-render first task
|
||
setTimeout(() => {
|
||
try { if (typeof goToTask === 'function') goToTask('p32', 0); }
|
||
catch(e) { console.warn('p32 goToTask:', e.message); }
|
||
}, 80);
|
||
}
|
||
|
||
function build_p33(){
|
||
const box = document.getElementById('p33-body');
|
||
let html = '';
|
||
html += makeCard('theory', "Механическая работа. Мощность", "§33", `
|
||
|
||
<!-- 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"> §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">α < 90° → cos α > 0 → <span style="background:#d1fae5;border-radius:4px;padding:1px 6px">A > 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">α > 90° → cos α < 0 → <span style="background:#fee2e2;border-radius:4px;padding:1px 6px">A < 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 > 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"> Запомни!</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"> Частые ошибки</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 > 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">α>90°, A<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 > 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"> Примеры решения задач</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"> Главные выводы</div>
|
||
<div class="def-box" style="border-left-color:#10b981">
|
||
1. Работа силы равна произведению модулей силы и перемещения на косинус угла между ними.<br>
|
||
2. Острый угол → A > 0; тупой угол → A < 0; прямой угол → A = 0.<br>
|
||
3. Силы, перпендикулярные перемещению тела, работы не совершают.<br>
|
||
4. Мощность численно равна работе, совершаемой за единицу времени.<br>
|
||
5. Мощность пропорциональна произведению действующей силы и скорости движения тела.
|
||
</div>
|
||
<hr class="divider">
|
||
<div class="section-title"> Контрольные вопросы</div>
|
||
<ol class="q-list">
|
||
<li>Положительной или отрицательной будет работа силы тяжести, действующей на тело, движущееся вверх? Падающее вниз? Почему?</li>
|
||
<li>Положительной или отрицательной будет работа силы сопротивления воздуха при движении мяча вверх? При движении вниз?</li>
|
||
<li>Чему равна суммарная работа, которую совершила сила тяжести при броске мяча вверх и при его движении обратно?</li>
|
||
<li>Совершает ли работу нормальная составляющая силы реакции поверхности, действующая на движущееся по этой поверхности тело?</li>
|
||
<li>Можно ли при заданной мощности выиграть и в силе, и в скорости одновременно?</li>
|
||
</ol>
|
||
|
||
`);
|
||
html += secNav('p32', 'p34');
|
||
html += readButton('p33');
|
||
box.innerHTML = html;
|
||
renderMath(box);
|
||
wireReadBtn('p33');
|
||
// === Задачи §33 — task panel (auto-injected from monolith) ===
|
||
const tasksBlock = document.createElement('div');
|
||
tasksBlock.className = 'wg';
|
||
tasksBlock.style.marginTop = '20px';
|
||
tasksBlock.innerHTML = '<div class="wg-header"><span class="wg-badge">Задачи</span><div class="wg-title">Тренажёр §33</div></div>' + `<div id="ptab-p33" style="display:none">
|
||
<div class="score-bar">
|
||
<div class="chip chip-ok"> <span id="okp33">0</span></div>
|
||
<div class="chip chip-tot"><span id="curp33">0</span> / <span id="maxp33">8</span></div>
|
||
<button class="btn btn-ghost" onclick="resetTasks('p33')" style="padding:6px 13px;font-size:.74rem"> Заново</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"> Следующая</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')"> Ещё раз</button>
|
||
<button class="btn btn-ghost" onclick="setParaTab('p34')">→ §34</button>
|
||
</div>
|
||
</div>
|
||
</div>`;
|
||
box.appendChild(tasksBlock);
|
||
// Auto-render first task
|
||
setTimeout(() => {
|
||
try { if (typeof goToTask === 'function') goToTask('p33', 0); }
|
||
catch(e) { console.warn('p33 goToTask:', e.message); }
|
||
}, 80);
|
||
}
|
||
|
||
function build_p34(){
|
||
const box = document.getElementById('p34-body');
|
||
let html = '';
|
||
html += makeCard('theory', "Потенциальная энергия", "§34", `
|
||
|
||
<!-- 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"> §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 > 0$ → $\\Delta E_\\text{п} < 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"> Запомни!</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"> Частые ошибки</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"> Пример решения задачи</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"> Главные выводы</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"> Контрольные вопросы</div>
|
||
<ol class="q-list">
|
||
<li>В каких случаях тело обладает потенциальной энергией?</li>
|
||
<li>Как определить потенциальную энергию любого тела? От чего она зависит?</li>
|
||
<li>Чему равна потенциальная энергия тела в системе «тело + Земля»?</li>
|
||
<li>Чему равна потенциальная энергия упруго деформированного тела?</li>
|
||
<li>Почему значение потенциальной энергии зависит от выбора нулевого уровня, а её изменение — нет?</li>
|
||
</ol>
|
||
|
||
`);
|
||
html += secNav('p33', 'p35');
|
||
html += readButton('p34');
|
||
box.innerHTML = html;
|
||
renderMath(box);
|
||
wireReadBtn('p34');
|
||
// === Задачи §34 — task panel (auto-injected from monolith) ===
|
||
const tasksBlock = document.createElement('div');
|
||
tasksBlock.className = 'wg';
|
||
tasksBlock.style.marginTop = '20px';
|
||
tasksBlock.innerHTML = '<div class="wg-header"><span class="wg-badge">Задачи</span><div class="wg-title">Тренажёр §34</div></div>' + `<div id="ptab-p34" style="display:none">
|
||
<div class="score-bar">
|
||
<div class="chip chip-ok"> <span id="okp34">0</span></div>
|
||
<div class="chip chip-tot"><span id="curp34">0</span> / <span id="maxp34">9</span></div>
|
||
<button class="btn btn-ghost" onclick="resetTasks('p34')" style="padding:6px 13px;font-size:.74rem"> Заново</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"> Следующая</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')"> Ещё раз</button>
|
||
<button class="btn btn-ghost" onclick="setParaTab('p35')">→ §35</button>
|
||
</div>
|
||
</div>
|
||
</div>`;
|
||
box.appendChild(tasksBlock);
|
||
// Auto-render first task
|
||
setTimeout(() => {
|
||
try { if (typeof goToTask === 'function') goToTask('p34', 0); }
|
||
catch(e) { console.warn('p34 goToTask:', e.message); }
|
||
}, 80);
|
||
}
|
||
|
||
function build_p35(){
|
||
const box = document.getElementById('p35-body');
|
||
let html = '';
|
||
html += makeCard('theory', "Кинетическая энергия. Полная энергия системы тел", "§35", `
|
||
|
||
<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"> §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> Калькулятор кинетической энергии</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"> Ключевое наблюдение</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"> Как применять теорему о 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"> Запомни!</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"> Пример решения</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"> Контрольные вопросы</div>
|
||
<ol class="q-list">
|
||
<li>Что такое кинетическая энергия? В каких единицах она измеряется?</li>
|
||
<li>Как изменится кинетическая энергия тела при увеличении его скорости в 3 раза?</li>
|
||
<li>Что гласит теорема о кинетической энергии? Какова её связь со 2-м законом Ньютона?</li>
|
||
<li>Что такое механическая энергия? Из каких частей она состоит?</li>
|
||
<li>Может ли кинетическая энергия тела быть отрицательной?</li>
|
||
</ol>
|
||
|
||
`);
|
||
html += secNav('p34', 'p36');
|
||
html += readButton('p35');
|
||
box.innerHTML = html;
|
||
renderMath(box);
|
||
wireReadBtn('p35');
|
||
// === Задачи §35 — task panel (auto-injected from monolith) ===
|
||
const tasksBlock = document.createElement('div');
|
||
tasksBlock.className = 'wg';
|
||
tasksBlock.style.marginTop = '20px';
|
||
tasksBlock.innerHTML = '<div class="wg-header"><span class="wg-badge">Задачи</span><div class="wg-title">Тренажёр §35</div></div>' + `<div id="ptab-p35" style="display:none">
|
||
<div class="score-bar">
|
||
<div class="chip chip-ok"> <span id="okp35">0</span></div>
|
||
<div class="chip chip-tot"><span id="curp35">0</span> / <span id="maxp35">8</span></div>
|
||
<button class="btn btn-ghost" onclick="resetTasks('p35')" style="padding:6px 13px;font-size:.74rem"> Заново</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"> Следующая</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')"> Ещё раз</button>
|
||
<button class="btn btn-ghost" onclick="setParaTab('p36')">→ §36</button>
|
||
</div>
|
||
</div>
|
||
</div>`;
|
||
box.appendChild(tasksBlock);
|
||
// Auto-render first task
|
||
setTimeout(() => {
|
||
try { if (typeof goToTask === 'function') goToTask('p35', 0); }
|
||
catch(e) { console.warn('p35 goToTask:', e.message); }
|
||
}, 80);
|
||
}
|
||
|
||
function build_p36(){
|
||
const box = document.getElementById('p36-body');
|
||
let html = '';
|
||
html += makeCard('theory', "Закон сохранения энергии", "§36", `
|
||
|
||
<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"> §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> Маятник: превращение 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">
|
||
Запустить
|
||
</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"> Наблюдение</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"> Закон сохранения с трением</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"> Запомни!</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"> Пример решения</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"> Контрольные вопросы</div>
|
||
<ol class="q-list">
|
||
<li>При каком условии сохраняется механическая энергия системы тел?</li>
|
||
<li>Что происходит с механической энергией при наличии сил трения?</li>
|
||
<li>Как связаны кинетическая и потенциальная энергия тела при его падении?</li>
|
||
<li>Куда «исчезает» механическая энергия при торможении автомобиля?</li>
|
||
<li>Чем отличается механическая энергия от полной энергии системы?</li>
|
||
</ol>
|
||
|
||
`);
|
||
html += secNav('p35', 'final4');
|
||
html += readButton('p36');
|
||
box.innerHTML = html;
|
||
renderMath(box);
|
||
wireReadBtn('p36');
|
||
// === Задачи §36 — task panel (auto-injected from monolith) ===
|
||
const tasksBlock = document.createElement('div');
|
||
tasksBlock.className = 'wg';
|
||
tasksBlock.style.marginTop = '20px';
|
||
tasksBlock.innerHTML = '<div class="wg-header"><span class="wg-badge">Задачи</span><div class="wg-title">Тренажёр §36</div></div>' + `<div id="ptab-p36" style="display:none">
|
||
<div class="score-bar">
|
||
<div class="chip chip-ok"> <span id="okp36">0</span></div>
|
||
<div class="chip chip-tot"><span id="curp36">0</span> / <span id="maxp36">8</span></div>
|
||
<button class="btn btn-ghost" onclick="resetTasks('p36')" style="padding:6px 13px;font-size:.74rem"> Заново</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"> Следующая</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')"> Ещё раз</button>
|
||
<button class="btn btn-ghost" onclick="setParaTab('hard')">→ Сложные</button>
|
||
</div>
|
||
</div>
|
||
</div>`;
|
||
box.appendChild(tasksBlock);
|
||
// Auto-render first task
|
||
setTimeout(() => {
|
||
try { if (typeof goToTask === 'function') goToTask('p36', 0); }
|
||
catch(e) { console.warn('p36 goToTask:', e.message); }
|
||
}, 80);
|
||
}
|
||
|
||
function build_final4(){
|
||
const box = document.getElementById('final4-body');
|
||
let html = '';
|
||
html += makeCard('theory', "Финал главы 4", "★", `
|
||
|
||
<div class="formula-grid" style="margin-bottom:20px">
|
||
<div class="fcard highlight"><h3>Импульс</h3>
|
||
<div class="main-f">$\\vec{p} = m\\vec{v}$</div>
|
||
<p>ЗСИ: $\\sum\\vec{p}_{\\text{до}} = \\sum\\vec{p}_{\\text{после}}$</p>
|
||
</div>
|
||
<div class="fcard"><h3>Работа · мощность</h3>
|
||
<div class="main-f">$A = F\\Delta r\\cos\\alpha$</div>
|
||
<p>$P = A/\\Delta t$ · $E_к = mv^2/2$ · $E_п = mgh$</p>
|
||
</div>
|
||
<div class="fcard"><h3>ЗСЭ</h3>
|
||
<div class="main-f">$E_к + E_п = \\text{const}$</div>
|
||
<p>В замкнутой консерв. сист. полная мех. энергия сохраняется</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section-title"><svg class="ic" viewBox="0 0 24 24" style="width:18px;height:18px;display:inline-block;vertical-align:-3px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg> Интегрированные задачи</div>
|
||
|
||
<div class="task-card">
|
||
<div class="task-num">Задача 1</div>
|
||
<div class="task-text">Тележка массой $m_1 = 3$ кг движется со скоростью $v_1 = 4$ м/с и сталкивается с покоящейся тележкой массой $m_2 = 1$ кг. После сцепления они движутся вместе. Найдите их общую скорость.</div>
|
||
<div class="task-hint">ЗСИ: $m_1 v_1 = (m_1 + m_2) v$, отсюда $v = m_1 v_1 / (m_1 + m_2)$.</div>
|
||
<div class="ans-row"><input type="number" class="ans-inp" id="fin4-q1" step="any"><span class="unit-lbl">м/с</span>
|
||
<button class="btn btn-pri" onclick="checkNum('fin4-q1', 3, 'м/с', 0.05)">Проверить</button></div>
|
||
<div class="feedback" id="fb-fin4-q1"></div>
|
||
</div>
|
||
|
||
<div class="task-card">
|
||
<div class="task-num">Задача 2</div>
|
||
<div class="task-text">Тело массой $m = 2$ кг падает с высоты $h = 5$ м без начальной скорости. Найдите кинетическую энергию тела в момент удара о землю (сопротивлением воздуха пренебречь). $g = 10$ м/с².</div>
|
||
<div class="task-hint">ЗСЭ: вся потенциальная энергия переходит в кинетическую. $E_к = mgh$.</div>
|
||
<div class="ans-row"><input type="number" class="ans-inp" id="fin4-q2" step="any"><span class="unit-lbl">Дж</span>
|
||
<button class="btn btn-pri" onclick="checkNum('fin4-q2', 100, 'Дж', 1)">Проверить</button></div>
|
||
<div class="feedback" id="fb-fin4-q2"></div>
|
||
</div>
|
||
|
||
<div class="task-card">
|
||
<div class="task-num">Задача 3</div>
|
||
<div class="task-text">Подъёмный кран поднимает груз массой $m = 500$ кг на высоту $h = 12$ м за $t = 30$ с. Найдите среднюю мощность крана. $g = 10$ м/с².</div>
|
||
<div class="task-hint">$A = mgh$, $P = A/t$.</div>
|
||
<div class="ans-row"><input type="number" class="ans-inp" id="fin4-q3" step="any"><span class="unit-lbl">Вт</span>
|
||
<button class="btn btn-pri" onclick="checkNum('fin4-q3', 2000, 'Вт', 10)">Проверить</button></div>
|
||
<div class="feedback" id="fb-fin4-q3"></div>
|
||
</div>
|
||
|
||
<div class="task-card">
|
||
<div class="task-num">Задача 4</div>
|
||
<div class="task-text">Пуля массой $m = 10$ г летит со скоростью $v = 400$ м/с. Найдите модуль её импульса.</div>
|
||
<div class="task-hint">$p = mv$. Не забудьте перевести массу в кг.</div>
|
||
<div class="ans-row"><input type="number" class="ans-inp" id="fin4-q4" step="any"><span class="unit-lbl">кг·м/с</span>
|
||
<button class="btn btn-pri" onclick="checkNum('fin4-q4', 4, 'кг·м/с', 0.05)">Проверить</button></div>
|
||
<div class="feedback" id="fb-fin4-q4"></div>
|
||
</div>
|
||
|
||
<div class="task-card">
|
||
<div class="task-num">Задача 5 (повышенный уровень)</div>
|
||
<div class="task-text">Камень бросают вертикально вверх со скоростью $v_0 = 20$ м/с. На какой высоте $h$ кинетическая энергия камня станет в 3 раза меньше начальной? $g = 10$ м/с².</div>
|
||
<div class="task-hint">ЗСЭ: $\\dfrac{mv_0^2}{2} = \\dfrac{mv^2}{2} + mgh$. По условию $\\dfrac{mv^2}{2} = \\dfrac{1}{3}\\dfrac{mv_0^2}{2}$. Отсюда $mgh = \\dfrac{2}{3}\\dfrac{mv_0^2}{2}$, т. е. $h = \\dfrac{v_0^2}{3g}$.</div>
|
||
<div class="ans-row"><input type="number" class="ans-inp" id="fin4-q5" step="any"><span class="unit-lbl">м</span>
|
||
<button class="btn btn-pri" onclick="checkNum('fin4-q5', 13.3, 'м', 0.3)">Проверить</button></div>
|
||
<div class="feedback" id="fb-fin4-q5"></div>
|
||
</div>
|
||
|
||
`);
|
||
html += secNav('p36', null);
|
||
html += readButton('final4');
|
||
box.innerHTML = html;
|
||
renderMath(box);
|
||
wireReadBtn('final4');
|
||
}
|
||
|
||
/* ===== Search ===== */
|
||
const SEARCH_INDEX = (function(){
|
||
const arr=[];
|
||
PARAS.forEach(p=>arr.push({kind: p.id.startsWith('lr')?'Лабораторная':(p.final?'Финал':'Параграф'),title:p.num+' '+p.name,desc:p.sub||'',sec:p.id}));
|
||
return arr;
|
||
})();
|
||
function initSearch(){
|
||
const modal=document.getElementById('search-modal'),inp=document.getElementById('search-input'),out=document.getElementById('search-results'),btn=document.getElementById('search-btn');
|
||
if(!modal||!inp||!out) return;
|
||
let cur=0,rows=[];
|
||
function score(q,it){ const t=(it.title+' '+it.desc).toLowerCase(); if(t.includes(q)) return 100+(it.title.toLowerCase().startsWith(q)?50:0); let s=0; q.split(/\s+/).forEach(w=>{if(w&&t.includes(w))s+=10;}); return s; }
|
||
function rank(q){ q=q.trim().toLowerCase(); if(!q) return SEARCH_INDEX.slice(0,12); return SEARCH_INDEX.map(it=>({it,s:score(q,it)})).filter(x=>x.s>0).sort((a,b)=>b.s-a.s).slice(0,20).map(x=>x.it); }
|
||
function render(){ cur=0; if(!rows.length){out.innerHTML='<div class="search-empty">Ничего не найдено</div>';return;} out.innerHTML=rows.map((r,i)=>'<button class="search-row'+(i===0?' active':'')+'" data-i="'+i+'"><div class="sr-kind">'+r.kind+'</div><div class="sr-title">'+r.title+'</div>'+(r.desc?'<div class="sr-desc">'+(r.desc.length>90?r.desc.slice(0,90)+'…':r.desc)+'</div>':'')+'</button>').join(''); out.querySelectorAll('.search-row').forEach(b=>b.addEventListener('click',()=>{cur=+b.dataset.i;pick();})); }
|
||
function pick(){ const r=rows[cur]; if(!r) return; close(); goTo(r.sec); }
|
||
function move(d){ const items=out.querySelectorAll('.search-row'); if(!items.length) return; items[cur]&&items[cur].classList.remove('active'); cur=(cur+d+items.length)%items.length; items[cur].classList.add('active'); items[cur].scrollIntoView({block:'nearest'}); }
|
||
function open(){ modal.classList.add('show'); inp.value=''; rows=rank(''); render(); setTimeout(()=>inp.focus(),50); }
|
||
function close(){ modal.classList.remove('show'); }
|
||
btn&&btn.addEventListener('click',open);
|
||
modal.addEventListener('click',e=>{if(e.target===modal)close();});
|
||
inp.addEventListener('input',()=>{rows=rank(inp.value);render();});
|
||
inp.addEventListener('keydown',e=>{ if(e.key==='ArrowDown'){e.preventDefault();move(1);}else if(e.key==='ArrowUp'){e.preventDefault();move(-1);}else if(e.key==='Enter'){e.preventDefault();pick();}else if(e.key==='Escape'){e.preventDefault();close();} });
|
||
document.addEventListener('keydown',e=>{ if((e.ctrlKey||e.metaKey)&&(e.key==='k'||e.key==='K')){ e.preventDefault(); if(modal.classList.contains('show')) close(); else open(); } });
|
||
}
|
||
|
||
function initSidebarToggle(){
|
||
const side=document.getElementById('col-side'),back=document.getElementById('col-side-backdrop'),btn=document.getElementById('sidebar-btn');
|
||
if(!side||!btn) return;
|
||
function open(){ side.classList.add('open'); back.classList.add('show'); }
|
||
function close(){ side.classList.remove('open'); back.classList.remove('show'); }
|
||
btn.addEventListener('click',()=>{ if(side.classList.contains('open')) close(); else open(); });
|
||
back.addEventListener('click',close);
|
||
document.addEventListener('keydown',e=>{ if(e.key==='Escape') close(); });
|
||
}
|
||
|
||
function init(){
|
||
loadProgress(); initTheme(); initSidebarToggle(); initSearch();
|
||
buildParaSelector(); refreshProgressUI(); loadServerReadState(); goTo(PARAS[0].id);
|
||
setTimeout(()=>achievement('start'), 600);
|
||
if(window.LS&&window.LS.xp){
|
||
window.LS.xp.load().then(function(s){ if(s&&s.xp>STATE.xp){ STATE.xp=s.xp; STATE.level=calcLevel(STATE.xp); saveProgress(); refreshProgressUI(); if(STATE.current) buildSidebar(STATE.current); } });
|
||
}
|
||
}
|
||
document.addEventListener('DOMContentLoaded', init);
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|