Kirjoittaja: sooda
Kirjoitettu: 07.06.2004 – 07.06.2004
Tagit: grafiikka, koodi näytille, vinkki
Hankin joskus kauan sitten laserpointterin ja tein rotaattorin sille että on kaksi moottoria joissa on peilit ja niitten pyörimisnopeutta säätämällä saadaan aikaan vaikkamitä kuvioita. Noh se oli niin hieano että pitihän siitä tehdä vb-versiokin :D Eli tämä toimii silleen että... hmm, helpompi selittää ton koneen toiminta. Toinen moottori pyörittää ite pistettä ympäri niin että syntyy ympyrä, ja toinen moottori pyörittää sitten ite ympyrää niin nopeasti että sitä ite ympyrää ei ehditä piirtää enneku silmä kelaa jonkun ihan ihme kuvion siitä :D en tajua itekään tarkalleen miten se toimii, mutta se vaan toimii ihan kuin tää ohjelmakin. Vaikea selittää, koita tajuta timerin i:stä ja j:stä että miten niitä lisäillään.
Lisää formille timer kello, picturebox b ja neljä scrollbaria voima1, voima2, vauhti ja rotaatio.
Exen (ja muutkin filut jos ei jaksa lisäillä objuja) löytyy: http://sooda.dy.fi/foo/rotaatio/
editti: mainittakoon nyt, että kuva muuttuu parhaiten kun säätää kahden ylimmän scrollbarin suhdetta tai toiseksi alinta scrolleria(rotaatio).
Private kx, ky, i, j, rot
Private Sub Form_Load()
    b.Visible = False 'puskuri piiloon
    b.AutoRedraw = True 'pakollinen :P
    b.ScaleMode = 3 'pixelit
    b.DrawWidth = 2 'selkeämpää
    rad = Atn(1) / 45 'radiaaneiksi-kerroin
    'oletusarvot
    Show
    Form_Resize
    voima1 = voima1.Max / 2
    voima2 = voima2.Max / 4
    rotaatio.Min = -30
    rotaatio.Max = 30
    rotaatio = 9
    vauhti.Min = -30
    vauhti.Max = 30
    vauhti = 20
    kello.Interval = 1 'pyöritys päälle
End Sub
Private Sub Form_Resize()
    'siirretään skrollbaarit
    voima1.Move 0, 0, ScaleWidth, 255
    voima2.Move 0, 255, ScaleWidth, 255
    rotaatio.Move 0, 510, ScaleWidth, 255
    vauhti.Move 0, 765, ScaleWidth, 255
    'skaalataan voimien maksimiarvoja
    voima = b.ScaleWidth
    If b.ScaleHeight < voima Then voima = b.ScaleHeight
    voima1.Max = voima / 2
    voima2.Max = voima / 2
    'temppi-bufferin skaalaus
    b.Move 0, 0, ScaleWidth, ScaleHeight
    kx = b.ScaleWidth / 2
    ky = b.ScaleHeight / 2
End Sub
Private Sub kello_Timer()
    b.Cls 'bufferista vanhat roskat pois
    rot = (rot + vauhti) Mod 360 'pyöritys
    j = rot
    rad = Atn(1) / 45 'radiaaneiksi-kerroin
    'alkukohta
    x = kx + voima1 * Cos(rad * i) + voima2 * Cos(rad * j)
    y = ky + voima1 * Sin(rad * i) + voima2 * Sin(rad * j)
    b.PSet (x, y), 255
    For i = 0 To 360 'piirretään "ympyrä"
        x = kx + voima1 * Cos(rad * i) + voima2 * Cos(rad * j)
        y = ky + voima1 * Sin(rad * i) + voima2 * Sin(rad * j)
        b.Line -(x, y), 255
        j = j - rotaatio 'toista rotaattia eteenpäin
    Next
    DoEvents
    Picture = b.Image 'kuva bufferista formille
End SubAika hieno!
Siisti!
vähäks upea! =)=p
hieno :D
pitää yrittää soveltaa vähä joka paikkaan tota koodivinkkiä :)
nätti
Hieno kuvio tulee. Olen kerran saanut aikaan vähän samantapaisen kuvion, joten osaisin ehkä sanoa jotenkin, miten tuo toimii, mutta en kyllä muista tarkalleen, miten sen tein.
Aiiii mikä kuvio :) vähäks kiva
EDIT: Muistankin sen laserin :P aika samannäkönen
Kun tarpeeksi säädin jäi johonkin loputtomaan looppiin tai jotain kun ei enää antanut tehdä mitään. Ei edes sulkea ohjelmaa.
ihan hieno ohjelma on, mut mistä oikein sait idean tehdä tommosen? : )
masee ja idean se sai tod. näk. laaserista...
Hehhee... tuollainen on tullut tehtyä laskimellakin :)
Tosin se ei pyörinyt, arvot piti muuttaa manuaalisesti koodista ja piirtämiseen kesti muutamia sekunteja... :D
Juu, ihan hieno ...
mulla tuli virhe.sellanen et ne koordinaatit menee koko ajan sattuman varaisesti.
todella hieno donitsi :D:D:D
onneksi kohta on vappu ja saa munkkia...