[try Beta version]
Not logged in

 
Moving along a vector

Jul 11, 2012 at 2:34am
I have two arrays containing the x and y positions of two points - the target position and the origin position. To move a point along this vector, would I be correct to assume that the code below would be the correct calculation and method to use? I'm asking because it seems to be creating unexpected problems when I use it in my game.

1
2
3
4
5
6
7
8
9
10
11
12
double target[2] = {10.0, 10.0};
double origin[2] = {0.0, 0.0};
int step = 100;

double delta[2] = {target[0] - origin[0], target[1] - origin[1]};
double dotPos[2] = {origin[0], origin[1]};

while(abs(target[0] - dotPos[0]) > 1 && abs(target[1] - dotPos[1]) > 1)
{
    dotPos[0] += delta[0] / step;
    dotPos[1] += delta[1] / step;
}
Jul 11, 2012 at 2:48am
It looks fine at first glance...what kind of issues is it causing?
Jul 11, 2012 at 6:52am
Yep, looks fine to me too. One quick question though, the condition in your while loop suggests that you are not making a complete transition from origin to target. Is that what you intended?
Jul 11, 2012 at 7:40am
Is this probably due to comparing doubles to an integer, namely 1?
Jul 11, 2012 at 9:52am
I think 1 was intended to be a sort of epsilon to avoid directly comparing the floating point numbers.
Jul 11, 2012 at 12:37pm
and by the way, shouldn't there be fabs() instead?
Jul 11, 2012 at 12:37pm
Well, the problem is that the dotPos coordinates seem to ignore my collision check when the vector line is completely horizontal. I thought that maybe my collision check was wrong, but it works in all other functions exactly the way it is supposed to without fault, so in my mind it can only be a problem with the vector.

EDIT:
Fixed problem by offsetting the origin y coordinate of the vector so that it can never be horizontal. How strange...
Last edited on Jul 12, 2012 at 12:18am
Topic archived. No new replies allowed.