Find out if a vector is between two others

Posted By: PadMalcom

Find out if a vector is between two others - 02/07/17 19:32

Hi, I'd like to know, if a vector is between two others. Here some examples.



Basically, I want to check if v(x) is right of v(1) and left of v(2).
Posted By: Kartoffel

Re: Find out if a vector is between two others - 02/07/17 21:23

hmm, maybe
dot(v1, vx) > dot(v1, v2)
using normalized (unit) vectors


edit: oops, I just saw that you wanted to check if they are in a specific order.

in that case calculate the angle of each vector and compare them.
Posted By: PadMalcom

Re: Find out if a vector is between two others - 02/07/17 21:40

Hi thanks, calculate the the of each vector related to what? laugh
Posted By: Kartoffel

Re: Find out if a vector is between two others - 02/07/17 22:02

here's the theory in 2d.
using counter-clockwise (ccw) angles, your condition would be something like:

angle(vx) - angle(v2) < angle(v1) - angle(v2) => ccw order: v2, vx, v1

to calculate the angle of each vector* just use atan2(dy, dx) with dx/dy = the x & y components of each vector
(* the angle between the positive x axis and the vector, like in mathematics)

keep in mind that special cases can cause the area between v1 and v2 to exceed the [0° - 360°] range. to compensate for that, a simple modulo-operation should do the trick:

Code:
ang_diff_2x = (angle(vx) - angle(v2)) % 360
ang_diff_21 = (angle(v1) - angle(v2)) % 360

if(ang_diff_2x < ang_diff_21)
...

© 2024 lite-C Forums