gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:59:47 25 4
gpt4 key购买 nike

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

地形数据格式:
- heights[ ][ ]: 2D 浮点数组(以米为单位表示高度)
- unit: (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 米) 处的坡度值和方向是什么?

你的插值算法是什么?

最佳答案

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

为了找到斜率,您需要找到该点的法线。要找到法线,您可以以相同的方式进行插值。给定其中一个补丁(由四个点 A:(x1,y1), B:(x2, y1), C:(x2,y2) 和 D:(x1,y2) 确定,x1 < x2, y1 < y2 和每个点还包括高度)你可以说其中一个点的法线,比如 A,是由向量 AB 和 AD 的叉积决定的。 B 处的法线以相同的方式为 BC x BA。

以与高度相同的方式线性插值法线。我不知道你想要什么格式的斜率,但如果你想要一个指向斜率方向的向量,那么可以通过 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例如关于如何在三角形上插入高度。这种方法为您提供平滑的三角形,但相邻三角形之间的斜率存在显着差异。

关于terrain - 如何计算地形数据上点的斜率(例如数字高程矩阵),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com