MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

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