在HTML5画布,我画的对象(矩形,圆形,等...),这些对象有转型的属性,如缩放,倾斜,旋转等......这些对象可以被嵌套。
问题发生在我应用变换后,我要找到确切的x,y给定对象的坐标,但它会在我的头上。
所有专家谁是成交互式计算机图形; 请帮我解决这个问题。
提前致谢。
在HTML5画布,我画的对象(矩形,圆形,等...),这些对象有转型的属性,如缩放,倾斜,旋转等......这些对象可以被嵌套。
问题发生在我应用变换后,我要找到确切的x,y给定对象的坐标,但它会在我的头上。
所有专家谁是成交互式计算机图形; 请帮我解决这个问题。
提前致谢。
在2D所有仿射变换可以表示为以下形式的矩阵:
[ a c dx ]
T = [ b d dy ]
[ 0 0 1 ]
这可能是与该方法被表示context.transform(a, b, c, d, dx, dy);
。
当施加到一些坐标, (x,y)
首先必须增加第三坐标,这始终是1
: <x, y, 1>
然后,你可以乘变换矩阵得到的结果:
[ a*x + c*y + dx ]
[ b*x + d*y + dy ]
[ 1 ]
如果你在最后一个坐标什么比“1”等,你必须通过它来划分的载体。
为了走另一条路,你必须倒置矩阵:
[ d/M -c/M (c*dy - d*dx)/M ]
[ b/M a/M (b*dx - a*dy)/M ]
[ 0 0 1 ]
其中M
是(a*d - b*c)
多次转化可以按顺序通过矩阵相乘应用。 乘法的顺序是非常重要的。
context.translate(dx,dy) <==> context.transform( 1, 0, 0, 1, dx, dy)
context.rotate(θ) <==> context.transform( c, s, -s, c, 0, 0)
context.scale(sx,sy) <==> context.transform(sx, 0, 0, sy, 0, 0)
其中c = Math.cos(θ)
和s = Math.sin(θ)
如果你有一些坐标(x,y)
的对象空间,你想知道它最终会在屏幕上,您应用转换到它。
如果你有一些坐标(x,y)
在屏幕上,并且要知道这是在对象上哪个点,您在变换的逆繁殖。