计算Unity 2D/3D旋转点后的坐标

    /// <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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值