Hi fellows
I need to create a path for an object walk. Sample: I have 2 lines:
L1: x1 = 100, y1 = 50, x2 = 200 , y2= 250
L2: x1 = 200 , y1= 250, x2 = 600, y2 = 500
What I want: the object walks in the L1 and in the end of the line, it in the L2.
I have any idea to start. Someone can send some tips, tutorials or sites when I can to study this?
I think that I'll use sin and cos, but I think, I'm not sure about this.]
Thanks for the support
Creating a path for an object walks
Started by C#er, Oct 24 2005 01:22 PM
4 replies to this topic
#1
Posted 24 October 2005 - 01:22 PM
#2
Posted 24 October 2005 - 02:34 PM
You just use linear interpolation. Between any two points you can make a parametric equation of the line, that means that the equation lets you take in a new parameter for the distance along the line and it spits out a new point.
ok, now suppose we have two points A and B and we create a new point C that is along that line
C.x = A.x + t * (B.x - A.x)
C.y = A.y + t * (B.y - A.y)
When t is zero, C will be the same as A, when t is one, C will be the same as B. When t is 0.5 then C will be half way between A and B. So if you want to walk between A and B in 100 steps, then you just increment t by 0.01 each step.
Of interesting note, the equations above are valid when t is less than 0 or greater than 1. The points will still be along the line, but will be further out past B if it is greater than 1, or past A in the opposite direction if t is less than 0.
Now if you wanted to walk between them at a certain speed, then you first need to figure out the distance.
distance = sqrt( (A.x - B.x)*(A.x - B.x) + (A.y - B.y)*(A.y - B.y))
So if you want to travel your line between points A and B at a speed of 10 units per time step, you would increment t by (10 / distance). Keep in mind you need to check to see if A and B are the same point, so you dont divide by zero.
ok, now suppose we have two points A and B and we create a new point C that is along that line
C.x = A.x + t * (B.x - A.x)
C.y = A.y + t * (B.y - A.y)
When t is zero, C will be the same as A, when t is one, C will be the same as B. When t is 0.5 then C will be half way between A and B. So if you want to walk between A and B in 100 steps, then you just increment t by 0.01 each step.
Of interesting note, the equations above are valid when t is less than 0 or greater than 1. The points will still be along the line, but will be further out past B if it is greater than 1, or past A in the opposite direction if t is less than 0.
Now if you wanted to walk between them at a certain speed, then you first need to figure out the distance.
distance = sqrt( (A.x - B.x)*(A.x - B.x) + (A.y - B.y)*(A.y - B.y))
So if you want to travel your line between points A and B at a speed of 10 units per time step, you would increment t by (10 / distance). Keep in mind you need to check to see if A and B are the same point, so you dont divide by zero.
Jesse Coyle
#3
Posted 28 October 2005 - 02:43 AM
Its too bad this formula only works well with 3d in mind. Because if I try to translate all of those numbers through windows pixels there are some mildly innaccurate results. Ah well.
#4
Posted 28 October 2005 - 04:46 AM
You just do your normal transformation like any other point in 3d space.
EDIT: wow, I completely missread you IrishFarmer. Reedbeta has the correct interpretation below :)
EDIT: wow, I completely missread you IrishFarmer. Reedbeta has the correct interpretation below :)
Jesse Coyle
#5
Posted 28 October 2005 - 05:59 AM
The inaccuracy is due to measuring everything in integer pixel values. If you keep everything in floating-point coordinates and convert them to integer only when it's time to draw the object, you shouldn't have any problems with accuracy.
reedbeta.com - developer blog, OpenGL demos, and other projects
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users











