지형 데이터의 점 경사를 계산하는 방법 (예 : 디지털 고도 매트릭스)

StackOverflow https://stackoverflow.com/questions/2060813

문제

3D 자동차 레이싱 게임을 구현하고 싶고 지형의 임의의 지점의 경사의 크기와 방향을 근사해야합니다.

지형 데이터 형식 :
- 높이 [] [] : 플로트의 2D 배열 (미터의 높이를 나타냄)
- 단위 : (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 값이 제공됩니다.

경사를 찾으려면 그 시점에서 정상을 찾아야합니다. 정상을 찾으려면 같은 방식으로 보간을 할 수 있습니다. 패치 중 하나 (4 점 A : (x1, y1), b : (x2, y1), c : (x2, y2) 및 d : (x1, y2), x1 <x2, y1 <y2 및 각 지점에는 높이도 포함됩니다. B의 정상은 같은 방식으로 BC X BA입니다.

높이와 같은 방식으로 정상을 선형 적으로 보간하십시오. 나는 당신이 경사를 원하는 형식으로 알지 못하지만, 경사 방향으로 벡터를 가리키고 싶다면 s = n -up으로 계산됩니다. (0,0,1) z를 UP으로 사용하고 있기 때문에.

또 다른 접근법은 예를 들어 사각형을 삼각형, ABD 및 BCD로 테일링하는 것입니다. 전체 삼각형의 정상은 각각 AB X AD 및 BC X BD입니다. 이 경우 살펴보십시오 http://www.cc.gatech.edu/classes/ay2007/cs3451_spring/lininter.pdf 예를 들어 삼각형의 높이를 보간하는 방법에 대해. 이 접근법은 원활한 삼각형을 제공하지만 인접한 삼각형 사이의 기울기에는 눈에 띄는 차이가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top