在Matrix中使用方法setSinCos?

时间:2012-12-26 08:59:59

标签: android matrix

我们如何使用方法setSinCos(float, float)?Android文档说:

  

将矩阵设置为按指定的正弦和余弦值旋转。

但它含糊不清。例如我不知道正弦和余弦值的作用。我在谷歌搜索,但最后我发现了这种方法的一些用法,没有任何评论。谢谢你的注意。

2 个答案:

答案 0 :(得分:1)

要将(齐次逆时针)齐次坐标旋转任意角度a,变换矩阵为:

[ cos(a)  -sin(a)  0 ]
[ sin(a)   cos(a)  0 ]
[   0        0     1 ]

如果你有sin / cos的结果,setSinCos(s,c)将创建以下矩阵:

[ c  -s  0 ]
[ s   c  0 ]
[ 0   0  1 ]

你可能会问自己,为什么?好吧,考虑一下您希望将精灵旋转到由两点之间的斜率确定的任意角度的情况。您可以使用arctan或arccos确定角度,进行一些检查以确保您位于右侧象限,然后将新角度提供给setRotate()。 但为什么,当你已经拥有sin / cos的值而不需要角度(sin = dy / dist,cos = dx / dist)?

setSinCos满足了这一需求,这对程序员来说更容易,也更有效。

答案 1 :(得分:0)

问题不是那么简单,例如如果我将值传递超过1怎么办? Android手册没有说什么,但很容易发现没有检查“真正的”正弦/余弦完成。刚刚使用了上面提到的'Dan'的变换矩阵。 因此,在一般情况下,不仅旋转而且在同一时间缩放。 我想这不是bug,而是没有文档的功能。