Does relative velocity vector lie on the line?

5 views (last 30 days)
Cassy A
Cassy A on 19 Jun 2017
Edited: Cassy A on 20 Jun 2017
Hello everyone! I am new to matlab and would like some assistance. For two particles A and B with given position and constant velocity vectors, I would like to show in matlab whether their relative velocity vector (V_A - V_B) lies on the line joining them.

Answers (2)

Julian Hapke
Julian Hapke on 19 Jun 2017
Edited: Julian Hapke on 19 Jun 2017
define a vector between the two points and check if the cross product of the delta velocity and the connection vector is 0. so if
ra = [xa,ya,za]
rb = [xb,yb,zb]
% va and vb being the velocities
test = cross(ra-rb,va-vb)
if ~test % check if all are zero
disp('same direction')
EDIT: As Jan Simon pointed out, you may get precision problems, so
if all(abs(test))<eps % or any other threshold
disp('same direction')

Jan on 19 Jun 2017
Edited: Jan on 19 Jun 2017
Do you want to calculate the angle between the connection of the 2 points and the relative velocity? Then:
u = A - B;
v = vA - vB;
a = atan2(norm(cross(u,v)), dot(u,v));
Now check if the result a is below a certain limit. You cannot expect it to be exactly 0.0 or 180.0 due to the limited precision of the floating point values. Perhaps this is a smart limit:
limit = 10 * eps(max([A(:); B(:); vA(:); vB(:); u(:); v(:)])
isParallel = abs(a) < limit || abs(a) - 180 < limit;
But there is not "best" definition of the limit.
See for a discussion, why atan2 is more accurare than acos or asin or the corresponding cross and dotr product methods only.
Cassy A
Cassy A on 20 Jun 2017
Hey! I used a program called GeoGebra. It's fun to play with :)
Thank you for all the help though. You guys are great! :)

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!