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

• To: mathgroup at smc.vnet.net
• Subject: [mg36366] Re: Generating Two Unit Orthogonal Vectors to a 3D Vector
• From: Selwyn Hollis <slhollis at earthlink.net>
• Date: Tue, 3 Sep 2002 01:41:09 -0400 (EDT)
• References: <akv7s5\$fl8\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```My 2 cents' worth:

OrthogonalUnitVectors[v:{_, _, _}] :=
With[{u = Which[
(w = {0,v[[3]],-v[[2]]}).w != 0, w,
(w = {v[[3]],0,-v[[1]]}).w != 0, w,
(w = {v[[2]],-v[[1]],0}).w != 0, w ] },
#/Sqrt[#.#]& /@ {u, Cross[u,v]}]

---
Selwyn Hollis

David Park wrote:
> 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