- Home /
Can I use Quaternions to get from one point to another?
I have one sphere at 1,0,0 and another at 0,1,0 it would be a rotation of 90 degrees around the Z axis to get from one to another. How would I do this for any two points in unity using quaternions?
How would I apply that rotation to the first point to test it to see if it gives back the second point?
Thanks, Dan
Youre Question is not clear, Sir, what exactly do you want to do ? There are several functions you could use to move an object, like transform.Translate(); transform.Rotate();
you can also check this
// Interpolates rotation between the rotations // of from and to. // (Choose from and to not to be the same as // the object you attach this script to)
var from : Transform; var to : Transform; var speed = 0.1; function Update () { transform.rotation = Quaternion.Lerp (from.rotation, to.rotation, Time.time * speed); }
testing if applying a rotation to a point gives another point, is achieved by math, 0 + 90 = 90 !!
Answer by CHPedersen · Nov 14, 2011 at 09:06 AM
If you use Quaternion.FromToRotation, you can create a Quaternion that contains the desired rotation. Just pass in the coordinates of the two spheres in the order you want the rotation to take place.
The returned quaternion can thus be multiplied into the coordinates of the first sphere to yield the coordinates of the second; this corresponds to simply rotating a Vector3 around the coordinate system origin.
Please beware, however, that this applies only to the specific case you described because the two spheres are both at unit vector lengths from the origin. Quaternion.FromToRotation is usually used to rotate the direction of one of a single object's axes. It works in this case because your spheres are located at the positions corresponding to an object's local transform.right/transform.up, if you imagine an object located at 0,0,0.
If the position vectors of the two objects have unequal magnitudes, it isn't possible to rotate one to the position of the other, because rotation takes place in a circle of uniform radius, naturally. ;)