fix(geom8 ch2): §5 трапеция — высота между основаниями + правильные диагональ/треугольники

Было:
- 5.1: высота нарисована из вершины (некорректно как иллюстрация
  'расстояние между параллельными сторонами')
- 5.2: координаты треугольников ABD/BCD и диагонали указывали на точки
  ВНЕ трапеции (диагональ заканчивалась в (215,30) вместо вершины D=(65,30))
- 5.3: то же — высота из вершины

Стало:
- Высота — вертикальная пунктирная линия в середине трапеции от верхнего
  основания до нижнего, с прямым углом
- Все вершины ABCD подписаны и отмечены точками
- В 5.2 диагональ BD корректно проведена, треугольники ABD/BCD точно
  совпадают с половинами трапеции, добавлены подписи S₁=½ah, S₂=½bh

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-28 10:00:21 +03:00
parent 6d7eafceb5
commit faf0fc5b41
+63 -37
View File
@@ -1988,20 +1988,30 @@ function buildP5(){
<p>где $a$ и $b$ — основания (параллельные стороны), $h$ — высота (расстояние между основаниями).</p>
<p style="margin-top:8px"><b>Через среднюю линию:</b> $m = \\dfrac{a+b}{2}$, поэтому $S = m \\cdot h$.</p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 280 150" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- trapezoid with a, b, m (midline), h labeled -->
<polygon points="30,120 230,120 190,40 70,40" fill="rgba(2,132,199,.13)" stroke="#0284c7" stroke-width="2.5"/>
<!-- height line -->
<line x1="70" y1="40" x2="70" y2="120" stroke="#f59e0b" stroke-width="2" stroke-dasharray="5 3"/>
<polyline points="78,120 78,112 70,112" fill="none" stroke="#f59e0b" stroke-width="1.5"/>
<!-- midline -->
<line x1="50" y1="80" x2="210" y2="80" stroke="#059669" stroke-width="1.5" stroke-dasharray="7 4"/>
<!-- labels -->
<text x="130" y="136" text-anchor="middle" font-size="12" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">a (нижнее)</text>
<text x="130" y="34" text-anchor="middle" font-size="12" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">b (верхнее)</text>
<text x="56" y="82" text-anchor="end" font-size="12" font-weight="700" fill="#b45309" font-family="JetBrains Mono,monospace">h</text>
<text x="218" y="83" font-size="11" fill="#059669" font-family="JetBrains Mono,monospace">m=(a+b)/2</text>
<text x="140" y="95" text-anchor="middle" dominant-baseline="middle" font-size="11" fill="#0369a1" font-family="JetBrains Mono,monospace">S = m·h</text>
<svg viewBox="0 0 300 170" style="max-width:320px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- trapezoid: A(40,130) B(260,130) C(210,50) D(90,50) -->
<polygon points="40,130 260,130 210,50 90,50" fill="rgba(2,132,199,.13)" stroke="#0284c7" stroke-width="2.5"/>
<!-- height: vertical from top-base midpoint (150,50) down to bottom (150,130) -->
<line x1="150" y1="50" x2="150" y2="130" stroke="#dc2626" stroke-width="2" stroke-dasharray="5 3"/>
<!-- right-angle marker at bottom -->
<polyline points="158,130 158,122 150,122" fill="none" stroke="#dc2626" stroke-width="1.5"/>
<!-- midline (m) -->
<line x1="65" y1="90" x2="235" y2="90" stroke="#059669" stroke-width="1.5" stroke-dasharray="7 4"/>
<!-- vertex dots -->
<circle cx="40" cy="130" r="3" fill="#0284c7"/><circle cx="260" cy="130" r="3" fill="#0284c7"/>
<circle cx="90" cy="50" r="3" fill="#0284c7"/><circle cx="210" cy="50" r="3" fill="#0284c7"/>
<!-- vertex labels -->
<text x="32" y="142" font-size="11" font-weight="700" fill="#0369a1" font-family="Unbounded,sans-serif">A</text>
<text x="262" y="142" font-size="11" font-weight="700" fill="#0369a1" font-family="Unbounded,sans-serif">B</text>
<text x="210" y="44" font-size="11" font-weight="700" fill="#0369a1" font-family="Unbounded,sans-serif">C</text>
<text x="82" y="44" font-size="11" font-weight="700" fill="#0369a1" font-family="Unbounded,sans-serif">D</text>
<!-- base labels -->
<text x="150" y="160" text-anchor="middle" font-size="12" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">a (нижнее основание)</text>
<text x="150" y="38" text-anchor="middle" font-size="12" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">b (верхнее основание)</text>
<!-- height label -->
<text x="158" y="92" font-size="13" font-weight="800" fill="#b91c1c" font-family="JetBrains Mono,monospace">h</text>
<!-- midline label -->
<text x="240" y="93" font-size="11" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">m</text>
</svg>
</div>`);
@@ -2014,20 +2024,32 @@ function buildP5(){
</ul>
<p style="margin-top:8px">По аддитивности: $S = S_1+S_2 = \\dfrac{1}{2}ah+\\dfrac{1}{2}bh = \\dfrac{a+b}{2}\\cdot h$. $\\square$</p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 260 130" style="max-width:280px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- trapezoid split by diagonal BD -->
<polygon points="25,110 215,110 180,30 65,30" fill="none" stroke="#0284c7" stroke-width="2"/>
<!-- lower triangle -->
<polygon points="25,110 215,110 215,30" fill="rgba(2,132,199,.18)" stroke="#0284c7" stroke-width="1.5"/>
<!-- upper triangle -->
<polygon points="25,110 215,30 65,30" fill="rgba(5,150,105,.18)" stroke="#059669" stroke-width="1.5"/>
<!-- diagonal -->
<line x1="25" y1="110" x2="215" y2="30" stroke="#f59e0b" stroke-width="1.5" stroke-dasharray="6 3"/>
<!-- labels -->
<text x="120" y="124" text-anchor="middle" font-size="11" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">a = AB</text>
<text x="122" y="24" text-anchor="middle" font-size="11" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">b = CD</text>
<text x="145" y="85" text-anchor="middle" font-size="10" fill="#0284c7">S₁ = ½ah</text>
<text x="75" y="68" text-anchor="middle" font-size="10" fill="#059669">S₂ = ½bh</text>
<svg viewBox="0 0 280 160" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- trapezoid ABCD: A(30,125) B(250,125) C(200,40) D(80,40) -->
<!-- △ABD lower: A B D -->
<polygon points="30,125 250,125 80,40" fill="rgba(2,132,199,.22)" stroke="#0284c7" stroke-width="1.5"/>
<!-- △BCD upper: B C D -->
<polygon points="250,125 200,40 80,40" fill="rgba(5,150,105,.22)" stroke="#059669" stroke-width="1.5"/>
<!-- trapezoid outline -->
<polygon points="30,125 250,125 200,40 80,40" fill="none" stroke="#0284c7" stroke-width="2.5"/>
<!-- diagonal BD highlighted -->
<line x1="250" y1="125" x2="80" y2="40" stroke="#dc2626" stroke-width="2"/>
<!-- vertex dots -->
<circle cx="30" cy="125" r="3.5" fill="#0284c7"/><circle cx="250" cy="125" r="3.5" fill="#0284c7"/>
<circle cx="200" cy="40" r="3.5" fill="#0284c7"/><circle cx="80" cy="40" r="3.5" fill="#0284c7"/>
<!-- labels A B C D -->
<text x="22" y="138" font-size="12" font-weight="800" fill="#0369a1" font-family="Unbounded,sans-serif">A</text>
<text x="252" y="138" font-size="12" font-weight="800" fill="#0369a1" font-family="Unbounded,sans-serif">B</text>
<text x="200" y="32" font-size="12" font-weight="800" fill="#0369a1" font-family="Unbounded,sans-serif">C</text>
<text x="72" y="32" font-size="12" font-weight="800" fill="#0369a1" font-family="Unbounded,sans-serif">D</text>
<!-- triangle S labels -->
<text x="120" y="105" font-size="11" font-weight="800" fill="#0369a1" font-family="JetBrains Mono,monospace">S₁ = ½ah</text>
<text x="148" y="60" font-size="11" font-weight="800" fill="#047857" font-family="JetBrains Mono,monospace">S₂ = ½bh</text>
<!-- BD label -->
<text x="160" y="80" font-size="11" font-weight="700" fill="#b91c1c" font-family="JetBrains Mono,monospace">BD</text>
<!-- bottom/top labels -->
<text x="140" y="153" text-anchor="middle" font-size="11" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">a</text>
<text x="140" y="22" text-anchor="middle" font-size="11" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">b</text>
</svg>
</div>`);
@@ -2036,15 +2058,19 @@ function buildP5(){
<p style="margin-top:8px"><b>S = 72 м², h = 9 м, a = 10 м. Найти b.</b><br>$b = \\dfrac{2S}{h}-a = \\dfrac{144}{9}-10=16-10=6\\,\\text{м}$.</p>
<p style="margin-top:8px"><b>S = 80 дм², средняя линия m = 16 дм. Высота?</b><br>$h = S/m = 80/16 = 5\\,\\text{дм}$.</p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 260 130" style="max-width:280px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- trapezoid a=14, b=8, h=6 labeled -->
<polygon points="25,105 215,105 185,35 55,35" fill="rgba(2,132,199,.15)" stroke="#0284c7" stroke-width="2.5"/>
<line x1="55" y1="35" x2="55" y2="105" stroke="#f59e0b" stroke-width="2" stroke-dasharray="5 3"/>
<polyline points="63,105 63,97 55,97" fill="none" stroke="#f59e0b" stroke-width="1.5"/>
<text x="120" y="122" text-anchor="middle" font-size="12" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">a = 14 см</text>
<text x="120" y="28" text-anchor="middle" font-size="12" font-weight="700" fill="#047857" font-family="JetBrains Mono,monospace">b = 8 см</text>
<text x="42" y="72" text-anchor="middle" dominant-baseline="middle" font-size="12" font-weight="700" fill="#b45309" font-family="JetBrains Mono,monospace">h=6</text>
<text x="130" y="72" text-anchor="middle" dominant-baseline="middle" font-size="14" font-weight="800" fill="#0369a1" font-family="Unbounded,sans-serif">S=66</text>
<svg viewBox="0 0 280 160" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- trapezoid a=14, b=8, h=6 -->
<polygon points="30,125 250,125 190,40 90,40" fill="rgba(2,132,199,.15)" stroke="#0284c7" stroke-width="2.5"/>
<!-- height: vertical line in middle of trapezoid -->
<line x1="140" y1="40" x2="140" y2="125" stroke="#dc2626" stroke-width="2" stroke-dasharray="5 3"/>
<polyline points="148,125 148,117 140,117" fill="none" stroke="#dc2626" stroke-width="1.5"/>
<!-- foot dot on bottom base -->
<circle cx="140" cy="125" r="2.5" fill="#dc2626"/>
<!-- labels -->
<text x="140" y="148" text-anchor="middle" font-size="12" font-weight="800" fill="#047857" font-family="JetBrains Mono,monospace">a = 14 см</text>
<text x="140" y="30" text-anchor="middle" font-size="12" font-weight="800" fill="#047857" font-family="JetBrains Mono,monospace">b = 8 см</text>
<text x="152" y="86" font-size="13" font-weight="800" fill="#b91c1c" font-family="JetBrains Mono,monospace">h=6</text>
<text x="220" y="86" font-size="16" font-weight="800" fill="#0369a1" font-family="Unbounded,sans-serif">S=66 см²</text>
</svg>
</div>`);