Kirjoittaja: qalle
Kirjoitettu: 25.09.2016 – 25.09.2016
Tagit: algoritmit, grafiikka, koodi näytille, vinkki
Ohjelma piirtää SCREEN 12:ssa erivärisiä täytettyjä yksivärisiä kolmioita LINE-käskyllä. (Itse aliohjelma ei ole näyttötilasta riippuvainen, vain demo.)
Kehittämäni algoritmi:
DECLARE SUB Triangle (x1%, y1%, x2%, y2%, x3%, y3%, colr%)
' Piirtaa taytettyja kolmioita LINE-kaskylla.
' Tehnyt Kalle. Versio 1.0.
' demon asetukset
CONST XRES = 640 ' nayttotilan vaakatarkkuus
CONST YRES = 480 ' nayttotilan pystytarkkuus
CONST TRIANGLES = 256 ' montako kolmiota piirretaan
RANDOMIZE TIMER
SCREEN 12
FOR i% = 0 TO TRIANGLES - 1
' arvo koordinaatit ja kierrata vareja 0-15
x1% = INT(RND * XRES)
y1% = INT(RND * YRES)
x2% = INT(RND * XRES)
y2% = INT(RND * YRES)
x3% = INT(RND * XRES)
y3% = INT(RND * YRES)
colr% = i% MOD 16
' piirra kolmio
CALL Triangle(x1%, y1%, x2%, y2%, x3%, y3%, colr%)
NEXT
' odota nappaimenpainallusta
x$ = INPUT$(1)
SCREEN 0
WIDTH 80, 25
PRINT "Kolmionpiirto v. 1.0"
SUB Triangle (x1%, y1%, x2%, y2%, x3%, y3%, colr%)
' Piirtaa taytetyn kolmion LINE-kaskya kayttaen.
' lajittele pisteet nousevasti y-koordinaatin mukaan bubblesortilla
IF y1% > y2% THEN
SWAP x1%, x2%
SWAP y1%, y2%
END IF
IF y2% > y3% THEN
SWAP x2%, x3%
SWAP y2%, y3%
END IF
IF y1% > y2% THEN
SWAP x1%, x2%
SWAP y1%, y2%
END IF
' laske X-koordinaatti, jossa pisteiden 1 ja 3 kautta kulkeva suora risteaa
' pisteen 2 kautta kulkevan X-akselin suuntaisen suoran kanssa
IF y3% > y1% THEN
tempx% = x1% + (y2% - y1%) / (y3% - y1%) * (x3% - x1%)
END IF
' kolmion ylapuolisko (vaakaviivoja pisteen 1 Y-koordinaatista pisteen 2
' Y-koordinaattiin)
IF y2% > y1% THEN
FOR y% = y1% TO y2%
progress! = (y% - y1%) / (y2% - y1%) ' 0-1
linex1% = x1% + progress! * (x2% - x1%)
linex2% = x1% + progress! * (tempx% - x1%)
LINE (linex1%, y%)-(linex2%, y%), colr%
NEXT
ELSE
' ei jaeta nollalla
LINE (x1%, y1%)-(x2%, y1%), colr%
END IF
' kolmion alapuolisko (vaakaviivoja pisteen 2 Y-koordinaatista pisteen 3
' Y-koordinaattiin)
IF y3% > y2% THEN
FOR y% = y2% TO y3%
progress! = (y% - y2%) / (y3% - y2%) ' 0-1
linex1% = x2% + progress! * (x3% - x2%)
linex2% = tempx% + progress! * (x3% - tempx%)
LINE (linex1%, y%)-(linex2%, y%), colr%
NEXT
ELSE
' ei jaeta nollalla
LINE (x2%, y2%)-(x3%, y2%), colr%
END IF
END SUB' helppo kolmio
SCREEN 12
FOR xy = 1 TO 100
LINE (221 + xy, 300 + xy)-(419 - xy, 300 + xy), 9
_DELAY .025
NEXT xy