Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Sierpinskin kolmiofraktaali

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 'sierpinski

Kommentit

tejeez [08.09.2004 22:39:43]

#

siis häh, arvotaan? oisko parempi laittaa tuo jotenkin järkevämmin kuin arpomalla ^^

Metabolix [08.09.2004 23:12:45]

#

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

T.M. [08.09.2004 23:22:53]

#

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.

sooda [09.09.2004 12:36:43]

#

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)

kaviaari [09.09.2004 16:59:28]

#

Sorsalammessa on mun kirjottama samasta asiasta.

Latska [10.09.2004 10:42:15]

#

Tohon kun laittais jonkun zoomausmahdollisuuden, niin se olis vielä nykyistä hienompi!

T.M. [12.09.2004 21:47:58]

#

Kuinka niin? Sama toistuva kuvio siinä vain on :)

Blaze [14.09.2004 22:13:28]

#

Sama koodi on myös TI-86:n manuaalissa :)

Latska [17.09.2004 21:36:11]

#

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".

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta