2011-10-03 56 views
-1

是否可以使用4x4矩阵转换仅移动矩形的一个边线?使用4x4矩阵移动边线

Example

+2

这是题外话。请阅读[FAQ](http://stackoverflow.com/faq)。 – Oded

+0

当然,如果您将该顶点表示为4向量(当您需要的是2向量时)。请问我们为什么要用4x4矩阵来做? – Beta

+0

在处理中,唯一的拟合函数使用4x4矩阵,您会建议哪种操作? http://processing.org/reference/applyMatrix_.html – NCode

回答

0

这是很容易,我本来以为。如果要将它们乘以4x4矩阵,则必须将顶点延伸到4维向量中。要在2D中做到这一点,你实际上只需要一个3x3的矩阵,但额外的维度并没有真正伤害任何东西,除了你的实现的性能。给定你的四点,Vn =(xn,yn,mn,0),其中n在{0,1,2,3}中,并且mn是0或1,这取决于你是否想要将Vn从当前位置移开。要通过一些载体(α,β)将您想要移动的顶点应用以下:

 
| 1 0 α 0 | | x0 x1 x2 x3 | | x0+αm0 x1+αm1 x2+αm2 x3+αm3 | 
| 0 1 β 0 | | y0 y1 y2 y3 | | y0+βm0 y1+βm1 y2+βm2 y3+βm3 | 
| 0 0 1 0 | | m0 m1 m2 m3 | = | m0  m1  m2  m3 | 
| 0 0 0 1 | | 0 0 0 0 | | 0  0  0  0 | 
+0

因此函数将是 applyMatrix( 1,0,30,0, 0,1,30,0, 0,0,1,0, 0,0,0,1); 用(30,30)移动边缘? – NCode

+0

是的,这是它的一部分。另一个同样重要的部分是关于扩展向量中的mn元素。如果你希望Vn保持在当前位置,每个mn应该是0;如果你想让它移动,每个mn应该是0。 – andand