很长一段时间以来,我一直只用以下方式进行轮换:
setOrigin(screenWidth/2, screenHeight/2)
theta = approach(360) // cycles from 0 to 360
cP = vec2(0, 0) // center point
rp = vec2(0, 100) // rotated point
rP.x = cP.x + cos(theta) * 100 //cos accepts degrees
rP.y = cP.y + sin(theta) * 100 //sin accepts degrees
但是我发现以下方法相当普遍
setOrigin(screenWidth/2, screenHeight/2)
theta = approach(360) // cycles from 0 to 360
cP = vec2(0, 0) // center point
rp = vec2(0, 100) // rotated point
rPx = cP.x + (rP.x * cos(theta) - rP.y * sin(theta)) * 100 //cos accepts degrees
rPy = cP.y + (rP.y * sin(theta) + rP.x * cos(theta)) * 100 //sin accepts degrees
rP = {rPx, rPy}
我理解为什么第二个版本在数学上有效,我只是不确定为什么在更简单的第一个方法上更喜欢它(除了将值放在矩阵中并执行转换的明显情况)
答案 0 :(得分:1)
您的第一种方法是第二种方法的简化版本,您只允许差异向量(从旋转中心到旋转点)为水平线。如果您插入rp.y
而不是100
,则会看到第二个版本的公式,rp.x
部分被移除。
顺便说一下,第二个公式并不完全正确。 * 100
错误,因为您已经乘以rp
。在第二行中,您必须将rp.y
和rp.x
交换为:
rPy = cP.y + (rP.x * sin(theta) + rP.y * cos(theta))