Leider noch nicht am Ziel
Habe es eben mit den Vorschlag E3 := (V2-V1) x (P-V1) + V1 siehe Quelltext versucht aber da kommt nicht das gewünschte Ergebnis raus.
In meinem Beispiel hat P als Ausgangspunkt und ein Punkt der Dreiecksfläche E1 die Koordinaten (10, 0, 5) im Weltkoordinatensystem.
Auf den 2. Punkt der Dreiecksfläche E2, steht eine Senkrechte. Der Anfangspunt der Senkrechten hat eine Differenz zu P von (-5, 0,-5). Es ergeben sich damit die Weltkoordinaten für E2 von (5, 0, 0). Der Endpunkt der Senkrechten V2 hat zum Anfangspunkt der Senkrechten V1 eine Differenz von (-5, 0, 5).
Für den Punkt E3 gilt:
Der Abstand zu V1 = Abstand von V1 zu P = Abstand von V1 zu V2.
Weiter ist der Winkel P/V1/E3, P/V1/V2 und V2/V1/E3 0 90°.
Wie kann ich mir nun E3 ausrechnen, wenn P, V1 und V2 gegeben sind?
Das Ergebnis ist im Beispiel (5, 5, 0) aber wie kann ich mir dieses ausrechnen?
Habe dazu auch noch einmal eine Skizze gemacht.
Delphi-Quellcode:
type Tpoint3D = record
X : single;
Y : single;
Z : single;
end;
//------------------------------------------------------------------------------
// Bestimmen des 3. Punktes einer Fläche
//------------------------------------------------------------------------------
procedure fl_3Punkte(p, v1, v2 : TPoint3D; var E1, E2, E3 : TPoint3D);
var d1, d2, kp : TPoint3D;
begin
E1 := P;
E2.x := p.x + v1.x;
E2.y := p.y + v1.y;
E2.z := p.z + v1.z;
// EP3 = (V2-V1) x (P-V1) + V1 ????
d1.x := v2.x - v1.x;
d1.y := v2.y - v1.y;
d1.z := v2.z - v1.z;
d2.x := p.x - v1.x;
d2.y := p.y - v1.y;
d2.z := p.z - v1.z;
kp.x := (d1.y*d2.z) - (d2.y*d1.z);
kp.y := (d1.z*d2.x) - (d2.z*d1.x);
kp.z := (d1.x*d2.y) - (d2.x*d1.y);
E3.x:= kp.x + v1.x;
E3.y:= kp.y + v1.y;
E3.z:= kp.z + v1.z;
end;