Oppure

Loading
18/05/09 15:30
Angelelvis
ciao ragazzi
la mia professoressa di sistemi ci ha richiesto di simulare un pendolo
pero non riesco ha fargli disegnare la traiettoria che ha il pendolo con la formula data da lei
non so proprio come creare questo maledetto algoritmo che segua la legge del pendolo.
comunque il mio programma già ricrea il movimento,ma questo movimento non segue nessuna legge fisica.


ps grazie per la correzione, avevo creato la discussione molto di fretta.
Ultima modifica effettuata da Angelelvis 18/05/09 18:56
aaa
18/05/09 15:33
theprogrammer
Cosa hai scritto?
aaa
19/05/09 11:39
Angelelvis
grazie programmer per avermi corretto
aaa
19/05/09 17:58
theprogrammer
Veramente io intendevo vedere il codice che avevi gia' scritto ... :)
aaa
19/05/09 18:32
Angelelvis
a ok te lo passo subito
ecccolo
Private Function angolo360(ByVal x As Single, ByVal y As Single, ByVal OrigX As Single, ByVal OrigY As Single) As Single
Dim Xadesso, Yadesso, Angoloadesso As Single
Dim Xsp, Ysp As Long
If x >= OrigX Then
 Xsp = 1
 Xadesso = x - OrigX
Else
 Xsp = 0
 Xadesso = OrigX - x
End If
If y >= OrigY Then
 Ysp = 1
 Yadesso = y - OrigY
Else
 Ysp = 0
 Yadesso = OrigY - y
End If
Angoloadesso = (Xadesso * 90) / (Xadesso + Yadesso)

Select Case Xsp & Ysp
Case "00"
Angoloadesso = 270 + (90 - Angoloadesso)
Case "01"
Angoloadesso = 180 + Angoloadesso
Case "10"
Angoloadesso = Angoloadesso
Case "11"
Angoloadesso = 90 + (90 - Angoloadesso)
End Select
angolo360 = Angoloadesso
End Function
Private Function Radianti(ByVal angolo As Single) As Single
Radianti = (angolo * 6.28) / 360
End Function

Private Function f(ByVal angolo1 As Single, ByVal angolo2 As Single, ByVal massa As Single, ByVal lunghezza As Single, ByVal mu As Single, ByVal dt As Single, ByVal gravita As Single)
f = ((angolo2 - angolo1) ^ 2 / dt ^ 2) - (mu / massa) * ((angolo2 - angolo1) / dt) - (gravita / lunghezza) * angolo1
End Function

Private Sub Lunghezzapendolo_Change()
 raggio = Lunghezzapendolo.Value
 Text5.Text = raggio
 x = Val(Text2.Text)
 y = Val(Text3.Text)
 angolo = angolo360(x, y, x0, y0)
 Picture1.Cls
 x = Sin(Radianti(angolo)) * raggio
 y = Cos(Radianti(angolo)) * raggio
 x = x0 + x
 If y < 0 Then
  y = -y
 Else
  y = -y
 End If
 y = y0 + y
 Picture1.Circle (x, y), m
 Picture1.Line (x, y)-(x0, y0)
 If angolo >= 270 And angolo <= 360 Then
  angolo = angolo - 360
 End If
 Text1.Text = angolo
 Text2.Text = Math.Round(x)
 Text3.Text = Math.Round(y)
End Sub

Private Sub Massapendolo_Change()
 massa = Massapendolo.Value
 Text4.Text = massa
 x = Val(Text2.Text)
 y = Val(Text3.Text)
 angolo = angolo360(x, y, x0, y0)
 Picture1.Cls
 x = Sin(Radianti(angolo)) * raggio
 y = Cos(Radianti(angolo)) * raggio
 x = x0 + x
 If y < 0 Then
  y = -y
 Else
  y = -y
 End If
 y = y0 + y
 Picture1.Circle (x, y), massa
 Picture1.Line (x, y)-(x0, y0)
 If angolo >= 270 And angolo <= 360 Then
  angolo = angolo - 360
 End If
 Text1.Text = angolo
 Text2.Text = Math.Round(x)
 Text3.Text = Math.Round(y)
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If scelta = 0 Then
 angolo = angolo360(x, y, x0, y0)
 Picture1.Cls
 x = Sin(Radianti(angolo)) * raggio
 y = Cos(Radianti(angolo)) * raggio
 x = x0 + x
 If y < 0 Then
  y = -y
 Else
  y = -y
 End If
 y = y0 + y
 Picture1.Circle (x, y), massa
 Picture1.Line (x, y)-(x0, y0)
 If angolo >= 270 And angolo <= 360 Then
  angolo = angolo - 360
 End If
 Text1.Text = angolo
 Text2.Text = Math.Round(x)
 Text3.Text = Math.Round(y)
