       Re:Generating Two Unit Orthogonal Vectors to a 3D Vector

• To: mathgroup at smc.vnet.net
• Subject: [mg36373] Re:Generating Two Unit Orthogonal Vectors to a 3D Vector
• From: Goyder Dr HGD <H.Goyder at rmcs.cranfield.ac.uk>
• Date: Wed, 4 Sep 2002 02:56:27 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

There are many cases in graphics, and otherwise, where it is useful to
obtain two orthogonal unit vectors to a given vector. I know a number of
ways to do it, but they all seem to be slightly inelegant. I thought I would
pose the problem to MathGroup. Who has the most elegant Mathematica
routine...

OrthogonalUnitVectors::usage = "OrthogonalUnitVectors[v:{_,_,_}] will return
two unit vectors orthogonal to each other and to v."

You can assume that v is nonzero.

David Park

David,
My suggestion

In:=
<< "LinearAlgebra`Orthogonalization`"
In:=
OrthogonalUnitVectors[v:{_, _, _}] := GramSchmidt[NullSpace[{v}]]
In:=
v = {1, 2, 3};
{v1, v2} = OrthogonalUnitVectors[v]
Out=
{{-(3/Sqrt), 0, 1/Sqrt}, {-(1/Sqrt), Sqrt[5/7], -(3/Sqrt)}}
In:=
{v . v1, v . v2, v1 . v2, v1 . v1, v2 . v2}
Out=
{0, 0, 0, 1, 1}

Also works with symbolic expressions

Hugh Goyder

• Prev by Date: Re: approximation for partitial binomial sum
• Next by Date: Re: 3D plot
• Previous by thread: RE: Generating Two Unit Orthogonal Vectors to a 3D Vector
• Next by thread: Fwd: Generating Two Unit Orthogonal Vectors to a 3D Vector