Jump to content


- - - - -

Creating a path for an object walks


4 replies to this topic

#1 C#er

    New Member

  • Members
  • Pip
  • 5 posts

Posted 24 October 2005 - 01:22 PM

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

#2 NomadRock

    Senior Member

  • Members
  • PipPipPipPip
  • 785 posts

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.
Jesse Coyle

#3 IrishFarmer

    Member

  • Members
  • PipPip
  • 43 posts

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 NomadRock

    Senior Member

  • Members
  • PipPipPipPip
  • 785 posts

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 :)
Jesse Coyle

#5 Reedbeta

    DevMaster Staff

  • Administrators
  • 5307 posts
  • LocationBellevue, WA

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