Location on a circle at time t.

  1. 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. jcsd
  3. 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]
     
  4. That's what I was looking for. Thanks Peeter.
     
  5. 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
     
  6. 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]
     
  7. That fixed it. Thanks again Peeter!!
     
Know someone interested in this topic? Share a link to this question via email, Google+, Twitter, or Facebook

Have something to add?