Create orthonormal basis from a given vector

166 views (last 30 days)
Justin Solomon
Justin Solomon on 18 Apr 2013
Hello,
I need to create an orthonormal basis from a given input vector. For example, say I have the vector u=[a b c]; In my new coordinate system, I'll let u be the x-axis. Now I need to find the vectors representing the y-axis and the z-axis. I understand that this problem doesn't have a unique solution (i.e., there are an infinite number of possible vectors that will represent the y and z axes). I really just need one solution, it doesn't have to be unique.
Any ideas?
(Just to clarify, in 2D if u=[1 1], the y-axis is v=[-1 1]. I need to do something similar in 3D and with arbitrary u)

Accepted Answer

Matt J
Matt J on 18 Apr 2013
Edited: Matt J on 18 Apr 2013
x=u(:).'/norm(u);
yz=null(x).';
xyz=[x;yz]; %The rows of this matrix are the axes

More Answers (2)

Kye Taylor
Kye Taylor on 18 Apr 2013
Edited: Kye Taylor on 18 Apr 2013
So, given vector
v = [a;b;c];
in R^3, it follows that any point (x,y,z) that satisifies a*x + b*y + c*z = 0 (i.e. a point that lives on plane whos normal vector is v) will define components of a vector that is orthogonal to v.
One such vector is
u = [0;-c;b];
or, for example,
u = [-c,0,a];
(you can choose whatever you prefer, but it cannot be [0;0;0])
... Now, given u and v, compute the third vector that is orthogonal to both u and v with
w = cross(u,v);
To make an orthonormla basis use
u1 = u/norm(u);
v1 = v/norm(v);
w1 = w/norm(w);

Justin Solomon
Justin Solomon on 18 Apr 2013
Thanks! Both of these are fine solutions!

Community Treasure Hunt

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

Start Hunting!