两个线段之间的转换矩阵

时间:2017-02-19 14:26:26

标签: math matrix

由四个端点abcd定义的两个线段(在同一个2D平面中)如何计算将转换的变换矩阵第一线段进入第二线?

我发现this答案几乎是我所需要的 - 我只是无法将其翻译成代码。

2 个答案:

答案 0 :(得分:2)

查找细分的长度len_ab, len_cd

翻译矩阵(-a.x, -a.y)

按角度旋转矩阵

 atan2((d.x-c.x)*(b.y-a.y)-(d.y-c.y)*(b.x-a.x), 
       (d.x-c.x)*(b.x-a.x)+(d.y-c.y)*(b.y-a.y)

使用系数len_cd/len_ab

按两个轴进行缩放

(c.x, c.y)

翻译

答案 1 :(得分:0)

假设两个x,y轴上的比例因子相同,则可以:计算旋转角度:

ang = acos(dot(b-a,d-c)/|b-a|*|d-c|)

和比例:

scale = |d-c|/|b-a|

使用origin = (0,0)构建 2D 同质 3x3 变换矩阵,然后将a转换为c'并翻译为:

translate = d-d'

另一种选择是以代数方式解决这个问题:

M * p = p'

M 3x3 从基质中均匀转换

    | m0 m1 m2 |
M = | m3 m4 m5 |
    |  0  0  1 | 

p=(x,y,1)是原始点(a,b)p'=(x,y,w)是转换点(c,d),因此它构成了这个线性系统:

m0.ax + m1.ay + m2 = cx
m3.ax + m4.ay + m5 = cy
m0.bx + m1.by + m2 = dx
m3.bx + m4.by + m5 = dy
m0.ux + m1.uy + m2 = vx
m3.ux + m4.uy + m5 = vy
ux = 0.5*(ax+bx)
uy = 0.5*(ay+by)
vx = 0.5*(cx+dx)
vy = 0.5*(cy+dy)

所以只需解决m0,m1,m2,m3,m4,m5,你就有了矩阵......

有关详细信息,请参阅: