En esta simulación coloqué a ojo las líneas que giran en los lugares que deben ir al inicio de la simulación, por lo que falta el código para que el mismo programa las coloque exactamente donde corresponden. Otro detalle es que la rueda que construyeron mis compañeros en la facu era de aluminio dado que se corroe mucho menos que el cobre (y es un tanto más barato), por ello consideré una rueda de aluminio de 15 cm de radio, Al programa se le puede añadir un comboBox para elegir entre diversos metales para la rueda, una caja de texto para ingresar su radio, la constante de proporcionalidad al rozamiento, etc.
Un detalle: Intenté hacerlo en Borland C++ Builder, pero no hallé un control "Line", así que lo dejé en Visual Basic.
En este caso, Line1 es la línea vertical y Line2 la horizontal. Las cajas de texto para la corriente y el campo magnético se llaman I0" y "B" respectivamente. El control StripChart se llama "graph":
'programado por Yelinna Pulliti Carrasco :)
Option Explicit
Dim M, in0 As Double
Dim w(), theta() As Double
Dim x11, y11, x21, y21 As Double
Dim x12, y12, x22, y22 As Double
Dim xm, ym As Single
Dim longitud As Single
Dim ang As Integer
Const pi = 3.1415926535
Const k = 3.01 'constante de proporcionalidad al rozamiento en g*m2/s
Private Sub Command1_Click()
Dim i As Integer
'densidad del aluminio: 2.6984 g/cm3
'volumen del cilindro: pi*r*r*h
'momento de inercia de la rueda: m*r*r/2
in0 = pi * 0.0225 * 0.002 * 2.6984 * 1000000
in0 = in0 * 0.0225 / 2 'momento de inercia en g*m2
M = 0.5 * 0.0225 * Val(B.Text) * Val(I0.Text)
For i = 0 To 30
w(i) = M * (1 - Exp(-k * i / in0)) / k
theta(i) = M * (i - (in0 * (1 - Exp(-k * i / in0)) / k)) / k
theta(i) = theta(i) * pi / 180
Next
graph.ClearAll
graph.Redraw
graph.TrackDisplayMax = M / k * 1.2
graph.TrackDisplayMin = 0
graph.Redraw
graph.TrackDisplayMax = M / k * 1.2
graph.TrackDisplayMin = 0
ang = 0
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False
End Sub
Private Sub Command3_Click()
If Timer1.Enabled = False Then
Timer1.Enabled = True
End If
End Sub
Private Sub Form_Load()
Form3.Left = Screen.Width / 2 - Form3.Width / 2
Form3.Top = Screen.Height / 2 - Form3.Height / 2
Timer1.Enabled = False
graph.TrackDisplayMax = 10
graph.TrackDisplayMin = 0
graph.XSpan = 50
graph.LastX = 50
ReDim w(0 To 30)
ReDim theta(0 To 30)
ang = 0
'cálculo del punto medio
xm = (Line2.X1 + Line2.X2) / 2
ym = (Line2.Y1 + Line2.Y2) / 2
'cálculo de la longitud de la línea
longitud = Line2.X2 - xm
End Sub
Private Sub Timer1_Timer()
If ang < 31 Then
graph.AddXY 0, ang, w(ang)
x21 = xm + longitud * Cos(theta(ang))
y21 = ym + longitud * Sin(theta(ang))
x22 = xm - longitud * Cos(theta(ang))
y22 = ym - longitud * Sin(theta(ang))
x11 = xm + longitud * Cos(theta(ang) + pi / 2)
y11 = ym + longitud * Sin(theta(ang) + pi / 2)
x12 = xm - longitud * Cos(theta(ang) + pi / 2)
y12 = ym - longitud * Sin(theta(ang) + pi / 2)
ang = ang + 1
Else
theta(30) = theta(30) + (w(30) * pi / 180)
If ang <= 50 Then
graph.AddXY 0, ang, w(30)
ang = ang + 1
End If
x21 = xm + longitud * Cos(theta(30))
y21 = ym + longitud * Sin(theta(30))
x22 = xm - longitud * Cos(theta(30))
y22 = ym - longitud * Sin(theta(30))
x11 = xm + longitud * Cos(theta(30) + pi / 2)
y11 = ym + longitud * Sin(theta(30) + pi / 2)
x12 = xm - longitud * Cos(theta(30) + pi / 2)
y12 = ym - longitud * Sin(theta(30) + pi / 2)
Form1.Caption = theta(30)
End If
Line2.X1 = x21
Line2.Y1 = y21
Line2.X2 = x22
Line2.Y2 = y22
'ambas líneas están desfasadas 90 grados entre sí
'90º=pi/2 rad
Line1.X1 = x11
Line1.Y1 = y11
Line1.X2 = x12
Line1.Y2 = y12
End Sub