Frage

Ich möchte ein 3D-Autorennspiel implementieren und muss die Größe und Richtung der Neigung eines beliebigen Punktes auf einem Gelände annähern.

Geländedatenformat:
- Höhen[ ][ ]:2D-Anordnung von Schwimmern (Höhen in Metern darstellend)
- Einheit:horizontaler Einheitsabstand zwischen (i, j) - (i, j+1) und zwischen (i, j) - (i+1, j) in Metern

Ex:

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

Welchen Wert und welche Richtung hat die Neigung beispielsweise an einem Punkt (x = 1,75 Meter, y = 2,25 Meter)?

Was wäre Ihr Interpolationsalgorithmus?

War es hilfreich?

Lösung

Sie könnten natürlich sowohl entlang der einmal, wenn der y-Wert höher ist als Ihr tatsächlicher y-Wert.Dadurch erhalten Sie zwei y-Werte, zwischen denen Sie linear interpolieren können, um die Höhe zu ermitteln.

Um die Steigung zu ermitteln, müssen Sie die Normale an diesem Punkt ermitteln.Um die Normale zu finden, könnten Sie dann auf die gleiche Weise eine Interpolation durchführen.Gegeben sei einer der Patches (bestimmt durch vier Punkte A:(x1,y1), B:(x2, y1), C:(x2,y2) und D:(x1,y2), x1 < x2, y1 < y2 und Jeder Punkt enthält auch die Höhe. Man kann sagen, dass die Normale an einem der Punkte, beispielsweise A, durch das Kreuzprodukt der Vektoren AB und AD bestimmt wird.Das Normal bei B ist auf die gleiche Weise BC x BA.

Interpolieren Sie die Normale linear auf die gleiche Weise wie für die Höhe.Ich weiß nicht, in welchem ​​Format Sie die Steigung haben möchten, aber wenn Sie einen Vektor möchten, der in die Richtung der Steigung zeigt, würde das durch S = N - Up berechnet werden, wobei Up einfach der Aufwärtsvektor ist (in diesem Beispiel). (0,0,1), da Sie Z als up verwenden.

Ein anderer Ansatz wäre, die Quadrate in Dreiecke zu tesselisieren, zum Beispiel ABD und BCD.Die Normale für das gesamte Dreieck wäre dann AB x AD bzw. BC x BD.In diesem Fall werfen Sie einen Blick auf http://www.cc.gatech.edu/classes/AY2007/cs3451_spring/lininter.pdf zum Beispiel, wie man die Höhe des Dreiecks interpoliert.Mit diesem Ansatz erhalten Sie glatte Dreiecke, es gibt jedoch deutliche Unterschiede in der Steigung zwischen benachbarten Dreiecken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top