4

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

在此处输入图像描述

这些点总是根据它们的垂直偏移量排序,所以最上面的点总是 A。有时 B 和 C 可能有相同的 y 坐标。

我试图找到点 D 的 x 坐标。我可以通过插值点A.yC.yat找到 D 的 Y 坐标(B.y / (C.y - A.y))。我正在使用以下公式进行插值(在 C++ 中)

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

所以换句话说,D.y = linearInterpolation(A.y, C.y, (B.y - A.y) / (C.y - A.y))

总而言之,我的问题是:我如何找到D.x

谢谢

--

回答:

只是为了澄清,这是建议和工作的解决方案:

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

如下图所示:

在此处输入图像描述

4

3 回答 3

7

需要插值的是x坐标。BDy坐标在您的图表上相等。

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(C.y - A.y) < delta1delta的数量级为 1 个像素。

于 2012-01-16T23:49:13.233 回答
2
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
于 2012-01-16T23:54:58.483 回答
1

线 AC 的函数是y = mx + b

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

然后,您可以将 A 替换为:A.y = A.x * m + b

b = Ay - Ax *m

您需要从 y 计算 x,因此交换函数。

mx = y -b

x = (y -b)/m

这是沿着三角形的那一侧从 y 找到 x 的三个步骤。请注意,您无需进行任何插值即可找到 Dy。简单地说,Dy = By

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

于 2012-01-16T23:50:17.680 回答