Rozdział 18 - Grafika

Oto niektóre z najbardziej eleganckich cech ZX81; używają one tzw. pikseli (elementów obrazu). Na ekranie można wyświetlić 22 wiersze po 32 kolumny, co daje 22*32=704 pozycje znakowe, a każda z nich zawiera 4 piksele, podzielone jak szachowniczka w ciastku Batterburg.

Piksel jest określany przez dwie liczby, jego współrzędne. Pierwsza, współrzędna x, określa jak daleko znajduje się on w poziomie od skrajnej, lewej kolumny, a druga, współrzędna y, mówi jak daleko jest on od spodu. Współrzędne te są zwykle zapisywane jako para w nawiasach, zatem (0,0), (63,0), (0,43) i (63,43) określają narożniki lewy dolny, prawy dolny, lewy górny i prawy górny.

Polecenie

PLOT współrzędna x, współrzędna y

zaczernia piksel na tych współrzędnych, natomiast polecenie

UNPLOT  współrzędna x, współrzędna y

wybiela go.

Wypróbuj ten krościaty program:

10 PLOT INT (RND*64),INT (RND*44)
20 INPUT A$
30 GOTO 10

Rysuje on przypadkowy piksel przy każdym naciśnięciu NEWLINE.

Oto nieco bardziej użyteczny program. Rysuje on wykres funkcji SIN (falę sinusoidalną) dla wartości pomiędzy 0 a 2π.

10 FOR N=0 TO 63
20 PLOT N, 22+20*SIN (N/32*PI)
30 NEXT N

 Następny program rysuje wykres SQR (część paraboli) pomiędzy 0 i 4:

10 FOR N=0 TO 63
20 PLOT N,20*SQR (N/16)
30 NEXT N

 Zwróć uwagę, iż współrzędne pikseli są raczej inne od numerów wierszy i kolumn w elemencie AT. Na końcu tego rozdziału jest plansza, która może być pomocna przy wyliczaniu współrzędnych pikseli oraz wierszy i kolumn.

 

Podsumowanie

Piksele i ich współrzędne

Polecenia: PLOT i UNPLOT

 

 

Ćwiczenia

  1. Są trzy różnice pomiędzy liczbami w elemencie AT a współrzędnymi pikseli; jakie?

Załóżmy, iż pozycja wydruku PRINT odpowiada AT W,K (wiersz i kolumna). Udowodnij sobie, iż cztery piksele na tej pozycji posiadają współrzędne x 2*K lub 2*K+1, a współrzędne y równe 2*(21-W) lub 2*(21-W)+1 zobacz na planszę).

 

 

  1. Zrób dziurkacz do sera przez zmianę programu krościatego tak, aby najpierw wypełnił ekran na czarno (czarny kwadrat jest spacją w negatywie - otrzymujesz ją w trybie graficznym  G ), a następnie rysuje białe przypadkowe punkty; jeśli masz tylko 1K pamięci - czyli tzw. standardową maszynę bez rozszerzenia pamięci - to zabraknie ci jej przy wykonywaniu tego programu, zatem będziesz musiał go nieco przerobić, aby wykorzystywał tylko część ekranu.

 

 

  1. Zmodyfikuj program tworzący wykres SIN tak, aby przed rysowaniem wykresu narysował poziomą linię dla osi x i pionową dla osi y.

 

 

  1. Napisz programy rysujące wykresy innych funkcji, np. COS, EXP, LN, ATN, INT itd. Dla każdego z nich musisz upewnić się, iż wykres zmieści się na ekranie, zatem będziesz musiał wziąć pod uwagę:

(i) dla jakiego zakresu argumentów chcesz rysować wykres funkcji (dla wykresu SIN odpowiada to zakresowi od 0 do 2π).
(ii) w którym miejscu ekranu należy umieścić oś x (odpowiada to 22 w wierszu dla programu wykresu SIN).
(iii) jak skalować oś y wykresu (odpowiada to 20 w wierszu 20 dla programu wykresu SIN).

Odkryjesz, że najprostszy jest COS - taki jak SIN.

 

 

  1. Uruchom to

10 PLOT 15,21
20 PRINT "GRUBY CUDZYSLOW"
30 PLOT 46,21

Polecenie PLOT przesuwa pozycję wydruku PRINT (UNPLOT również).

 

 

  1. Ten podprogram rysuje prostą linie (względnie) od piksela (A,B) do piksela (C,D).

Użyj go jako część jakiegoś programu głównego, który dostarczy wartości dla A, B, C i D.

(jeśli nie posiadasz rozszerzenia pamięci, to będziesz musiał pominąć polecenia REM).

1000 LET U=C-A
1005 REM U POKAZUJE, ILE KROKOW WZDLUZ NALEZY POJSC
1010 LET V=D-B
1015 REM V POKAZUJE ILE KROKOW W GORE
1020 LET D1X=SGN U
1030 LET D1Y=SGN V
1035 REM (D1X,D1Y) JEST POJEDYNCZYM KROKIEM W KIERUNKU PRZEKATNYM
1040 LET D2X=SGN U
1050 LET D2Y=0
1055 REM (D2X,D2Y) JEST POJEDYNCZYM KROKIEM W LEWO LUB W PRAWO
1060 LET M=ABS U
1070 LET N=ABS V
1080 IF M>N THEN GOTO 1130
1090 LET D2X=0
1100 LET D2Y=SGN V
1105 REM TERAZ (D2X,D2Y) JEST POJEDYNCZYM KROKIEM W GORE LUB W DOL
1110 LET M=ABS V
1120 LET N=ABS U
1130 REM M JEST WIEKSZA Z ABS U I ABS V, N JEST MNIEJSZA
1140 LET S=INT (M/2)
1145 REM CHCEMY PRZEJSC Z (A,B) DO (C,D) W M KROKACH,
1146 REM UZYWAJAC N KROKOW D2 W GORE-DOL LUB PRAWO-LEWO,
1147 REM A M-N KROKOW PRZEKATNYCH, ROWNO ROZPROSZONYCH
1150 FOR I=0 TO M
1160 PLOT A,B
1170 LET S=S+N
1180 IF S<M THEN GOTO 1230
1190 LET S=S-M
1200 LET A=A+D1X
1210 LET B=B+D1Y
1215 REM KROK PRZEKATNY
1220 GOTO 1250
1230 LET A=A+D2X
1240 LET B=B+D2Y
1245 REM KROK W GORE-DOL LUB W PRAWO-LEWO
1250 NEXT I
1260 RETURN

 

Ostatnia część (wiersze od 1150) miesza  równomiernie M-N kroków D1 z N krokami D2. Wyobraź sobie planszę do gry w Eurobiznes posiadającą M pól rozmieszczonych wokół krawędzi, ponumerowanych od 0 do M-1. Twoje bieżące pole posiada numer S i rozpoczyna się od narożnika leżącego naprzeciw pola GO. Każdy ruch przesuwa cię o N pól wokół planszy, a w linii prostej na ekranie wykonujesz albo ruch prawo-lewo/góra-dół (jeśli mijasz pole GO na planszy), albo krok po przekątnej w przeciwnym razie. Ponieważ twoja całkowita podróż na planszy składa się z M*N kroków albo N okrążeń, przechodzisz przez GO N razy i w M krokach są równomiernie rozmieszczone N kroków prawo-lewo/góra-dół.

 

Zmień program tak, aby w przypadku jeszcze jednego parametru, np. E = 1, rysowana była linia czarna (jak w przykładzie), a dla E = 0 linia biała (przy użyciu polecenia UNPLOT). W ten sposób możesz wymazać świeżo namalowaną linię.

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2018 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe