Re: Generating Two Unit Orthogonal Vectors to a 3D Vector
- To: mathgroup at smc.vnet.net
- Subject: [mg36370] Re: [mg36352] Generating Two Unit Orthogonal Vectors to a 3D Vector
- From: John Browne <jbrowne at swin.edu.au>
- Date: Tue, 3 Sep 2002 01:41:14 -0400 (EDT)
- Organization: Swinburne University of Technology
- References: <200209020809.EAA15855@smc.vnet.net>
- Reply-to: jbrowne at swin.edu.au
- Sender: owner-wri-mathgroup at wolfram.com
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, here is a solution generating two random vectors: OrthogonalUnitVectors[v : {_, _, _}] := Module[{r, v1, v2}, r = {Random[], Random[], Random[]}; v1 = Cross[v, r]; v2 = Cross[v1, v]; {v1/Sqrt[Dot[v1, v1]], v2/Sqrt[Dot[v2, v2]]}] Test: v = {Random[], Random[], Random[]} {0.864587, 0.727747, 0.669729} {A,B} = OrthogonalUnitVectors[v] {{0.279985, -0.808701, 0.517311}, {-0.698881, 0.19773, 0.687363}} Chop[{A.v, B.v, A.B, A.A, B.B}] {0, 0, 0, 1., 1.} John -- _________________________________ John Browne School of Engineering and Science Swinburne University of Technology John Street, Hawthorn, Victoria, Australia Quantica phone: +613 9431 4007 Quantica fax: +613 9431 0940 Email: jbrowne at swin.edu.au
- References:
- Generating Two Unit Orthogonal Vectors to a 3D Vector
- From: "David Park" <djmp@earthlink.net>
- Generating Two Unit Orthogonal Vectors to a 3D Vector