3d 地形。
我有 3 个顶点定义一个平面。(高度图中最近的 3 个像素)
我在那架飞机上有一个 x,z。(我在世界上的位置)
你如何找到 y 截距?(这样我就站在那架飞机的表面上)
平面方程为:
A x + B y + C z = D,其中 D = A x0 + B y0 + C z0,
如果您有三个顶点,请从顶点中找到两个向量。例如,对于三个顶点 T、U、V,将有一个向量TU和一个向量UV。
求两个向量的叉积。那是您的法线向量n,它具有三个分量 n1、n2 和 n3。
A = n1
B = n2
C = n3
取其中一分。该点的坐标是 x0、y0 和 z0。
将其输入方程以计算 D。
然后用你的 x 和 z 代替 x 和 z 并求解 y!
所以最后 y 是:
y = (A*x0 + B*y0 + C*z0 - A*x - C*z)/B
如果我的代数错了,请有人纠正我。
您可以像这样计算叉积:
对于两个向量a和b,分量分别为 a1、a2、a3 和 b1、b2、b3,叉积为:
去:
A = i-hat 的系数(加粗的 i)
B = j-hat 的系数(粗体 j)
C = k-hat 的系数(加粗的 k)
您说您正在查看高度图中最近的三个像素,这让我假设您有一个规则网格,您可以从中提取顶点。在这种情况下,您可以使用图像插值方法来执行类似于 eboix 或双三次插值的答案的线性。然后,您的高度值等于图像处理域中的亮度值。在线性情况下,数学要容易得多,而网格结构使得使用简单的形式成为可能。让 c 为您的像元大小,而 p、q、r 为您的 3 个顶点的高度值,如下所示
p q
+--.
| /
|/
r
和 x 和 y 沿直角三角形的腿的距离。三角形当然是您的 3 个顶点在 x、y 平面上的投影。然后你的插值高度值是
z = (q-p)/c * x + (r-q)/c * y