将点从一个三角形转换为另一个三角形

时间:2019-04-06 07:37:05

标签: c#

我有两个带有相应坐标的三角形。现在,我必须将更多的点从第一个三角形转移到第二个三角形。我试图用emgu解决它,但是我没有找到方法。 对我来说,点线性地传递是很重要的。 有谁知道我如何使用C#解决这个问题?

两个三角形之间的变换

enter image description here

4 个答案:

答案 0 :(得分:0)

不同的转换是平移,旋转,同位

似乎第二个三角形的大小(按比例)增加,并且进行了旋转和平移。

一个想法,你可以做什么:

1)检查三角形各边的大小(比例是否增加了?)

2)检查三角形的角度以检查是否没有修改

3)检查每个三角形的中心,看是否没有关系。

答案 1 :(得分:0)

您可以基于向量ABAC并以A的向量为原点来计算点的位置。一点的等式为:

P = A + r * AB + s * AC

其含义是:“我应该沿着AB线走多远,然后沿着AC线平行走到P点?”您为rs计算的值在[0,1]之间,因为您将位于三角形内部。因此,当您为三角形中给定点计算因子rs时,可以验证值在[0,1]之间时看起来是否正确。

计算因子rs时,可以将其用于新三角形的向量。等式为:

P' = A' + r * A'B' + s* A'C'

您只需将因子rs复制到三角形的新方程式即可完成。对所有点执行此操作,您已将所有点复制到新三角形。

答案 2 :(得分:0)

考虑对点A,B,C和A',B',C'使用齐次坐标,并形成以下变换规则

AffineTransform1

要找到两个三角形之间的变换矩阵,请执行以下操作

solve

现在对于任何点(x,y),以下转换都是有效的

AffineTransform2

答案 3 :(得分:0)

现在已经找到了解决方案。当然不是最快的方法,但据我所知它可以起作用:

double xA;
double yA;
double xB;
double yB;
double xC;
double yC;
double xA1;
double yA1;
double xB1;
double yB1;
double xC1;
double yC1;

xB -= xA;
yB -= yA;
xC -= xA;
yC -= yA;

xB1 -= xA1;
yB1 -= yA1;
xC1 -= xA1;
yC1 -= yA1;

double x;
double y;


double xnB = x / xB * xB1;
double ynB = xnB / xB1 * yB1;

double xnC = x / xC * xC1;
double ynC = xnC / xC1 * yC1;

double Ld = x / xB * yB - x / xC * yC;
double Ld1 = Math.Sqrt(((xnB - xnC) * (xnB - xnC)) + ((ynB - ynC) * (ynB - ynC)));

double npl = (Ld1 * (((x / xB * yB) - y) / Ld)) / Ld1;
if (double.IsNaN( npl))
npl = 0;
double x1 = (xnB - xnC) * npl;
double y1 = (ynB - ynC) * npl;

x1 = xnB - x1 + xA1;
y1 = ynB - y1 + yA1;