fix(geom8): убрать LaTeX-квадратики □ (\square/\blacksquare) — заменить на 'ч.т.д.'

В концах доказательств использовался LaTeX-маркер \square (или
\blacksquare) для QED. KaTeX рендерит его как пустой квадрат U+25A1
который во многих браузерах отображается как 'тофу' (битый глиф).

Заменены во всех 3 главах геометрии:
- \$\square\$  → <b>ч.т.д.</b> (HTML текст)
- \$\blacksquare\$ → <b>ч.т.д.</b>
- \quad\square в $$ → закрытие $$ + 'ч.т.д.'
- \square ABCD (как символ параллелограмма) → просто ABCD

Затронуто: 29 в ch1 + 26 в ch2 + 1 в ch3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-28 15:39:53 +03:00
parent d7d74b1553
commit ad5435dace
3 changed files with 37 additions and 37 deletions
+26 -26
View File
@@ -1828,7 +1828,7 @@ function buildP4(){
html += makeCard('theory','Определение и элементы','4.1',`
<p><b>Параллелограмм</b> — четырёхугольник, у которого <em>противоположные стороны попарно параллельны</em>:</p>
\\[AB \\parallel CD \\quad \\text{и} \\quad BC \\parallel AD\\]
<p>Обозначение: $\\square ABCD$ или просто $ABCD$.</p>
<p>Обозначение: $ABCD$ или просто $ABCD$.</p>
<p><b>Элементы параллелограмма:</b></p>
<ul style="margin-left:18px;line-height:1.8">
<li><b>Стороны:</b> $AB$, $BC$, $CD$, $DA$ (противоположные: $AB = CD$, $BC = DA$)</li>
@@ -2091,7 +2091,7 @@ function buildP4(){
{ text:'<b>Шаг 1.</b> $AB \\parallel CD$ и $AC$ — секущая.<br>По свойству параллельных прямых: $\\angle BAC = \\angle DCA$ (накрест лежащие углы).', highlight:'diag' },
{ text:'<b>Шаг 2.</b> $BC \\parallel AD$ и $AC$ — секущая.<br>Аналогично: $\\angle BCA = \\angle DAC$ (накрест лежащие углы).', highlight:'diag' },
{ text:'<b>Шаг 3.</b> $AC$ — общая сторона треугольников $\\triangle ABC$ и $\\triangle CDA$.<br>По признаку «угол-сторона-угол»: $\\triangle ABC = \\triangle CDA$.', highlight:'both' },
{ text:'<b>Вывод.</b> Из равенства треугольников следует: $AB = CD$ и $BC = DA$.<br>Противоположные стороны параллелограмма равны. $\\square$', highlight:'both' },
{ text:'<b>Вывод.</b> Из равенства треугольников следует: $AB = CD$ и $BC = DA$.<br>Противоположные стороны параллелограмма равны. <b>ч.т.д.</b>', highlight:'both' },
];
let step=0;
const W=300,H=200;
@@ -2259,7 +2259,7 @@ function buildP5(){
html += makeCard('rule','Доказательство свойства 3','5.3',`
<p>Рассмотрим треугольники $\\triangle AOB$ и $\\triangle COD$, где $O$ — точка пересечения диагоналей.</p>
<p>$AB = CD$ (свойство 1), $\\angle OAB = \\angle OCD$, $\\angle OBA = \\angle ODC$ (накрест лежащие). По «угол–сторона–угол»: $\\triangle AOB = \\triangle COD$.</p>
<p>Следовательно: $AO = CO$ и $BO = DO$. Диагонали делятся пополам. $\\square$</p>
<p>Следовательно: $AO = CO$ и $BO = DO$. Диагонали делятся пополам. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 150" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Parallelogram with both diagonals, O highlighted, equal pieces marked -->
<polygon points="58,128 98,32 222,32 182,128" fill="rgba(217,119,6,.07)" stroke="#d97706" stroke-width="2"/>
@@ -2428,7 +2428,7 @@ function buildP5(){
{text:'<b>Шаг 1.</b> $AB\\parallel CD$, $AC$ — секущая. $\\angle BAC = \\angle DCA$ — накрест лежащие углы.', h:'diag'},
{text:'<b>Шаг 2.</b> $BC\\parallel AD$, $AC$ — секущая. $\\angle BCA = \\angle DAC$ — накрест лежащие углы.', h:'diag'},
{text:'<b>Шаг 3.</b> $AC$ — общая сторона. По признаку «уголь–сторона–угол»: $\\triangle ABC = \\triangle CDA$.', h:'both'},
{text:'<b>Вывод.</b> $AB = CD$ и $BC = DA$. Свойство 1 доказано. $\\square$', h:'both'},
{text:'<b>Вывод.</b> $AB = CD$ и $BC = DA$. Свойство 1 доказано. <b>ч.т.д.</b>', h:'both'},
];
let step=0;
function draw(h){
@@ -2457,7 +2457,7 @@ function buildP5(){
{text:'<b>Шаг 1.</b> $AB\\parallel CD$ и $AB=CD$ (свойство 1). Рассмотрим $\\triangle AOB$ и $\\triangle COD$.', h:'tri1'},
{text:'<b>Шаг 2.</b> $\\angle OAB = \\angle OCD$ (накрест лежащие при $AB\\parallel CD$); $\\angle OBA=\\angle ODC$ (накрест лежащие).', h:'tri1'},
{text:'<b>Шаг 3.</b> $AB=CD$, два угла равны. По «угол–сторона–угол»: $\\triangle AOB = \\triangle COD$.', h:'both3'},
{text:'<b>Вывод.</b> $AO=CO$, $BO=DO$. Диагонали точкой пересечения делятся пополам. $\\square$', h:'both3'},
{text:'<b>Вывод.</b> $AO=CO$, $BO=DO$. Диагонали точкой пересечения делятся пополам. <b>ч.т.д.</b>', h:'both3'},
];
let step=0;
function draw(h){
@@ -2579,7 +2579,7 @@ function buildP6(){
html += makeCard('rule','Доказательство признака 1','6.2',`
<p>Дано: $AB=CD$, $BC=AD$. Проведём диагональ $AC$.</p>
<p>В $\\triangle ABC$ и $\\triangle CDA$: $AB=CD$, $BC=DA$, $AC=CA$ (общая). По признаку «три стороны»: $\\triangle ABC=\\triangle CDA$.</p>
<p>Из равенства треугольников: $\\angle BAC=\\angle DCA$ и $\\angle BCA=\\angle DAC$. Это накрест лежащие углы, значит $AB\\parallel CD$ и $BC\\parallel AD$. Следовательно, $ABCD$ — параллелограмм. $\\square$</p>
<p>Из равенства треугольников: $\\angle BAC=\\angle DCA$ и $\\angle BCA=\\angle DAC$. Это накрест лежащие углы, значит $AB\\parallel CD$ и $BC\\parallel AD$. Следовательно, $ABCD$ — параллелограмм. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 148" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<polygon points="58,126 96,32 222,32 184,126" fill="rgba(192,38,211,.08)" stroke="#c026d3" stroke-width="2"/>
<line x1="58" y1="126" x2="222" y2="32" stroke="#8b5cf6" stroke-width="1.5" stroke-dasharray="6 3"/>
@@ -2599,7 +2599,7 @@ function buildP6(){
html += makeCard('rule','Доказательство признака 3','6.3',`
<p>Дано: $AO=OC$, $BO=OD$. В $\\triangle AOB$ и $\\triangle COD$: $AO=CO$, $BO=DO$, $\\angle AOB=\\angle COD$ (вертикальные). По признаку «сторона–угол–сторона»: $\\triangle AOB=\\triangle COD$.</p>
<p>Отсюда $\\angle OAB=\\angle OCD$ — накрест лежащие, значит $AB\\parallel CD$. Аналогично $BC\\parallel AD$. Четырёхугольник — параллелограмм. $\\square$</p>
<p>Отсюда $\\angle OAB=\\angle OCD$ — накрест лежащие, значит $AB\\parallel CD$. Аналогично $BC\\parallel AD$. Четырёхугольник — параллелограмм. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 148" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<polygon points="58,126 96,32 222,32 184,126" fill="rgba(192,38,211,.08)" stroke="#c026d3" stroke-width="2"/>
<line x1="58" y1="126" x2="222" y2="32" stroke="#8b5cf6" stroke-width="1.5" stroke-dasharray="5 3"/>
@@ -2774,7 +2774,7 @@ function buildP6(){
{text:'<b>Шаг 1.</b> В $\\triangle ABC$ и $\\triangle CDA$: $AB=CD$, $BC=DA$, $AC=CA$ (общая сторона).', h:'diag'},
{text:'<b>Шаг 2.</b> По признаку «три стороны»: $\\triangle ABC = \\triangle CDA$.', h:'both'},
{text:'<b>Шаг 3.</b> Из равенства: $\\angle BAC=\\angle DCA$ и $\\angle BCA=\\angle DAC$ — накрест лежащие углы. Значит $AB\\parallel CD$ и $BC\\parallel AD$.', h:'both'},
{text:'<b>Вывод.</b> Обе пары противоположных сторон параллельны $\\Rightarrow$ $ABCD$ — параллелограмм. $\\square$', h:'both'},
{text:'<b>Вывод.</b> Обе пары противоположных сторон параллельны $\\Rightarrow$ $ABCD$ — параллелограмм. <b>ч.т.д.</b>', h:'both'},
];
let step=0;
function draw(h){
@@ -2822,7 +2822,7 @@ function buildP7(){
html += makeCard('theory','Прямоугольник — определение','7.1',`
<p><b>Прямоугольник</b> — параллелограмм, у которого один угол прямой.</p>
<p>Так как в параллелограмме сумма соседних углов равна $180°$, а один угол равен $90°$, то <em>все углы прямоугольника прямые</em>.</p>
<p>Обозначение: $\\square ABCD$, где $\\angle A=\\angle B=\\angle C=\\angle D=90°$.</p>
<p>Обозначение: $ABCD$, где $\\angle A=\\angle B=\\angle C=\\angle D=90°$.</p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 155" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Rectangle ABCD with right angle marks at all corners -->
<rect x="44" y="32" width="192" height="108" fill="rgba(124,58,237,.10)" stroke="#7c3aed" stroke-width="2"/>
@@ -2853,7 +2853,7 @@ function buildP7(){
html += makeCard('rule','Свойство диагоналей прямоугольника','7.2',`
<p><b>Теорема.</b> Диагонали прямоугольника равны: $AC = BD$.</p>
<p><b>Доказательство.</b> Рассмотрим $\\triangle ABC$ и $\\triangle BAD$: $AB=BA$ (общая), $\\angle ABC=\\angle BAD=90°$, $BC=AD$ (как в параллелограмме). По признаку «угол–сторона–угол»: $\\triangle ABC=\\triangle BAD$.</p>
<p>Следовательно: $AC=BD$. $\\square$</p>
<p>Следовательно: $AC=BD$. <b>ч.т.д.</b></p>
<p>По теореме Пифагора: $d = \\sqrt{a^2 + b^2}$, где $a$, $b$ — стороны прямоугольника.</p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 155" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Rectangle with both diagonals shown as equal -->
@@ -3018,7 +3018,7 @@ function buildP7(){
{text:'<b>Шаг 1.</b> Рассмотрим $\\triangle ABC$ и $\\triangle BAD$. $AB=BA$ — общая сторона.', h:'t1'},
{text:'<b>Шаг 2.</b> $\\angle ABC=\\angle BAD=90°$ — прямые углы прямоугольника. $BC=AD$ — как в параллелограмме.', h:'t1'},
{text:'<b>Шаг 3.</b> По признаку «угол–сторона–угол» (или двум катетам): $\\triangle ABC=\\triangle BAD$.', h:'both7'},
{text:'<b>Вывод.</b> $AC=BD$ — диагонали прямоугольника равны. $\\square$', h:'both7'},
{text:'<b>Вывод.</b> $AC=BD$ — диагонали прямоугольника равны. <b>ч.т.д.</b>', h:'both7'},
];
let step=0;
function draw(h){
@@ -3131,7 +3131,7 @@ function buildP8(){
<li>$BD=AC$ — по условию</li>
</ul>
<p>По признаку «три стороны»: $\\triangle ABD=\\triangle BAC$. Следовательно, $\\angle DAB=\\angle CBA$.</p>
<p>Но $\\angle DAB+\\angle CBA=180°$ (смежные в параллелограмме). Значит $\\angle DAB=\\angle CBA=90°$. Параллелограмм — прямоугольник. $\\square$</p>
<p>Но $\\angle DAB+\\angle CBA=180°$ (смежные в параллелограмме). Значит $\\angle DAB=\\angle CBA=90°$. Параллелограмм — прямоугольник. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;gap:16px;margin-top:12px;flex-wrap:wrap">
<div style="text-align:center"><svg viewBox="0 0 120 100" style="width:115px;background:#fafafa;border:1px solid var(--border);border-radius:8px">
<polygon points="18,78 18,28 102,28 102,78" fill="rgba(124,58,237,.10)" stroke="#7c3aed" stroke-width="2"/>
@@ -3261,7 +3261,7 @@ function buildP8(){
{text:'<b>Шаг 1.</b> Рассмотрим $\\triangle ABD$ и $\\triangle BAC$: $AB=BA$ (общая), $AD=BC$ (стороны ||грамма), $BD=AC$ (по условию).', h:'t1'},
{text:'<b>Шаг 2.</b> По признаку «три стороны»: $\\triangle ABD=\\triangle BAC$.', h:'t2'},
{text:'<b>Шаг 3.</b> Следовательно $\\angle DAB=\\angle CBA$. Но они смежные в параллелограмме: $\\angle DAB+\\angle CBA=180°$.', h:'t2'},
{text:'<b>Вывод.</b> $2\\angle DAB=180°$, $\\angle DAB=90°$. $ABCD$ — прямоугольник. $\\square$', h:'t2'},
{text:'<b>Вывод.</b> $2\\angle DAB=180°$, $\\angle DAB=90°$. $ABCD$ — прямоугольник. <b>ч.т.д.</b>', h:'t2'},
];
let step=0;
function draw(h){
@@ -3390,7 +3390,7 @@ function buildP9(){
<p>Рассмотрим $\\triangle AOB$ и $\\triangle COB$, где $O$ — точка пересечения диагоналей.</p>
<p>$AO=OC$ (диагональ делится пополам), $OB=OB$ (общая), $AB=CB$ (стороны ромба).</p>
<p>По признаку «три стороны»: $\\triangle AOB=\\triangle COB$. Следовательно, $\\angle AOB=\\angle COB$.</p>
<p>Но $\\angle AOB+\\angle COB=180°$ (смежные). Значит $\\angle AOB=90°$, т.е. $AC\\perp BD$. $\\square$</p>
<p>Но $\\angle AOB+\\angle COB=180°$ (смежные). Значит $\\angle AOB=90°$, т.е. $AC\\perp BD$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 148" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Rhombus split: triangles AOB and COB colored -->
<polygon points="140,18 236,88 140,158 44,88" fill="none" stroke="#ea580c" stroke-width="2"/>
@@ -3578,7 +3578,7 @@ function buildP9(){
{text:'<b>Шаг 1.</b> Рассмотрим $\\triangle AOB$ и $\\triangle COB$. $AO=OC$ (диагональ делится пополам), $OB=OB$ (общая), $AB=CB$ (стороны ромба).', h:'tri'},
{text:'<b>Шаг 2.</b> По признаку «три стороны»: $\\triangle AOB=\\triangle COB$.', h:'tri'},
{text:'<b>Шаг 3.</b> $\\angle AOB=\\angle COB$. Но $\\angle AOB+\\angle COB=180°$ (смежные). Значит $\\angle AOB=90°$.', h:'right'},
{text:'<b>Вывод.</b> $AC\\perp BD$ — диагонали ромба взаимно перпендикулярны. $\\square$', h:'right'},
{text:'<b>Вывод.</b> $AC\\perp BD$ — диагонали ромба взаимно перпендикулярны. <b>ч.т.д.</b>', h:'right'},
];
let step=0;
function draw(h){
@@ -4079,7 +4079,7 @@ function buildP11(){
html += makeCard('example','Доказательство теоремы Фалеса','11.3',`
<p>Через $A_1$ проведём прямую, параллельную $OB$. Она пересекает $A_2B_2$ в точке $C$.</p>
<p>$\\triangle OA_1B_1 \\cong \\triangle A_1A_2C$ (два угла и сторона): $\\angle A_1OB_1 = \\angle A_1A_2C$ (параллельные), $OA_1=A_1A_2$ (условие). $\\Rightarrow B_1C = OB_1$.</p>
<p>Аналогично $\\triangle A_1B_1C \\cong \\triangle A_2B_2C'$... итог: $OB_1 = B_1B_2$. $\\square$</p>
<p>Аналогично $\\triangle A_1B_1C \\cong \\triangle A_2B_2C'$... итог: $OB_1 = B_1B_2$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 155" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Proof construction: O with 2 rays, 3 parallel lines, auxiliary parallel through A1 -->
<circle cx="36" cy="78" r="4" fill="#d97706" stroke="#fff" stroke-width="1.5"/>
@@ -4662,7 +4662,7 @@ function buildP12(){
{text:'<b>Шаг 1.</b> Рассмотрим среднюю линию $M_aM_b$ треугольника $ABC$. По свойству средней линии: $M_aM_b \\parallel AB$ и $M_aM_b = \\dfrac{1}{2}AB$.', h:'midline'},
{text:'<b>Шаг 2.</b> Рассмотрим $\\triangle AM_bG$ и $\\triangle M_aM_bG$. $\\angle GAM_b = \\angle GM_aM_b$ (как накрест лежащие при $AB\\parallel M_aM_b$); $\\angle AGM_b = \\angle M_aGM_b$ (вертикальные).', h:'simtri'},
{text:'<b>Шаг 3.</b> $\\triangle AGM_b \\sim \\triangle M_aGM_b$ по двум углам. Коэффициент подобия: $k = AB/(M_aM_b) = 2$.', h:'simtri'},
{text:'<b>Шаг 4.</b> Значит $AG/GM_a = 2/1$. Аналогично для остальных медиан. <b>Все три медианы делятся точкой $G$ в отношении $2:1$.</b> $\\square$', h:'done'},
{text:'<b>Шаг 4.</b> Значит $AG/GM_a = 2/1$. Аналогично для остальных медиан. <b>Все три медианы делятся точкой $G$ в отношении $2:1$.</b> <b>ч.т.д.</b>', h:'done'},
];
let step=0;
function draw(h){
@@ -4985,7 +4985,7 @@ function buildP13(){
{text:'<b>Шаг 1.</b> Отложим от $M_2$ отрезок $M_2D = M_1M_2$, так что $D$ лежит на луче $M_1M_2$ за $M_2$.', h:'step1'},
{text:'<b>Шаг 2.</b> Рассмотрим $\\triangle AM_1M_2$ и $\\triangle CM_2D$. $AM_1=CM_2=\\dfrac{1}{2}$-сторон; $\\angle AM_1M_2=\\angle CDM_2$ (вертикальные); $M_1M_2=M_2D$. По признаку «два угла и сторона»: $\\triangle AM_1M_2 \\cong \\triangle CDM_2$.', h:'step2'},
{text:'<b>Шаг 3.</b> Из равенства треугольников: $AM_1=DC$ и $\\angle M_1AM_2=\\angle DCM_2$, значит $AM_1 \\parallel DC$, т.е. $AB \\parallel CD$.', h:'step3'},
{text:'<b>Вывод.</b> $M_1BDC$ — параллелограмм ($M_1B \\parallel CD$, $M_1B=DC$). Значит $M_1D \\parallel BC$ и $BD=M_1M_2$. Но $BD=\\dfrac{1}{2}BC$ (так как $M_1$ — середина). Итак, $M_1M_2 \\parallel BC$ и $M_1M_2=\\dfrac{1}{2}BC$. $\\square$', h:'done'},
{text:'<b>Вывод.</b> $M_1BDC$ — параллелограмм ($M_1B \\parallel CD$, $M_1B=DC$). Значит $M_1D \\parallel BC$ и $BD=M_1M_2$. Но $BD=\\dfrac{1}{2}BC$ (так как $M_1$ — середина). Итак, $M_1M_2 \\parallel BC$ и $M_1M_2=\\dfrac{1}{2}BC$. <b>ч.т.д.</b>', h:'done'},
];
let step=0;
function draw(h){
@@ -5410,7 +5410,7 @@ function buildP14(){
{text:'<b>Шаг 1.</b> Проведём диагональ $AC$. Рассмотрим $\\triangle ABC$: $M$ — середина $AB$, пересечение $MN$ с $AC$ — середина $AC$ (назовём $P$).', h:'diag'},
{text:'<b>Шаг 2.</b> В $\\triangle ABC$: $MP$ — средняя линия, $MP \\parallel BC$, $MP = \\dfrac{BC}{2}$.', h:'midABC'},
{text:'<b>Шаг 3.</b> В $\\triangle ACD$: $P$ — середина $AC$, $N$ — середина $CD$. $PN$ — средняя линия, $PN \\parallel AD$, $PN = \\dfrac{AD}{2}$.', h:'midACD'},
{text:'<b>Вывод.</b> $MP \\parallel BC \\parallel AD$, $PN \\parallel AD \\Rightarrow M$, $P$, $N$ коллинеарны и $MN \\parallel AD$.<br>$MN = MP + PN = \\dfrac{BC}{2} + \\dfrac{AD}{2} = \\dfrac{AD+BC}{2}$. $\\square$', h:'done'},
{text:'<b>Вывод.</b> $MP \\parallel BC \\parallel AD$, $PN \\parallel AD \\Rightarrow M$, $P$, $N$ коллинеарны и $MN \\parallel AD$.<br>$MN = MP + PN = \\dfrac{BC}{2} + \\dfrac{AD}{2} = \\dfrac{AD+BC}{2}$. <b>ч.т.д.</b>', h:'done'},
];
let step=0;
function draw(h){
@@ -5547,7 +5547,7 @@ function buildP15(){
<p>Из $A$ и $B$ опустим высоты $AH_1$ и $BH_2$ на $CD$ (нижнее основание).</p>
<p>$\\triangle AH_1D$ и $\\triangle BH_2C$: $AH_1=BH_2$ (высоты в трапеции с равными боковыми), $AD=BC$ (условие), $\\angle H_1=\\angle H_2=90°$.</p>
<p>По «гипотенуза-катет»: $\\triangle AH_1D \\cong \\triangle BH_2C \\Rightarrow \\angle D = \\angle C$.</p>
<p>Аналогично $\\angle A = \\angle B$. $\\square$</p>
<p>Аналогично $\\angle A = \\angle B$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 148" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Isosceles trapezoid with heights H1, H2 dropped -->
<polygon points="28,120 252,120 196,38 84,38" fill="rgba(139,92,246,.08)" stroke="#8b5cf6" stroke-width="2"/>
@@ -5576,7 +5576,7 @@ function buildP15(){
html += makeCard('rule','Доказательство свойства 2: диагонали равны','15.3',`
<p>Рассмотрим $\\triangle ABD$ и $\\triangle BAC$ (общее основание $AB$).</p>
<p>$AD = BC$ (равнобедренная), $\\angle A = \\angle B$ (свойство 1), $AB = AB$.</p>
<p>По признаку «два угла и сторона»: $\\triangle ABD \\cong \\triangle BAC \\Rightarrow BD = AC$. $\\square$</p>
<p>По признаку «два угла и сторона»: $\\triangle ABD \\cong \\triangle BAC \\Rightarrow BD = AC$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 148" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Isosceles trapezoid with both diagonals and 2 triangles highlighted -->
<polygon points="28,120 252,120 196,38 84,38" fill="rgba(139,92,246,.07)" stroke="#8b5cf6" stroke-width="2"/>
@@ -5766,7 +5766,7 @@ function buildP15(){
{text:'<b>Шаг 1.</b> Проведём высоты $AH_1$ и $BH_2$ из вершин $A$ и $B$ на $DC$ (или его продолжение).', h:'heights'},
{text:'<b>Шаг 2.</b> В прямоугольных треугольниках $\\triangle AH_1D$ и $\\triangle BH_2C$: $AH_1 = BH_2$ (высоты параллельной трапеции), $AD = BC$ (боковые стороны).', h:'tri'},
{text:'<b>Шаг 3.</b> По признаку «гипотенуза-катет»: $\\triangle AH_1D \\cong \\triangle BH_2C \\Rightarrow \\angle D = \\angle C$.', h:'tri'},
{text:'<b>Вывод.</b> $\\angle A = 180° - \\angle D = 180° - \\angle C = \\angle B$. Углы при нижнем и верхнем основаниях равны попарно. $\\square$', h:'done'},
{text:'<b>Вывод.</b> $\\angle A = 180° - \\angle D = 180° - \\angle C = \\angle B$. Углы при нижнем и верхнем основаниях равны попарно. <b>ч.т.д.</b>', h:'done'},
];
let step=0;
function draw(h){
@@ -5804,7 +5804,7 @@ function buildP15(){
{text:'<b>Шаг 1.</b> Рассмотрим $\\triangle ABD$ и $\\triangle BAC$.', h:'tri1'},
{text:'<b>Шаг 2.</b> $AD = BC$ (боковые стороны равны), $\\angle DAB = \\angle CBA$ (свойство 1), $AB = AB$ (общее).', h:'tri2'},
{text:'<b>Шаг 3.</b> По признаку «два угла и сторона»: $\\triangle ABD \\cong \\triangle BAC$.', h:'tri2'},
{text:'<b>Вывод.</b> $BD = AC$ — диагонали равны. $\\square$', h:'done'},
{text:'<b>Вывод.</b> $BD = AC$ — диагонали равны. <b>ч.т.д.</b>', h:'done'},
];
let step=0;
function draw(h){
@@ -5926,7 +5926,7 @@ function buildP16(){
html += makeCard('rule','Доказательство признака 1','16.2',`
<p>Дано: трапеция $ABCD$, $AD \\parallel BC$, $\\angle A = \\angle B$. Доказать: $AD = BC$ (т.е. трапеция равнобедренная).</p>
<p>Через $C$ проведём прямую, параллельную $BD$, до пересечения с $AD$ в точке $E$. $BDCE$ — параллелограмм, $BE = CD$, $CE = BD$.</p>
<p>В $\\triangle AEC$: $\\angle A = \\angle AEC$ (как внутренние односторонние при $BC \\parallel AE$, но $\\angle AEC = \\angle B = \\angle A$) $\\Rightarrow \\triangle AEC$ — равнобедренный, $AE = AC$... Итог: $AD = BC$. $\\square$</p>
<p>В $\\triangle AEC$: $\\angle A = \\angle AEC$ (как внутренние односторонние при $BC \\parallel AE$, но $\\angle AEC = \\angle B = \\angle A$) $\\Rightarrow \\triangle AEC$ — равнобедренный, $AE = AC$... Итог: $AD = BC$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 144" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Trapezoid ABCD with extension to E, parallelogram BDCE highlighted -->
<polygon points="28,118 252,118 196,38 84,38" fill="rgba(139,92,246,.07)" stroke="#8b5cf6" stroke-width="2"/>
@@ -5954,7 +5954,7 @@ function buildP16(){
html += makeCard('rule','Доказательство признака 2','16.3',`
<p>Дано: трапеция $ABCD$, $AD \\parallel BC$, $AC = BD$. Доказать: $AD = BC$.</p>
<p>Рассмотрим $\\triangle ADB$ и $\\triangle BCA$: $AD = BC$ нужно доказать... применим метод от противного или через высоты.</p>
<p>Из $A$ и $B$ опустим высоты $AH_1$, $BH_2$. В $\\triangle ACH_1$ и $\\triangle BDH_2$: $AC = BD$ (дано), $AH_1 = BH_2$ (высоты), значит $CH_1 = DH_2$. Откуда $AD = BC$. $\\square$</p>
<p>Из $A$ и $B$ опустим высоты $AH_1$, $BH_2$. В $\\triangle ACH_1$ и $\\triangle BDH_2$: $AC = BD$ (дано), $AH_1 = BH_2$ (высоты), значит $CH_1 = DH_2$. Откуда $AD = BC$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px"><svg viewBox="0 0 280 148" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Trapezoid with equal diagonals AC=BD and heights dropped -->
<polygon points="28,120 252,120 196,38 84,38" fill="rgba(139,92,246,.07)" stroke="#8b5cf6" stroke-width="2"/>
@@ -6150,7 +6150,7 @@ function buildP16(){
{text:'<b>Шаг 1.</b> Через $C$ проведём прямую $CE \\parallel AB$ до пересечения с $AD$ в точке $E$.', h:'aux'},
{text:'<b>Шаг 2.</b> $ABCE$ — параллелограмм ($AB \\parallel CE$, $BC \\parallel AE$). Значит $AB = CE$ и $BC = AE$.', h:'para'},
{text:'<b>Шаг 3.</b> $\\angle DAB = \\angle CBA = \\angle AEC$ (как накрест лежащие при $AB \\parallel CE$). Тогда $\\triangle AEC$ — равнобедренный: $AE = CE = AB$.', h:'iso'},
{text:'<b>Вывод.</b> $ED = AD - AE$, $DC = CE = AB$... Итог: $AB = CD$. Трапеция равнобедренная. $\\square$', h:'done'},
{text:'<b>Вывод.</b> $ED = AD - AE$, $DC = CE = AB$... Итог: $AB = CD$. Трапеция равнобедренная. <b>ч.т.д.</b>', h:'done'},
];
let step=0;
function draw(h){
+10 -10
View File
@@ -2022,7 +2022,7 @@ function buildP5(){
<li>$\\triangle ABD$: основание $a=AB$, высота $h$ &rarr; $S_1 = \\dfrac{1}{2}ah$</li>
<li>$\\triangle BCD$: основание $b=CD$, высота $h$ &rarr; $S_2 = \\dfrac{1}{2}bh$</li>
</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>
<p style="margin-top:8px">По аддитивности: $S = S_1+S_2 = \\dfrac{1}{2}ah+\\dfrac{1}{2}bh = \\dfrac{a+b}{2}\\cdot h$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:14px">
<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) -->
@@ -2572,7 +2572,7 @@ function buildP6(){
html+=makeCard('rule','Доказательство $S = d_1 d_2 / 2$','6.2',`
<p>Диагонали ромба делят его на <b>4 равных прямоугольных треугольника</b> с катетами $d_1/2$ и $d_2/2$.</p>
<p style="margin-top:6px">Площадь одного треугольника: $S_{\\triangle} = \\dfrac{1}{2} \\cdot \\dfrac{d_1}{2} \\cdot \\dfrac{d_2}{2} = \\dfrac{d_1 d_2}{8}$.</p>
<p style="margin-top:6px">Ромб состоит из 4 таких треугольников: $S = 4 \\cdot \\dfrac{d_1 d_2}{8} = \\dfrac{d_1 d_2}{2}$. $\\square$</p>
<p style="margin-top:6px">Ромб состоит из 4 таких треугольников: $S = 4 \\cdot \\dfrac{d_1 d_2}{8} = \\dfrac{d_1 d_2}{2}$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 260 160" style="max-width:280px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- rhombus divided into 4 triangles, each colored -->
@@ -3043,7 +3043,7 @@ function buildP7(){
<p>Прямоугольный треугольник $\\triangle ABC$ с прямым углом $C$. Достроим до прямоугольника $ABDC$ (добавим точку $D$).</p>
<p style="margin-top:6px">Прямоугольник со сторонами $a$ и $b$ имеет площадь $S_{\\text{прям}} = ab$.</p>
<p style="margin-top:6px">Диагональ прямоугольника делит его на два <b>равных</b> прямоугольных треугольника:</p>
$$S_{\\triangle} = \\dfrac{ab}{2}. \\quad \\square$$
$$S_{\\triangle} = \\dfrac{ab}{2}. $$ <b>ч.т.д.</b>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 260 140" style="max-width:280px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- rectangle a×b split by diagonal into 2 right triangles -->
@@ -3492,7 +3492,7 @@ function buildP8(){
<li>Через катеты: $S = \\dfrac{1}{2} a b$</li>
<li>Через гипотенузу и $h_c$: $S = \\dfrac{1}{2} c \\cdot h_c$</li>
</ul>
<p style="margin-top:8px">Приравниваем: $\\dfrac{1}{2} a b = \\dfrac{1}{2} c h_c$ &ensp;&rArr;&ensp; $h_c = \\dfrac{ab}{c}$. $\\square$</p>
<p style="margin-top:8px">Приравниваем: $\\dfrac{1}{2} a b = \\dfrac{1}{2} c h_c$ &ensp;&rArr;&ensp; $h_c = \\dfrac{ab}{c}$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 320 180" style="max-width:340px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- LEFT: right triangle with catheti horizontal (a=80) and vertical (b=100), right angle at A -->
@@ -3992,7 +3992,7 @@ function buildP9(){
html+=makeCard('theory','Теорема: общая высота','9.1',`
<p>Если два треугольника имеют <b>общую высоту</b> $h$, то их площади относятся как соответствующие основания:</p>
$$\\dfrac{S_1}{S_2} = \\dfrac{a_1}{a_2}$$
<p style="margin-top:8px"><b>Доказательство:</b> $S_1=\\tfrac{1}{2}a_1 h$, $S_2=\\tfrac{1}{2}a_2 h$. Делим: $\\dfrac{S_1}{S_2}=\\dfrac{a_1}{a_2}$. $\\square$</p>
<p style="margin-top:8px"><b>Доказательство:</b> $S_1=\\tfrac{1}{2}a_1 h$, $S_2=\\tfrac{1}{2}a_2 h$. Делим: $\\dfrac{S_1}{S_2}=\\dfrac{a_1}{a_2}$. <b>ч.т.д.</b></p>
<p style="margin-top:8px"><b>Следствие:</b> если $a_1=a_2$, то $S_1=S_2$ (равные основания при общей высоте дают равные площади).</p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 280 160" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
@@ -4353,7 +4353,7 @@ function buildP10(){
html+=makeCard('theory','Теорема: медиана и площадь','10.1',`
<p><b>Теорема.</b> Медиана треугольника делит его на два <b>равновеликих</b> (равных по площади) треугольника.</p>
<p style="margin-top:8px"><b>Доказательство.</b> Пусть $AM$ — медиана треугольника $\\triangle ABC$, $M$ — середина $BC$. Тогда $BM=MC$. Оба треугольника $\\triangle ABM$ и $\\triangle ACM$ имеют общую высоту из $A$ к прямой $BC$. Основания равны: $BM=MC$. По теореме §9: $S_1=S_2$. $\\square$</p>
<p style="margin-top:8px"><b>Доказательство.</b> Пусть $AM$ — медиана треугольника $\\triangle ABC$, $M$ — середина $BC$. Тогда $BM=MC$. Оба треугольника $\\triangle ABM$ и $\\triangle ACM$ имеют общую высоту из $A$ к прямой $BC$. Основания равны: $BM=MC$. По теореме §9: $S_1=S_2$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 260 160" style="max-width:280px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- triangle -->
@@ -4732,7 +4732,7 @@ function buildP11(){
<p style="margin-top:6px"><b>Способ 1:</b> Внутри остаётся квадрат с диагональю $c$ → площадь $= c^2$.</p>
<p style="margin-top:4px">$S_{\\text{большой}} = (a+b)^2 = a^2+2ab+b^2$</p>
<p style="margin-top:4px">$S_{\\text{4 треугольника}} = 4\\cdot\\dfrac{ab}{2} = 2ab$</p>
<p style="margin-top:4px">$c^2 = (a+b)^2 - 2ab = a^2+b^2$. $\\square$</p>
<p style="margin-top:4px">$c^2 = (a+b)^2 - 2ab = a^2+b^2$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:14px">
<svg viewBox="0 0 240 200" style="max-width:260px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- Big square (a+b)=160 side, top-left at (20,20) -->
@@ -4995,7 +4995,7 @@ function buildP11(){
+'<text x="'+(off+S/2)+'" y="'+(off+S/2-4)+'" text-anchor="middle" font-size="13" font-weight="800" fill="#15803d"></text>'
+'<text x="'+(off+S/2)+'" y="'+(off+S/2+14)+'" text-anchor="middle" font-size="11" fill="#0f766e">+ 4·(ab/2)</text>'
+labelLegs();}},
{desc:'Раскроем $(a+b)^2 = a^2 + 2ab + b^2$. Подставим: $a^2+2ab+b^2 = 2ab + c^2$. Отсюда <b>$c^2 = a^2 + b^2$</b>. $\\blacksquare$',
{desc:'Раскроем $(a+b)^2 = a^2 + 2ab + b^2$. Подставим: $a^2+2ab+b^2 = 2ab + c^2$. Отсюда <b>$c^2 = a^2 + b^2$</b>. <b>ч.т.д.</b>',
draw(){return '<rect x="'+off+'" y="'+off+'" width="'+S+'" height="'+S+'" fill="rgba(22,163,74,.06)" stroke="#16a34a" stroke-width="2"/>'
+drawTris()
+poly(IV,'rgba(22,163,74,.42)','#15803d',2.5)
@@ -5837,7 +5837,7 @@ function buildP14(){
</div>`);
html+=makeCard('rule','Доказательство','14.2',`
<p>Пусть в $\\triangle ABC$ выполнено $c^2 = a^2 + b^2$. Построим вспомогательный $\\triangle A'B'C'$ с прямым углом при $B'$: $A'B'=b$, $B'C'=a$. Тогда по прямой теореме Пифагора $(A'C')^2 = a^2 + b^2 = c^2$, т.е. $A'C' = c$. По трём равным сторонам $\\triangle ABC = \\triangle A'B'C'$. Значит $\\angle B = \\angle B' = 90°$.&ensp;$\\square$</p>
<p>Пусть в $\\triangle ABC$ выполнено $c^2 = a^2 + b^2$. Построим вспомогательный $\\triangle A'B'C'$ с прямым углом при $B'$: $A'B'=b$, $B'C'=a$. Тогда по прямой теореме Пифагора $(A'C')^2 = a^2 + b^2 = c^2$, т.е. $A'C' = c$. По трём равным сторонам $\\triangle ABC = \\triangle A'B'C'$. Значит $\\angle B = \\angle B' = 90°$.&ensp;<b>ч.т.д.</b></p>
<p style="margin-top:8px"><b>Алгоритм проверки треугольника по сторонам:</b></p>
<ol style="margin-top:4px;padding-left:18px;line-height:1.9;font-size:.9rem">
<li>Найди наибольшую сторону $c = \\max(a,b,c)$.</li>
@@ -6209,7 +6209,7 @@ function buildP15(){
html+=makeCard('rule','Формула Евклида','15.2',`
<p>Для любых натуральных $m > n$ тройка $$(m^2-n^2,\\; 2mn,\\; m^2+n^2)$$ является пифагоровой.</p>
<p style="margin-top:8px"><b>Проверка:</b> $(m^2-n^2)^2 + (2mn)^2 = m^4 - 2m^2n^2 + n^4 + 4m^2n^2 = m^4 + 2m^2n^2 + n^4 = (m^2+n^2)^2$. $\\square$</p>
<p style="margin-top:8px"><b>Проверка:</b> $(m^2-n^2)^2 + (2mn)^2 = m^4 - 2m^2n^2 + n^4 + 4m^2n^2 = m^4 + 2m^2n^2 + n^4 = (m^2+n^2)^2$. <b>ч.т.д.</b></p>
<table class="tbl" style="margin-top:8px">
<tr><th>m</th><th>n</th><th>$m^2-n^2$</th><th>$2mn$</th><th>$m^2+n^2$</th></tr>
<tr><td>2</td><td>1</td><td>3</td><td>4</td><td>5</td></tr>
+1 -1
View File
@@ -947,7 +947,7 @@ function buildP2(){
<li>Соединяем точку $P_{m+n}$ с точкой $B$.</li>
<li>Через $P_m$ проводим прямую, параллельную $P_{m+n}B$ — она пересекает $AB$ в нужной точке $C$.</li>
</ol>
<p style="margin-top:8px">По теореме Фалеса $\\dfrac{AC}{CB} = \\dfrac{m}{n}$. $\\square$</p>
<p style="margin-top:8px">По теореме Фалеса $\\dfrac{AC}{CB} = \\dfrac{m}{n}$. <b>ч.т.д.</b></p>
<div style="display:flex;justify-content:center;margin-top:12px">
<svg viewBox="0 0 280 160" style="max-width:300px;background:#fafafa;border:1px solid var(--border);border-radius:10px">
<!-- отрезок AB -->