# Vertical Circular Motion: graphing over time

1. Jan 21, 2006

### tofergregg

Hello! This is my first post in this wonderful forum. I have a feeling I'll be frequenting here often. I did a search for my question, but I haven't found any truly similar questions. For what it's worth, I may be out of my league trying to figure this one out, but I'd love some help.
I'm trying to model vertical circular motion in vpython. I banged my head against the wall trying to determine a general formula for the x and y positions of a ball-on-a-string (given the initial velocity at the top or bottom, or the tension at the top or bottom, and the radius of the circle).

I finally found (online) the answer (or at least I thought so):

x = r sin (PI*t - 0.5 sin (PI*t))
y = r cos (PI*t - 0.5 sin (PI*t))

This works beautifully, except that as far as I can tell, this is for the special case where the tension is zero at the top of the path (i.e., where the ball just makes it around the loop without collapsing). For those who care, I've included the vpython script at the bottom of the page.

Question #1: How does one derive those cool formulas? I'm not even sure where to start (although I imagine it is with the radial and tangential accelerations).

Question #2: Is there a more general form that would include the ability to adjust for an increased velocity at the top of the path, or alternately for a tension at the top of the path?

-Tofer
(Sorry about the "...."s in the code below. For some reason the white space wasn't being preserved in preview, and vpython demands proper tabbing. Please remove the "...." and replace with spaces for proper vpython code).

Code (Text):

from visual import *

scene.background = color.white
string = cylinder(pos=(0,0,0), axis=(0,10,0), color=color.black, radius=0.05)
# These are the initial conditions at the top of the circle, for a counterclockwise rotation
PI = 3.1415926535

t=0
scene.autoscale = 0
while 1:
....rate(100)
....t = t + 0.01
....ball.pos = (radius * sin (PI*t - 0.5 * sin(PI*t)),radius * cos (PI*t - 0.5 * sin(PI*t)),0)
....string.axis = (ball.pos.x,ball.pos.y,0)
....sphere(pos=(10 * sin (PI*t - 0.5 * sin(PI*t)),10 * cos (PI*t - 0.5 * sin(PI*t)),0),color=color.blue, radius=0.1)
....print "t=%f, x=%f, y=%f" % (t,ball.pos.x,ball.pos.y)