Vector decomposition

  • Thread starter _Nate_
  • Start date
20
0

Main Question or Discussion Point

I'm doing some work with vectors, and essentially, I have two vectors: a large vector and a unit vector pointing in a different direction. I would like to decompose the large vector into the components that are in the direction of and perpendicular to the unit vector.

This is in three dimensions, and shouldn't be too hard using cos and acos. However, this is for some computer work, where cos and acos are expensive -- is there any better way to do this using purely vector math (such as cross product, etc) or some other method not quite so expensive?
 

Answers and Replies

arildno
Science Advisor
Homework Helper
Gold Member
Dearly Missed
9,946
130
Let your vector be called [itex]\vec{V}[/itex] Let [itex]\vec{u}[/tex] be your given unit vector, U being the projection of [itex]\vec{V}[/itex] on [itex]\vec{u}[/itex].
Let [itex]\vec{W}[/itex] be the component vector of V orthogonal to [itex]\vec{u}[/itex]

Thus, we have:
[tex]\vec{V}=U\vec{u}+\vec{W}[/tex]
Taking the dot product here with [itex]\vec{u}[/itex], we gain:
[tex]\vec{V}\cdot\vec{u}=U[/tex]
since u was orthogonal to W and of magnitude 1.

Hence, going back, the orthogonal component of V thereby obeys:
[tex]\vec{W}=\vec{V}-(\vec{V}\cdot\vec{u})\vec{u}[/tex]

This is called the Gram-Schmidt orthogonalization process of vectors (or something like that)
 
Last edited:
D H
Staff Emeritus
Science Advisor
Insights Author
15,329
681
Before I give you the answer, is this homework, and what have you done? This is much easier with vector math than trig functions; in fact you will have to pretty much solve the problem using vector math before you can even start using trig functions.

EDIT:
Never mind. Arildno already gave the answer.
 
20
0
No, it's not homework -- I'm working on a physics simulator just for fun. I had already had it implemented, as I said, but my implementation was using lots of trig functions, which are expensive. I was pretty sure that there was a better way, though.
 
HallsofIvy
Science Advisor
Homework Helper
41,738
897
Then I would suggest writing Taylor polynomials to approximate the trig functions. If you really want it fast you might write them in assembly language (although I believe with modern compilers you don't really save much by going to assembly language).
 
85
0
I have a small suggestion. Store the vectors in the form of the three x,y,z components, as you will have to decompose them anyways to do most of the math. Only convert them into the magnitude when needed (energy calculations, status display...) using Pythogeran Theorem.

That is what I do in my homebrew vector library.
 
20
0
To HallsofIvy: This is quite a good idea, although it does suffer some accuracy loss. A far better way to do it is in the first reply to this topic. This can be done via other math (namely, the dot product) without ever touching trig functions.

To kkrizka: I do store my vectors as x, y, and z components. However, my decomposition is about an arbitrary vector, not about the x, y, or z axes.
 

Related Threads for: Vector decomposition

Replies
1
Views
1K
  • Last Post
Replies
12
Views
3K
  • Last Post
Replies
4
Views
443
  • Last Post
Replies
7
Views
3K
  • Last Post
Replies
2
Views
3K
  • Last Post
Replies
3
Views
1K
  • Last Post
Replies
8
Views
2K
Replies
6
Views
1K
Top