Eli Mitenkäs vois piirtää kunnollisen atomimallin, jossa elektronit liikkuisivat oikeilla radoillaan?
Projektissa on controllit Electron, Neutron ja Proton.
Tässä Atom -usercontrollin koodia:
Public Reservation As Short = 0 'varaus Public electrons() As Electron Public neutrons() As Neutron Public protons() As Proton Dim STab(360) As Double Dim CTab(360) As Double Public Sub Init() Dim es As Byte = 0 'elektroneja kuorella Dim cs As Byte = 1 'nykyisen kuoren numero For i = 0 To 360 'sini- ja kosinitaulukot STab(i) = Math.Sin(i * 2 * Math.PI / 365) CTab(i) = Math.Cos(i * 2 * Math.PI / 360) Next Me.BackgroundImage = New Bitmap(Me.Width, Me.Height) Me.Size = New Size(300, 300) For i = 0 To electrons.Length - 1 es += 1 'elektronilukumäärä kasvaa electrons(i).Location = New Point(i + 25, i + 25) electrons(i).DefaultShell = cs 'oletuskuori electrons(i).CurrentShell = electrons(i).DefaultShell 'nykyinen kuori Me.Controls.Add(electrons(i)) Select Case cs 'käsitellään mahdolliset kuorien vaihdot Case 1 If es = 2 Then cs += 1 : es = 0 Case 2 If es = 8 Then cs += 1 : es = 0 Case 3 If es = 8 Then cs += 1 : es = 0 Case 4 If es = 18 Then cs += 1 : es = 0 Case 5 If es = 18 Then cs += 1 : es = 0 Case 6 If es = 32 Then cs += 1 : es = 0 Case 7 If es = 32 Then cs += 1 : es = 0 End Select Next Update_Me() 'päivitetään tmrUpdate.Start() 'asetetaan ajastin, joka hoitaa elektronien liikuttamisen End Sub Public Sub Update_Me() 'liikutetaan elektroneja 'juuri tässä aliohjelmassa on ongelma Static counter As Integer = 0 counter += 5 If counter = 360 Then counter = 0 For i = 0 To electrons.Length - 1 electrons(i).Location = New Point(STab(counter) * 10 + 100 + i * 25 + CTab(counter) * 90, CTab(counter) * 10 + 100 + i * 25 + STab(counter) * 90) Next Application.DoEvents() End Sub
Sini-taulukon laitossa typo? 365 tilalla kuuluis kai olla 360.
En muista tarkkaan basicin syntaksia, mutta onko tuossa 361 vai 360 alkiota?
Dim STab(360) As Double
For silmukkas käy läpi 361. Mutta ei tarviis olla kuin kulmat 0-359, kun 0 ja 360 asteilla on ihan sama arvo.
Joo saatto olla parikin bugia. Mutta siis noissa taulukoissa on todellakin 361 alkiota ja en tiedä miksi (koodi on kopioitu eräästä koodivinkistä).
Aihe on jo aika vanha, joten et voi enää vastata siihen.