我有两个带有相应坐标的三角形。现在,我必须将更多的点从第一个三角形转移到第二个三角形。我试图用emgu解决它,但是我没有找到方法。 对我来说,点线性地传递是很重要的。 有谁知道我如何使用C#解决这个问题?
两个三角形之间的变换
答案 0 :(得分:0)
不同的转换是平移,旋转,同位
似乎第二个三角形的大小(按比例)增加,并且进行了旋转和平移。
一个想法,你可以做什么:
1)检查三角形各边的大小(比例是否增加了?)
2)检查三角形的角度以检查是否没有修改
3)检查每个三角形的中心,看是否没有关系。
答案 1 :(得分:0)
您可以基于向量AB
和AC
并以A
的向量为原点来计算点的位置。一点的等式为:
P = A + r * AB + s * AC
其含义是:“我应该沿着AB
线走多远,然后沿着AC
线平行走到P
点?”您为r
和s
计算的值在[0,1]
之间,因为您将位于三角形内部。因此,当您为三角形中给定点计算因子r
和s
时,可以验证值在[0,1]
之间时看起来是否正确。
计算因子r
和s
时,可以将其用于新三角形的向量。等式为:
P' = A' + r * A'B' + s* A'C'
您只需将因子r
和s
复制到三角形的新方程式即可完成。对所有点执行此操作,您已将所有点复制到新三角形。
答案 2 :(得分:0)
答案 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;