Create orthonormal basis from a given vector

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)

 Akzeptierte Antwort

Matt J
Matt J am 18 Apr. 2013
Bearbeitet: Matt J am 18 Apr. 2013

3 Stimmen

x=u(:).'/norm(u);
yz=null(x).';
xyz=[x;yz]; %The rows of this matrix are the axes

Weitere Antworten (2)

Kye Taylor
Kye Taylor am 18 Apr. 2013
Bearbeitet: Kye Taylor am 18 Apr. 2013

7 Stimmen

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 am 18 Apr. 2013

2 Stimmen

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!

Translated by