/// <summary>
/// 2D平面的点围绕某个点旋转某个角度后的坐标
/// </summary>
/// <param name="point">初始点</param>
/// <param name="center">中心点</param>
/// <param name="angleInDegree">旋转角度</param>
/// <param name="clockwise">是否顺时针</param>
/// <returns></returns>
public static Vector2 RotatePoint(Vector2 point, Vector2 center, float angleInDegree,
bool clockwise = false)
{
float angleInRadians = clockwise ? -angleInDegree * Mathf.Deg2Rad : angleInDegree * Mathf.Deg2Rad;
float cosTheta = Mathf.Cos(angleInRadians);
float sinTheta = Mathf.Sin(angleInRadians);
float translatedX = point.x - center.x;
float translatedY = point.y - center.y;
float rotatedX = translatedX * cosTheta - translatedY * sinTheta;
float rotatedY = translatedX * sinTheta + translatedY * cosTheta;
point.x = rotatedX + center.x;
point.y = rotatedY + center.y;
return point;
}
/// <summary>
/// 3D空间的点围绕某个轴顺时针旋转某个角度后的坐标
/// </summary>
/// <param name="point">初始位置</param>
/// <param name="axis">轴</param>
/// <param name="center">中心点</param>
/// <param name="angleInDegree">角度</param>
/// <returns></returns>
public static Vector3 RotatePoint(Vector3 point, Vector3 axis, Vector3 center, float
angleInDegree)
{
//平移点
Vector3 tPoint = point - center;
//旋转点
tPoint = Quaternion.AngleAxis(angleInDegree, axis) * tPoint;
//还原位置
return tPoint + center;
}
08-05
3108