首先,他的代码是在三维空间中的投影,但问题是关于绕Z轴旋转,这与二维旋转相同,且Z值保持不变。
当你有任何给定点(x,y)时,你形成一个直角三角形。看一下这张图片:
现在假设
a
是15度。
那个圆被称为单位圆,其半径为
1
。
- 沿着Y轴的绿线长度是该角度的正弦值。
- 沿着X轴的绿线长度是该角度的余弦值。
请注意,由点坐标形成的三角形的大小并不重要。只要保持相同的角度,正弦和余弦的值将保持不变,因为这里仅涉及单位圆内的三角形部分。
正弦
是点在Y轴上移动的量,余弦
是X轴上移动的量,以便点在空间中移动并保持与原点相同的角度(它们的值范围从0到1,即圆的半径)
但是,如何移动一个点以便将其角度与原点改变?
首先,对于任何与单位圆相交的点,也就是说它的三角形的斜边为1,它的位置是
(余弦,正弦)
,对于一个在单位圆外的点,例如
(2,5)
,它的位置是
(斜边*余弦,斜边*正弦)
假设我们有一个点
(x,y)
,它距离原点的角度为
a
度,我们想将它旋转
b
度,这意味着我们想要一个新的位置
(x',y')
,其中角度变为
a+b
度,但距离原点(斜边)保持不变。
x = hypotenuse * cosine(a)
y = hypotenuse * sine(a)
x' = hypotenuse * cosine(a + b)
y' = hypotenuse * sine(a + b)
通过使用三角函数角加法公式,我们可以得到以下结果:
cosine(a + b) = cosine(a) * cosine(b) - sine(a) * sine(b)
sine(a + b) = sine(a) * cosine(b) + cosine(a) * sine(b)
如果我们将其应用于我们的
(x',y')
,我们得到:
x' = hypotenuse * cosine(a) * cosine(b) - hypotenuse * sine(a) * sine(b)
y' = hypotenuse * sine(a) * cosine(b) + hypotenuse * cosine(a) * sine(b)
如果你还记得我们对于
(x,y)
的定义,你会发现它与下面这个完全相同:
x' = x * cosine(b) - y * sine(b)
y' = y * cosine(b) + x * sine(b)
这就是你神秘的公式,就在我们的y'
上,只是加法顺序被颠倒了。