26 Ostatnio edytowany przez mono (2009-04-30 13:25:12)

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:
http://mono.i-demo.pl/a8tscr3.png
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 .

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje
epi napisał/a:

E tam, eclipse sam generuje kod, wystarczy poklikać tu i ówdzie. ;>

No jasne, jak kogoś  z j e b a ć, to wiadomo, kto się pierwszy odzywa.
Sam byś lepsze zrobił, DRĄGALU!!!!!!!!!!!!!!! :)

Trzy najpopularniejsze w Polsce platformy 8-bit: Piwo, Wino i Wódka.
http://ym-digital.i-demo.pl/ - http://yerzmyey.i-demo.pl - https://soundcloud.com/yerzmyey
ŻADEN DOBRY UCZYNEK NIE UJDZIE BEZ KARY.

28

Szukałem dowodu, że kod nie został napisany w QA i w końcu znalazłem: linie dłuższe, niż 64 znaki, więcej niż 6 znaczących znaków etykiet, no i chyba średnik nie działał dla całoliniowych komentarzy.
Czemu Vector<Double> zamiast po prostu Point2D?

https://www.youtube.com/watch?v=jofNR_WkoCE

29 Ostatnio edytowany przez mono (2009-04-30 17:08:14)

Nie bardzo podobało mi się użycie klasy z AWT podczas parsowania parametrów commandline'a, które jest przecież niezależne od warstwy graficznej. I nigdzie w programie nie byłby ten Point używany do niczego innego, jak tylko do składowania informacji (jest użyty tylko przy transformacjach afinicznych). Aczkolwiek nie jestem tu konsekwentny - wiem, bo aplikacja jest zbudowana na pochodnej JFrame'a ze Swing'a a w takim razie powinna być np. zwykłym Object'em a okno powinno być wydzielone do osobnej klasy. Trudno jednak sobie rozwarstwić aplikację bo sama AffineTransform jest w pakiecie w AWT :(, a może powinna być w jakimś java.math.geom(?). Konkludując - jestem zdania, że nie powinno się mieszać warstw i stąd użycie Vector'ów (choć powinna być zdefiniowana własna klasa Point ze współrzędnymi dla translacji, oraz analogiczna klasa Factor dla skalowania i pochylania). Jak już wcześniej pisałem projekt mógłby być ładniej napisany, ale to prototyp i chciałem szybko zobaczyć wyniki :)

A co do kodu asm - napisany w jEdit'cie na piecu i assemblowany mads'em 1.8.4, odpalany emulgatorem atari800. Też nieładny i nieszybki z tych samych powodów co wyżej.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

30 Ostatnio edytowany przez tebe (2009-04-30 20:23:17)

coś takiego

scrad equ $80   ;.w

fontfilesize equ $82    ;.w
charscount equ $84  ;.w
firstchar equ $86   ;.b
origintotop equ $87 ;.b

można zapisać uniwersalniej i przejrzyściej

 org $80

scrad .ds 2

fontfilesize .ds 2
charscount .ds 2
firstchar .ds 1
origintotop .ds 1

albo

.zpvar scrad fontfilesize charscount .word firstchar origintotop .byte = $80
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

31

Dzięki tebe. Przyda się przy tworzeniu biblioteki. I muszę się przełamać do używania makr i psudorozkazów :)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

32

Jak na prototyp, zarówno kod javowy jak i asemblerowy jest bardzo ładnie napisany. Argumentacja przeciw Point2D do mnie nie trafia - to jest przecież właśnie para liczb x,y - to Vector<Double> zupełnie tu nie pasuje. Ostrożnie też podchodziłbym do rady TeBego - ręczne przypisanie adresów pozwala łatwiej debugować, można też przypisać różne zmienne pod te same adresy, gdy zaczyna brakować strony zerowej. Polecam natomiast pseudorozkazy, pomijanie "equ *" i skróconą składnię dta - b(foo,bar,quux).

https://www.youtube.com/watch?v=jofNR_WkoCE

33

Hoho. Faktycznie. Vector<Double> w tym kontekście to niezły hardkor. Aż się prosi o zastosowanie trywialnej strukturki.

34

