rod*_*ira 4 c++ geometry interpolation sdl linear-interpolation
假设您有以下三点A,B和C,如下图所示:

点总是根据它们的垂直偏移进行排序,因此最高点总是A.有时B和C可以具有相同的y坐标.
我正在尝试找到点D的x坐标.我可以通过插入点Ay和Cy来找到D的Y坐标(By /(Cy-Ay)).我正在使用以下公式进行插值(在C++中)
float linearInterpolation(float a, float b, float t)
{
return a + (t * (b - a));
}
Run Code Online (Sandbox Code Playgroud)
换句话说,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;
Run Code Online (Sandbox Code Playgroud)
如下图所示:

它是需要插值的x坐标.在图上,B和D的y坐标相等.
D.x = A.x + (B.y - A.y) * (C.x - A.x) / (C.y - A.y);
D.y = B.y;
Run Code Online (Sandbox Code Playgroud)
您还应该为Cy == Ay的情况做出规定,其中Dx可以是Ax和Cx之间的任何位置.这样做的一种方法是不绘制三角形,其中abs(C.y - A.y) < delta,三角形delta的数量级为1.