线性插值以找出三角形中的坐标
假设您有以下三点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) < delta
, delta
是在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?