我们如何使用方法setSinCos(float, float)
?Android文档说:
将矩阵设置为按指定的正弦和余弦值旋转。
但它是模棱两可的。例如我不知道正弦和余弦值的作用。我在谷歌搜索,但最后我发现了这种方法的一些用法,没有任何评论。感谢您的关注。
要将齐次坐标旋转(逆时针)任意角度 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 的值怎么办?Android手册什么也没说,但很容易发现没有检查“真正的”正弦/余弦。刚刚使用了上面提到的'Dan'的变换矩阵。所以在一般情况下,一个不仅旋转而且同时缩放。我猜这不是错误,而是未记录的功能。