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