线性插值以找出三角形中的坐标

假设您有以下三点A,B和C,如下图所示:

这些点总是按照它们的垂直偏移排序,因此最顶点始终是A.有时B和C可以具有相同的y坐标。

我试图找到点D的x坐标。我可以通过在(By /(Cy-Ay))处插入点Ay和Cy来找到D的Y坐标。 我正在使用以下公式(在C ++中)进行插值

float linearInterpolation(float a, float b, float t)
{
    return a + (t * (b - a));
}

换句话说,Dy = linearInterpolation(Ay,Cy,(By-Ay)/(Cy-Ay))

总结一下,我的问题是:我如何找到Dx?

谢谢

-

回答:

为了澄清,这里提出了建议和解决方案:

D.x = A.x + (B.y - A.y) * (C.x - A.x) / (C.y - A.y);
D.y = B.y;

如下图所示:

在这里输入图像描述


它是需要插值的x坐标。 B和D的y坐标在你的图上是相等的。

D.x = A.x + (B.y - A.y) * (C.x - A.x) / (C.y - A.y);
D.y = B.y;

你还应该对Cy == Ay的情况作出规定,其中Dx可以在Ax和Cx之间的任何位置。一种方法是不绘制三角形,其中abs(Cy - Ay) < deltadelta是在1个像素的数量级上。


D.y = B.y

delta_x = C.x - A.x 
delta_y = C.y - A.y 

dist_y = B.y - A.y

percent = dist_y / delta_y

D.x = A.x + percent * delta_x

AC线的功能是y = mx + b

m =(Ay-Cy)/(Ax-Cx)

然后,您可以将A替换为: Ay = Ax * m + b

b = Ay-Ax * m

你需要从y计算x,所以交换函数。

mx = y -b

x =(y -b)/ m

这是从三角形的y边找到x的三个步骤。 请注意,您不需要执行任何插值来查找Dy。 简单地说,Dy = By

请注意,您可能可以优化我刚刚写入更小步骤的内容。 我认为编写更容易阅读代码更好。

链接地址: http://www.djcxy.com/p/30617.html

上一篇: Linear Interpolation to find coord in triangle

下一篇: What is an "acceptable" return value from cv::calibrateCamera?