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