feat(trigcircle): Фаза 2 — точные значения + формулы приведения
При исследовании выяснилось: Пифагор (sin²+cos²=1, _pythBar) и знаки по четвертям (_quadSigns) уже рисуются на canvas. Поэтому Фаза 2 даёт главное недостающее по программе — блок «Точные значения · приведение»: для текущего угла показывает sin/cos/tg/ctg точными значениями (½, √2/2, √3/2, √3/3, √3) и для нетривиальных четвертей — формулу приведения к острому углу (напр. 150° = 180°−30°, cos 150° = −cos 30° = −√3/2). Нетабличный угол → сообщение. Без KaTeX (чистый HTML + готовый форматтер _f), без новых зависимостей. Verified: node --check; headless-смоук рендера 11/11 (150° приведение+знаки, 45° QI без головы, 210° QIII tg+, 137° нетабличный). Эмодзи нет. sec/csc (5-я/6-я функции) — вторичны для школьной программы, отложены (предложу опционально). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1096,6 +1096,32 @@ if (typeof window !== 'undefined') window.TrigCircleSim = TrigCircleSim;
|
|||||||
`<b style="color:#FFD166">tg ${s.tan === undefined ? '—' : sg(s.tan)}</b>`;
|
`<b style="color:#FFD166">tg ${s.tan === undefined ? '—' : sg(s.tan)}</b>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Точные значения + формула приведения (только для табличных углов)
|
||||||
|
const fEl = document.getElementById('trig-formula');
|
||||||
|
if (fEl) {
|
||||||
|
const beta = Math.round(s.refDeg);
|
||||||
|
const degR = Math.round(s.deg);
|
||||||
|
const isTable = [0, 30, 45, 60, 90].some(b => Math.abs(s.refDeg - b) < 0.5);
|
||||||
|
if (!isTable) {
|
||||||
|
fEl.innerHTML = '<span style="color:var(--text-3);font-size:0.72rem;line-height:1.5">Нетабличный угол — точных значений нет, см. приближённые выше.</span>';
|
||||||
|
} else {
|
||||||
|
const reduce = (s.quadrant !== 1) && (beta === 30 || beta === 45 || beta === 60);
|
||||||
|
let head = '';
|
||||||
|
if (reduce) {
|
||||||
|
const wrap = s.quadrant === 2 ? `180° − ${beta}°` : s.quadrant === 3 ? `180° + ${beta}°` : `360° − ${beta}°`;
|
||||||
|
head = `<div style="font-weight:700;color:var(--violet);margin-bottom:5px">${degR}° = ${wrap} → приведение к ${beta}°</div>`;
|
||||||
|
}
|
||||||
|
const sgStr = v => (v !== undefined && v < -1e-9) ? '−' : '';
|
||||||
|
const line = (nm, color, val) => {
|
||||||
|
const mid = reduce ? ` = ${sgStr(val)}${nm} ${beta}°` : '';
|
||||||
|
return `<div style="display:flex;justify-content:space-between;gap:8px;line-height:1.7">` +
|
||||||
|
`<span><b style="color:${color}">${nm} ${degR}°</b>${mid}</span><b>${_f(val)}</b></div>`;
|
||||||
|
};
|
||||||
|
fEl.innerHTML = head + line('sin', '#EF476F', s.sin) + line('cos', '#06D6E0', s.cos) +
|
||||||
|
line('tg', '#FFD166', s.tan) + line('ctg', '#7BF5A4', s.cot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Stats bar (nice fractions)
|
// Stats bar (nice fractions)
|
||||||
document.getElementById('trigbar-angle').textContent = degStr;
|
document.getElementById('trigbar-angle').textContent = degStr;
|
||||||
document.getElementById('trigbar-sin').textContent = _f(s.sin);
|
document.getElementById('trigbar-sin').textContent = _f(s.sin);
|
||||||
|
|||||||
@@ -578,6 +578,10 @@
|
|||||||
<div id="trig-signs" style="text-align:center;font-size:0.72rem;color:var(--text-2)">—</div>
|
<div id="trig-signs" style="text-align:center;font-size:0.72rem;color:var(--text-2)">—</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Exact values + reduction formula (table angles) -->
|
||||||
|
<div class="gp-section-title" style="margin-bottom:8px">Точные значения · приведение</div>
|
||||||
|
<div id="trig-formula" style="margin-bottom:14px;font-size:0.78rem;color:var(--text);background:rgba(155,93,229,0.06);border:1px solid rgba(155,93,229,0.15);border-radius:10px;padding:9px 11px">—</div>
|
||||||
|
|
||||||
<!-- Notable angles -->
|
<!-- Notable angles -->
|
||||||
<div class="gp-section-title" style="margin-bottom:8px">Табличные углы</div>
|
<div class="gp-section-title" style="margin-bottom:8px">Табличные углы</div>
|
||||||
<div style="display:flex;flex-wrap:wrap;gap:4px;margin-bottom:14px">
|
<div style="display:flex;flex-wrap:wrap;gap:4px;margin-bottom:14px">
|
||||||
|
|||||||
Reference in New Issue
Block a user