End If
End Sub
Private Function angolo3602(ByVal x As Single, ByVal y As Single, ByVal sp As Single, ByVal x0 As Single, ByVal y0 As Single)
x = x + sp
y = y + sp
angolo3602 = angolo360(x, y, x0, y0)
End Function
Private Sub movependolosx()
y3 = yp
For i = xp To xf Step stepp
 x2 = i
If x2 < appo Then
 If x2 < 0 Then
  y3 = y3 + stepp
 End If
  If x2 > 0 Then
  y3 = y3 - stepp
 End If
 If x2 = 0 Then
  y3 = 50
 End If
 appo = x2
End If
If x2 > appo Then
  If x2 < 0 Then
  y3 = y3 - stepp
 End If
  If x2 > 0 Then
  y3 = y3 + stepp
 End If
  If x2 = 0 Then
  y3 = 50
 End If
 appo = x2
End If
 angolo1 = angolo360(x2, y3, x0, y0)
 angolo2 = angolo3602(x2, y3, stepp, x0, y0)
 Form2.List1.AddItem (f(angolo1, angolo2, massa, raggio, mu, dt, gravita) & "                  " & angolo1)
 Picture1.Refresh
 x2 = Sin(Radianti(angolo1)) * raggio
 y2 = Cos(Radianti(angolo1)) * raggio
 x2 = x0 + x2
 If y < 0 Then
  y2 = -y2
 Else
  y2 = -y2
 End If
 y2 = y0 + y2
 Picture1.Circle (x2, y2), massa
 Picture1.Line (x2, y2)-(x0, y0)
  If angolo1 >= 270 And angolo1 <= 360 Then
 angolo1 = angolo1 - 360
 End If
 Text1.Text = angolo1
 Text2.Text = Math.Round(x2)
 Text3.Text = Math.Round(y2)
Next i
If xf < 0 Then
xf = xf + dt
Else
xf = xf - dt
End If
End Sub

Private Sub movependolodx()
y3 = yf
For i = xp To xf Step stepp
 x2 = i
If x2 < appo Then
 If x2 < 0 Then
  y3 = y3 + stepp
 End If
  If x2 > 0 Then
  y3 = y3 - stepp
 End If
 If x2 = 0 Then
  y3 = 50
 End If
 appo = x2
End If
If x2 > appo Then
  If x2 < 0 Then
  y3 = y3 - stepp
 End If
  If x2 > 0 Then
  y3 = y3 + stepp
 End If
  If x2 = 0 Then
  y3 = 50
 End If
 appo = x2
End If
 angolo1 = angolo360(x2, y3, x0, y0)
 angolo2 = angolo3602(x2, y3, stepp, x0, y0)
 Form2.List1.AddItem ((f(angolo1, angolo2, massa, raggio, mu, dt, gravita)) & "                  " & angolo1)
 Picture1.Refresh
 x2 = Sin(Radianti(angolo1)) * raggio
 y2 = Cos(Radianti(angolo1)) * raggio
 x2 = x0 + x2
 If y < 0 Then
  y2 = -y2
 Else
  y2 = -y2
 End If
 y2 = y0 + y2
 Picture1.Circle (-x2, y2), massa
 Picture1.Line (-x2, y2)-(x0, y0)
 If angolo1 >= 270 And angolo1 <= 360 Then
  angolo1 = angolo1 - 360
 End If
 Text1.Text = angolo1
 Text2.Text = Math.Round(x2)
 Text3.Text = Math.Round(y2)
Next i
If xp < 0 Then
xp = xp + dt
Else
xp = xp - dt
End If
End Sub

Private Sub simulazionependolo()
appo2 = 0
xp = Text2.Text
yp = Text3.Text
yf = yp
stepp = dt
If xp < 0 Then
 xf = -xp
 For u = 1 To 10
  movependolosx
   stepp = stepp - 0.001
  movependolodx
 Next u
End If
If xp > 0 Then
 xf = xp
 xp = -xp
 For u = 1 To 5
  movependolodx
   stepp = stepp - 0.001
  movependolosx
 Next u
End If
End Sub
aaa