# Pendulum problem

Archives Forums/BlitzPlus Programming/Pendulum problem
| ||

Hi! I wanted to create a simulation of a pendulum so I did some researcher on equations to use. After a while I found this one: Fa = -mg*Sin(angle). I tried to create a pendulum based on that formula but I failed. What am I doing wrong? format_codebox(' Graphics 640,480,32,0 SetBuffer BackBuffer() Global pendelimg = LoadImage("pendelimg.png") ; 128,16px HandleImage (pendelimg,0,8) Global angle# = 45 Global mg# = 9.8 Global Fa# While Not KeyHit(1) Cls Fa = -mg*Sin(angle-90) angle = angle + Fa copypendel = CopyImage(pendelimg) RotateImage(copypendel,angle) DrawImage(copypendel,320,240) Flip Wend End ') |

| ||

Can't run the code here, but I suspect that the problem is the size of your 'timestep'. Try introducing a timestep variable dt#=0.01 angle=angle+Fa*dt See if that helps. You can experiment with values of dt- generally as timestep increases the simulation strays further from the mathematical model. |

| ||

You started with a differential equation: F = m*a, meaning force equals mass times acceleration. Thus acceleration is -g*Sin(angle). Acceleration is the second derivative of the angle with respect to time. In principle this can be solved to give angle as a function of time. But in practice it can't. There are two options. You can use some numerical method, such as Runge-Kutta, for dealing with differential equations. But the usual approach is to use a simpler, but approximate, equation. For small angles Sin(angle) is almost exactly equal to angle. Note: this is in radians, not degrees. That gives a new differential equation of the form acceleration = constant * angle which can be solved exactly. There is a nice overview here. The solution is in the box at the bottom. |