Come calcolare la pendenza di un punto su un dato terreno (ad esempio Digital Elevation Matrix)

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

Domanda

Voglio realizzare un gioco di corse automobilistiche in 3D e ho bisogno di approssimare la grandezza e la direzione della pendenza di un punto arbitrario su un terreno.

Formato Terrain dati:
- altezze [] []: array 2D di carri (che rappresentano altezze in metri)
- Unità: unità di distanza orizzontale tra (i, j) - (i, j + 1) e tra (i, j) - (i + 1, j) in metri

Esempio:

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

Qual è il valore e la direzione della pendenza a punto, per esempio, (x = 1,75 metri, y = 2,25 metri)?

Quale sarebbe il vostro algoritmo di interpolazione essere?

È stato utile?

Soluzione

Si potrebbe comunque linearmente interpolare lungo gli assi X e Y, cioè prima interpolare il valore y per x coordinate che sono inferiori e superiori al valore X effettivo due volte - una volta per la coordinata y inferiore al vostro attuale valore Y e una volta per il valore y superiore al vostro valore y effettivo. Questo vi dà due valori y che è possibile linearmente interpolare tra per ottenere l'altezza.

Al fine di trovare la pista è necessario trovare la normale in quel punto. Per trovare il normale si potrebbe poi fare un'interpolazione nello stesso modo. Data una delle patch (determinato mediante quattro punti A: (x1, y1), B: (x2, y1), C: (x2, y2) e D: (x1, y2), x1

linearmente interpolare la normale nello stesso modo come per l'altezza. Non so in quale formato si desidera che la pista, ma se si vuole un puntamento vettore nella direzione della pendenza, che sarebbe poi calcolare i con S = N - Up, dove Up è semplicemente il vettore verso l'alto (in questo esempio (0,0,1) dal momento che si sta utilizzando Z come up.

Un altro approccio sarebbe quello di Tesselate i quadrati in triangoli, ABD e BCD per esempio. Il normale per l'intero triangolo sarebbero allora AB x AD e BC x BD rispettivamente. In questo caso, dare un'occhiata a http://www.cc. gatech.edu/classes/AY2007/cs3451_spring/lininter.pdf ad esempio su come interpolare l'altezza sul triangolo. Questo approccio si dà triangoli lisce, ma non v'è differenze notevoli nella pendenza tra triangoli adiacenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top