Solved

# Rotate vector using angular velocity to match another.

Posted on 2011-03-12
609 Views
I have a unit vector which I want to be able calculate the angular velocity it would need to rotate it so that it eventually faces the same direction as another unit vector.
0
Question by:codevomit
• 6
• 2
• 2
• +1

LVL 37

Expert Comment

ID: 35117396
What info do you have? You just need to calculate the angle between them (using arccos(v1.x*v2.x+v1.y*v2.y)) and some intuition.
0

LVL 84

Expert Comment

ID: 35117752
wouldn't any angular velocity work, if you allow it to rotate for a sufficient amount of time?
0

LVL 32

Expert Comment

ID: 35119094
For the game, given the time from start to finish, won't you want to accelerate and decelerate smootly for realism? In between the accelerations, you could rotate at constant velocity.
0

LVL 1

Author Comment

ID: 35161040
@ozo and @TommySzalapski, that would work for 2D but not for 3D, I assumed that 3D would be implied when asking this question. My bad for not stating that.
0

LVL 84

Accepted Solution

ozo earned 500 total points
ID: 35161075
In 3D, any angular velocity vector perpendicular to the plane of the unit vectors should work.
0

LVL 1

Author Comment

ID: 35161123
That sounds more like it, I'll try that out tomorrow and get back to you.
0

LVL 1

Author Comment

ID: 35168831
To get the angular velocity along a plane, I was thinking of using a cross product of the two vectors in a quaternion and rotating a vector (1,1,1) with it to give me angular movement in the appropriate direction, would that work?
0

LVL 37

Expert Comment

ID: 35172491
I'm not sure what you mean by rotating "with it", but the cross product is a good tool. The vector that you get as a result of the cross product will be orthogonal (perpendicular) to both, so you want to use the cross product vector as the axis of rotation.
0

LVL 1

Author Comment

ID: 35197156
"With it" means rotating a vector using a quaternion, pretty much what you and ozo have described. Anyway I've knocked something together in Unity that should do it, it doesn't work but I think I may of spotted my error, with assigning bot vect1 and vect2 as (1,1,1).

``````var rb : Transform;

function Update () {
var vect1 : Vector3 =  Vector3.one;
var vect2 : Vector3 =  Vector3.one;
var c : Vector3;
var rot: Quaternion;

vect1 = transform.rotation * vect1;
vect2 = rb.rotation * vect2;

c = Vector3.Cross(vect1, vect2);

rot.x = c.x;
rot.y = c.y;
rot.z = c.z;
rot.w = Mathf.Acos(Vector3.Dot(vect1, vect2));

vect1 = rot * vect1;

vect1 *=400; // So we can see it;

Debug.DrawLine (transform.position , transform.position+vect1, Color.red); // Should be pointing in the direction of the other transformation
}
``````
0

LVL 1

Assisted Solution

codevomit earned 0 total points
ID: 35198077
This does what I need it to do

``````var rb : Transform;

function Update () {
var vect1 : Vector3 =  Vector3.right;
var vect2 : Vector3 =  Vector3.right;
var vect3 : Vector3;
var c : Vector3;
var rot: Quaternion;

vect1 = transform.rotation * vect1;
vect2 = rb.rotation * vect2;

c = Vector3.Cross(vect1, vect2);

rot.x = c.x;
rot.y = c.y;
rot.z = c.z;
rot.w = Mathf.Acos(Vector3.Dot(vect1, vect2));

vect3 = rot * Vector3.one;

vect1 *=10; // So we can see it;
vect2 *=10; // So we can see it;
// vect3 *=400; // So we can see it;
c *= 10;
vect3 *=2;

vect3 *=400; // So we can see it;

Debug.DrawLine (transform.position , transform.position+vect3, Color.red);
Debug.DrawLine (transform.position , transform.position+vect1, Color.green);
Debug.DrawLine (rb.position , rb.position+vect2, Color.green);
Debug.DrawLine (transform.position , transform.position+c, Color.white);
}
``````
0

LVL 1

Author Closing Comment

ID: 35230026
The answer gave me a good direction but was not complete, my last comment should help fill in the blanks if anybody else is looking at this.
0

## Featured Post

### Suggested Solutions

Artificial Intelligence comes in many forms, and for game developers, Path-Finding is an important ability for making an NPC (Non-Playable Character) maneuver through terrain.  A* is a particularly easy way to approach it.  I’ll start with the algor…
Lithium-ion batteries area cornerstone of today's portable electronic devices, and even though they are relied upon heavily, their chemistry and origin are not of common knowledge. This article is about a device on which every smartphone, laptop, an…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…