Kirjoittaja: sooda
Kirjoitettu: 08.09.2004 – 08.09.2004
Tagit: grafiikka, koodi näytille, vinkki
Elikkäs piirtää Sierpinskin hauskan kolmiofraktaalin, http://sooda.dy.fi/foo/sierpinski.jpg voi selventää asiaa. Ite en tietty ole tätä keksinyt vaan Sierpinski-setä :) ja koodi on portattuna mun TI-84+:n manuaalista :D
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Sub Form_load()
    Show 'esiin
    ScaleMode = 3 'pixelit
    WindowState = vbMaximized 'koko näytöksi, hienompi isompana
    DoEvents 'odotetaan suurennusta
    For i = 1 To 150000 'piirretään muutama pikseli
        n = Rnd 'arvotaan mitä tehdään
        If n <= 1 / 3 Then
            x = x / 2
            y = y / 2
            c = vbRed 'väreistä huomaa toiminnan, vaikeaa selittää tässä
        ElseIf n > 1 / 3 And n <= 2 / 3 Then
            x = (0.5 + x) / 2
            y = (1 + y) / 2
            c = vbGreen
        ElseIf n > 2 / 3 Then
            x = (1 + x) / 2
            y = y / 2
            c = vbBlue
        End If
        SetPixel hdc, ScaleWidth * x, ScaleHeight * y, c 'setpixel o nopeampi kuin pset
    Next
End Sub 'sierpinskisiis häh, arvotaan? oisko parempi laittaa tuo jotenkin järkevämmin kuin arpomalla ^^
If n <= 1 / 3 Then ElseIf n > 1 / 3 And n <= 2 / 3 Then ElseIf n > 2 / 3 Then End If
Tuossa on aivan turhaan tarkistus n > 1 / 3, koska jos se ei olisi, niin ei päästäisi tuohon asti. Lisäksi, jos luku ei ole pienempi tai yhtäsuuri kuin kuin 2 / 3, voisi olettaa automaattisesti, että se on suurempi. Tämä toimii siis aivan yhtä hyvin ja nopeammin, koska säästää tarkistukseen kuluvaa aikaa:
If n <= 1 / 3 Then ElseIf n <= 2 / 3 Then Else End If
Hieno kuvio.
Toinen optimointiehdotus olisi laskea etukäteen IF-lauseiden ehdoissa esiintyvät 1/3 ym jakolaskut.
Sitten vielä noista koodin kommentoinneista: "piirretään muutama pikseli" on täysin turhaa tietoa jopa aloittelijoille.
No saahan sitä ite optimoida. Toi vaan on ton näköinen jotta siitä ymmärtäisi (?) mahdollisimman paljon sen toiminnasta.
(ite en tajua paljoakaan :D)
Sorsalammessa on mun kirjottama samasta asiasta.
Tohon kun laittais jonkun zoomausmahdollisuuden, niin se olis vielä nykyistä hienompi!
Kuinka niin? Sama toistuva kuvio siinä vain on :)
Sama koodi on myös TI-86:n manuaalissa :)
lainaus:
Kuinka niin? Sama toistuva kuvio siinä vain on :)
Tietysti on! Eihän se muuten fraktaali oliskaan. Tarkoitin, että pääsis jotenkin fraktaalin "sisälle".