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