Jump to content
Jagware
rush6432

Sinewaves

Recommended Posts

rush6432    0

Just curious if someone can give me the break down on using sinewaves for object position.

 

Mainly what im curious about is how to go about generating the sinewave table that code can be written to pull information from. (x and y axis).

 

Is there such a tool that makes it easy to create a pattern or wave and then output the coordinates easily?

Share this post


Link to post
Share on other sites
GroovyBee    0

If you just want a basic table then this will do it :-

 

http://www.daycounter.com/Calculators/Sine...alculator.phtml

 

if you want high level language then in "C" its something like this :-

 

#define SIN_NO_OF_POINTS 60
#define SIN_SCALE 100
#define SIN_OFFSET 20

for (int c=0; c<SIN_NO_OF_POINTS; c++)
    {
    double angleInRadians=2*PI*(double)c/(double)SIN_NO_OF_POINTS;
    signed long int val=SIN_OFFSET+(signed long int)(sin(angleInRadians)*SIN_SCALE);
//... Process val here.
    }

 

You'll need to include math.h to get the sine function. The value of PI might be defined in that header file too, if not you'll have to #define it yourself.

Share this post


Link to post
Share on other sites
Tyrant    0

Or there's a sine table already hardcoded into the DSP. It's not the most precise in the world, but you can interpolate between samples if you need higher precision.

Share this post


Link to post
Share on other sites
rush6432    0
Or there's a sine table already hardcoded into the DSP. It's not the most precise in the world, but you can interpolate between samples if you need higher precision.

 

 

ahh thats right...... i totally forgot about that...

 

Thanks for the replies. ill have to mess around with it a bit and see what i come up with.

 

Share this post


Link to post
Share on other sites
ggn    0
Just curious if someone can give me the break down on using sinewaves for object position.

 

Usually it's not very practical to store the object's position using polar coordinates AKA rho,theta (ρ,θ) or at a stretch of the definition, sine waves. What is rather useful though is to use polar coordinates for expressing the movement vector or speed for X and Y axes in layman's terms.

 

Let's assume that you have an object at (100,200) and you want it to move with a speed of 5 pixels/frame 30 degrees north-east. The pair (5 pix/frame,30°) is exactly a representation of the movement vector in polar coordinates. If we were to add this every frame to the coordinates of the object (which are expressed in the Cartesian system), we'd get the desired motion. Since our object's position is expressed in Cartesian coordinates and we can't change the way the hardware stores coordinates, it follows that we have to convert the movement vector to the Cartesian system as well. We can do this relatively easy using the 2 following formulas:

 

Δx = r * cos(θ) = 5 * cos(30°)

Δy = r * sin(θ) = 5 * sin(30°)

 

If we were to add this pair of equations to our coordinates we'd get the coordinates of the object for the new frame, thus:

 

new_x= Δx + 100 = 5 * cos(30°) + 100

new_y= Δy + 100 = 5 * sin(30°) + 200

 

One final thing to notice is that actual Cartesian coordinates have the x axis pointing right and the y pointing up, but screen coordinates have the y axis pointing down (the pair of coordinates (0,0) is at the top left corner instead of the bottom left because of this), so if we were to add the above, the object would head to the bottom right instead of top right. So we have to adjust the 2nd equation like so:

 

new_y= -5 * sin(30°) + 200

 

And all will be well.

 

 

Apologies if that wasn't what you asked for and it's common knowledge for you, but this is what I understood you were asking in the first sentence of your question. Of course, if this is what you asked for and something's not clear in my answer, feel free to ask further :).

Share this post


Link to post
Share on other sites
rush6432    0
Just curious if someone can give me the break down on using sinewaves for object position.

 

Usually it's not very practical to store the object's position using polar coordinates AKA rho,theta (ρ,θ) or at a stretch of the definition, sine waves. What is rather useful though is to use polar coordinates for expressing the movement vector or speed for X and Y axes in layman's terms.

 

Let's assume that you have an object at (100,200) and you want it to move with a speed of 5 pixels/frame 30 degrees north-east. The pair (5 pix/frame,30°) is exactly a representation of the movement vector in polar coordinates. If we were to add this every frame to the coordinates of the object (which are expressed in the Cartesian system), we'd get the desired motion. Since our object's position is expressed in Cartesian coordinates and we can't change the way the hardware stores coordinates, it follows that we have to convert the movement vector to the Cartesian system as well. We can do this relatively easy using the 2 following formulas:

 

Δx = r * cos(θ) = 5 * cos(30°)

Δy = r * sin(θ) = 5 * sin(30°)

 

If we were to add this pair of equations to our coordinates we'd get the coordinates of the object for the new frame, thus:

 

new_x= Δx + 100 = 5 * cos(30°) + 100

new_y= Δy + 100 = 5 * sin(30°) + 200

 

One final thing to notice is that actual Cartesian coordinates have the x axis pointing right and the y pointing up, but screen coordinates have the y axis pointing down (the pair of coordinates (0,0) is at the top left corner instead of the bottom left because of this), so if we were to add the above, the object would head to the bottom right instead of top right. So we have to adjust the 2nd equation like so:

 

new_y= -5 * sin(30°) + 200

 

And all will be well.

 

 

Apologies if that wasn't what you asked for and it's common knowledge for you, but this is what I understood you were asking in the first sentence of your question. Of course, if this is what you asked for and something's not clear in my answer, feel free to ask further :).

 

No that sums it up. i somewhat knew this already but was more inquiring about the process of creating the tables themselves so that i could write a routine to call to read the tables for x/y positions and have an object follow a pattern per say.

Share this post


Link to post
Share on other sites
Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×