0c0eea7a6b
- gen_phys9_hub.js: генератор hub из physics_10_hub.html (blue palette, 5 cards) - gen_phys9_ch.js: генератор 5 файлов глав со STUB-builder'ами по канве physics_10_ch - 038_physics_9_hub.sql: переразмечает physics-9 как hub + 5 дочерних (ch1-ch5) - Глава 5 — Лабораторный практикум, 12 ЛР с поддержкой lr-id вместо § Источник: Исаченкова, Сокольский, Захаревич "Физика 9" (Народная асвета, 2019). Контент в Phase 5 — авторский (наш материал).
936 lines
47 KiB
HTML
936 lines
47 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">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||
<title>Физика 9 класс — учебник</title>
|
||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;800;900&family=Inter:wght@400;500;600;700&family=Unbounded:wght@400;700;800;900&display=swap" rel="stylesheet">
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
|
||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
|
||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"></script>
|
||
<script src="/js/api.js" defer></script>
|
||
<script src="/js/xp.js" defer></script>
|
||
<style>
|
||
:root{
|
||
--bg:#eff6ff; --card:#fff;
|
||
--text:#0f172a; --muted:#475569;
|
||
--border:#bfdbfe;
|
||
--pri:#2563eb; --pri-d:#1d4ed8;
|
||
--pri-soft:#dbeafe;
|
||
--ch1:#2563eb; --ch1-d:#1d4ed8;
|
||
--ch2:#059669; --ch2-d:#047857;
|
||
--ch3:#7c3aed; --ch3-d:#6d28d9;
|
||
--ch4:#db2777; --ch4-d:#be185d;
|
||
--ch5:#0891b2; --ch5-d:#0e7490;
|
||
--sh:0 4px 16px rgba(37,99,235,.10);
|
||
--sh-h:0 12px 36px rgba(37,99,235,.18);
|
||
}
|
||
html.dark{
|
||
--bg:#0a1428; --card:#102137;
|
||
--text:#dbeafe; --muted:#93c5fd;
|
||
--border:#1e3a5f;
|
||
--pri-soft:rgba(37,99,235,.16);
|
||
}
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
html,body{min-height:100vh}
|
||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55;transition:background .25s,color .25s}
|
||
|
||
/* HEADER */
|
||
.hdr{position:relative;background:linear-gradient(110deg,#1e3a8a 0%,#2563eb 55%,#60a5fa 100%);color:#fff;padding:32px 24px 28px;overflow:hidden;border-bottom:2px solid rgba(219,234,254,.18)}
|
||
.hdr::before{content:'ФИЗИКА';position:absolute;right:-14px;top:-18%;font-family:'Outfit',sans-serif;font-size:clamp(5rem,16vw,13rem);font-weight:900;letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1.5px rgba(219,234,254,.12);line-height:1;pointer-events:none;user-select:none}
|
||
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600;transition:background .15s}
|
||
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.85rem;font-weight:900;letter-spacing:-.01em}
|
||
.hdr-sub{font-size:.92rem;opacity:.88;margin-top:4px}
|
||
.hdr-side{margin-left:auto;display:flex;gap:8px}
|
||
.hdr-btn{padding:8px 12px;background:rgba(255,255,255,.14);border:none;color:#fff;border-radius:9px;cursor:pointer;font-weight:600;font-size:.82rem;display:inline-flex;align-items:center;gap:6px;transition:background .15s;font-family:inherit}
|
||
.hdr-btn:hover{background:rgba(255,255,255,.24)}
|
||
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||
|
||
main{max-width:1100px;margin:0 auto;padding:32px 24px 60px}
|
||
|
||
/* OVERALL PROGRESS */
|
||
.prog-overall{background:linear-gradient(135deg,var(--pri-soft),rgba(94,234,212,.12));border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:28px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}
|
||
.po-icon{width:46px;height:46px;border-radius:12px;background:linear-gradient(135deg,#2563eb,#60a5fa);color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:'Outfit',sans-serif;font-size:1.4rem;font-weight:900;font-style:italic}
|
||
.po-text{flex:1;min-width:160px}
|
||
.po-label{font-size:.78rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px}
|
||
.po-bar{height:8px;background:rgba(37,99,235,.14);border-radius:5px;overflow:hidden;margin-top:6px}
|
||
.po-fill{height:100%;background:linear-gradient(90deg,var(--pri),#60a5fa);border-radius:5px;transition:width .5s}
|
||
.po-xp{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;background:linear-gradient(135deg,#3b82f6,var(--pri));color:#fff;border-radius:99px;font-size:.8rem;font-weight:800;font-family:'Unbounded',sans-serif;letter-spacing:.02em;box-shadow:0 4px 12px rgba(37,99,235,.24)}
|
||
|
||
/* CHAPTER GRID — 3 chapters */
|
||
.ch-grid{display:grid;grid-template-columns:1fr;gap:18px;margin-bottom:30px}
|
||
@media(min-width:680px){.ch-grid{grid-template-columns:1fr 1fr}}
|
||
@media(min-width:1000px){.ch-grid{grid-template-columns:repeat(3,1fr)}}
|
||
|
||
.ch-card{background:var(--card);border:1.5px solid var(--border);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;transition:transform .2s,box-shadow .2s,border-color .2s;cursor:pointer;text-decoration:none;color:inherit}
|
||
.ch-card:hover{transform:translateY(-4px);box-shadow:var(--sh-h)}
|
||
.ch-cover{padding:22px 22px 18px;color:#fff;position:relative;overflow:hidden}
|
||
.ch-cover-wm{position:absolute;right:-8px;top:-22px;font-size:5.2rem;font-weight:900;font-family:'Outfit',sans-serif;line-height:1;color:rgba(255,255,255,.20);pointer-events:none;letter-spacing:-.04em}
|
||
.ch-num{display:inline-block;padding:4px 10px;background:rgba(255,255,255,.22);border-radius:99px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;position:relative;z-index:1}
|
||
.ch-title{font-family:'Outfit',sans-serif;font-size:1.1rem;font-weight:800;letter-spacing:-.01em;position:relative;z-index:1;line-height:1.3}
|
||
.ch-range{font-size:.84rem;opacity:.88;margin-top:4px;position:relative;z-index:1;font-weight:500}
|
||
|
||
.ch-cover.ch1{background:linear-gradient(135deg,#1e3a8a,#2563eb 60%,#60a5fa)}
|
||
.ch-cover.ch2{background:linear-gradient(135deg,#064e3b,#059669 60%,#34d399)}
|
||
.ch-cover.ch3{background:linear-gradient(135deg,#3b0764,#7c3aed 60%,#a78bfa)}
|
||
.ch-cover.ch4{background:linear-gradient(135deg,#831843,#db2777 60%,#f472b6)}
|
||
.ch-cover.ch5{background:linear-gradient(135deg,#164e63,#0891b2 60%,#22d3ee)}
|
||
.ch-cover.ch6{background:linear-gradient(135deg,#064e3b,#10b981 60%,#6ee7b7)}
|
||
|
||
.ch-body{padding:16px 20px 18px;display:flex;flex-direction:column;flex:1}
|
||
.ch-desc{font-size:.88rem;color:var(--text);opacity:.84;flex:1;margin-bottom:12px;line-height:1.55}
|
||
|
||
.ch-prog{margin-bottom:12px}
|
||
.ch-prog-label{display:flex;justify-content:space-between;font-size:.74rem;color:var(--muted);font-weight:600;margin-bottom:4px}
|
||
.ch-prog-bar{height:6px;background:rgba(0,0,0,.07);border-radius:4px;overflow:hidden}
|
||
.ch-prog-fill{height:100%;border-radius:4px;transition:width .5s}
|
||
.ch-card.ch1-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch1),var(--ch1-d))}
|
||
.ch-card.ch2-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch2),var(--ch2-d))}
|
||
.ch-card.ch3-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch3),var(--ch3-d))}
|
||
.ch-card.ch4-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch4),var(--ch4-d))}
|
||
.ch-card.ch5-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch5),var(--ch5-d))}
|
||
.ch-card.ch6-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch6),var(--ch6-d))}
|
||
|
||
.ch-action{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:11px;font-weight:700;font-size:.9rem;color:#fff;transition:filter .15s}
|
||
.ch-action:hover{filter:brightness(1.08)}
|
||
.ch-card.ch1-card .ch-action{background:linear-gradient(135deg,var(--ch1),#60a5fa)}
|
||
.ch-card.ch2-card .ch-action{background:linear-gradient(135deg,var(--ch2),#34d399)}
|
||
.ch-card.ch3-card .ch-action{background:linear-gradient(135deg,var(--ch3),#a78bfa)}
|
||
.ch-card.ch4-card .ch-action{background:linear-gradient(135deg,var(--ch4),#f472b6)}
|
||
.ch-card.ch5-card .ch-action{background:linear-gradient(135deg,var(--ch5),#22d3ee)}
|
||
.ch-card.ch6-card .ch-action{background:linear-gradient(135deg,var(--ch6),#6ee7b7)}
|
||
|
||
/* ACHIEVEMENT STRIP */
|
||
.ach-strip{background:var(--card);border:1.5px solid var(--border);border-radius:16px;padding:18px 22px;margin-bottom:28px;display:flex;align-items:center;gap:16px;transition:border-color .4s,box-shadow .4s}
|
||
.ach-strip.lit{border-color:#f59e0b;box-shadow:0 0 0 3px rgba(245,158,11,.18)}
|
||
.ach-icon{width:52px;height:52px;border-radius:14px;background:rgba(0,0,0,.06);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .4s}
|
||
.ach-strip.lit .ach-icon{background:linear-gradient(135deg,#fbbf24,#f59e0b)}
|
||
.ach-icon svg{width:28px;height:28px;stroke:var(--muted);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||
.ach-strip.lit .ach-icon svg{stroke:#fff}
|
||
.ach-text{flex:1}
|
||
.ach-title{font-weight:800;font-size:1.02rem;color:var(--text)}
|
||
.ach-sub{font-size:.85rem;color:var(--muted);margin-top:2px}
|
||
.ach-strip.lit .ach-title{color:#92400e}
|
||
|
||
.foot{text-align:center;padding:24px 16px;color:var(--muted);font-size:.78rem;border-top:1px solid var(--border)}
|
||
|
||
/* COURSE FINAL */
|
||
.final-wrap{margin:0 0 28px;background:var(--card);border:1.5px solid var(--border);border-radius:18px;overflow:hidden;box-shadow:var(--sh)}
|
||
.final-head{padding:18px 22px;background:linear-gradient(135deg,#1e3a8a 0%,#2563eb 55%,#3b82f6 100%);color:#fff;cursor:pointer;display:flex;align-items:center;gap:14px;user-select:none;transition:filter .15s}
|
||
.final-head:hover{filter:brightness(1.06)}
|
||
.final-head-icon{width:46px;height:46px;border-radius:12px;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}
|
||
.final-head-icon svg{width:26px;height:26px;stroke:#fff;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||
.final-head-text{flex:1;min-width:0}
|
||
.final-head-tag{display:inline-block;padding:3px 9px;background:rgba(255,255,255,.22);border-radius:99px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px}
|
||
.final-head-title{font-family:'Outfit',sans-serif;font-size:1.18rem;font-weight:800;letter-spacing:-.01em;line-height:1.25}
|
||
.final-head-sub{font-size:.84rem;opacity:.9;margin-top:2px}
|
||
.final-chevron{flex-shrink:0;transition:transform .25s}
|
||
.final-chevron svg{width:24px;height:24px;stroke:#fff;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
|
||
.final-wrap.open .final-chevron{transform:rotate(180deg)}
|
||
.final-body{display:none;padding:22px}
|
||
.final-wrap.open .final-body{display:block}
|
||
|
||
.fin-placeholder{padding:24px 18px;background:linear-gradient(135deg,var(--pri-soft),rgba(94,234,212,.08));border:1.5px dashed var(--pri);border-radius:14px;text-align:center;color:var(--text)}
|
||
.fin-placeholder h3{font-family:'Outfit',sans-serif;color:var(--pri-d);margin-bottom:8px;font-size:1.1rem}
|
||
.fin-placeholder p{color:var(--muted);font-size:.92rem;line-height:1.55}
|
||
|
||
.fin-section-title{font-family:'Outfit',sans-serif;font-size:1.18rem;font-weight:800;color:var(--text);margin:8px 0 14px;letter-spacing:-.005em;display:flex;align-items:center;gap:9px}
|
||
.fin-section-title svg{width:20px;height:20px;stroke:var(--pri);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||
|
||
/* CHEAT SHEET */
|
||
.cheat-grid{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:28px}
|
||
@media(min-width:680px){.cheat-grid{grid-template-columns:1fr 1fr}}
|
||
@media(min-width:1000px){.cheat-grid{grid-template-columns:repeat(3,1fr)}}
|
||
.cheat-card{border:1.5px solid var(--border);border-radius:13px;padding:14px 16px;background:var(--card);position:relative;overflow:hidden}
|
||
.cheat-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px}
|
||
.cheat-card.c1::before{background:linear-gradient(180deg,var(--ch1),var(--ch1-d))}
|
||
.cheat-card.c2::before{background:linear-gradient(180deg,var(--ch2),var(--ch2-d))}
|
||
.cheat-card.c3::before{background:linear-gradient(180deg,var(--ch3),var(--ch3-d))}
|
||
.cheat-card.c4::before{background:linear-gradient(180deg,var(--ch4),var(--ch4-d))}
|
||
.cheat-card.c5::before{background:linear-gradient(180deg,var(--ch5),var(--ch5-d))}
|
||
.cheat-card.c6::before{background:linear-gradient(180deg,var(--ch6),var(--ch6-d))}
|
||
.cheat-head{display:flex;align-items:center;gap:9px;margin-bottom:9px;padding-left:6px}
|
||
.cheat-badge{font-size:.7rem;font-weight:800;padding:2px 8px;border-radius:99px;color:#fff;letter-spacing:.05em;text-transform:uppercase}
|
||
.cheat-card.c1 .cheat-badge{background:var(--ch1)}
|
||
.cheat-card.c2 .cheat-badge{background:var(--ch2)}
|
||
.cheat-card.c3 .cheat-badge{background:var(--ch3)}
|
||
.cheat-card.c4 .cheat-badge{background:var(--ch4)}
|
||
.cheat-card.c5 .cheat-badge{background:var(--ch5)}
|
||
.cheat-card.c6 .cheat-badge{background:var(--ch6)}
|
||
.cheat-title{font-weight:800;color:var(--text);font-size:.98rem}
|
||
.cheat-list{list-style:none;padding-left:6px;margin:0}
|
||
.cheat-list li{padding:6px 0;border-bottom:1px dashed var(--border);font-size:.92rem;line-height:1.5;color:var(--text)}
|
||
.cheat-list li:last-child{border-bottom:0}
|
||
|
||
/* BOSS PROGRESS */
|
||
.boss-overall-bar{background:linear-gradient(135deg,rgba(13,148,136,.08),rgba(94,234,212,.06));border:1px solid var(--border);border-radius:12px;padding:13px 16px;margin:6px 0 18px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}
|
||
.boss-overall-bar .lab{font-weight:700;font-size:.95rem;color:var(--text);min-width:200px}
|
||
.boss-overall-bar .bar{flex:1;min-width:160px;height:9px;background:rgba(13,148,136,.14);border-radius:5px;overflow:hidden}
|
||
.boss-overall-bar .fill{height:100%;background:linear-gradient(90deg,var(--pri),#5eead4,#f59e0b);transition:width .5s;border-radius:5px}
|
||
|
||
/* BOSS CARDS */
|
||
.boss-card{background:var(--card);border:2px solid var(--border);border-radius:14px;padding:16px;margin-bottom:14px;transition:border-color .35s,box-shadow .35s,transform .2s}
|
||
.boss-card.solved{border-color:#10b981;box-shadow:0 0 0 3px rgba(16,185,129,.18)}
|
||
.boss-head{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
|
||
.boss-tag{font-size:.7rem;font-weight:800;padding:3px 9px;border-radius:99px;background:rgba(13,148,136,.14);color:var(--pri-d);letter-spacing:.04em;text-transform:uppercase}
|
||
html.dark .boss-tag{color:#5eead4}
|
||
.boss-title{font-family:'Outfit',sans-serif;font-weight:800;color:var(--text);font-size:1.02rem;flex:1;min-width:0}
|
||
.boss-q{padding:12px 14px;background:rgba(13,148,136,.06);border-radius:10px;font-size:.96rem;line-height:1.55;margin-bottom:10px;color:var(--text)}
|
||
.boss-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
|
||
.boss-input{padding:8px 12px;border:1.5px solid var(--border);border-radius:8px;background:var(--card);color:var(--text);font-family:'JetBrains Mono',monospace;width:130px;text-align:center;font-size:.95rem;transition:border-color .15s}
|
||
.boss-input:focus{outline:0;border-color:var(--pri);box-shadow:0 0 0 3px var(--pri-soft)}
|
||
.boss-btn{padding:8px 16px;border-radius:9px;background:var(--card);color:var(--text);border:1.5px solid var(--border);font-weight:700;font-size:.88rem;cursor:pointer;font-family:inherit;transition:background .15s,border-color .15s,transform .1s}
|
||
.boss-btn:hover{background:var(--pri-soft);border-color:var(--pri)}
|
||
.boss-btn:active{transform:scale(.96)}
|
||
.boss-btn.primary{background:linear-gradient(135deg,var(--pri),#0891b2);color:#fff;border-color:transparent}
|
||
.boss-btn.primary:hover{filter:brightness(1.08)}
|
||
.boss-fb{padding:10px 14px;border-radius:9px;font-weight:600;font-size:.88rem;margin-top:8px;display:none;line-height:1.45}
|
||
.boss-fb.ok{display:block;background:#d1fae5;color:#065f46;border-left:4px solid #10b981}
|
||
.boss-fb.fail{display:block;background:#fee2e2;color:#7f1d1d;border-left:4px solid #dc2626}
|
||
html.dark .boss-fb.ok{background:rgba(16,185,129,.18);color:#a7f3d0}
|
||
html.dark .boss-fb.fail{background:rgba(220,38,38,.18);color:#fecaca}
|
||
.boss-hint-txt{margin-top:8px;padding:9px 13px;background:rgba(245,158,11,.12);border-left:3px solid #f59e0b;border-radius:6px;font-size:.86rem;color:var(--text);display:none;line-height:1.5}
|
||
.boss-hint-txt.show{display:block}
|
||
|
||
/* FINAL CTA */
|
||
.final-cta{margin-top:24px;padding:18px 20px;border-radius:14px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:1.5px solid #fbbf24;display:none;align-items:center;gap:14px;flex-wrap:wrap}
|
||
.final-cta.show{display:flex}
|
||
html.dark .final-cta{background:linear-gradient(135deg,rgba(245,158,11,.18),rgba(217,119,6,.15));border-color:#d97706}
|
||
.final-cta-icon{width:48px;height:48px;border-radius:12px;background:linear-gradient(135deg,#fbbf24,#f59e0b);display:flex;align-items:center;justify-content:center;flex-shrink:0}
|
||
.final-cta-icon svg{width:28px;height:28px;stroke:#fff;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||
.final-cta-txt{flex:1;min-width:180px}
|
||
.final-cta-title{font-weight:800;color:#92400e;font-size:1.05rem;font-family:'Outfit',sans-serif}
|
||
html.dark .final-cta-title{color:#fde68a}
|
||
.final-cta-sub{font-size:.86rem;color:#78350f;margin-top:2px}
|
||
html.dark .final-cta-sub{color:#fcd34d}
|
||
.final-cta-btn{padding:10px 18px;border-radius:10px;background:linear-gradient(135deg,var(--pri),#0891b2);color:#fff;text-decoration:none;font-weight:800;font-size:.9rem;display:inline-flex;align-items:center;gap:7px;transition:filter .15s}
|
||
.final-cta-btn:hover{filter:brightness(1.1)}
|
||
.final-cta-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<header class="hdr">
|
||
<div class="hdr-inner">
|
||
<div>
|
||
<a href="/textbooks" class="hdr-back">
|
||
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||
К каталогу
|
||
</a>
|
||
</div>
|
||
<div>
|
||
<h1>Физика — 9 класс</h1>
|
||
<div class="hdr-sub">Полный курс механики: кинематика, динамика, статика, законы сохранения, 12 лабораторных работ</div>
|
||
</div>
|
||
<div class="hdr-side">
|
||
<button id="theme-btn" class="hdr-btn" title="Сменить тему">
|
||
<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>
|
||
|
||
<section class="prog-overall">
|
||
<div class="po-icon">f</div>
|
||
<div class="po-text">
|
||
<div class="po-label">Общий прогресс по курсу</div>
|
||
<div id="overall-text" style="font-size:1.05rem;font-weight:700">Загрузка...</div>
|
||
<div class="po-bar"><div id="overall-fill" class="po-fill" style="width:0%"></div></div>
|
||
</div>
|
||
<div id="hero-xp-badge" class="po-xp" style="display:none" data-gamified>0 XP</div>
|
||
</section>
|
||
|
||
<div class="ch-grid">
|
||
<a href="/textbook/physics-9-ch1" class="ch-card ch1-card" id="ch-1">
|
||
<div class="ch-cover ch1">
|
||
<div class="ch-cover-wm">v</div>
|
||
<div class="ch-num">Глава 1</div>
|
||
<div class="ch-title">Основы кинематики</div>
|
||
<div class="ch-range">§1–§14</div>
|
||
</div>
|
||
<div class="ch-body">
|
||
<div class="ch-desc">Механическое движение, относительность, векторы, путь и перемещение, равномерное и равноускоренное движение, движение по окружности.</div>
|
||
<div class="ch-prog">
|
||
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-1">0%</span></div>
|
||
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-1" style="width:0%"></div></div>
|
||
</div>
|
||
<div class="ch-action">
|
||
<span id="btn-1">Открыть главу</span>
|
||
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||
</div>
|
||
</div>
|
||
</a>
|
||
|
||
<a href="/textbook/physics-9-ch2" class="ch-card ch2-card" id="ch-2">
|
||
<div class="ch-cover ch2">
|
||
<div class="ch-cover-wm">F</div>
|
||
<div class="ch-num">Глава 2</div>
|
||
<div class="ch-title">Основы динамики</div>
|
||
<div class="ch-range">§15–§24</div>
|
||
</div>
|
||
<div class="ch-body">
|
||
<div class="ch-desc">Законы Ньютона, масса, закон Гука, силы трения, движение под силой тяжести, всемирное тяготение, вес и невесомость.</div>
|
||
<div class="ch-prog">
|
||
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-2">0%</span></div>
|
||
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-2" style="width:0%"></div></div>
|
||
</div>
|
||
<div class="ch-action">
|
||
<span id="btn-2">Открыть главу</span>
|
||
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||
</div>
|
||
</div>
|
||
</a>
|
||
|
||
<a href="/textbook/physics-9-ch3" class="ch-card ch3-card" id="ch-3">
|
||
<div class="ch-cover ch3">
|
||
<div class="ch-cover-wm">M</div>
|
||
<div class="ch-num">Глава 3</div>
|
||
<div class="ch-title">Основы статики</div>
|
||
<div class="ch-range">§25–§30</div>
|
||
</div>
|
||
<div class="ch-body">
|
||
<div class="ch-desc">Условия равновесия, момент силы, рычаги, блоки, наклонная плоскость, КПД, центр тяжести, закон Архимеда.</div>
|
||
<div class="ch-prog">
|
||
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-3">0%</span></div>
|
||
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-3" style="width:0%"></div></div>
|
||
</div>
|
||
<div class="ch-action">
|
||
<span id="btn-3">Открыть главу</span>
|
||
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||
</div>
|
||
</div>
|
||
</a>
|
||
|
||
<a href="/textbook/physics-9-ch4" class="ch-card ch4-card" id="ch-4">
|
||
<div class="ch-cover ch4">
|
||
<div class="ch-cover-wm">p·E</div>
|
||
<div class="ch-num">Глава 4</div>
|
||
<div class="ch-title">Законы сохранения</div>
|
||
<div class="ch-range">§31–§36</div>
|
||
</div>
|
||
<div class="ch-body">
|
||
<div class="ch-desc">Импульс тела, закон сохранения импульса, реактивное движение, работа, мощность, кинетическая и потенциальная энергия, закон сохранения энергии.</div>
|
||
<div class="ch-prog">
|
||
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-4">0%</span></div>
|
||
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-4" style="width:0%"></div></div>
|
||
</div>
|
||
<div class="ch-action">
|
||
<span id="btn-4">Открыть главу</span>
|
||
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||
</div>
|
||
</div>
|
||
</a>
|
||
|
||
<a href="/textbook/physics-9-ch5" class="ch-card ch5-card" id="ch-5">
|
||
<div class="ch-cover ch5">
|
||
<div class="ch-cover-wm">Δt</div>
|
||
<div class="ch-num">Глава 5</div>
|
||
<div class="ch-title">Лабораторный практикум</div>
|
||
<div class="ch-range">ЛР 1–12</div>
|
||
</div>
|
||
<div class="ch-body">
|
||
<div class="ch-desc">12 лабораторных работ: погрешности, ускорение, окружность, закон Гука, трение, брошенное тело, рычаг, блоки, наклонная плоскость, Архимед, импульс, энергия.</div>
|
||
<div class="ch-prog">
|
||
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-5">0%</span></div>
|
||
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-5" style="width:0%"></div></div>
|
||
</div>
|
||
<div class="ch-action">
|
||
<span id="btn-5">Открыть главу</span>
|
||
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||
</div>
|
||
</div>
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<section class="final-wrap" id="course-final">
|
||
<div class="final-head" id="final-head" tabindex="0" role="button" aria-expanded="false" aria-controls="final-body">
|
||
<div class="final-head-icon">
|
||
<svg viewBox="0 0 24 24"><path d="M7 4h10v6a5 5 0 0 1-10 0V4z"/><path d="M5 4h2v2H5a2 2 0 0 1 0-4M19 4h-2v2h2a2 2 0 0 0 0-4M9 20h6M12 15v5"/></svg>
|
||
</div>
|
||
<div class="final-head-text">
|
||
<div class="final-head-tag">Финал курса</div>
|
||
<div class="final-head-title">Босс-проверка по всему курсу</div>
|
||
<div class="final-head-sub">Шпаргалка курса и 10 интегрированных боссов по всем 6 главам. Победи всех — получи «Магистр физики 9» и +150 XP.</div>
|
||
</div>
|
||
<div class="final-chevron"><svg viewBox="0 0 24 24"><polyline points="6 9 12 15 18 9"/></svg></div>
|
||
</div>
|
||
|
||
<div class="final-body" id="final-body">
|
||
|
||
<div class="fin-section-title">
|
||
<svg viewBox="0 0 24 24"><path d="M4 6h16M4 12h16M4 18h10"/></svg>
|
||
Шпаргалка курса
|
||
</div>
|
||
|
||
<div class="cheat-grid">
|
||
<div class="cheat-card c1">
|
||
<div class="cheat-head">
|
||
<span class="cheat-badge">Гл. 1</span>
|
||
<span class="cheat-title">МКТ</span>
|
||
</div>
|
||
<ul class="cheat-list">
|
||
<li>$\nu = N/N_A$, $\; N_A = 6 \cdot 10^{23}$</li>
|
||
<li>$p = \dfrac{1}{3} n m \overline{v^2} = \dfrac{2}{3} n \overline{E_k}$</li>
|
||
<li>$\overline{E_k} = \dfrac{3}{2} k_B T$</li>
|
||
<li>$pV = \nu RT$ (Клапейрон–Менделеев)</li>
|
||
<li>Изопроцессы: $pV/T = \text{const}$</li>
|
||
<li>Влажность: $\varphi = p/p_н$</li>
|
||
</ul>
|
||
</div>
|
||
<div class="cheat-card c2">
|
||
<div class="cheat-head">
|
||
<span class="cheat-badge">Гл. 2</span>
|
||
<span class="cheat-title">Термодинамика</span>
|
||
</div>
|
||
<ul class="cheat-list">
|
||
<li>$U = \dfrac{3}{2} \nu RT$ (одноатомный)</li>
|
||
<li>$A = p \Delta V$ (изобарно)</li>
|
||
<li>$Q = cm\Delta T$, $\; Q = \lambda m$</li>
|
||
<li>$\Delta U = Q - A_{газ}$ (1-й закон)</li>
|
||
<li>$\eta = \dfrac{Q_1 - Q_2}{Q_1}$</li>
|
||
<li>$\eta_{\text{Карно}} = 1 - \dfrac{T_2}{T_1}$</li>
|
||
</ul>
|
||
</div>
|
||
<div class="cheat-card c3">
|
||
<div class="cheat-head">
|
||
<span class="cheat-badge">Гл. 3</span>
|
||
<span class="cheat-title">Электростатика</span>
|
||
</div>
|
||
<ul class="cheat-list">
|
||
<li>$F = \dfrac{kq_1 q_2}{r^2}$ (Кулон)</li>
|
||
<li>$E = \dfrac{kq}{r^2}$, $\; \varphi = \dfrac{kq}{r}$</li>
|
||
<li>$A = qU$</li>
|
||
<li>$C = q/U = \dfrac{\varepsilon \varepsilon_0 S}{d}$</li>
|
||
<li>$W = \dfrac{CU^2}{2}$</li>
|
||
</ul>
|
||
</div>
|
||
<div class="cheat-card c4">
|
||
<div class="cheat-head">
|
||
<span class="cheat-badge">Гл. 4</span>
|
||
<span class="cheat-title">Постоянный ток</span>
|
||
</div>
|
||
<ul class="cheat-list">
|
||
<li>$I = q/t$</li>
|
||
<li>$\mathcal{E} = A_{ст}/q$ (ЭДС)</li>
|
||
<li>$I = \dfrac{\mathcal{E}}{R+r}$ (полная цепь)</li>
|
||
<li>$\eta = \dfrac{R}{R+r}$</li>
|
||
</ul>
|
||
</div>
|
||
<div class="cheat-card c5">
|
||
<div class="cheat-head">
|
||
<span class="cheat-badge">Гл. 5</span>
|
||
<span class="cheat-title">Магнетизм и ЭМИ</span>
|
||
</div>
|
||
<ul class="cheat-list">
|
||
<li>$F_A = BIL\sin\alpha$ (Ампер)</li>
|
||
<li>$F_L = qvB\sin\alpha$ (Лоренц)</li>
|
||
<li>$\Phi = BS\cos\alpha$</li>
|
||
<li>$\mathcal{E}_i = -N \dfrac{\Delta\Phi}{\Delta t}$ (Фарадей)</li>
|
||
<li>$W_L = \dfrac{LI^2}{2}$</li>
|
||
</ul>
|
||
</div>
|
||
<div class="cheat-card c6">
|
||
<div class="cheat-head">
|
||
<span class="cheat-badge">Гл. 6</span>
|
||
<span class="cheat-title">Ток в средах</span>
|
||
</div>
|
||
<ul class="cheat-list">
|
||
<li>Металлы: электроны, $R = \rho L/S$</li>
|
||
<li>Электролиты: $m = \dfrac{MIt}{Fn}$, $F = 96500$</li>
|
||
<li>Газы: ионизация; тлеющий, дуговой, искровой, коронный разряды</li>
|
||
<li>Полупроводники: электроны + дырки, p-n переход</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="fin-section-title">
|
||
<svg viewBox="0 0 24 24"><path d="M14.5 3.5l-5 5L4 4l1.5 6L3 12l5 1 1 5 2.5-2.5 6 1.5-4.5-5.5 5-5"/></svg>
|
||
10 интегрированных боссов
|
||
</div>
|
||
|
||
<div class="boss-overall-bar">
|
||
<div class="lab" id="fin-boss-lab">Боссов побеждено: 0 / 10</div>
|
||
<div class="bar"><div class="fill" id="fin-boss-fill" style="width:0%"></div></div>
|
||
</div>
|
||
|
||
<div id="fin-bosses-container"></div>
|
||
|
||
<div class="final-cta" id="final-cta">
|
||
<div class="final-cta-icon">
|
||
<svg viewBox="0 0 24 24"><path d="M6 9H4l-1-3h18l-1 3h-2M6 9l1 6h10l1-6M6 9h12"/><path d="M9 21h6M12 15v6"/></svg>
|
||
</div>
|
||
<div class="final-cta-txt">
|
||
<div class="final-cta-title">Курс Физика 9 пройден!</div>
|
||
<div class="final-cta-sub">Вы прошли всю итоговую проверку курса. +150 XP, ачивка «Магистр физики 9» получена.</div>
|
||
</div>
|
||
<a href="/textbooks" class="final-cta-btn">
|
||
К каталогу учебников
|
||
<svg viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</section>
|
||
|
||
<div class="ach-strip" id="ach-strip">
|
||
<div class="ach-icon">
|
||
<svg viewBox="0 0 24 24">
|
||
<path d="M6 9H4l-1-3h18l-1 3h-2M6 9l1 6h10l1-6M6 9h12"/><path d="M9 21h6M12 15v6"/>
|
||
</svg>
|
||
</div>
|
||
<div class="ach-text">
|
||
<div class="ach-title">Магистр физики 9</div>
|
||
<div class="ach-sub" id="ach-sub">Прочитайте все 36 параграфов курса, чтобы получить достижение, чтобы получить достижение</div>
|
||
</div>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<footer class="foot">
|
||
Интерактивный учебник «Физика — 9 класс» · LearnSpace
|
||
</footer>
|
||
|
||
<script>
|
||
'use strict';
|
||
|
||
/* THEME */
|
||
(function(){
|
||
var saved = localStorage.getItem('physics9_theme') || localStorage.getItem('theme') || 'light';
|
||
if (saved === 'dark') document.documentElement.classList.add('dark');
|
||
var lab = document.getElementById('theme-lab');
|
||
if (lab) lab.textContent = saved === 'dark' ? 'Светлая' : 'Тёмная';
|
||
document.getElementById('theme-btn').addEventListener('click', function(){
|
||
document.documentElement.classList.toggle('dark');
|
||
var dark = document.documentElement.classList.contains('dark');
|
||
localStorage.setItem('physics9_theme', dark ? 'dark' : 'light');
|
||
localStorage.setItem('theme', dark ? 'dark' : 'light');
|
||
if (lab) lab.textContent = dark ? 'Светлая' : 'Тёмная';
|
||
});
|
||
})();
|
||
|
||
/* PROGRESS */
|
||
var TOTAL = 36;
|
||
var CH_PARA = {
|
||
'physics-9-ch1': 14,
|
||
'physics-9-ch2': 10,
|
||
'physics-9-ch3': 6,
|
||
'physics-9-ch4': 6,
|
||
'physics-9-ch5': 12,
|
||
};
|
||
var CH_IDX = {
|
||
'physics-9-ch1': 1,
|
||
'physics-9-ch2': 2,
|
||
'physics-9-ch3': 3,
|
||
'physics-9-ch4': 4,
|
||
'physics-9-ch5': 5,
|
||
};
|
||
|
||
function setChProg(idx, readCount, total) {
|
||
var pct = total ? Math.round(readCount * 100 / total) : 0;
|
||
var labelEl = document.getElementById('prog-' + idx);
|
||
var fillEl = document.getElementById('fill-' + idx);
|
||
var btnEl = document.getElementById('btn-' + idx);
|
||
if (labelEl) labelEl.textContent = pct + '%';
|
||
if (fillEl) fillEl.style.width = pct + '%';
|
||
if (btnEl) {
|
||
if (readCount > 0 && readCount < total) btnEl.textContent = 'Продолжить';
|
||
else if (readCount >= total) btnEl.textContent = 'Открыть снова';
|
||
else btnEl.textContent = 'Открыть главу';
|
||
}
|
||
return pct;
|
||
}
|
||
|
||
var FIN_ACH_KEY = 'physics9_course_master';
|
||
|
||
function renderProgress(children) {
|
||
var totalRead = 0;
|
||
for (var i = 0; i < children.length; i++) {
|
||
var ch = children[i];
|
||
var idx = CH_IDX[ch.slug];
|
||
if (!idx) continue;
|
||
var read = ch.progress ? ch.progress.read.length : 0;
|
||
var total = ch.para_count || CH_PARA[ch.slug] || 1;
|
||
totalRead += read;
|
||
setChProg(idx, read, total);
|
||
}
|
||
|
||
var pct = Math.round(totalRead * 100 / TOTAL);
|
||
var overallEl = document.getElementById('overall-text');
|
||
var fillEl = document.getElementById('overall-fill');
|
||
if (overallEl) overallEl.textContent = totalRead + ' из ' + TOTAL + ' параграфов \xb7 ' + pct + '%';
|
||
if (fillEl) fillEl.style.width = pct + '%';
|
||
|
||
var xpBadge = document.getElementById('hero-xp-badge');
|
||
var xp = parseInt(localStorage.getItem('physics9_xp') || '0', 10) || 0;
|
||
if (xpBadge && xp > 0) {
|
||
xpBadge.style.display = '';
|
||
xpBadge.textContent = xp + ' XP';
|
||
}
|
||
|
||
var mastered = localStorage.getItem(FIN_ACH_KEY) === '1';
|
||
if (totalRead >= TOTAL || mastered) {
|
||
var strip = document.getElementById('ach-strip');
|
||
var sub = document.getElementById('ach-sub');
|
||
if (strip) strip.classList.add('lit');
|
||
if (sub) {
|
||
if (mastered) sub.textContent = 'Выполнено! Вы — Магистр физики 9.';
|
||
else sub.textContent = 'Выполнено! Вы прочитали весь курс физики 9 класса.';
|
||
}
|
||
}
|
||
}
|
||
|
||
/* COURSE FINAL — lazy bosses */
|
||
var FIN_BOSS_KEY = 'physics9_course_bosses';
|
||
|
||
var FIN_BOSSES = [
|
||
{
|
||
n: 1,
|
||
title: 'МКТ + Термодинамика',
|
||
tag: 'Гл. 1 + 2',
|
||
q: '1 моль одноатомного идеального газа изохорно нагрели от $T_1 = 300$ К до $T_2 = 600$ К. Найди изменение внутренней энергии $\\Delta U$ в Дж. ($R = 8{,}3$ Дж/(моль·К))',
|
||
hint: 'Для одноатомного газа $\\Delta U = \\dfrac{3}{2} \\nu R \\Delta T = 1{,}5 \\cdot 1 \\cdot 8{,}3 \\cdot 300 \\approx 3735$ Дж.',
|
||
ans: 3735,
|
||
tol: 50,
|
||
step: '1'
|
||
},
|
||
{
|
||
n: 2,
|
||
title: 'Изопроцесс + Работа',
|
||
tag: 'Гл. 1 + 2',
|
||
q: 'Газ изобарно при давлении $p = 2$ атм расширили от объёма $V_1 = 5$ л до $V_2 = 15$ л. Найди работу газа в Дж. (1 атм $\\approx 10^5$ Па)',
|
||
hint: '$A = p\\Delta V = 2 \\cdot 10^5 \\cdot (15 - 5) \\cdot 10^{-3} = 2 \\cdot 10^5 \\cdot 10^{-2} = 2000$ Дж.',
|
||
ans: 2000,
|
||
tol: 30,
|
||
step: '1'
|
||
},
|
||
{
|
||
n: 3,
|
||
title: 'Цикл Карно',
|
||
tag: 'Гл. 2',
|
||
q: 'Идеальный двигатель Карно работает между нагревателем $T_1 = 600$ К и холодильником $T_2 = 300$ К. Каков КПД в процентах?',
|
||
hint: '$\\eta = 1 - \\dfrac{T_2}{T_1} = 1 - \\dfrac{300}{600} = 0{,}5 = 50\\%$.',
|
||
ans: 50,
|
||
step: '1'
|
||
},
|
||
{
|
||
n: 4,
|
||
title: 'Закон Кулона',
|
||
tag: 'Гл. 3',
|
||
q: 'Два точечных заряда по $+2$ мкКл расположены на расстоянии $0{,}1$ м друг от друга в вакууме. Найди силу взаимодействия в Н. ($k = 9 \\cdot 10^9$ Н·м²/Кл²)',
|
||
hint: '$F = \\dfrac{k q_1 q_2}{r^2} = \\dfrac{9 \\cdot 10^9 \\cdot (2 \\cdot 10^{-6})^2}{(0{,}1)^2} = \\dfrac{9 \\cdot 10^9 \\cdot 4 \\cdot 10^{-12}}{10^{-2}} = 3{,}6$ Н.',
|
||
ans: 3.6,
|
||
tol: 0.2,
|
||
step: '0.01'
|
||
},
|
||
{
|
||
n: 5,
|
||
title: 'Энергия конденсатора',
|
||
tag: 'Гл. 3',
|
||
q: 'Конденсатор ёмкостью $C = 100$ мкФ заряжен до напряжения $U = 200$ В. Найди энергию электрического поля конденсатора в Дж.',
|
||
hint: '$W = \\dfrac{CU^2}{2} = \\dfrac{10^{-4} \\cdot 200^2}{2} = \\dfrac{10^{-4} \\cdot 4 \\cdot 10^4}{2} = 2$ Дж.',
|
||
ans: 2,
|
||
step: '1'
|
||
},
|
||
{
|
||
n: 6,
|
||
title: 'Закон Ома для полной цепи',
|
||
tag: 'Гл. 4',
|
||
q: 'Источник тока имеет ЭДС $\\mathcal{E} = 12$ В и внутреннее сопротивление $r = 1$ Ом. Внешнее сопротивление $R = 5$ Ом. Найди КПД источника в процентах (округли до целых).',
|
||
hint: '$\\eta = \\dfrac{R}{R+r} = \\dfrac{5}{5+1} = \\dfrac{5}{6} \\approx 0{,}833 \\approx 83\\%$.',
|
||
ans: 83,
|
||
tol: 1,
|
||
step: '1'
|
||
},
|
||
{
|
||
n: 7,
|
||
title: 'Сила Лоренца + Радиус',
|
||
tag: 'Гл. 5',
|
||
q: 'Протон ($m = 1{,}67 \\cdot 10^{-27}$ кг, $q = 1{,}6 \\cdot 10^{-19}$ Кл) влетает перпендикулярно в магнитное поле $B = 1$ Тл со скоростью $v = 10^6$ м/с. Найди радиус его траектории в мм (допуск 0{,}5).',
|
||
hint: '$R = \\dfrac{mv}{qB} = \\dfrac{1{,}67 \\cdot 10^{-27} \\cdot 10^6}{1{,}6 \\cdot 10^{-19} \\cdot 1} \\approx 1{,}04 \\cdot 10^{-2}$ м $\\approx 10{,}4$ мм.',
|
||
ans: 10.4,
|
||
tol: 0.5,
|
||
step: '0.01'
|
||
},
|
||
{
|
||
n: 8,
|
||
title: 'Закон Фарадея',
|
||
tag: 'Гл. 5',
|
||
q: 'Катушка из $N = 200$ витков пронизывается магнитным потоком, изменяющимся на $\\Delta\\Phi = 0{,}5$ Вб за $\\Delta t = 0{,}1$ с. Найди модуль ЭДС индукции в В.',
|
||
hint: '$|\\mathcal{E}_i| = N \\dfrac{\\Delta\\Phi}{\\Delta t} = 200 \\cdot \\dfrac{0{,}5}{0{,}1} = 200 \\cdot 5 = 1000$ В.',
|
||
ans: 1000,
|
||
step: '1'
|
||
},
|
||
{
|
||
n: 9,
|
||
title: 'Энергия катушки',
|
||
tag: 'Гл. 5',
|
||
q: 'Катушка с индуктивностью $L = 0{,}5$ Гн, по которой течёт ток $I = 4$ А. Найди энергию магнитного поля катушки в Дж.',
|
||
hint: '$W = \\dfrac{LI^2}{2} = \\dfrac{0{,}5 \\cdot 16}{2} = 4$ Дж.',
|
||
ans: 4,
|
||
step: '1'
|
||
},
|
||
{
|
||
n: 10,
|
||
title: 'Магистр электродинамики',
|
||
tag: 'синтез курса',
|
||
q: 'В электролитической ванне через раствор CuSO$_4$ пропускают ток $I = 5$ А в течение $t = 1$ часа. Сколько меди выделится на катоде в граммах? ($M_{Cu} = 64$ г/моль, валентность $n = 2$, постоянная Фарадея $F = 96\\,500$ Кл/моль; округли до сотых, допуск 0{,}05).',
|
||
hint: 'Закон Фарадея для электролиза: $m = \\dfrac{MIt}{Fn} = \\dfrac{64 \\cdot 5 \\cdot 3600}{96\\,500 \\cdot 2} = \\dfrac{1\\,152\\,000}{193\\,000} \\approx 5{,}97$ г.',
|
||
ans: 5.97,
|
||
tol: 0.05,
|
||
step: '0.01'
|
||
}
|
||
];
|
||
|
||
function loadFinBossState(){
|
||
try { return JSON.parse(localStorage.getItem(FIN_BOSS_KEY) || '{}') || {}; }
|
||
catch(e) { return {}; }
|
||
}
|
||
function saveFinBossState(s){
|
||
try { localStorage.setItem(FIN_BOSS_KEY, JSON.stringify(s)); } catch(e){}
|
||
}
|
||
|
||
function finRenderKatex(root){
|
||
if (typeof window.renderMathInElement !== 'function') return;
|
||
try {
|
||
window.renderMathInElement(root, {
|
||
delimiters: [
|
||
{left: '$$', right: '$$', display: true},
|
||
{left: '$', right: '$', display: false}
|
||
],
|
||
throwOnError: false
|
||
});
|
||
} catch(e){}
|
||
}
|
||
|
||
function updateFinBossBar(state){
|
||
var won = 0;
|
||
for (var k in state) if (state[k]) won++;
|
||
var lab = document.getElementById('fin-boss-lab');
|
||
var fill = document.getElementById('fin-boss-fill');
|
||
if (lab) lab.textContent = 'Боссов побеждено: ' + won + ' / ' + FIN_BOSSES.length;
|
||
if (fill) fill.style.width = Math.round(won * 100 / FIN_BOSSES.length) + '%';
|
||
return won;
|
||
}
|
||
|
||
function maybeUnlockMaster(state){
|
||
if (localStorage.getItem(FIN_ACH_KEY) === '1') return;
|
||
var won = 0;
|
||
for (var k in state) if (state[k]) won++;
|
||
if (won < FIN_BOSSES.length) return;
|
||
|
||
localStorage.setItem(FIN_ACH_KEY, '1');
|
||
|
||
/* +150 XP — Физика 10 самый крупный курс (37 параграфов, 6 глав) */
|
||
var xp = parseInt(localStorage.getItem('physics9_xp') || '0', 10) || 0;
|
||
localStorage.setItem('physics9_xp', String(xp + 150));
|
||
|
||
/* trigger global XP system if available */
|
||
try {
|
||
if (window.LS && typeof window.LS.addXp === 'function') {
|
||
window.LS.addXp(150, 'physics9-master');
|
||
} else if (typeof window.addXp === 'function') {
|
||
window.addXp(150, 'physics9-master');
|
||
}
|
||
} catch(e){}
|
||
|
||
/* confetti */
|
||
try { if (typeof window.confetti === 'function') window.confetti({particleCount: 220, spread: 110, origin: {y: .6}}); } catch(e){}
|
||
|
||
/* light up ach-strip */
|
||
var strip = document.getElementById('ach-strip');
|
||
var sub = document.getElementById('ach-sub');
|
||
if (strip) strip.classList.add('lit');
|
||
if (sub) sub.textContent = 'Выполнено! Вы — Магистр физики 9.';
|
||
|
||
/* show CTA */
|
||
var cta = document.getElementById('final-cta');
|
||
if (cta) cta.classList.add('show');
|
||
|
||
/* refresh XP badge */
|
||
var xpBadge = document.getElementById('hero-xp-badge');
|
||
if (xpBadge) {
|
||
var newXp = parseInt(localStorage.getItem('physics9_xp') || '0', 10) || 0;
|
||
xpBadge.style.display = '';
|
||
xpBadge.textContent = newXp + ' XP';
|
||
}
|
||
}
|
||
|
||
function buildFinBoss(b, state){
|
||
var solvedClass = state[b.n] ? ' solved' : '';
|
||
var step = b.step || '1';
|
||
var displayAns = (typeof b.ans === 'number' && step !== '1') ? b.ans.toFixed(2) : b.ans;
|
||
return '<div class="boss-card' + solvedClass + '" id="fin-boss-' + b.n + '-card">'
|
||
+ '<div class="boss-head">'
|
||
+ '<span class="boss-tag">' + b.tag + '</span>'
|
||
+ '<span class="boss-title">Босс ' + b.n + '. ' + b.title + '</span>'
|
||
+ '</div>'
|
||
+ '<div class="boss-q" id="fin-boss-' + b.n + '-q">' + b.q + '</div>'
|
||
+ '<div class="boss-row">'
|
||
+ '<input type="number" step="' + step + '" class="boss-input" id="fin-boss-' + b.n + '-inp" placeholder="число"' + (state[b.n] ? ' value="' + displayAns + '" disabled' : '') + '>'
|
||
+ '<button class="boss-btn primary" id="fin-boss-' + b.n + '-go"' + (state[b.n] ? ' disabled' : '') + '>Атаковать</button>'
|
||
+ '<button class="boss-btn" id="fin-boss-' + b.n + '-hint">Подсказка</button>'
|
||
+ '</div>'
|
||
+ '<div class="boss-hint-txt" id="fin-boss-' + b.n + '-hinttxt">' + b.hint + '</div>'
|
||
+ '<div class="boss-fb' + (state[b.n] ? ' ok' : '') + '" id="fin-boss-' + b.n + '-fb">' + (state[b.n] ? 'Победа! +15 XP. Босс уже повержен.' : '') + '</div>'
|
||
+ '</div>';
|
||
}
|
||
|
||
function bindFinBoss(b){
|
||
var state = loadFinBossState();
|
||
var goBtn = document.getElementById('fin-boss-' + b.n + '-go');
|
||
var hintBtn = document.getElementById('fin-boss-' + b.n + '-hint');
|
||
var inp = document.getElementById('fin-boss-' + b.n + '-inp');
|
||
var fb = document.getElementById('fin-boss-' + b.n + '-fb');
|
||
var hintTx = document.getElementById('fin-boss-' + b.n + '-hinttxt');
|
||
var card = document.getElementById('fin-boss-' + b.n + '-card');
|
||
if (!goBtn) return;
|
||
|
||
if (hintBtn) hintBtn.addEventListener('click', function(){
|
||
if (hintTx) hintTx.classList.toggle('show');
|
||
});
|
||
|
||
if (state[b.n]) return; /* already solved */
|
||
|
||
goBtn.addEventListener('click', function(){
|
||
var v = parseFloat((inp.value || '').replace(',', '.'));
|
||
if (isNaN(v)) {
|
||
fb.className = 'boss-fb fail';
|
||
fb.textContent = 'Введите число.';
|
||
return;
|
||
}
|
||
var tol = (typeof b.tol === 'number') ? b.tol : 1e-9;
|
||
if (Math.abs(v - b.ans) < tol) {
|
||
fb.className = 'boss-fb ok';
|
||
fb.textContent = 'Победа! +15 XP. Босс повержен.';
|
||
card.classList.add('solved');
|
||
goBtn.disabled = true;
|
||
inp.disabled = true;
|
||
|
||
var s = loadFinBossState();
|
||
if (!s[b.n]) {
|
||
s[b.n] = true;
|
||
saveFinBossState(s);
|
||
|
||
/* +15 XP */
|
||
var xp = parseInt(localStorage.getItem('physics9_xp') || '0', 10) || 0;
|
||
localStorage.setItem('physics9_xp', String(xp + 15));
|
||
try {
|
||
if (window.LS && typeof window.LS.addXp === 'function') window.LS.addXp(15, 'fin-boss-' + b.n);
|
||
else if (typeof window.addXp === 'function') window.addXp(15, 'fin-boss-' + b.n);
|
||
} catch(e){}
|
||
|
||
var xpBadge = document.getElementById('hero-xp-badge');
|
||
if (xpBadge) {
|
||
var nXp = parseInt(localStorage.getItem('physics9_xp') || '0', 10) || 0;
|
||
xpBadge.style.display = '';
|
||
xpBadge.textContent = nXp + ' XP';
|
||
}
|
||
|
||
updateFinBossBar(s);
|
||
maybeUnlockMaster(s);
|
||
}
|
||
} else {
|
||
fb.className = 'boss-fb fail';
|
||
fb.textContent = 'Не то. Перепроверь решение и попробуй снова.';
|
||
}
|
||
});
|
||
|
||
inp.addEventListener('keydown', function(e){
|
||
if (e.key === 'Enter') { e.preventDefault(); goBtn.click(); }
|
||
});
|
||
}
|
||
|
||
var FIN_BOSSES_RENDERED = false;
|
||
function renderFinBosses(){
|
||
if (FIN_BOSSES_RENDERED) return;
|
||
var cont = document.getElementById('fin-bosses-container');
|
||
if (!cont) return;
|
||
var state = loadFinBossState();
|
||
var html = '';
|
||
for (var i = 0; i < FIN_BOSSES.length; i++) html += buildFinBoss(FIN_BOSSES[i], state);
|
||
cont.innerHTML = html;
|
||
for (var j = 0; j < FIN_BOSSES.length; j++) bindFinBoss(FIN_BOSSES[j]);
|
||
|
||
var wrap = document.getElementById('course-final');
|
||
finRenderKatex(wrap);
|
||
|
||
updateFinBossBar(state);
|
||
|
||
/* if already mastered: show CTA */
|
||
if (localStorage.getItem(FIN_ACH_KEY) === '1') {
|
||
var cta = document.getElementById('final-cta');
|
||
if (cta) cta.classList.add('show');
|
||
var strip = document.getElementById('ach-strip');
|
||
var sub = document.getElementById('ach-sub');
|
||
if (strip) strip.classList.add('lit');
|
||
if (sub) sub.textContent = 'Выполнено! Вы — Магистр физики 9.';
|
||
}
|
||
|
||
FIN_BOSSES_RENDERED = true;
|
||
}
|
||
|
||
/* FINAL ACCORDION */
|
||
(function bindFinalAccordion(){
|
||
var head = document.getElementById('final-head');
|
||
var wrap = document.getElementById('course-final');
|
||
if (!head || !wrap) return;
|
||
|
||
function toggle(){
|
||
var willOpen = !wrap.classList.contains('open');
|
||
wrap.classList.toggle('open');
|
||
head.setAttribute('aria-expanded', willOpen ? 'true' : 'false');
|
||
if (willOpen) {
|
||
renderFinBosses();
|
||
finRenderKatex(wrap);
|
||
}
|
||
}
|
||
|
||
head.addEventListener('click', toggle);
|
||
head.addEventListener('keydown', function(e){
|
||
if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); toggle(); }
|
||
});
|
||
})();
|
||
|
||
/* sync ach-strip + CTA on load if already mastered */
|
||
(function syncMasterOnLoad(){
|
||
if (localStorage.getItem(FIN_ACH_KEY) === '1') {
|
||
var strip = document.getElementById('ach-strip');
|
||
var sub = document.getElementById('ach-sub');
|
||
if (strip) strip.classList.add('lit');
|
||
if (sub) sub.textContent = 'Выполнено! Вы — Магистр физики 9.';
|
||
}
|
||
})();
|
||
|
||
function loadProgress() {
|
||
if (typeof window.LS === 'undefined' || typeof window.LS.api !== 'function') {
|
||
renderProgress([]);
|
||
return;
|
||
}
|
||
window.LS.api('/api/textbooks/physics-9/children')
|
||
.then(function(data) {
|
||
if (data && data.children) renderProgress(data.children);
|
||
else renderProgress([]);
|
||
})
|
||
.catch(function() { renderProgress([]); });
|
||
}
|
||
|
||
if (document.readyState === 'loading') {
|
||
document.addEventListener('DOMContentLoaded', loadProgress);
|
||
} else {
|
||
loadProgress();
|
||
}
|
||
window.addEventListener('focus', loadProgress);
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|