# Vector Motion Question

1. Apr 27, 2007

### SEG9585

I've been stuck on this problem for a little while and was wondering if anyone could help me out:

I have 2 unit vectors, say vector A and vector B.
Vector B is stationary (never changes), while Vector A is arbitrary 3-d unit vector which may move with a 3-dimensional rotational body rate [dx dy dz] in degrees/second.

I need to figure out the body rate which would, after a given body rate quantity (in deg/sec), cause Vector A to pass directly through Vector B.

In other words, I need a rotational body rate which would move along the vector (Vector A - Vector B).

I know that there is more than 1 solution to this problem, since one of the three parameters needs to be 0 in order to move directly through the other vector (think in terms of pointing a cannon -- moving dx and dy is all you need to point the cannon correctly. If you add dz the cannon will be rotating on its axis and end up curving around the target).

Thanks for any help with this...

2. Apr 27, 2007

### Office_Shredder

Staff Emeritus
None of the parameters needs to be 0 if I understand this... looking at the cannon, imagine it starts pointing up. It could curve in a circular arc and come back into the plane directly at one other height, for example.

The terminology you're using is a bit confusing though, perhaps you can explain

3. Apr 27, 2007

### SEG9585

Imagine a 3-d plane, you are on the origin looking in a direction as defined by a unit vector. You want to move such that you will end up at another defined unit vector. Say you were looking at [1 1 1] and want to move to [0 0 1], to get there you would need a horizontal angular rate and a vertical angular rate (and 0 rotational rate), which would be [-1 -1 0]. If you had a rotational component you would end up slewing so that your other rates start curving you away from the target.

The above example is easy, but say your vector was [.1 .2 .3] and target was [.4 .5 .6]. To move to that vector, you need to move in the direction [.3 .3 .3], but I dont know what this translates to in terms of degrees/time [dx dy 0].

4. Apr 27, 2007

### Office_Shredder

Staff Emeritus
You aren't trying to find something like [dx,dy,0], what you need is a rate of change vector that makes A rotate along the plane that A and B form. So you may need a z component, depending on which two vectors you want. Also note the answer won't be unique, because you can have A do a full circle + more in one direction and it would still reach the same point again.

I would start the problem by finding the unit vectors in the direction of A and B, so you don't need to worry about what size they are (which is what's messing up the second example you gave). If you rotate A/|A| such that it passes through B/|B|, then rotating A the same way makes it pass through B.

Do you know what polar spherical coordinates are? Because if you can put A and B into those, you're pretty much done

5. Apr 30, 2007

### SEG9585

Sorry if I am slow but I'm still not getting the results I need.
Here's a specific example:

A = [.4756 .8668 -.15]

B = [.9361 .53 -.2248]

I want to move from A to B at a rate of 5 degrees per second (magnitude), and record each new position of A every second (record A every time it moves 5 degrees in a matlab script). What calculation do I apply to A for every iteration so that it will eventually hit B?

6. May 11, 2007

### pkleinod

Let A and B be unit vectors in 3-space spanned by orthonormal vectors
e1, e2, e3. A = a1e1 + a2e2 + a3e3 with a similar expression for B.
Since AA = BB =1 (unit vectors), we can bring A into coincidence with
B by writing
B = (AA)B = A(AB) = A(A.B + A^B).
(Contrary to popular opinion, vectors can be multiplied together!)
A.B = cos(phi_b), the usual inner product;
A^B = i sin(phi_b), where i is a unit bivector defining the plane containing A and B.
phi_b = arccos(a1b1 + a2b2 + a3b3).
To get i, just divide A^B by sin(phi_b).
A^B = (a1e1 + a2e2 + a3e3)^(b1e1 + b2e2 + b3e3)
= (a1b2 - a2b1)e1e2 + (a2b3 - a3b2)e2e3 + (a3b1 - a1b3)e3e1
=: c3e1e2 + c1e2e3 + c2e3e1, so that
i = A^B/sin(phi_b).
Now, armed with the value of i, we can calculate
the vector v(phi) in the i-plane corresponding to any value of phi:
v(phi) = A cos(phi) + Ai sin(phi), where Ai sin(phi_b) is the vector :
Ai sin(phi_b) = (a1e1 + a2e2 + a3e3)(c3e12 + c1e23 + c2e31)
= (a3c2 - a2c3)e1 + (a1c3 - a3c1)e2 + (a2c1 - a1c2)e3.
Here we have used em en = -en em and em em = 1.
Your vectors A and B are

A = 0.47559106 0.86678370 -0.14999718
B = 0.93610000 0.53000000 -0.22480000
Note that A is a unit vector (this is required!) but B is not. This
means that the phi is not a rotation angle as such but just a parameter
for interpolating between the starting (unit) vector A and the final
vector V, which becomes B at phi_b; i.e. A is rotated and scaled to get B.
If B is first normalized, then A is rotated but not scaled. Product Ai is
Ai = 1.4166382 e1 -0.81935448 e2 -0.24308883 e3.
8 vectors V(phi) follow:
.000000 [ 0.475591 0.866784 -.149997]
.504386E-01 [ 0.546409 0.824372 -.162062]
.100877 [ 0.615838 0.779863 -.173715]
.151316 [ 0.683699 0.733371 -.184926]
.201754 [ 0.749822 0.685013 -.195667]
.252193 [ 0.814038 0.634913 -.205910]
.302632 [ 0.876183 0.583198 -.215629]
.353070 [ 0.936100 0.530000 -.224800]

I hope this is more or less what you wished for. If you want to learn

http://www.mrao.cam.ac.uk/~clifford/publications/abstracts/imag_numbs.html

Last edited: May 12, 2007