cocos2d中的旋转是很常用的,其实现原理是根据变换计算出变换矩阵,也就是将所要执行旋转操作的物体的物体坐标系进行旋转,再还原到世界坐标系的过程,至于还原到世界坐标系的操作,则需要用到矩阵这个数学工具,根据旋转的角度,得到旋转的矩阵,将矩阵右乘物体上的点,得到的便是世界坐标系中的点信息。

上图为物体坐标系,初始状态与世界坐标系相同,即坐标系xoy,在xoy坐标系中任意一点v(x, y),与x轴夹角为α度;之后旋转物体β度,即坐标系x'oy',则v点对应旋转β度,则此时v‘点相对于世界坐标系x轴的夹角为(α+β)度。
假设ov的长度为R,则x=Rcosα,y=Rsinα;当xoy坐标系逆时针旋转β度后,ov也对应旋转β度,此时ov'与x轴夹角为(α+β),则x'=Rcos(α+β),y'=Rsin(α+β)。
根据三角函数公式可知:
x' = Rcos(α+β) = R(cosαcosβ - sinαsinβ)
y' = Rsin(α+β) = R(cosαsinβ + sinαcosβ)
我们略去标量R,可得等式

求解可得

通过CCNode类的nodeToParentTransform()中使用的变化矩阵可验证
// Build Transform Matrix
// Adjusted transform calculation for rotational skew
m_sTransform = CCAffineTransformMake( cy * m_fScaleX, sy * m_fScaleX,
-sx * m_fScaleY, cx * m_fScaleY,
x, y );
本文深入解析了Cocos2d中旋转操作的实现原理,通过变换矩阵计算,详细介绍了从物体坐标系到世界坐标系的旋转过程,包括角度转换、三角函数应用及CCNode类中变化矩阵的使用。
157

被折叠的 条评论
为什么被折叠?



