Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Atomimallin piirto

ErroR++ [12.03.2012 15:27:33]

#

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

User137 [12.03.2012 18:17:39]

#

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.

ErroR++ [13.03.2012 14:02:38]

#

Joo saatto olla parikin bugia. Mutta siis noissa taulukoissa on todellakin 361 alkiota ja en tiedä miksi (koodi on kopioitu eräästä koodivinkistä).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta