keikainEngine开发01-二维空间中的旋转推导

写在前面

 


      keikainEngine是在开发中的一款3D游戏引擎,基本上是照着鬼火引擎(Irrlicht)抄的。这么做的目的很简单,就是对一款游戏引擎有一个全面的,深刻的理解。当然这里边会加入一些我自己的内容,如脚本系统,更丰富的动作系统,更好的3D显示效果(这块儿我现在还没有太多头绪)。开发(抄)期间我会详细的记录下所遇到的问题,涉及到的数学知识。尤其会将所用到的数学知识结合代码逐一列举出来。

      开发一款3D引擎是一个长期的工作,Irrlicht从2003年发布第一个版本以来到写这篇博文时已有12个年头了。当然,我是站在Irrlicht的肩膀上的,希望我会尽快做出一个能够基本运行的系统来。

二维空间中的旋转推导

 


 

如下图所示,在平面直角坐标系中,线段OA逆时针旋转ɛ度后转到OB位置。其中点A坐标是(x,y),点B坐标是(p,q)

以下是推导过程(公式编辑器太麻烦了,就直接在word里边写了公式然后转图片了):

CODE


 

 1 //! rotates the point anticlockwise around a center by an amount of degrees.
 2 /** \param degrees Amount of degrees to rotate by, anticlockwise.
 3 \param center Rotation center.
 4 \return This vector after transformation. */
 5 // 本函数为二维空间顶点类vector2d的成员函数。
 6 // 传入参数degrees为角度,center为旋转的中心点,在求旋转后的坐标时,要转到局部坐标系,即以center为原点。
 7 vector2d<T>& rotateBy(f64 degrees, const vector2d<T>& center=vector2d<T>())
 8 {
 9     degrees *= DEGTORAD64; // DEGTORAD = PI / 180.0 将角度转成弧度
10     const f64 cs = cos(degrees);
11     const f64 sn = sin(degrees);
12         // 从全局坐标系转变到局部坐标系
13     X -= center.X;
14     Y -= center.Y;
15 
16     set((T)(X*cs - Y*sn), (T)(X*sn + Y*cs)); // set函数用来设置坐标x,y的值
17         // 从局部坐标系转到全局坐标系
18     X += center.X;
19     Y += center.Y;
20     return *this;
21 }

 

转载于:https://www.cnblogs.com/keikain/p/4612151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值