# Location on a circle at time t.

1. Aug 6, 2008

### NCGrimbo

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!

2. Aug 6, 2008

### Peeter

In terms of the variables given it should be:

\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*}

3. Aug 7, 2008

### NCGrimbo

That's what I was looking for. Thanks Peeter.

4. Aug 8, 2008

### NCGrimbo

I seem to be having problems converting the formulas into my code. Here's the code I've created:

Code (Text):
'Starting values
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

5. Aug 8, 2008

### Peeter

Yes, those points were relative to the center at the origin.

\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*}

6. Aug 8, 2008

### NCGrimbo

That fixed it. Thanks again Peeter!!