@Fox: dzięki za pozytywny komentarz, lecz z resztą będę jednak polemizował :)
Strukturkę, jak mówi Laoo zastosowałbym bardzo chętnie (i tak zrobię w kolejnej wersji ;)), ale dalej nie chciałbym używać Point'a (i pochodnych) z pakietów AWT. Cały pakiet onebit.chrdraw.chr jest uniezależniony od grafiki, żeby można było go używać np. w aplikacjach serwerowych nie posiadających środowiska graficznego (TextLine służy tylko do zobrazowania wyglądu fonta i jako jedyna powinna być zależna od pakietów graficznych; plus jeszcze kod tworzący okno). Gdybyśmy mieli zależności od AWT, to chcąc wykorzystać kod dla fontu w aplikacji konsolowej, albo serwerowej trzeba by go przerobić pozbawiając zależności od AWT. A co gdybyśmy chcieli pewnego dnia przerobić bibliotekę do pracy w 3D? Mając java.awt.Point i tak trzeba by wtedy napisać nową klasę pochodną z kolejną składową - może pod tym kątem wektor nie jest najgorszy? Wektorowe fonty w 4 wymiarach... ;) Żartuję! Wolę jednak strukturę niż kolekcję.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

35

AWT jest przecież standardowo w Javie, a Point2D jest właśnie trywialną strukturką nie dotykającą środowiska graficznego. Po co wynajdywać koło?

https://www.youtube.com/watch?v=jofNR_WkoCE

36

Nie upieram się przy swoim, bo to jednak kwestia sporna i zależy od upodobań, ale zdarzyło mi się uruchamiać serwer tcp napisany w java5 na platformie dla routerów w okrojonej javie (gnu classpath - http://www.gnu.org/software/classpath/home.html ). Dzięki temu, że nie wykorzystywałem w modelu klas zależnych od środowiska graficznego, poprawki w kilku zaledwie miejscach ograniczyły się tylko do użycia metod z java2 i skompilowaniu wszystkiego dla starej wersji klas (48.0). Uznałem, że uniezależnienie modelu tam gdzie się da od innych elementów aplikacji to jednak dobra praktyka i dlatego stosuję :) Może kiedyś awt i swing wyleci na stałe z javy a sama java będzie miała niewielki rdzeń plus dodatki...? ;)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

37

Wersja atari z liczonym sinusem ( http://mono.i-demo.pl/chrdraw6.atr ).
http://mono.i-demo.pl/a8tscr4.png
Źródła atari: http://mono.i-demo.pl/chrdraw6.asx .

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

38

jest jakas szansa na uzywanie tylko tych stroke'ow ktore tworza obrys,  a pozniej wypelnianie wnetrza zwyklymi procedurami fill'a? (punkt startu mozna by brac z kolejnego stroka)

przechodze na tumiwisizm

39

Fill jest w planie zaraz po rysowaniu tekstu na ścieżce, które może będzie nawet dzisiaj.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

40 Ostatnio edytowany przez mono (2009-05-21 16:59:07)

Ze strony http://www.bookcase.com/library/softwar … rland.html (zarchiwizowane również u mnie) można ściągnać program do edycji fontów .CHR (na samym dole plik bgifont.zip - http://mono.i-demo.pl/bgifont.zip ). Dodatkowo są też pliki z przykładowymi fontami:
- bgi28fnt.zip ( http://mono.i-demo.pl/bgi28fnt.zip )
- bgifonts.zip ( http://mono.i-demo.pl/bgifonts.zip )
- lcdfonts.zip ( http://mono.i-demo.pl/lcdfonts.zip )
Dodałem fonty z bgi28fnt na dysk .atr ( http://mono.i-demo.pl/chrdraw7.atr ).
Przykładowy font H--C.CHR:
http://mono.i-demo.pl/a8h--c.png
Poza tym na razie nie ma zmian.

Edit: Na stronie http://www.programmersheaven.com/downlo … nload.aspx z kolei znalazłem coś takiego: http://mono.i-demo.pl/sfe.zip co jest podobno nowszą wersją edytora fontów .CHR. Działa ładnie z dosemu, ale trzeba mu dokopiować plik http://mono.i-demo.pl/egavga.bgi .

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

41

Informacje uzyskane dzięki BartoszP z wątku o rysowaniu koła ( http://atariarea.krap.pl/forum/viewtopi … 28#p104228 ) a pobrane z http://januszg.hg.pl/teksty/grafika/plik_bgichr.zip uzupełniają mi informacje o wypełnianiu fonta BGI .CHR (plik zarchiwizowałem też u siebie: http://mono.i-demo.pl/chrdraw/plik_bgichr.zip ). W wolnej chwili odświeżę temat.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje