Transformacje afiniczne (skalowanie, obroty, pochylanie, przesuwanie).
Sposób wywołania aplikacji java (http://mono.i-demo.pl/chrdraw5.jar ):
$ java -jar chrdraw.jar font skala przesuniecie rotacja pochylenie tekst
Nastąpiła zmiana w formacie parametrów:
- skala to wektor - domyślnie 1.0,1.0
- przesunięcie to wektor - domyślnie 0.0,0.0
- rotacja to skalar - domyślnie 0.0
- pochylenie to wektor - domyślnie 0.0,0.0
Program na atari (http://mono.i-demo.pl/chrdraw5.atr ) realizuje transformacje na uproszczonych macierzach 2x3 (ostatni wiersz zawsze jest [0 0 1]) w formacie fxp8.8 (precyzja wydaje mi się wystarczająca, ale można zmienić w razie czego). Parametry dla atari podaje się w formatach:
- skala - wektor w formacie fxp8.8
- przesunięcie - wektor w formacie fxp16.0
- rotacja - skalar w formacie fxp10.6 (stopnie - wyciągana jest reszta z dzielenia przez 360 więc dozwolone są dowolne wartości)
- pochylenie - wektor w formacie fxp8.8
Przykładowy shot z fontem TSCR.CHR z emulatora:
Transformacje, które kolejno są wykonywane to:
1. skalowanie 1.5,1.5
2. translacja 150,20
3. rotacja 30 deg
4. translacja -150,-20
5. translacja 30,70
6. pochylenie -0.5,0.125
Punkty 2+3+4 dają obrót o 30 stopni zaczepiony w punkcie 150,20.
Sinus jeszcze jest tablicowany, ale wkrótce będzie liczony...
Aha - dorobiłem wyjście do dos po wciśnięciu dowolnego klawisza ;)
No i ekran jest tylko wycinkiem większej całości - kompletne obliczenia prowadzone są na .w więc malowany tekst prędko się nie zawinie.
Źródła (java) są dostępne tu: http://mono.i-demo.pl/chrdraw5-src.zip ; atari tu: http://mono.i-demo.pl/chrdraw5.asx .
niewiedza buduje, wiedza rujnuje