(Että trigonometria o ihkuu... )
Piirtää hienon atomimallin tms, emmätiä mikä toi tarkalleen on mutta toi tollanen hieno kuvio (http://sooda.dy.fi/foo/atomi.jpg). Ensin tein tän TIkkarilleni (TI-84+) kun aattelin et siihen vois koodata jotain hienoo, hidas kieli, sikahidas efekti -> PSIONille, hidas -> koneelle, nopee :)
Toimii sillain että piirretään kolmea ellipsiä eri asteissa, niin kaks niistä menee tollain hienosti vinoon ja kun vuorotellen piirretään ja pyyhitään ni johan on kaunis :)
Heitä formille yksi kappale kuvalaatikkoa, nimeltään p.
Binääri: http://sooda.dy.fi/foo/atomi.exe
Private Sub Form_Load() WindowState = vbMaximized Show 'formi esiin, muutoin se näkyisi vasta form_loadin jälkeen ja tästähän ei poistuta ku on toi looppi p.Move 0, 0, ScaleWidth, ScaleHeight 'bufferin skaalaus p.ScaleMode = vbPixels p.FillStyle = vbSolid 'jotta ympyrät täyttyisi 'keskix ja y kx = p.ScaleWidth / 2 ky = p.ScaleHeight / 2 k = kx: If k > ky Then k = ky k = k / 1.3 'kuva tulee vähän formia pienemmäksi -> hienompi p.Visible = False p.AutoRedraw = True r = Atn(1) / 45 'radiaaneiksi-muunnin Do DoEvents p.Circle (kx, ky), 15 'keskihommeli 'x-suuntainen ellipsi x = Cos(a * r) y = Sin(a * r) 'piirretään: '* 1.4 sitä varten ettei olisi liian "lyhyt" verrattuna noihin muihin kahteen 'y / 5 y:n sijasta tekee siitä ellipsin 'noi muut alemmat piirretään sitte samalla periaatteella, käännetään vaan vähän niitä p.Circle (kx + k * x * 1.4, ky + k * y / 5), 10, c 'vastakkainen piste piirretään tälleen vähentämällä a:sta puoliympyrä (180 astetta) xb = Cos((a - 180) * r) yb = Sin((a - 180) * r) p.Circle (kx + k * xb * 1.4, ky + k * yb / 5), 10, c 'koillinen-lounas X2 = Cos((a - 90) * r) Y2 = Sin((a - 90) * r) p.Circle (kx + k * (x + y / 5), ky + k * (X2 / 5 + Y2)), 10, c X2b = Cos((a - 270) * r) Y2b = Sin((a - 270) * r) p.Circle (kx + k * (xb + yb / 5), ky + k * (X2b / 5 + Y2b)), 10, c 'luode-kaakko X2 = Cos((a + 90) * r) Y2 = Sin((a + 90) * r) p.Circle (kx + k * (X2 / 5 + Y2), ky + k * (x + y / 5)), 10, c X2b = Cos((a - 90) * r) Y2b = Sin((a - 90) * r) p.Circle (kx + k * (X2b / 5 + Y2b), ky + k * (xb + yb / 5)), 10, c PaintPicture p.Image, 0, 0 For i = 0 To 300000: Next 'tämä pitää conffia omalle koneelle sopivaksi a = (a + 1) Mod 360 'kulman lisäys 'joka toinen kerta piirretään ja ne muut sit pyyhitään -> hieno efekti If a = 180 Or a = 0 Then c = BackColor - c: p.FillColor = c Loop End Sub Private Sub Form_Unload(Cancel As Integer) End 'do-loop höskän takia End Sub
Ei sulla olis sitä tikkari-versiota missään? :)
Vai onkos tuon 84+:n Basic muuten miten erilainen 86:een verrattuna?
Varsinaisesti atomeissa elektronit vetävät rallia eri kuorilla K L M N jne. ja näille kuorille mahtuu sitten erimääriä elektroneja. Mutta ihan siisti efekti.
Kaviaari kirjoitti:
Varsinaisesti atomeissa elektronit vetävät rallia eri kuorilla K L M N jne. ja näille kuorille mahtuu sitten erimääriä elektroneja.
Sen verran voisin viilata pilkkua, että nykykäsityksen mukaan atomit eivät ole tarkasti elektronikuorilla(K,L,M,N tai 1,2,3,4), vaan joka kuorella on muutamia orbitaaleja (s,d,p,f), jokta kuvaavat mistä voi TODENNÄKÖISESTI löytää elektronin, sillä elektroni saattaa joskus 'harhailla'.
Muistaakseni homma meni näin, korjatkaa jos olen väärässä :D
Heikki: oikeassa olet, mutta laitetaan hieman tarkennusta:
Radat K,L,M... ovat yksinkertaisin malli joka on. Oikeasti yksikään elektroni ei ole tarkallaan tietyllä radalla, johtuen sen aaltoluonteesta (lukekaa kvanttiteoriaa). Orbitaalit s,p,d,f... ovat ikäänkuin pilviä, jonka sisällä elektroni on tietyllä todennäköisyydellä. Nämä orbitaalit eivät täyty järjestyksessä, sillä joka kuorella (K,L,M...) on omat orbitaalinsa esim. K: 1s, L: 2s 2p jne. Pienimmälle kuorelle (K) mahtuu 2 elektronia, molemmat s-orbitaalille (joka on muuten pallonmuotoinen, p-orbitaali jakautuu 3:een rusettiin).
Itse koodista: hieno esimerkki luovasta trigonometrian käytöstä!
Blaze: se on vähän erilainen, piirtää suoraan sin ja coseilla koska en ole ehtinyt opetella siinä taulukoita vielä. Modasin koneelle paremman version :)
Tässäpä kuitenki eka versio:
0->A While 1 cos(A)->X sin(A)->Y Pt-Change(X/1.3,Y/5) Pt-Change((X+Y/5)/1.5,(cos(A-90)/5+sin(A-90))/1.2) Pt-Change((cos(A+90)/5+sin(A+90))/1.5,(X+Y/5)/1.2) A+3->A End
(Sairaan hidas, siksen lisännyt vastakkaisia pisteitä tohon. Ja miks tossei voi sisentää :D)
Söpö ^^
Toimii suoraan 86:lla, kun Pt-Changet vaihtaa PtChg:eiksi, eikä ollut edes niin hidas, kuin ensin ajattelin :)
Hanki sooda jotain tekemistä ;)
Iha hassu... ;)
Hieno ;)... <3 ihku <3
Todella hieno! :D
Osaisko joku kääntää C++:alle
No osais. Riippuu sitten, mitä rajapintaa halutaan käyttää piirtämiseen.
SDL??
No osais. Mut mitä varten pitäisi?
Ois kiva saada C++:alle kun oon opettelemas sitä ja SDL:ää.
Kumpi on kevyempi: timerilla tuo koodi pyörimässä kokoajan vai tuo loop ?
Hieno.
Aihe on jo aika vanha, joten et voi enää vastata siihen.