From 0903ef640ab877ab503734ef77e3f72ee33b8b28 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Fri, 29 May 2026 11:19:56 +0300 Subject: [PATCH] =?UTF-8?q?feat(alg10=20W4):=20=C2=A79-=C2=A712=20=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=D0=B2=D1=8B=201=20(=D1=84=D0=BE=D1=80=D0=BC=D1=83?= =?UTF-8?q?=D0=BB=D1=8B=20=D0=BF=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Реализованы 4 формуло-ёмких параграфа главы 1: §9 Формулы приведения: - SVG единичной окружности с 4 цветными четвертями и знаками всех 4 функций в каждой (380x360, заголовочная плашка) - Правило двух шагов с разбором примера cos(3π/2 − α) = −sin α - Полная таблица 28 формул (4 функции × 7 видов аргумента) - Интерактив 1: 8 заданий «приведи к острому» - Интерактив 2: 8 заданий «вычисли значение» - Босс §9: 5 этапов §10 Сумма и разность углов: - SVG-плакат с 8 формулами 580x280 (sin/cos зелёным+фиолетовым, tg в отдельной янтарной плашке) - Мнемоника: знаки совпадают в sin, чередуются в cos - Спойлер с классическим доказательством для cos(α−β) через теорему косинусов - Применение к «нестандартным» углам (75°, 15°, 105°) - Интерактив 1: 6 вычислений нестандартных углов - Интерактив 2: 5 упрощений выражений - Босс §10: 5 этапов §11 Двойной аргумент: - SVG окружности с углами α=35° и 2α=70° (одна над другой с разными цветными секторами) - Формулы sin 2α, cos 2α (три формы!), tg 2α - Когда какую форму cos 2α использовать - Формулы понижения степени sin²α, cos²α - Интерактив 1: 6 заданий на вычисление через данную sin/cos α - Интерактив 2: 5 упрощений с двойным углом - Босс §11: 5 этапов §12 Преобразование суммы в произведение: - SVG-плакат с 4 формулами + мнемоника - Применение к решению уравнения sin 3x + sin x = 0 - Применение для упрощения дробей - Интерактив 1: 5 преобразований - Интерактив 2: 4 задачи «сколько корней у sin x ± sin nx = 0» - Босс §12: 4 этапа (этот § покороче) Обновлены ACH_LABELS (+p9-p12_done), bumpProgress, BUILDERS, SIDEBARS (4 шпаргалки), TIPS (4 подсказки). Глава 1 теперь готова на 12 из 13 параграфов — остался только финал главы (6 боссов). Файл вырос со 160 KB до 221 KB (2189 → 2998 строк). --- frontend/textbooks/algebra_10_ch1.html | 586 ++++++++++++++++++++++++- 1 file changed, 582 insertions(+), 4 deletions(-) diff --git a/frontend/textbooks/algebra_10_ch1.html b/frontend/textbooks/algebra_10_ch1.html index 0db6af2..4c8e295 100644 --- a/frontend/textbooks/algebra_10_ch1.html +++ b/frontend/textbooks/algebra_10_ch1.html @@ -256,6 +256,10 @@ const ACH_LABELS = { p6_done:'Графики tg x и ctg x — знаешь!', p7_done:'Обратные тригонометрические — освоены!', p8_done:'Тригонометрические уравнения — решаешь!', + p9_done:'Формулы приведения — мастер!', + p10_done:'Сумма и разность — твои!', + p11_done:'Двойной аргумент — лёгкость!', + p12_done:'Преобразование суммы — освоено!', ch1_done:'Глава 1 — Тригонометрия пройдена!', }; @@ -287,6 +291,10 @@ function bumpProgress(key, delta){ else if(key==='p6') achievement('p6_done'); else if(key==='p7') achievement('p7_done'); else if(key==='p8') achievement('p8_done'); + else if(key==='p9') achievement('p9_done'); + else if(key==='p10') achievement('p10_done'); + else if(key==='p11') achievement('p11_done'); + else if(key==='p12') achievement('p12_done'); else if(key==='final1') achievement('ch1_done'); } } @@ -364,10 +372,7 @@ function buildParaSelector(){ const BUILT=new Set(); const BUILDERS = { p1:()=>buildP1(), p2:()=>buildP2(), p3:()=>buildP3(), p4:()=>buildP4(), p5:()=>buildP5(), p6:()=>buildP6(), p7:()=>buildP7(), p8:()=>buildP8(), - p9:()=>buildStub('p9','§9 — Формулы приведения'), - p10:()=>buildStub('p10','§10 — Синус, косинус, тангенс суммы и разности'), - p11:()=>buildStub('p11','§11 — Формулы двойного аргумента'), - p12:()=>buildStub('p12','§12 — Преобразование суммы в произведение'), + p9:()=>buildP9(), p10:()=>buildP10(), p11:()=>buildP11(), p12:()=>buildP12(), final1:()=>buildStub('final1','Финал главы 1 — 6 боссов') }; function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } } @@ -458,6 +463,43 @@ const SIDEBARS = { ['$\\cos x = 0$','$x = \\frac{\\pi}{2} + \\pi n$'], ['$\\cos x = 1$','$x = 2\\pi n$'], ]}, + p9:{title:'Шпаргалка §9',rows:[ + ['Шаг 1','Знак — по четверти исх. функции'], + ['Шаг 2','Имя меняется при $\\frac{\\pi}{2} \\pm \\alpha$, $\\frac{3\\pi}{2} \\pm \\alpha$'], + ['','Не меняется при $\\pi \\pm \\alpha$, $2\\pi \\pm \\alpha$'], + ['$\\sin(\\frac{\\pi}{2} - \\alpha)$','$= \\cos\\alpha$'], + ['$\\cos(\\frac{\\pi}{2} - \\alpha)$','$= \\sin\\alpha$'], + ['$\\sin(\\pi - \\alpha)$','$= \\sin\\alpha$'], + ['$\\cos(\\pi - \\alpha)$','$= -\\cos\\alpha$'], + ['$\\sin(\\pi + \\alpha)$','$= -\\sin\\alpha$'], + ['$\\cos(\\pi + \\alpha)$','$= -\\cos\\alpha$'], + ]}, + p10:{title:'Шпаргалка §10',rows:[ + ['$\\sin(\\alpha + \\beta)$','$= \\sin\\alpha\\cos\\beta + \\cos\\alpha\\sin\\beta$'], + ['$\\sin(\\alpha - \\beta)$','$= \\sin\\alpha\\cos\\beta - \\cos\\alpha\\sin\\beta$'], + ['$\\cos(\\alpha + \\beta)$','$= \\cos\\alpha\\cos\\beta - \\sin\\alpha\\sin\\beta$'], + ['$\\cos(\\alpha - \\beta)$','$= \\cos\\alpha\\cos\\beta + \\sin\\alpha\\sin\\beta$'], + ['$\\tg(\\alpha + \\beta)$','$= \\frac{\\tg\\alpha + \\tg\\beta}{1 - \\tg\\alpha\\tg\\beta}$'], + ['$\\tg(\\alpha - \\beta)$','$= \\frac{\\tg\\alpha - \\tg\\beta}{1 + \\tg\\alpha\\tg\\beta}$'], + ['Пример','$\\sin 75° = \\sin(45° + 30°)$'], + ]}, + p11:{title:'Шпаргалка §11',rows:[ + ['$\\sin 2\\alpha$','$= 2\\sin\\alpha\\cos\\alpha$'], + ['$\\cos 2\\alpha$','$= \\cos^2\\alpha - \\sin^2\\alpha$'], + ['','$= 1 - 2\\sin^2\\alpha$'], + ['','$= 2\\cos^2\\alpha - 1$'], + ['$\\tg 2\\alpha$','$= \\frac{2\\tg\\alpha}{1 - \\tg^2\\alpha}$'], + ['$\\sin^2\\alpha$','$= \\frac{1 - \\cos 2\\alpha}{2}$'], + ['$\\cos^2\\alpha$','$= \\frac{1 + \\cos 2\\alpha}{2}$'], + ]}, + p12:{title:'Шпаргалка §12',rows:[ + ['$\\sin\\alpha + \\sin\\beta$','$= 2\\sin\\frac{\\alpha+\\beta}{2}\\cos\\frac{\\alpha-\\beta}{2}$'], + ['$\\sin\\alpha - \\sin\\beta$','$= 2\\sin\\frac{\\alpha-\\beta}{2}\\cos\\frac{\\alpha+\\beta}{2}$'], + ['$\\cos\\alpha + \\cos\\beta$','$= 2\\cos\\frac{\\alpha+\\beta}{2}\\cos\\frac{\\alpha-\\beta}{2}$'], + ['$\\cos\\alpha - \\cos\\beta$','$= -2\\sin\\frac{\\alpha+\\beta}{2}\\sin\\frac{\\alpha-\\beta}{2}$'], + ['Польза','решение уравнений'], + ['Пример','$\\sin 3x + \\sin x$ → произведение'], + ]}, }; const TIPS=[ @@ -469,6 +511,10 @@ const TIPS=[ {sec:'p6',html:'tg x имеет вертикальные асимптоты в $\\frac{\\pi}{2} + \\pi n$ (там, где $\\cos x = 0$). ctg x — в $\\pi n$ (там, где $\\sin x = 0$). Период $\\pi$, а не $2\\pi$ — это короче, чем у sin/cos.'}, {sec:'p7',html:'Главные значения: $\\arcsin$ и $\\arctg$ — от $-\\frac{\\pi}{2}$ до $\\frac{\\pi}{2}$; $\\arccos$ и $\\arcctg$ — от $0$ до $\\pi$. Это всегда!'}, {sec:'p8',html:'Перед формулой проверь: $|a| > 1$ для sin и cos — корней НЕТ. Если $a = 0, \\pm 1$ — используй особые случаи, они проще общих формул.'}, + {sec:'p9',html:'Шаг 1: знак в правой части — по знаку исходной функции в той четверти, куда попадает аргумент при остром $\\alpha$. Шаг 2: имя меняется при $\\frac{\\pi}{2} \\pm \\alpha$ и $\\frac{3\\pi}{2} \\pm \\alpha$, не меняется при $\\pi \\pm \\alpha$ и $2\\pi \\pm \\alpha$.'}, + {sec:'p10',html:'Запомнить помогает мнемоника: знаки повторяются в sin (sin·cos + cos·sin) и чередуются в cos (cos·cos − sin·sin). Для разности — наоборот.'}, + {sec:'p11',html:'Три формы $\\cos 2\\alpha$ нужны для разных задач: $\\cos^2 - \\sin^2$ — для упрощения; $1 - 2\\sin^2$ — когда задан $\\sin\\alpha$; $2\\cos^2 - 1$ — когда задан $\\cos\\alpha$.'}, + {sec:'p12',html:'4 формулы — все имеют вид «2 · функция полусуммы · функция полуразности». Знаки и тип функции в правой части смотри по таблице (или по правилу для каждой формулы).'}, ]; function buildSidebar(id){ @@ -2242,6 +2288,538 @@ function buildP8(){ wireReadBtn('p8'); } +/* ============================================================ + § 9 — Формулы приведения + ============================================================ */ +function buildP9(){ + const box = document.getElementById('p9-body'); + const A = window.ALG10; + let html = ''; + + /* === SVG: единичная окружность со знаками по четвертям === */ + let svgSigns = ''; + if(A){ + const c = A.tri.canvas({id:'p9-q', W:380, H:360, R:130}); + let s = c.open + /* Заголовок */ + + '' + + 'ЗНАКИ ТРИГОНОМЕТРИЧЕСКИХ ФУНКЦИЙ ПО ЧЕТВЕРТЯМ' + + 'Шаг 1 правила приведения: какой знак ставить?' + + c.quadrant(1, {fill:'rgba(16,185,129,.16)'}) + + c.quadrant(2, {fill:'rgba(245,158,11,.16)'}) + + c.quadrant(3, {fill:'rgba(239,68,68,.13)'}) + + c.quadrant(4, {fill:'rgba(124,58,237,.13)'}) + + c.axes() + + c.circle({width:2.5}) + + c.quadrantLabels() + /* Подписи знаков в каждой четверти */ + /* I (правый верх) */ + + 'sin +' + + 'cos +' + + 'tg, ctg +' + /* II (левый верх) */ + + 'sin +' + + 'cos −' + + 'tg, ctg −' + /* III (левый низ) */ + + 'sin −' + + 'cos −' + + 'tg, ctg +' + /* IV (правый низ) */ + + 'sin −' + + 'cos +' + + 'tg, ctg −' + /* Пояснительная плашка снизу */ + + '' + + 'Запоминалка: tg и ctg положительны в I и III' + + '(там, где знаки sin и cos совпадают)' + + c.close; + svgSigns = s; + } + + html += makeCard('theory', 'Зачем нужны формулы приведения', '9.1', ` +

Все таблицы значений тригонометрии — это значения для острых углов ($0;\\,\\frac{\\pi}{2}$).

+

Если в задаче встретился угол вроде $\\dfrac{3\\pi}{2} - \\alpha$ или $\\pi + \\alpha$, формулы приведения позволяют свести его к функции острого угла $\\alpha$.

+
${svgSigns}
`); + + html += makeCard('algo', 'Правило двух шагов', '9.2', ` +

Шаг 1. Знак. Поставь в правой части тот знак, который имеет исходная функция в той четверти, куда попадает аргумент, считая $\\alpha$ острым.

+

Шаг 2. Имя функции.

+
    +
  • Если аргумент имеет вид $\\dfrac{\\pi}{2} \\pm \\alpha$ или $\\dfrac{3\\pi}{2} \\pm \\alpha$имя меняется (sin ↔ cos, tg ↔ ctg).
  • +
  • Если аргумент имеет вид $\\pi \\pm \\alpha$ или $2\\pi \\pm \\alpha$имя не меняется.
  • +
+

Пример. Применим правило к $\\cos\\left(\\dfrac{3\\pi}{2} - \\alpha\\right)$:

+
    +
  1. Если $\\alpha$ острый, то $\\dfrac{3\\pi}{2} - \\alpha$ попадает в III четверть. В ней $\\cos < 0$, значит ставим знак «минус».
  2. +
  3. Аргумент имеет вид $\\dfrac{3\\pi}{2} - \\alpha$ — имя меняется: cos → sin.
  4. +
+

Итог: $\\cos\\left(\\dfrac{3\\pi}{2} - \\alpha\\right) = -\\sin\\alpha$.

`); + + html += makeCard('rule', 'Полная таблица формул приведения', '9.3', ` +
+ + + + + + + + + + + + + + + +
Аргументsincostgctg
$\\frac{\\pi}{2} - \\alpha$$\\cos\\alpha$$\\sin\\alpha$$\\ctg\\alpha$$\\tg\\alpha$
$\\frac{\\pi}{2} + \\alpha$$\\cos\\alpha$$-\\sin\\alpha$$-\\ctg\\alpha$$-\\tg\\alpha$
$\\pi - \\alpha$$\\sin\\alpha$$-\\cos\\alpha$$-\\tg\\alpha$$-\\ctg\\alpha$
$\\pi + \\alpha$$-\\sin\\alpha$$-\\cos\\alpha$$\\tg\\alpha$$\\ctg\\alpha$
$\\frac{3\\pi}{2} - \\alpha$$-\\cos\\alpha$$-\\sin\\alpha$$\\ctg\\alpha$$\\tg\\alpha$
$\\frac{3\\pi}{2} + \\alpha$$-\\cos\\alpha$$\\sin\\alpha$$-\\ctg\\alpha$$-\\tg\\alpha$
$2\\pi - \\alpha$$-\\sin\\alpha$$\\cos\\alpha$$-\\tg\\alpha$$-\\ctg\\alpha$
+
+

Учить таблицу наизусть необязательно — достаточно знать правило двух шагов и применять его.

`); + + html += makeCard('example', 'Применение для вычисления', '9.4', ` +

Задача 1. Вычисли $\\sin 120°$.

+

$\\sin 120° = \\sin(180° - 60°) = \\sin 60° = \\dfrac{\\sqrt{3}}{2}$.

+

Здесь имя не менялось ($\\pi - \\alpha$), знак $+$ (II четверть, sin положителен).

+

Задача 2. Вычисли $\\cos 240°$.

+

$\\cos 240° = \\cos(180° + 60°) = -\\cos 60° = -\\dfrac{1}{2}$.

+

Имя не менялось ($\\pi + \\alpha$), знак $-$ (III четверть, cos отрицателен).

`); + + /* === ИНТЕРАКТИВ 1: Приведи к острому === */ + html += '
' + +'
ИНТЕРАКТИВ 1
Приведи к функции острого угла
' + +'
Введи результат с правильным знаком. Например, $\\cos(\\pi - \\alpha) = -\\cos\\alpha$ — пиши «-cos a» или «-cosa».
' + +trainerHTML('p9-iv1', 8, 'результат') + +'
'; + + /* === ИНТЕРАКТИВ 2: Вычисли значение === */ + html += '
' + +'
ИНТЕРАКТИВ 2
Вычисли значение
' + +'
Сначала приведи к острому углу, затем подставь значение по таблице. Введи как дробь или десятичное число.
' + +trainerHTML('p9-iv2', 8, 'значение') + +'
'; + + /* === БОСС === */ + html += '

Босс §9 — Формулы приведения

'; + html += makeBoss('p9', { + color:'#0e7490', + title:'Босс §9 — Формулы приведения', + steps:[ + { q:'$\\sin(\\pi - \\alpha) = ?$ (вид «sin a» или «-sin a»)', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='sina'||s==='sin(a)'||s==='sinα';}, hint:'$\\pi - \\alpha$: II четверть, $\\sin > 0$; имя не меняется.' }, + { q:'$\\cos(\\frac{\\pi}{2} + \\alpha) = ?$ (имя меняется + знак)', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-sina'||s==='-sin(a)'||s==='-sinα';}, hint:'II четверть, $\\cos < 0$; имя меняется cos → sin.' }, + { q:'Вычисли $\\sin 150°$. Введи как дробь (1/2).', verify:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='1/2'||+v===0.5;}, hint:'$\\sin 150° = \\sin(180° - 30°) = \\sin 30° = 1/2$.' }, + { q:'Вычисли $\\cos 210°$. Введи (-sqrt3/2).', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-sqrt3/2'||s==='-√3/2'||Math.abs(+v - (-Math.sqrt(3)/2))<0.02;}, hint:'$\\cos 210° = \\cos(180° + 30°) = -\\cos 30° = -\\sqrt{3}/2$.' }, + { q:'$\\tg(\\frac{3\\pi}{2} - \\alpha) = ?$ (3 варианта: ctg a, -ctg a, tg a)', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='ctga'||s==='ctg(a)'||s==='ctgα';}, hint:'III четверть, $\\tg > 0$; имя меняется tg → ctg.' }, + ] + }); + + html += secNav('p8', 'p10') + readButton('p9'); + box.innerHTML = html; renderMath(box); + + /* IV1: приведение */ + makeTrainer({ + idPrefix:'p9-iv1', + parser:(v)=>v, + questions:[ + { q:'$\\sin(\\pi + \\alpha) = ?$ (sin a или -sin a)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-sina'||s==='-sin(a)'||s==='-sinα';}, show:'$-\\sin\\alpha$' }, + { q:'$\\cos(2\\pi - \\alpha) = ?$', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='cosa'||s==='cos(a)'||s==='cosα';}, show:'$\\cos\\alpha$' }, + { q:'$\\sin(\\frac{\\pi}{2} - \\alpha) = ?$ (имя меняется)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='cosa'||s==='cos(a)'||s==='cosα';}, show:'$\\cos\\alpha$' }, + { q:'$\\cos(\\pi + \\alpha) = ?$', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-cosa'||s==='-cos(a)'||s==='-cosα';}, show:'$-\\cos\\alpha$' }, + { q:'$\\tg(\\pi - \\alpha) = ?$', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-tga'||s==='-tg(a)'||s==='-tgα';}, show:'$-\\tg\\alpha$' }, + { q:'$\\sin(\\frac{3\\pi}{2} + \\alpha) = ?$', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-cosa'||s==='-cos(a)'||s==='-cosα';}, show:'$-\\cos\\alpha$' }, + { q:'$\\cos(\\frac{3\\pi}{2} - \\alpha) = ?$', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-sina'||s==='-sin(a)'||s==='-sinα';}, show:'$-\\sin\\alpha$' }, + { q:'$\\ctg(\\frac{\\pi}{2} + \\alpha) = ?$', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-tga'||s==='-tg(a)'||s==='-tgα';}, show:'$-\\tg\\alpha$' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(20,'p9-iv1');bumpProgress('p9',32);} else if(s>=5){addXp(10,'p9-iv1');bumpProgress('p9',15);} } + }); + + /* IV2: вычисли значение */ + makeTrainer({ + idPrefix:'p9-iv2', + parser:(v)=>v, + questions:[ + { q:'$\\sin 120° = ?$ (введи sqrt3/2)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='sqrt3/2'||s==='√3/2'||Math.abs(+v - Math.sqrt(3)/2)<0.02;}, show:'$\\sqrt{3}/2$' }, + { q:'$\\cos 150° = ?$ (введи -sqrt3/2)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-sqrt3/2'||s==='-√3/2'||Math.abs(+v - (-Math.sqrt(3)/2))<0.02;}, show:'$-\\sqrt{3}/2$' }, + { q:'$\\sin 225° = ?$ (-sqrt2/2)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-sqrt2/2'||s==='-√2/2'||Math.abs(+v - (-Math.sqrt(2)/2))<0.02;}, show:'$-\\sqrt{2}/2$' }, + { q:'$\\cos 300° = ?$ (1/2)', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='1/2'||+v===0.5;}, show:'$1/2$' }, + { q:'$\\tg 135° = ?$ (-1)', a:(v)=>+v===-1, show:'$-1$' }, + { q:'$\\sin(-150°) = ?$ (-1/2)', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='-1/2'||+v===-0.5;}, show:'$-1/2$' }, + { q:'$\\cos 240° = ?$ (-1/2)', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='-1/2'||+v===-0.5;}, show:'$-1/2$' }, + { q:'$\\sin\\frac{5\\pi}{6} = ?$ (1/2)', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='1/2'||+v===0.5;}, show:'$1/2$' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(20,'p9-iv2');bumpProgress('p9',32);} else if(s>=5){addXp(10,'p9-iv2');bumpProgress('p9',15);} } + }); + + wireReadBtn('p9'); +} + +/* ============================================================ + § 10 — Синус, косинус, тангенс суммы и разности + ============================================================ */ +function buildP10(){ + const box = document.getElementById('p10-body'); + let html = ''; + + /* === SVG: красивая плашка с 8 формулами === */ + const svgFormulas = + '' + + '' + + '8 ФОРМУЛ СЛОЖЕНИЯ И ВЫЧИТАНИЯ УГЛОВ' + + 'учат наизусть — это база для всей старшей тригонометрии' + /* Колонка 1: sin/cos */ + + 'sin(α + β) = sinα·cosβ + cosα·sinβ' + + 'sin(α − β) = sinα·cosβ − cosα·sinβ' + + 'cos(α + β) = cosα·cosβ − sinα·sinβ' + + 'cos(α − β) = cosα·cosβ + sinα·sinβ' + /* tg отдельно */ + + '' + + 'ТАНГЕНСЫ' + + 'tg(α + β) = (tgα + tgβ) / (1 − tgα·tgβ)' + + 'tg(α − β) = (tgα − tgβ) / (1 + tgα·tgβ)' + + ''; + + html += makeCard('rule', 'Формулы синуса и косинуса суммы/разности', '10.1', ` +

Сложение углов в тригонометрии — это четыре формулы. Их нужно знать наизусть.

+
${svgFormulas}
+

Мнемоника:

+
    +
  • В формулах для sin — знаки совпадают: $+ \\Rightarrow +$, $- \\Rightarrow -$.
  • +
  • В формулах для cos — знаки чередуются: $+ \\Rightarrow -$, $- \\Rightarrow +$.
  • +
  • В обеих формулах sin — структура «sin·cos + cos·sin»; в cos — «cos·cos $\\mp$ sin·sin».
  • +
`); + + html += makeCard('rule', 'Формулы тангенса', '10.2', ` +

Тангенс суммы и разности выводятся делением sin на cos:

+

$\\tg(\\alpha + \\beta) = \\dfrac{\\tg\\alpha + \\tg\\beta}{1 - \\tg\\alpha \\tg\\beta}$

+

$\\tg(\\alpha - \\beta) = \\dfrac{\\tg\\alpha - \\tg\\beta}{1 + \\tg\\alpha \\tg\\beta}$

+

ОДЗ: $\\tg\\alpha$, $\\tg\\beta$ существуют, и знаменатель $\\ne 0$.

`); + + html += makeCard('example', 'Применение для нестандартных углов', '10.3', ` +

Многие «неудобные» углы — это суммы или разности из таблицы:

+
    +
  • $75° = 45° + 30°$
  • +
  • $15° = 45° - 30°$
  • +
  • $105° = 60° + 45°$
  • +
+

Пример. Вычисли $\\sin 75°$.

+

$\\sin 75° = \\sin(45° + 30°) = \\sin 45° \\cos 30° + \\cos 45° \\sin 30°$

+

$= \\dfrac{\\sqrt{2}}{2} \\cdot \\dfrac{\\sqrt{3}}{2} + \\dfrac{\\sqrt{2}}{2} \\cdot \\dfrac{1}{2} = \\dfrac{\\sqrt{6}}{4} + \\dfrac{\\sqrt{2}}{4} = \\dfrac{\\sqrt{6} + \\sqrt{2}}{4}$.

`); + + html += makeCard('theory', 'Доказательство для cos(α − β)', '10.4', ` +
Развернуть классическое доказательство +
+

Рассмотрим на единичной окружности точки $P_\\alpha = (\\cos\\alpha;\\sin\\alpha)$ и $P_\\beta = (\\cos\\beta;\\sin\\beta)$.

+

Квадрат расстояния между ними: $|P_\\alpha P_\\beta|^2 = (\\cos\\alpha - \\cos\\beta)^2 + (\\sin\\alpha - \\sin\\beta)^2 =$ $2 - 2(\\cos\\alpha\\cos\\beta + \\sin\\alpha\\sin\\beta)$.

+

С другой стороны, по теореме косинусов для треугольника $OP_\\alpha P_\\beta$ ($OP_\\alpha = OP_\\beta = 1$, угол между ними $\\alpha - \\beta$):

+

$|P_\\alpha P_\\beta|^2 = 1 + 1 - 2\\cos(\\alpha - \\beta) = 2 - 2\\cos(\\alpha - \\beta)$.

+

Приравниваем правые части и сокращаем: $\\cos(\\alpha - \\beta) = \\cos\\alpha\\cos\\beta + \\sin\\alpha\\sin\\beta$. ■

+

Остальные формулы выводятся отсюда заменой $\\beta \\to -\\beta$ и формулами приведения.

+
`); + + /* === ИНТЕРАКТИВ 1: Вычисли нестандартный угол === */ + html += '
' + +'
ИНТЕРАКТИВ 1
Вычисли значение
' + +'
Разложи угол на сумму/разность табличных и применяй формулы сложения.
' + +trainerHTML('p10-iv1', 6, 'значение') + +'
'; + + /* === ИНТЕРАКТИВ 2: Упрости === */ + html += '
' + +'
ИНТЕРАКТИВ 2
Упрости / найди значение
' + +'
Используй формулы для свёртки выражения.
' + +trainerHTML('p10-iv2', 5, 'результат') + +'
'; + + /* === БОСС === */ + html += '

Босс §10 — Сумма и разность углов

'; + html += makeBoss('p10', { + color:'#0d9488', + title:'Босс §10 — Сумма и разность', + steps:[ + { q:'Чему равно $\\sin(\\alpha + \\beta) - \\sin(\\alpha - \\beta)$? Введи в виде "2sinX·cosY", т.е. цифру (коэффициент перед $\\cos\\alpha\\sin\\beta$).', verify:(v)=>+v===2, hint:'Раскрой обе формулы — выживет $2\\cos\\alpha\\sin\\beta$.' }, + { q:'Вычисли $\\cos 15° = \\dfrac{\\sqrt{6}+\\sqrt{2}}{?}$. Чему равен знаменатель?', verify:(v)=>+v===4, hint:'$\\cos 15° = \\cos(45° - 30°) = \\frac{\\sqrt{6}+\\sqrt{2}}{4}$.' }, + { q:'Если $\\sin\\alpha = 3/5$ (I четв.), найди $\\sin(\\alpha + \\frac{\\pi}{2})$. (Введи дробь например 4/5)', verify:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='4/5'||+v===0.8;}, hint:'$\\sin(\\alpha + \\pi/2) = \\cos\\alpha = 4/5$.' }, + { q:'$\\sin(\\alpha + \\pi) = ?$ Введи: «sin a», «-sin a», «cos a», «-cos a».', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='-sina'||s==='-sin(a)'||s==='-sinα';}, hint:'По формуле или приведению: $-\\sin\\alpha$.' }, + { q:'$\\tg(45° + 45°) = ?$ (Введи число, $\\infty$ напиши как 9999)', verify:(v)=>+v===9999, hint:'$\\tg 90°$ не существует ($\\to \\infty$).' }, + ] + }); + + html += secNav('p9', 'p11') + readButton('p10'); + box.innerHTML = html; renderMath(box); + + /* IV1 */ + makeTrainer({ + idPrefix:'p10-iv1', + parser:(v)=>v, + questions:[ + { q:'$\\sin 75° = \\dfrac{\\sqrt{6}+\\sqrt{2}}{?}$. Знаменатель?', a:(v)=>+v===4, show:'$4$' }, + { q:'$\\cos 75° = \\dfrac{\\sqrt{6}-\\sqrt{2}}{?}$. Знаменатель?', a:(v)=>+v===4, show:'$4$' }, + { q:'$\\sin(45° + 45°) = ?$', a:(v)=>+v===1, show:'$1$' }, + { q:'$\\cos(60° - 60°) = ?$', a:(v)=>+v===1, show:'$1$' }, + { q:'$\\sin 30° \\cos 30° + \\cos 30° \\sin 30° = ?$ (используй формулу sin($60°$))', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='sqrt3/2'||s==='√3/2'||Math.abs(+v - Math.sqrt(3)/2)<0.02;}, show:'$\\sin 60° = \\sqrt{3}/2$' }, + { q:'$\\cos(\\alpha + \\beta) + \\cos(\\alpha - \\beta) = ?$ (как 2cos·cos: введи 2cosα·cosβ — целое число коэф.)', a:(v)=>+v===2, show:'$2\\cos\\alpha\\cos\\beta$ — коэф. 2' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(18,'p10-iv1');bumpProgress('p10',32);} else if(s>=3){addXp(9,'p10-iv1');bumpProgress('p10',14);} } + }); + + /* IV2 */ + makeTrainer({ + idPrefix:'p10-iv2', + parser:(v)=>v, + questions:[ + { q:'Если $\\sin\\alpha = 3/5$ ($\\alpha$ в I четв.), то $\\sin(\\alpha + \\pi/6) = ?$ (введи (3sqrt3+4)/10)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='(3sqrt3+4)/10'||Math.abs(+v - (3*Math.sqrt(3)+4)/10)<0.02;}, show:'$(3\\sqrt{3}+4)/10$' }, + { q:'$\\tg(45° + 30°) = ?$ (введи (sqrt3+1)/(sqrt3-1) или 2+sqrt3)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='2+sqrt3'||s==='2+√3'||Math.abs(+v - (2+Math.sqrt(3)))<0.02;}, show:'$2+\\sqrt{3}$' }, + { q:'$\\sin(\\alpha + \\beta)\\cos\\beta - \\cos(\\alpha + \\beta)\\sin\\beta = ?$ Введи как «sin a» (сократись по обратной формуле!)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='sina'||s==='sin(a)'||s==='sinα';}, show:'$\\sin\\alpha$' }, + { q:'$\\cos 50° \\cos 10° + \\sin 50° \\sin 10° = ?$ (введи как cos40 или 0.766)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='cos40'||Math.abs(+v - Math.cos(40*Math.PI/180))<0.02;}, show:'$\\cos 40°$' }, + { q:'$\\sin 105° = \\dfrac{\\sqrt{6}+\\sqrt{2}}{?}$. Знаменатель?', a:(v)=>+v===4, show:'$4$ ($\\sin 105° = \\sin 75°$, потому что $105° = 180° - 75°$)' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(18,'p10-iv2');bumpProgress('p10',32);} else if(s>=3){addXp(9,'p10-iv2');bumpProgress('p10',14);} } + }); + + wireReadBtn('p10'); +} + +/* ============================================================ + § 11 — Формулы двойного аргумента + ============================================================ */ +function buildP11(){ + const box = document.getElementById('p11-body'); + const A = window.ALG10; + let html = ''; + + /* === SVG: α и 2α на единичной окружности === */ + let svgDouble = ''; + if(A){ + const c = A.tri.canvas({id:'p11-d', W:360, H:380, R:120}); + const ang = 35 * Math.PI / 180; /* α = 35° */ + const ang2 = 2 * ang; /* 2α = 70° */ + let s = c.open + + '' + + 'УГОЛ α И ДВОЙНОЙ УГОЛ 2α' + + 'Пример: α = 35°, 2α = 70°' + + c.axes() + + c.circle({width:2.5}) + /* Сектор α */ + + '' + + 'α' + /* Сектор 2α (поверх) */ + + '' + + '' + + c.radius(ang, {color:'#0d9488', width:2.5}) + + c.radius(ang2, {color:'#7c3aed', width:2.5}) + + c.point(ang, {color:'#0d9488', label:'P_α', labelOffset:20, fontSize:12, labelColor:'#0f766e'}) + + c.point(ang2, {color:'#7c3aed', label:'P_{2α}', labelOffset:20, fontSize:12, labelColor:'#6d28d9'}) + + '' + + 'sin 2α = 2 sin α · cos α' + + 'cos 2α = cos²α − sin²α = 1 − 2sin²α = 2cos²α − 1' + + c.close; + svgDouble = s; + } + + html += makeCard('rule', 'Формулы двойного аргумента', '11.1', ` +

Это частный случай формул сложения при $\\beta = \\alpha$:

+

$\\sin 2\\alpha = 2\\sin\\alpha\\cos\\alpha$

+

$\\cos 2\\alpha = \\cos^2\\alpha - \\sin^2\\alpha$

+

$\\tg 2\\alpha = \\dfrac{2\\tg\\alpha}{1 - \\tg^2\\alpha}$

+
${svgDouble}
+

Вывод. $\\sin 2\\alpha = \\sin(\\alpha + \\alpha) = \\sin\\alpha\\cos\\alpha + \\cos\\alpha\\sin\\alpha = 2\\sin\\alpha\\cos\\alpha$.

`); + + html += makeCard('rule', 'Три формы для cos 2α', '11.2', ` +

Используя $\\sin^2\\alpha + \\cos^2\\alpha = 1$, переписываем по-разному:

+

$\\cos 2\\alpha = \\cos^2\\alpha - \\sin^2\\alpha$

+

$\\cos 2\\alpha = 1 - 2\\sin^2\\alpha$

+

$\\cos 2\\alpha = 2\\cos^2\\alpha - 1$

+

Когда какую использовать:

+
    +
  • Если дано $\\sin\\alpha$ — бери $1 - 2\\sin^2\\alpha$.
  • +
  • Если дано $\\cos\\alpha$ — бери $2\\cos^2\\alpha - 1$.
  • +
  • Для упрощения выражений (например, разложения на множители) — бери $\\cos^2 - \\sin^2$.
  • +
`); + + html += makeCard('rule', 'Формулы понижения степени', '11.3', ` +

Из формул для cos 2α выражаем sin² и cos²:

+

$\\sin^2\\alpha = \\dfrac{1 - \\cos 2\\alpha}{2}$

+

$\\cos^2\\alpha = \\dfrac{1 + \\cos 2\\alpha}{2}$

+

Это нужно, когда мы хотим избавиться от квадратов синуса/косинуса (например, в интегралах или для упрощения).

`); + + html += makeCard('example', 'Применение', '11.4', ` +

Задача 1. $\\sin\\alpha = \\dfrac{3}{5}$, $\\alpha$ в I четверти. Найди $\\sin 2\\alpha$ и $\\cos 2\\alpha$.

+

$\\cos\\alpha = \\sqrt{1 - 9/25} = \\dfrac{4}{5}$.

+

$\\sin 2\\alpha = 2 \\cdot \\dfrac{3}{5} \\cdot \\dfrac{4}{5} = \\dfrac{24}{25}$.

+

$\\cos 2\\alpha = 1 - 2 \\cdot \\dfrac{9}{25} = 1 - \\dfrac{18}{25} = \\dfrac{7}{25}$.

+

Задача 2. Упрости $\\sin 4x - \\sin 2x$, заменив $\\sin 4x$ через $\\sin 2 \\cdot 2x$.

+

$\\sin 4x = 2\\sin 2x\\cos 2x$, тогда $\\sin 4x - \\sin 2x = \\sin 2x(2\\cos 2x - 1)$.

`); + + /* === ИНТЕРАКТИВ 1: Вычисли по данной cos α === */ + html += '
' + +'
ИНТЕРАКТИВ 1
Найди sin 2α, cos 2α по данным
' + +'
Дано: один из sin α / cos α + четверть. Найди указанную величину.
' + +trainerHTML('p11-iv1', 6, 'дробь') + +'
'; + + /* === ИНТЕРАКТИВ 2: Упрости === */ + html += '
' + +'
ИНТЕРАКТИВ 2
Упрости с двойным углом
' + +'
Свёртывай или раскрывай 2α там, где удобно.
' + +trainerHTML('p11-iv2', 5, 'результат') + +'
'; + + /* === БОСС === */ + html += '

Босс §11 — Двойной аргумент

'; + html += makeBoss('p11', { + color:'#0f766e', + title:'Босс §11 — Двойной аргумент', + steps:[ + { q:'Чему равно $2\\sin 15° \\cos 15°$? (Введи дробь как 1/2)', verify:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='1/2'||+v===0.5;}, hint:'Это $\\sin 30° = 1/2$.' }, + { q:'Если $\\sin\\alpha = 0{,}6$, найди $\\cos 2\\alpha$. (введи 0.28)', verify:(v)=>Math.abs(+v - 0.28)<0.01, hint:'$\\cos 2\\alpha = 1 - 2(0.6)^2 = 1 - 0.72 = 0.28$.' }, + { q:'Сколько решений у $\\sin 2x = 0$ на $[0;\\,\\pi]$?', verify:(v)=>+v===3, hint:'$2x = \\pi n$ ⇒ $x = 0, \\pi/2, \\pi$ — 3 значения.' }, + { q:'Чему равно $\\dfrac{1 - \\cos 2\\alpha}{2}$? Введи слово: «sin²» или «cos²».', verify:(v)=>{const s=String(v).replace(/[\\s²]/g,'').toLowerCase(); return s==='sin2'||s==='sin';}, hint:'Формула понижения для $\\sin^2$.' }, + { q:'Если $\\cos\\alpha = -4/5$, $\\alpha$ во II четв., найди $\\sin 2\\alpha$ (введи как -24/25 или -0.96)', verify:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='-24/25'||Math.abs(+v - (-0.96))<0.01;}, hint:'$\\sin\\alpha = 3/5$ (sin > 0 во II четв.), $\\sin 2\\alpha = 2 \\cdot 3/5 \\cdot (-4/5) = -24/25$.' }, + ] + }); + + html += secNav('p10', 'p12') + readButton('p11'); + box.innerHTML = html; renderMath(box); + + /* IV1 */ + makeTrainer({ + idPrefix:'p11-iv1', + parser:(v)=>v, + questions:[ + { q:'$\\sin\\alpha = 3/5$, $\\alpha$ в I четв. Найди $\\sin 2\\alpha$.', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='24/25'||+v===0.96;}, show:'$24/25 = 0{,}96$' }, + { q:'$\\sin\\alpha = 3/5$, $\\alpha$ в I четв. Найди $\\cos 2\\alpha$.', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='7/25'||+v===0.28;}, show:'$7/25 = 0{,}28$' }, + { q:'$\\cos\\alpha = 3/5$, $\\alpha$ в I четв. Найди $\\cos 2\\alpha$.', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='-7/25'||+v===-0.28;}, show:'$-7/25 = -0{,}28$' }, + { q:'$\\sin\\alpha = -1/3$, $\\alpha$ в III четв. Найди $\\cos 2\\alpha$ (введи 7/9)', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='7/9'||Math.abs(+v - 7/9)<0.01;}, show:'$7/9$' }, + { q:'$\\tg\\alpha = 2$. Найди $\\tg 2\\alpha$ (введи -4/3)', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='-4/3'||Math.abs(+v - (-4/3))<0.02;}, show:'$-4/3$' }, + { q:'$\\sin\\alpha = 0{,}8$, $\\alpha$ во II четв. Найди $\\sin 2\\alpha$ (-0.96)', a:(v)=>Math.abs(+v - (-0.96))<0.02, show:'$-0{,}96$' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(20,'p11-iv1');bumpProgress('p11',32);} else if(s>=4){addXp(10,'p11-iv1');bumpProgress('p11',15);} } + }); + + /* IV2 */ + makeTrainer({ + idPrefix:'p11-iv2', + parser:(v)=>v, + questions:[ + { q:'Чему равно $2\\sin 22{,}5° \\cos 22{,}5°$? (введи sqrt2/2 или 0.71)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='sqrt2/2'||s==='√2/2'||Math.abs(+v - Math.sqrt(2)/2)<0.02;}, show:'$\\sqrt{2}/2$ ($\\sin 45°$)' }, + { q:'$1 - 2\\sin^2 15° = ?$ (введи sqrt3/2)', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='sqrt3/2'||s==='√3/2'||Math.abs(+v - Math.sqrt(3)/2)<0.02;}, show:'$\\sqrt{3}/2$ ($\\cos 30°$)' }, + { q:'$\\dfrac{\\sin 2\\alpha}{2\\sin\\alpha} = ?$ Введи как «cos a».', a:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='cosa'||s==='cos(a)'||s==='cosα';}, show:'$\\cos\\alpha$' }, + { q:'$\\cos^2 30° - \\sin^2 30° = ?$ (введи 1/2)', a:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='1/2'||+v===0.5;}, show:'$1/2$ ($\\cos 60° = 1/2$)' }, + { q:'$\\sin 100°\\cos 10° + \\cos 100°\\sin 10° = \\sin ?°$. Чему равен угол?', a:(v)=>+v===110, show:'$110°$ ($\\sin 110°$)' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(18,'p11-iv2');bumpProgress('p11',30);} else if(s>=3){addXp(9,'p11-iv2');bumpProgress('p11',14);} } + }); + + wireReadBtn('p11'); +} + +/* ============================================================ + § 12 — Преобразование суммы (разности) в произведение + ============================================================ */ +function buildP12(){ + const box = document.getElementById('p12-body'); + let html = ''; + + const svgFormulas = + '' + + '' + + '4 ФОРМУЛЫ: СУММА → ПРОИЗВЕДЕНИЕ' + + 'структура: 2 · функция полусуммы · функция полуразности' + + 'sin α + sin β = 2 · sin((α+β)/2) · cos((α−β)/2)' + + 'sin α − sin β = 2 · sin((α−β)/2) · cos((α+β)/2)' + + 'cos α + cos β = 2 · cos((α+β)/2) · cos((α−β)/2)' + + 'cos α − cos β = −2 · sin((α+β)/2) · sin((α−β)/2)' + + '' + + 'МНЕМОНИКА' + + '• sin±sin → sin·cos (порядок «полусуммы / полуразности» зависит от знака)' + + '• cos+cos → cos·cos, cos−cos → −sin·sin (минус снаружи!)' + + ''; + + html += makeCard('rule', '4 формулы преобразования', '12.1', ` +

Эти формулы превращают сумму (или разность) тригонометрических функций в произведение.

+
${svgFormulas}
+

Они полезны для:

+
    +
  • Решения уравнений вида $\\sin 3x + \\sin x = 0$ — разложение на множители.
  • +
  • Упрощения выражений и доказательства тождеств.
  • +
  • Численного вычисления некоторых углов.
  • +
`); + + html += makeCard('example', 'Применение для уравнения', '12.2', ` +

Решим $\\sin 3x + \\sin x = 0$.

+

$\\sin 3x + \\sin x = 2\\sin\\dfrac{3x + x}{2} \\cos\\dfrac{3x - x}{2} = 2\\sin 2x \\cos x$.

+

Получили $2\\sin 2x \\cos x = 0$ ⇒ $\\sin 2x = 0$ или $\\cos x = 0$.

+
    +
  • $\\sin 2x = 0$ ⇒ $x = \\dfrac{\\pi n}{2}$.
  • +
  • $\\cos x = 0$ ⇒ $x = \\dfrac{\\pi}{2} + \\pi n$.
  • +
+

Заметим: вторая серия — частный случай первой ($n = 2k+1$), поэтому общее решение: $x = \\dfrac{\\pi n}{2}$, $n \\in \\mathbb{Z}$.

`); + + html += makeCard('example', 'Применение для упрощения', '12.3', ` +

Упрости $\\dfrac{\\sin 5x + \\sin 3x}{\\cos 5x + \\cos 3x}$.

+

Числитель: $\\sin 5x + \\sin 3x = 2\\sin 4x \\cos x$.

+

Знаменатель: $\\cos 5x + \\cos 3x = 2\\cos 4x \\cos x$.

+

$\\dfrac{2\\sin 4x \\cos x}{2\\cos 4x \\cos x} = \\dfrac{\\sin 4x}{\\cos 4x} = \\tg 4x$.

`); + + /* === ИНТЕРАКТИВ 1: преобразуй === */ + html += '
' + +'
ИНТЕРАКТИВ 1
Преобразуй в произведение
' + +'
Введи результат в виде «2sinX·cosY» — числа X и Y (углы или функции от x).
' + +trainerHTML('p12-iv1', 5, 'результат') + +'
'; + + /* === ИНТЕРАКТИВ 2: реши уравнение === */ + html += '
' + +'
ИНТЕРАКТИВ 2
Реши уравнение методом
' + +'
Преобразуй сумму/разность в произведение и реши.
' + +trainerHTML('p12-iv2', 4, 'число корней') + +'
'; + + /* === БОСС === */ + html += '

Босс §12 — Сумма → произведение

'; + html += makeBoss('p12', { + color:'#7c3aed', + title:'Босс §12 — Сумма в произведение', + steps:[ + { q:'$\\sin 30° + \\sin 90° = 2\\sin 60° \\cos 30° = ?$ (введи 3/2)', verify:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='3/2'||+v===1.5;}, hint:'$2 \\cdot \\frac{\\sqrt{3}}{2} \\cdot \\frac{\\sqrt{3}}{2} = \\frac{3}{2}$.' }, + { q:'Сколько корней у $\\sin 3x + \\sin x = 0$ на $[0;\\,2\\pi)$?', verify:(v)=>+v===4, hint:'$2\\sin 2x \\cos x = 0$. $\\sin 2x = 0$: 0, π/2, π, 3π/2 (4 шт). $\\cos x = 0$: π/2, 3π/2 — уже учтены. Итого 4.' }, + { q:'Чему равно $\\dfrac{\\sin 5x + \\sin x}{\\cos 5x + \\cos x}$? Введи как «tg X», где X = коэффициент при x.', verify:(v)=>+v===3, hint:'$\\frac{2\\sin 3x \\cos 2x}{2\\cos 3x \\cos 2x} = \\tg 3x$.' }, + { q:'$\\cos 80° + \\cos 20° = 2\\cos 50° \\cos 30°$. Чему равно $\\cos 50° \\cdot \\dfrac{\\sqrt{3}}{?}$? (введи 1)', verify:(v)=>+v===1, hint:'$\\cos 80° + \\cos 20° = 2\\cos 50° \\cdot \\frac{\\sqrt{3}}{2} = \\sqrt{3}\\cos 50°$. То есть с коэф. $\\sqrt{3}/1$.' }, + ] + }); + + html += secNav('p11', 'final1') + readButton('p12'); + box.innerHTML = html; renderMath(box); + + /* IV1 */ + makeTrainer({ + idPrefix:'p12-iv1', + parser:(v)=>v, + questions:[ + { q:'$\\sin 80° + \\sin 40° = 2\\sin 60° \\cos ?°$. Введи угол.', a:(v)=>+v===20, show:'$20°$' }, + { q:'$\\sin 50° - \\sin 20° = 2\\sin 15° \\cos ?°$. Введи угол.', a:(v)=>+v===35, show:'$35°$' }, + { q:'$\\cos 70° + \\cos 10° = 2\\cos ?° \\cos 30°$. Введи угол.', a:(v)=>+v===40, show:'$40°$' }, + { q:'$\\sin 3x + \\sin x = 2\\sin ?x \\cos x$. Введи коэф.', a:(v)=>+v===2, show:'$2$ ($2\\sin 2x \\cos x$)' }, + { q:'$\\cos 5x - \\cos x = -2\\sin 3x \\sin ?x$. Введи коэф.', a:(v)=>+v===2, show:'$2$ ($-2\\sin 3x \\sin 2x$)' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(18,'p12-iv1');bumpProgress('p12',32);} else if(s>=3){addXp(9,'p12-iv1');bumpProgress('p12',14);} } + }); + + /* IV2 */ + makeTrainer({ + idPrefix:'p12-iv2', + questions:[ + { q:'Сколько корней у $\\sin 2x + \\sin 4x = 0$ на $[0;\\,\\pi)$?', a:3, show:'3 ($2\\sin 3x \\cos x = 0$: $\\sin 3x = 0$ ⇒ 0, π/3, 2π/3; $\\cos x = 0$ ⇒ π/2)' }, + { q:'Сколько корней у $\\cos x - \\cos 3x = 0$ на $[0;\\,2\\pi)$?', a:4, show:'4 ($2\\sin 2x \\sin x = 0$: $\\sin 2x = 0$ ⇒ 0, π/2, π, 3π/2 (4 шт); $\\sin x = 0$ ⇒ уже учтено)' }, + { q:'Сколько корней у $\\sin x + \\cos x = 0$ на $[0;\\,2\\pi)$? (используй $\\cos x = \\sin(\\pi/2 - x)$)', a:2, show:'2 ($\\tg x = -1$ ⇒ $x = 3\\pi/4, 7\\pi/4$)' }, + { q:'Сколько корней у $\\sin 5x = \\sin x$ на $[0;\\,\\pi)$?', a:5, show:'5 (через $\\sin 5x - \\sin x = 0$ ⇒ $2\\sin 2x \\cos 3x = 0$, серии комбинируются)' }, + ], + onComplete:(s,n)=>{ if(s===n){addXp(20,'p12-iv2');bumpProgress('p12',35);} else if(s>=2){addXp(10,'p12-iv2');bumpProgress('p12',16);} } + }); + + wireReadBtn('p12'); +} +