如何计算地形数据上某点的斜率(例如数字高程矩阵)

时间:2010-01-13 22:34:05

标签: terrain racing linear-interpolation

我想要实现3D赛车游戏,我需要估算地形上任意点的坡度的大小和方向。

地形数据格式:
- 高度[] []:浮动的二维数组(以米为单位表示高度)
- 单位:(i,j) - (i,j + 1)和(i,j) - (i + 1,j)之间的水平单位距离(米)

前:

3|1311
2|2542 <-- 2D array of heights in meters
1|2231   (unit distance between two cell is, say, 1 meters)
0|1121   (so the highest point of the terrain (x = 1.5 meters, y = 2.5 meters)
  ----      is 5 meters high)
  0123

斜坡的值和方向是多少,例如(x = 1.75米,y = 2.25米)?

你的插值算法是什么?

1 个答案:

答案 0 :(得分:3)

当然,您可以沿x轴和y轴进行线性插值,即首先插入x坐标的y值,该坐标低于和高于实际x值两次 - y坐标的一次低于实际值y值和一次y值高于实际y值。这为您提供了两个y值,您可以在它们之间进行线性插值以获得高度。

为了找到斜率,您需要在该点找到法线。要找到法线,您可以以相同的方式进行插值。给定一个贴片(由四个点A:(x1,y1)确定,B:(x2,y1),C:(x2,y2)和D:(x1,y2),x1

以与高度相同的方式线性插值法线。我不知道你想要什么样的斜率,但是如果你想要一个指向斜率方向的矢量,那么那将由S = N-Up计算,其中Up只是向上矢量(在这个例子中) (0,0,1),因为你正在使用Z.

另一种方法是将正方形分成三角形,例如ABD和BCD。然后,整个三角形的法线分别为AB x AD和BC x BD。在这种情况下,请查看http://www.cc.gatech.edu/classes/AY2007/cs3451_spring/lininter.pdf,例如如何在三角形上插入高度。这种方法为您提供了平滑的三角形,但相邻三角形之间的斜率存在显着差异。