result.y = axis.y;
result.z = axis.z;
} else {
+ // Project vectors to Axis plane
Vector3d p1 = projectToPlane(original, axis);
Vector3d p2 = projectToPlane(rotated, axis);
- double angle = p1.angle(p2);
- result.set(axis,angle);
+ // Create vectors where z-axis is plane normal
+ Quat4d q = getQuat(createRotation(axis, Z_AXIS));
+ Vector3d t1 = new Vector3d();
+ Vector3d t2 = new Vector3d();
+ rotate(q, p1, t1);
+ rotate(q, p2, t2);
+ // Calculate angles on z-axis plane.
+ double a1 = Math.atan2(t1.y, t1.x);
+ double a2 = Math.atan2(t2.y, t2.x);
+ result.set(axis,a2-a1);
}
return true;