Microsoft Small Basic

Program Listing: GTS478
'Simulación dinámica del átomo de Rutherford con 4 orbitas
'Copyright Frank Martínez Moreno Todos los derechos reservados

GraphicsWindow.Width = 600 'configuracion de tamaño en píxeles de la ventana
GraphicsWindow.Height = 600
GraphicsWindow.Title = "Simulación modelo de Rutherford" 'Título de la ventana

k = 17 'constante r1, radio de la primera orbita, en pixeles
n = 4 'numero de orbitas, adimensional
rn = 14'radio de nucleo, en pixeles
re = 4 'radio del electrón, en píxeles
re2 = 12 'radio para borrar los electrones, en pixeles
duracion = 1000000 'duración en ciclos del bucle principal

'Calculo con un bucle unidimensional el radio de todas las orbitas elípticas de los electrones
For i = 1 To n
r_mayor[i] = Math.GetRandomNumber(300 - 17) + 17
r_menor[i] = Math.GetRandomNumber(300 - 17) + 17
EndFor
GraphicsWindow.DrawBoundText(50, 50, 100, "Calculando todas las posiciones de todos los electrones en ángulos del 1 al 360...")

'Declaración de los objetos que van a hacer de electrones
GraphicsWindow.BrushColor = "Blue"
GraphicsWindow.PenColor = "Blue"
'Dimensiones de los arrays: 1ª: nº de órbita ; 2ª: nº de electrón en cada órbita
for i = 1 To 2
e[1][i]= Shapes.AddEllipse(re, re)
EndFor
For i = 1 To 8
e[2][i] = Shapes.AddEllipse(re, re)
EndFor
For i = 1 To 18
e[3][i] = Shapes.AddEllipse(re, re)
EndFor
For i = 1 To 32
e[4][i] = Shapes.AddEllipse(re, re)
EndFor



'Dibujo en nucleo en rojo
GraphicsWindow.BrushColor = "Red"
GraphicsWindow.FillEllipse(300 - rn/2, 300 - rn/2, rn, rn)
GraphicsWindow.PenColor = "White"
GraphicsWindow.PenWidth = 20
'Bucle bidimensional (i, j)
'Pinto y borro en la pantalla, cada electron de cada nivel en cada ciclo del bucle. i representa los grados
'j representa el numero de electrones de cada nivel

For i = 1 To 360
For j = 1 To 2
xe[1][j][i] = 300 + r_mayor[1]*math.Cos(i+2*math.pi/2*j)
ye[1][j][i] = 300 + r_menor[1]*math.sin(i+2*math.pi/2*j)
EndFor
For j = 1 To 8
xe[2][j][i] = 300 + r_mayor[2]*math.Cos(i+2*math.pi/8*j)
ye[2][j][i] = 300 + r_menor[2]*math.sin(i+2*math.pi/8*j)
EndFor
For j = 1 To 18
xe[3][j][i] = 300 + r_mayor[3]*math.Cos(i+2*math.pi/18*j)
ye[3][j][i] = 300 + r_menor[3]*math.sin(i+2*math.pi/18*j)
EndFor
For j = 1 To 32
xe[4][j][i] = 300 + r_mayor[4]*math.Cos(i+2*math.pi/32*j)
ye[4][j][i] = 300 + r_menor[4]*math.sin(i+2*math.pi/32*j)
EndFor
EndFor
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(48, 48, 104, 300)


'bucle y arrays tridimensionales
'Dimensiones del bucle: 1ª: bucle principal ; 2ª: Ángulo respecto al eje x ; 3ª: nº de electrón de cada órbita
'Dimensiones de los arrays: 1ª: nº de órbita

For i = 1 To duracion
For a = 1 To 360
For j = 1 To 2 'pintar
Shapes.Move(e[1][j], xe[1][j][a], ye[1][j][a])
EndFor
'nivel 2
For j = 1 To 8 'pintar
Shapes.Move(e[2][j], xe[2][j][a], ye[2][j][a])
endfor
'nivel 3
For j = 1 To 18 'pintar
Shapes.Move(e[3][j], xe[3][j][a], ye[3][j][a])
EndFor
'nivel 4
For j = 1 To 32
Shapes.Move(e[4][j], xe[4][j][a], ye[4][j][a])
endfor
EndFor
EndFor