旋转函数的本质
The Innards of a Rotation Function
我正在寻找关于修改2d矩阵的旋转函数中发生了什么的信息。我发现了这一点,但将旋转指定为90、180或270不会产生任何变化。这是我的代码:
Matrix.prototype.rotate = function(deg) {
var radians = deg * Math.PI / 180,
sin = Math.sin(radians),
cos = Math.cos(radians),
a = this.a,
b = this.b,
c = this.c,
d = this.d,
tx = this.tx,
ty = this.ty;
this.a = a*cos - b*sin;
this.b = a*sin + b*cos;
this.c = c*cos - d*sin;
this.d = c*sin + d*cos;
this.tx = tx*cos - ty*sin;
this.ty = tx*sin + ty*cos;
}
我确实找到了一些关于它为什么不起作用的信息,但没有找到如何修复它的信息。据我所知,旋转90度会导致sin和/或cos是一个很小的数字,当应用于矩阵时,它不会改变任何东西。如果我错了,请告诉我。
为了让它发挥作用,我在函数的开头添加了这个:
if(!(deg % 90)) {
deg -= .0001;
}
它是有效的,但我确信在旋转了几千次之后,它不会非常准确。有人知道更好的解决方案吗?
实际的旋转值存储在其他地方,如果有帮助的话,只将差值传递给函数。
编辑:我忘了提到sin或cos等于1或-1时不会发生任何事情。
不确定你的a、b、c和d是用来做什么的,但只要可能,你应该保留所有的原始值,并使用绝对角度来计算旋转的值。否则,正如你所提到的,不准确的总和将变得越来越明显。
我会去掉-= 0.001
破解,在90度时,sin
应该是1
,cos
应该是0
(或者至少非常接近它),实现以下转换:
a' := -b
b' := a
c' := -d
d' := c
tx' := -ty
ty' := tx
相关文章:
- 如何在调用javascript函数时将javascript触摸旋转添加到html中
- 旋转函数的本质
- JS旋转函数输出奇怪的X值
- CSS/JS/HTML:JS 旋转整页的函数
- jQuery 旋转函数 - 在图像单击时指定 20% 的旋转
- 我应该如何将此函数编码为旋转
- 如何使用函数制作简单的旋转木马
- 使用动画中的Step函数来变换和旋转元素
- Javascript中的矩阵对象&矩阵旋转函数
- 浏览器在运行使用json的ajax函数后继续加载(加载指示器一直在旋转)
- 引导旋转木马-旋转木马.On不是一个函数
- 如何旋转我在 JavaScript 中制作的正方形的函数
- 我可以在一个函数中初始化引导旋转木马吗?或者只能在ready函数中完成
- 使用自定义旋转器函数加载数据
- 在Jquery的onclick函数中添加旋转器函数
- 在javascript中创建一个旋转函数
- PaperJS旋转函数显示项目两次
- jQuery旋转函数不触发
- 将图像旋转不同程度的函数
- Javascript函数-旋转网页