Hi all. I'm doing a little program for my own fun and I'm having troubles with the physics. I need to be able to calculate where an object is on a circle after an amount of time has passed. I know the radius (R) of the circle, the starting x (Sx) and y (Sy) positions, and the velocity (v). I'd like to be able to generated the finishing x (Fx) and y (Fy) positions. The velocity and radius are constant for each object, but I have several objects rotating around a central point. It's similar to planets orbiting the sun, but I don't need to have any gravitational interaction between the objects. I also know the mass of the objects (m) if I need that for calculating. Can anyone give me a formula or set of formulas to solve for Fx,Fy? Thanks!
In terms of the variables given it should be: [tex] \begin{align*} F_x &= S_x\cos(vt/R) - S_y\sin(vt/R) \\ F_y &= S_x\sin(vt/R) + S_y\cos(vt/R) \end{align*} [/tex]
I seem to be having problems converting the formulas into my code. Here's the code I've created: Code (Text): 'Starting values nRadius = 30 StartX = 130 StartY = 100 CenterX = 100 CenterY = 100 nVelocity = 1 'Set the current XY to be the starting XY CurX = StartX CurY = StartY 'Draw a line from 0,0 to the starting point DrawPoint(0, 0, CurX, CurY) 'Save the point data to a file for analysis (currentX, CurrentY, Distance from "center" to XY, Distance from 0,0 to XY) fStream.WriteLine(CurX.ToString + "," + CurY.ToString + "," + Sqrt(((CurX - CenterX) * (CurX - CenterX)) + ((CurY - CenterY) * (CurY - CenterY))).ToString + "," + Sqrt(((CurX) * (CurX)) + ((CurY) * (CurY))).ToString) 'Loop 360 times to form the circle For nTime = 1 To 360 'Set the new CurX CurX = StartX * (Cos((nVelocity * nTime) / nRadius)) - StartY * (Sin((nVelocity * nTime) / nRadius)) 'Set the new CurY CurY = StartX * (Sin((nVelocity * nTime) / nRadius)) + StartY * (Cos((nVelocity * nTime) / nRadius)) 'Save the point data to a file for analysis (currentX, CurrentY, Distance from "center" to XY, Distance from 0,0 to XY) fStream.WriteLine(CurX.ToString + "," + CurY.ToString + "," + Sqrt(((CurX - CenterX) * (CurX - CenterX)) + ((CurY - CenterY) * (CurY - CenterY))).ToString + "," + Sqrt(((CurX) * (CurX)) + ((CurY) * (CurY))).ToString) 'Draw a line from 0,0 to the calculated point DrawPoint(0, 0, CurX, CurY) Next This code draws a cicle centered on 0,0 that is 164 pixels long. Since my value for nRadius is 30, what I was expecting is a circle centered on 100,100 that is 30 pixels long. Here's a few of the data points that get generated: Code (Text): X Coord Y Coord Distance from 100,100 Distance from 0,0 130 100 30 164.0121947 126.5950684 104.2769805 26.936782 164.0121947 123.0494886 108.4381084 24.5454802 164.0121947 119.3671998 112.4787607 23.03926859 164.0121947 115.5522931 116.3944481 22.59760498 164.0121947 111.6090068 120.1808204 23.28163551 164.0121947 107.541722 123.8336708 24.99842864 164.0121947 103.3549575 127.3489409 27.55395272 164.0121947 99.05336477 130.7227254 30.73730588 164.0121947 94.64172292 133.9512758 34.37150361 164.0121947 90.12493334 137.0310052 38.32508694 164.0121947 Is there some sort of shifting I need to do in the formula to account for the fact that my center is not 0,0? Thanks, NCGrimbo
Yes, those points were relative to the center at the origin. [tex] \begin{align*} F_x &= C_x + (S_x-C_x)\cos(vt/R) - (S_y-C_y)\sin(vt/R) \\ F_y &= C_y + (S_x-C_x)\sin(vt/R) + (S_y-C_y)\cos(vt/R) \end{align*} [/tex]