【问题标题】:Transform points from one triangle to another triangle将点从一个三角形变换到另一个三角形
【发布时间】:2019-04-07 21:00:01
【问题描述】:

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

两个三角形之间的变换

【问题讨论】:

  • 关于对象转换的主题有很多可用的信息。使用转换矩阵就是答案。
  • 我了解三角形的形状不同吗?那么这些点应该相对于“变形”的三角形定位吗?
  • 是的,三角形的形状不同。

标签: c#


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!我是这样做的:link
【解决方案2】:

不同的变换是平移、旋转、同位变换

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

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

1) 检查三角形每一边的大小(它是否按比例增加?)

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

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

【讨论】:

  • 第二个三角形也可以不成比例地变化。作为背景:我用 3 个测量点绘制图纸,将图纸粘在板上,然后将其放在我的 CNC 铣床上。然后我测量测量点,然后得到第二个三角形的坐标。现在我必须调整我想要挤压的所有曲线到第二个三角形。不幸的是,我没有受过数学教育,所以我无法解决这个问题。
  • 这是我谈论三角形中心的原因。
【解决方案3】:

您根据向量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 复制到三角形的新方程中即可完成。对所有点执行此操作,您已将所有点复制到新三角形。

【讨论】:

    【解决方案4】:

    现在找到了解决方案。当然不是最快的方法,但据我了解它是有效的:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2014-05-20
      • 2021-03-10
      相关资源
      最近更新 更多