我有一个单位直角三角形,在三个顶点处有一个值。 我需要插值来找到三角形内部的一个点的值。 搜索了几个小时,没有找到确切告诉我如何做这件事的方法。 以下是我最接近的尝试,它其实相当接近但还不够正确 -
result =
v1 * (1 - x) * (1 - y) +
v2 * x * (1 - y) +
v3 * x * y;
v1、v2和v3是三角形的三个顶点的值。 (x,y)是您要查找其值的三角形内部的点。
任何一种方法都可以帮助我。它不必是一个单位/直角三角形。
更新的信息:
我有一个均匀分布的点网格和每个点的值。
我用网格上最近的三个点构成一个三角形。
这里有一张图片来说明它 -
所以我必须在5、3和7之间进行插值,以找到x的值。
该点也可能在另一个三角形内,这意味着您需要在5、7和正方形左下角的值之间进行插值。
在我展示的代码中,v1 = 5,v2 = 3,v3 = 7。
x是“x”方向上的分数距离(范围为[0-1]),y是“y”方向上的分数距离。
在图片的例子中,x可能大约为0.75,y可能为0.2
这里是我最接近的尝试 -
使用此代码创建 -
if (x > y) //if x > y then the point is in the upper right triangle
return
v1 * (1 - x) * (1 - y) +
v2 * x * (1 - y) +
v3 * x * y;
else //bottom left triangle
return
v1 * (1 - x) * (1 - y) +
v4 * (1 - x) * y +
v3 * x * y;
再试一次 -
使用以下内容创建 -
if (x > y)
return
(1 - x) * v1 + (x - y) * v2 + y * v3;
else
return
(1 - y) * v1 + (y - x) * v4 + x * v3;
它们都接近我所需要的,但显然还不是完全正确的。