由四个端点a
,b
,c
和d
定义的两个线段(在同一个2D平面中)如何计算将转换的变换矩阵第一线段进入第二线?
我发现this答案几乎是我所需要的 - 我只是无法将其翻译成代码。
答案 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
,你就有了矩阵......
有关详细信息,请参阅: