feat(trigcircle): шкала значений по оси Y на графике (координатная плоскость)

- y-ось графика теперь подписана значениями (KaTeX):
  sin/cos — 1, ½, 0, −½, −1; tg/ctg — 3, 2, 1, 0, −1, −2, −3
- пунктирные линии уровней + подписи слева от панели
- подписи прячутся при смене функции (лишние уровни tg/ctg)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-24 13:44:29 +03:00
parent 0640efc82c
commit 4c1ce8394c
+12 -8
View File
@@ -688,15 +688,19 @@ class TrigCircleSim {
c.beginPath(); c.moveTo(x0, gy); c.lineTo(x0, gy+gh); c.stroke(); c.beginPath(); c.moveTo(x0, gy); c.lineTo(x0, gy+gh); c.stroke();
} }
/* ±1 lines */ /* ── шкала значений по оси Y (значения на координатной плоскости) ── */
if (fn==='sin'||fn==='cos') { const yVals = (fn==='tan'||fn==='cot')
c.strokeStyle = 'rgba(255,255,255,0.05)'; c.setLineDash([4, 4]); ? [[3,'3'],[2,'2'],[1,'1'],[0,'0'],[-1,'-1'],[-2,'-2'],[-3,'-3']]
[1,-1].forEach(v => { c.beginPath(); c.moveTo(gx, sy(v)); c.lineTo(gx+gw, sy(v)); c.stroke(); }); : [[1,'1'],[0.5,'\\tfrac{1}{2}'],[0,'0'],[-0.5,'-\\tfrac{1}{2}'],[-1,'-1']];
c.setLineDash([]); yVals.forEach(([v, lx], i) => {
c.font='500 10px Manrope,sans-serif'; c.fillStyle='rgba(255,255,255,0.22)'; const yy = sy(v);
c.textAlign='right'; c.textBaseline='middle'; if (yy < gy + 6 || yy > gy + gh - 6) return;
c.fillText('1', gx-5, sy(1)); c.fillText('1', gx-5, sy(-1)); if (v !== 0) {
c.strokeStyle = 'rgba(255,255,255,0.05)'; c.lineWidth = 1; c.setLineDash([4, 4]);
c.beginPath(); c.moveTo(gx, yy); c.lineTo(gx+gw, yy); c.stroke(); c.setLineDash([]);
} }
this._ovLabel('gy' + i, lx, gx - 6, yy, 'rgba(255,255,255,0.55)', 'r');
});
/* x ticks — линии на canvas, подписи KaTeX-оверлеем */ /* x ticks — линии на canvas, подписи KaTeX-оверлеем */
const ticks = [[0, '0'], [Math.PI/2, '\\tfrac{\\pi}{2}'], [Math.PI, '\\pi'], const ticks = [[0, '0'], [Math.PI/2, '\\tfrac{\\pi}{2}'], [Math.PI, '\\pi'],