!!!!!!! Jak Malować? (cz. 1) czytelnia Try2emu

Jak Malować? (cz. 1)

Tworząc grafikę na ekranie czy to w Basicu, czy w kodzie maszynowym niejednokrotnie napotykamy na przeszkody typu: jak zapełnić pewien obszar zamknięty?

Zacznijmy od najprostszej figury geometrycznej posiadaiącei pole — koła. Może tak:

10 LET x = 128: LET y = 88: LET r = 30: REM parametry
20 FOR f= 1 TO r
30 CIRCLE x, y. f
40 NEXT f

Nie jest to porządnie — pozostają kropki i smugi. Przypomnijmy sobie wiadomości o funkcjach trygonometrycznych i napiszmy (linia 10 bez zmian):

20 FOR f = 0 TO 2*PI STEP PI/180
30 PLOT x, y
40 DRAW r * COS f, r * SIN f
50 NEXT f

Też niedobrze. A może skorzystać z równania

koła x2 + y2 = r2?
20 FOR f=-r TO r
30 PLOT x+f, y + SQR ABS(r*r-f*f)
40 DRAW 0.-2*SQR ABS (r*r-f*f)
50 NEXT F

Nareszcie!

Przyczyną tak długich niepowodzeń była mała rozdzielczość Spectrum. Aby uzyskać dobry obraz musieliśmy uciec się do rysowania tylko pionowych (poziomych) linii.

Teraz narysowanie zapełnionej elipsy będzie fraszką.

Znamy równanie:

 x2/a2 + y2/b2 = 1

więc:

20 FOR f =-a TO a
30 LET dy = b*SQR ABS (1-f*f/(a*a))
40 PLOT x + f, y + dy
50 DRAW 0, -2*dy
60 NEXT f

a i b to długości półosi elipsy.

W podobny sposób zamalować można pozostałe krzywe stożkowe — Hiperbolę

 x2/a2 - y2/b2 = 1

parabolę y2 = 2px

Teraz kwadrat. Zadanie raczej dla przedszkolaka’

20 FOR f = -rTO r 30 PLOT x+ f, y-r 40 DRAW 0,2*r 50 NEXT f

W przypadku prostokąta wystarczy poróżnić r w liniach 20 i 30 (poziom) z r w linii 40 (pion) W przypadku rombu:

10 LET x = 128: LET y = 88: LET r = 30: LET a = PI/3
20 FOR f= -r TO r
30 PLOT x + f, y - r
40 DRAW r*COS a, r*SIN a
50 NEXT F

Wprowadzamy tu kąt nachylenia boku (a).

A jak zrobić równoległobok? — Tak jak z kwadratu prostokąt.

Tu kończą się możliwości Spectrum w dokładnym zapełnianiu figur. Nie da się szybko i dokładnie zapełnić ani w/w figur obróconycń o kąt ostry, ani innych. Rozwiązanie problemu — za miesiąc.

Marcin Przasnyski