2017-01-29 3 views
0

Nehmen wir ein Quadrat (4 Punkte), von oben betrachtet. Jeder der 4 Punkte hat nicht die gleiche Altimetrie.3D Koordinaten Interpolation

Wenn Sie von oben (oder von unten) schauen, sehen Sie ein Quadrat, aber wenn Sie von der Seite schauen, werden Sie sehen, dass die 4 Punkte nicht auf dem gleichen Niveau sind.

Sie haben also ein Flugzeug, das nicht horizontal ist.

Stellen wir uns einen fünften Punkt innerhalb des Quadrats vor. Ich möchte die Höhenmessung dieses fünften Punktes berechnen. Diese Altimetrie ist eine Funktion der Position des Punktes innerhalb des Quadrats und der Höhenmessung der 4 Punkte des Quadrats.

Ich denke, ich habe eine Interpolation zu berechnen, aber ich geschaffen habe, es nicht zu tun ...

Jede Idee? So

Dank

+0

interpolieren Wenn Sie nicht sicher wissen, dass alle Punkte auf einer einzigen Ebene liegen, müssen Sie das Quadrat in zwei Dreiecke aufteilen. Ist das der Fall für dich? – Bartvbl

+1

[Altimetry] (http://www.dictionary.com/browse/altimetry) bedeutet nicht, was Sie denken, dass es bedeutet. Das gesuchte Wort ist "Höhe" oder "Höhe". –

Antwort

1

, wenn Sie genau wissen, dass alle Punkte auf einer einzigen Ebene liegen, die eine Vereinfachung dieses Verfahrens wäre, werde ich annehmen, dass Sie Ihren Platz in zwei Dreiecke geteilt haben. Außerdem nehme ich an, dass es 4 Eckpunkte, v_00, v_10, v_01 und v_11 gibt, die jeden Eckpunkt Ihres Quadrats darstellen. Ich nehme auch an, dass Ihre Dreiecke als (v_00, v_10, v_11) und (v_00, v_11, v_01) definiert sind.

vec4 v00 = vec4(...); 
vec4 v01 = vec4(...); 
vec4 v10 = vec4(...); 
vec4 v11 = vec4(---); 

vec4[2][3] triangles = {{v00, v10, v11}, {v00, v11, v01}}; 

Schließlich werde ich nehme an, Sie kennen die X- und Y-Koordinaten in Bezug auf den unteren Scheitel links (nur die x subtrahiert und y des fünften Punktes von der x- und y-Koordinaten von v_00 Koordinate). Ich werde diesen Punkt P nennen. Wir würden gerne wissen, dass er zkoordiniert ist.

vec4 fifthPoint = vec4(...); 
vec4 P = fifthPoint - v00; 

Das bedeutet, die „gemeinsame Grenze“ der beiden Dreiecke liegt entlang der diagonal verlauf zwischen der Unterseite der Platz links und rechts oben.

Da beide Dreiecke völlig verschieden sein können, beginnt die Bestimmung der Koordinaten Ihres beliebigen fünften Punktes damit, welches der beiden Dreiecke es ist.

Da wir wissen, dass die Form ein Quadrat ist, können wir die Koordinaten unseres Punktes P relativ zu v_00 nehmen (wie ich vorher angenommen habe) und sehen, welche größer als die andere ist. Wenn die x-Koordinate von P größer als die y-Koordinate ist, wissen wir, dass P im rechten unteren Dreieck ist. Ansonsten ist es oben links.

bool whichTriangle = P.x > P.y; 
int triangleIndex = whichTriangle ? 0 : 1; 

Jetzt, da wir wissen, welches Dreieck uns auf, können wir ihre Koordinaten interpolieren auf der Oberfläche des Dreiecks, jeden Punkt zu erhalten.

Für Dreieck 0:

vec4 vectorX = triangles[0][1] - triangles[0][0]; 
vec4 vectorY = triangles[0][2] - triangles[0][1]; 

Für Dreieck 1:

vec4 vectorX = triangles[1][1] - triangles[1][2]; 
vec4 vectorY = triangles[1][2] - triangles[1][0]; 

Hinweis, dass jeder hier Vektor entlang der X- und Y-Achse geht. Das ist wichtig, damit wir die X- und Y-Koordinaten von P direkt verwenden können, um interpolierte Werte zu berechnen.

Als nächstes normalisieren wir die zwei Vektoren, die wir gerade erstellt haben.

vectorX = vectorX.normalize(); 
vectorY = vectorY.normalize(); 

Jetzt brauchen wir nur diese beiden Werte mit der X- und Y-Koordinaten von P zu multiplizieren jeden Punkt auf dem Dreieck zu bekommen, und es zu einem Basispunkt hinzufügen.

Für Dreieck 0:

P = triangles[0][0] + vectorX * P.x + vectorY * P.y; 

Für Dreieck 1:

P = triangles[1][1] - vectorX * (1.0 - P.x) - vectorY * (1.0 - P.y); 

Und dort haben Sie es. Eine viel zu komplizierte Erklärung für etwas, das gar nicht so schwer ist. P.z enthält nun die Z-Koordinate Ihres beliebigen Punktes.

1

Als Trapez ABCD betrachten diese Oberfläche ausgeschlossen: enter image description here

Dazu P1 von A und B und P2 von C und D. interpolieren Schließlich können Sie P Höhe von P1 und P2 Höhen

Verwandte Themen