计算物体旋转以后所在的点

计算物体旋转以后所在的点

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

cos(α+β)=cosα·cosβ - sinα·sinβ
‌sin(α+β)=sinα·cosβ + cosα·sinβ

要理解公式,借助极坐标系转换会变得较为简单
已知:输入点x,y; 旋转中心 cx,xy,旋转角度a
求:输入点旋转之后的的x’,y’坐标
step1:在极坐标系下
x' = r* (x'/r)= r*cos(α)
y' = r* (y'/r)= r*sin(α)
step2:
x'= r*cos(β+(α-β))= r*cos(β+a)=r* cos β*cosa - r*sinβ*sina
= xcosa - y*sina
=(x-0)cosa - (y-0) sina + 0
y' = r*sin(β+(α-β))=r*sin(β+a) = r*sinβ*cosa + r* cosβ *sina
= (y-0)*cosa + (x-0)*sina +0
如果是以(10,10)为旋转中心

        /// <summary>
        /// 计算物理旋转之后点xy的变化
        /// </summary>
        /// <param name="x0">图像物体上一点的x</param>
        /// <param name="y0">图像物体上一点的y</param>
        /// <param name="centerx">图像物体的中心x</param>
        /// <param name="centery">图像物体的中心y</param>
        /// <param name="angle"></param>
        /// <returns></returns>
        public Vector2 RotatePoint(float x0, float y0, float centerx, float centery, float angle)
        {
            // 将角度转换为弧度
            angle = (float)(angle * Math.PI / 180);

            // 计算旋转后的坐标
            float x = (float)((x0 - centerx) * Math.Cos(angle) - (y0 - centery) * Math.Sin(angle) + centerx);
            float y = (float)((x0 - centerx) * Math.Sin(angle) + (y0 - centery) * Math.Cos(angle) + centery);

            // 返回旋转后的坐标
            return new Vector2(x, y);
        }

        // 定义 Vector2 结构体用于返回坐标
        public struct Vector2
        {
            public float X { get; }
            public float Y { get; }

            public Vector2(float x, float y)
            {
                X = x;
                Y = y;
            }
        }

在这里插入图片描述

举出特例说明

以旋转中心(10,10),输入点x=13,y=14举例
分别旋转0度,和90度,45度,得到点。
度数为正,则为逆时针旋转

旋转0度,不变

在这里插入图片描述
在这里插入图片描述

旋转90度

在这里插入图片描述

旋转45度

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值