Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Lävistäjäleikki

Kirjoittaja: sooda

Kirjoitettu: 08.05.2004 – 08.05.2004

Tagit: grafiikka, koodi näytille, sovellus, vinkki

Lävistäjälelu! :)
Piirtää säännöllisen monikulmion ja sille kaikki mahdolliset lävistäjät. Idea tästä tuli matikan tunnilla kun kateltiin kaverin kanssa jotain lukion kirjaa ja siinä oli tällainen 12-kulmio. Tosi nätti efekti. Klikaa hiirellä niin kulmien määrä vaihtuu.
Niin ja binääri: http://sooda.dy.fi/foo/lelu.exe

'Const EiVärejä = 1 'selkeämpää muttei hieanoja värejä, koklaa epäkommentoida
Private kulmat 'kulmat näkyy joka subissa ettei häviä välillä.
Const pi = 3.14159265358979
Private Sub Form_Load()

    AutoRedraw = True 'aina päälle tämä!
    ScaleMode = 3 'pixelit
    kulmat = 5 'aluksi kulmia on 5kpl oletuksena
    piirrä 'piirretään

End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If Button = 1 Then kulmat = kulmat + 1 'vasemmalla napilla lisätään kulmia
    If Button = 2 Then kulmat = kulmat - 1 'oikeella napilla vähennetään kulmia
    If kulmat = 2 Then kulmat = 3 'minimimäärä kulmille on 3
    piirrä 'piirrä uusi lelu

End Sub


Sub piirrä() 'ite piirtojutsku

    Cls 'vanha kuva pois
    Caption = kulmat 'kerrotaan montako kulmaa on
    ReDim kx(kulmat), ky(kulmat) 'kulmakoordinaatit
    koko = ScaleWidth 'halkaisija
    If ScaleHeight < koko Then koko = ScaleHeight 'halkaisijatarkistus ettei kuva ylity reunojen
    koko = koko / 2 'halkaisija säteeksi
    For i = 0 To kulmat - 1 'lasketaan kulmien koordinaatit jotta saataisiin säännöllinen monikulmio
        kx(i) = koko * Cos(k * pi / 180)
        ky(i) = koko * Sin(k * pi / 180)
        k = k + 360 / kulmat 'lisätään tietyn verran että pisteiden välit olisi yhtä pitkiä
    Next
    koko = 255 * 8 / kulmat 'väritysjutsku
    For i = 0 To kulmat - 1 'piiretään joka kulmasta viiva
        If EiVärejä Then r = 0: g = 0: b = 0 'jos ei värejä niin väri on musta joka viivalla
        For j = i + 1 To kulmat - 1  'piirretään viiva joka kulmaan johon ei olla vielä piirretty
            Line (ScaleWidth / 2 + kx(i), ScaleHeight / 2 + ky(i))-(ScaleWidth / 2 + kx(j), ScaleHeight / 2 + ky(j)), RGB(r, g, b)
        Next
        If i + 1 > kulmat - 1 Then 'vika viiva on myös tietyn värinen
                                   'vaikee selittää, kommentoi toi line niin tajuat
            Line (ScaleWidth / 2 + kx(0), ScaleHeight / 2 + ky(0))-(ScaleWidth / 2 + kx(kulmat - 1), ScaleHeight / 2 + ky(kulmat - 1)), RGB(r, g, b)
        End If
        Select Case v \ 255 'mikä värijutsku menossa
            Case 0 'siirretään r päin
                r = tark(r + koko)
            Case 1 'siirretään g päin
                r = tark(r - koko)
                g = tark(g + koko)
            Case 2 'siirretään b päin
                g = tark(g - koko)
                b = tark(b + koko)
            Case 3 'siirretään rg päin
                b = tark(b - koko)
                r = tark(r + koko)
                g = tark(g + koko)
            Case 4 'siirretään gb päin
                r = tark(r - koko)
                b = tark(b + koko)
            Case 5 'siirretään rb päin
                r = tark(r + koko)
                g = tark(g - koko)
            Case 6 'siirretään rgb päin
                g = tark(g + koko)
            Case 7 'siirretään tyhjyyttä päin
                r = tark(r - koko)
                g = tark(g - koko)
                b = tark(b - koko)
        End Select
        v = v + koko 'lisätään värilaskuria
    Next

End Sub

Function tark(mikä) 'värin tarkistus ettei mene yli reunojen

    If mikä < 0 Then
        tark = 0
    ElseIf mikä > 255 Then
        tark = 255
    Else
        tark = mikä
    End If

End Function

Kommentit

ZcMander [08.05.2004 15:40:30]

#

Joo, lelu on, pääsin 200 kun hidas kone alko tökkimään ;)

ZcMander [08.05.2004 15:41:27]

#

Hieno kuvio tulee kun päääsee 250:meneen ;)

hunajavohveli [08.05.2004 15:51:56]

#

Hieno on! Väsäilin tuollaista kerran QB:llä vanhalla 486:lla. Ei ollut parempaa konetta käytössä ja halusin tutkia fiitä, joka on siis 1.618033889... tai jotain sinne päin, eli siis viisikulmion lävistäjän ja sivun pituuksien suhde. Niin tein sitten tuon tapaisen, ja laskin sitten pisteistä pythagoraan lauseella, onko niiden etäisyys fii ja olihan. Jos tiedät jotain noista jutuista, sooda, mitä selitin, niin voisit lisätä tuohon lävistäjien pituuksien laskemisen ja näyttämisen.

hunajavohveli [08.05.2004 15:53:30]

#

Tulee muuten tosi hieno sateenkaariefekti, kun pistää lävistäjiä niin, että täyttää koko kuvion. Innostuin samaan omallakin ohjelmalla, mutta 486:n piirtäminen oli aivan tuskastuttavan hidas, ja näin monella värillä tuo onkin paljon hienompi.

tuomas [08.05.2004 15:54:24]

#

350 kohdilla rupes vähän hihastumaan..

Heikki [08.05.2004 20:59:32]

#

Aika komea. Hidastuu kolmea sataa lähestyttäessä.

Bill Keltanen [09.05.2004 06:54:33]

#

Hää, hitaat koneet :P mulla meni 531 ja sitte.. :D (Pentium 4 2.81 GHz)

makeuu [10.05.2004 17:55:08]

#

130 ja menee hitaaksi :/, mutta erittäin hieno ;)

msdos464 [24.10.2004 19:59:30]

#

300 nii menee joku ½ sek piirtää.. ei jaksa rämpyttää enempää :)

Ahti [07.11.2004 20:15:28]

#

testi

Ahti [07.11.2004 20:15:47]

#

Ihan hieno

Tuplanolla [27.08.2005 15:02:44]

#

Seitsemänsadan kohdalla on jo kaunista jälkeä mutta piirtämiseen menee aikaa melko pitkään.

Nobo [22.12.2005 23:15:15]

#

Hieno, 300:ssa kesti jo lähes sekunti, että kuva päivittyy 891 MHz ;D.

moptim [04.08.2006 10:52:05]

#

mulla ku nous yli 60 kulmaan ni ½ sekuntia kesti että otsikko päivittyi kun naksuttelin koko ajan hiirtä ja vasta ku otsikon kasvu loppui ni uusi kuva piirtyi (koneessa 2.4 GHz celeron ja joku intelin integroitu näytönohjain ja kannettava on)

siika [24.06.2009 13:27:27]

#

Miten sais sellasen et piirtelis noit itekseen ilman et tarvii klikkailla? ja mul o VB6

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta