Kirjautuminen

Haku

Tehtävät

Koodit: QB: Täytetty kolmio LINE-käskyillä

Kirjoittaja: qalle

Kirjoitettu: 25.09.2016 – 25.09.2016

Tagit: algoritmit, grafiikka, 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:

  1. Kolmion kärkipisteet lajitellaan nousevasti Y-koordinaatin mukaan.
  2. Kolmio jaetaan pystysuunnassa kahteen osaan pystysuunnassa keskimmäisen pisteen kohdalta.
  3. Syntyy uusi kärkipiste, jonka X-koordinaatti lasketaan ylimmän ja alimman pisteen X-koordinaatin painotettuna keskiarvona.
  4. Kumpikin kolmio täytetään vaakasuorilla viivoilla ylhäältä alas. Viivojen X-koordinaatit lasketaan kolmioiden ylä- ja alapisteiden X-koordinaattien painotettuina keskiarvoina.
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

Ohjelma EXE-tiedostona

Kommentit

Make1971 [20.11.2016 18:03:53]

#

' helppo kolmio
SCREEN 12
FOR xy = 1 TO 100
    LINE (221 + xy, 300 + xy)-(419 - xy, 300 + xy), 9
    _DELAY .025
NEXT xy

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta