rush6432 Posted August 20, 2012 Report Share Posted August 20, 2012 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? Link to comment Share on other sites More sharing options...
GroovyBee Posted August 20, 2012 Report Share Posted August 20, 2012 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. Link to comment Share on other sites More sharing options...
Tyrant Posted August 20, 2012 Report Share Posted August 20, 2012 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. Link to comment Share on other sites More sharing options...
rush6432 Posted August 20, 2012 Author Report Share Posted August 20, 2012 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. Link to comment Share on other sites More sharing options...
Orion_ Posted August 20, 2012 Report Share Posted August 20, 2012 as a lazy guy I always used this nice little tool for generating my sine table on demand Sinlab: http://hitmen.c02.at/html/tools_misc.html Link to comment Share on other sites More sharing options...
ggn Posted August 20, 2012 Report Share Posted August 20, 2012 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 . Link to comment Share on other sites More sharing options...
rush6432 Posted August 22, 2012 Author Report Share Posted August 22, 2012 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. Link to comment Share on other sites More sharing options...
Cyrano Jones Posted August 22, 2012 Report Share Posted August 22, 2012 It's probably a good idea to start with sub-pixel accuracy as well. saves things looking crap further down the line when its a pain to change things. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now