private float doRotation(Vector3 center, Vector2 oldScreenPos, Vector2 newScreenPos) { var newVector = projectionLayer.ProjectTo(newScreenPos, TransformPlane) - center; var oldVector = projectionLayer.ProjectTo(oldScreenPos, TransformPlane) - center; var angle = Vector3.Angle(oldVector, newVector); if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0) { angle = -angle; } return(angle); }
/// <inheritdoc /> protected override float doRotation(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1, Vector2 newScreenPos2) { var newVector = projectionLayer.ProjectTo(newScreenPos2, TransformPlane) - projectionLayer.ProjectTo(newScreenPos1, TransformPlane); var oldVector = projectionLayer.ProjectTo(oldScreenPos2, TransformPlane) - projectionLayer.ProjectTo(oldScreenPos1, TransformPlane); var angle = Vector3.Angle(oldVector, newVector); if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0) { angle = -angle; } return(angle); }