Podczas stosowania transformacji z kanwą wynikowy tekst jest również (oczywiście) transformowany. Czy istnieje sposób zapobiegania pewnym przekształceniom, takim jak odbicie, wpływu na tekst?"Undo" transformacje kanwy do pisania tekstu
Na przykład ustawiam globalną macierz transformacji, tak aby oś Y była skierowana w górę, oś X w prawo, a punkt (0, 0)
znajduje się na środku ekranu (czego można oczekiwać od matematycznego układu współrzędnych).
Powoduje to jednak, że tekst jest do góry nogami.
const size = 200;
const canvas = document.getElementsByTagName('canvas')[0]
canvas.width = canvas.height = size;
const ctx = canvas.getContext('2d');
ctx.setTransform(1, 0, 0, -1, size/2, size/2);
const triangle = [
{x: -70, y: -70, label: 'A'},
{x: 70, y: -70, label: 'B'},
{x: 0, y: 70, label: 'C'},
];
// draw lines
ctx.beginPath();
ctx.strokeStyle = 'black';
ctx.moveTo(triangle[2].x, triangle[2].y);
triangle.forEach(v => ctx.lineTo(v.x, v.y));
ctx.stroke();
ctx.closePath();
// draw labels
ctx.textAlign = 'center';
ctx.font = '24px Arial';
triangle.forEach(v => ctx.fillText(v.label, v.x, v.y - 8));
<canvas></canvas>
Czy istnieje „inteligentny” sposób, aby uzyskać tekst w „poprawnej” orientacji, oprócz ręcznego zerowania macierzy transformacji?
Oto bardziej ogólny przykład nagród, w którym nie tylko obróciłem oś y, ale także powiększam i tłumaczę. Jak narysować tekst obok punktów w prawidłowej orientacji i skali? https://jsfiddle.net/7ryfwvfm/2/ – Matsemann