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