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