Problem mit Punkt auf Fläche
Ich hatte vor einigen Wochen schon einmal das Problem mit dem Lot eines Punktes auf eine Fläche im Raum. Der erste Test damals war OK aber jetzt beim nähren Testen klappt es doch nicht. Der Punkt liegt auf den Koordinaten (x=5, Y=5, Z=20)
Meine Fläche hat beim Testen die Koordinaten
Test 1 E1( 0, 0, 0), E2( 10, 0, 0), E3(10, 10, 10) Ergebnis für die Höhe 5 (richtig)
Test 2 E1( 10, 0, 0), E2( 10, 10, 0), E3( 0, 10, 10) Ergebnis für die Höhe 5 (richtig)
Test 3 E1( 10, 10, 0), E2( 0, 10, 0), E3( 0, 0, 10) Ergebnis für die Höhe 7,071 (falsch) 5 richtig
Test 4 E1( 0, 10, 0), E2( 0, 0, 0), E3(10, 0, 10) Ergebnis für die Höhe 5 (richtig)
Test 5 E1(-10, 0, 0), E2( 0,-10, 0), E3( 0, 0, 10) Ergebnis für die Höhe 1 5 (richtig) 10 richtig?
Test 6 E1( 0,-10, 0), E2( 10, 0, 0), E3( 0, 0, 10) Ergebnis für die Höhe 5 (falsch)
Test 7 E1( 10, 0, 0), E2( 0, 10, 0), E3( 0, 0, 10) Ergebnis für die Höhe 5 (falsch) 0 richtig
…
Was ist falsch bei Test 3 und Test 6? Hat einer eine Idee oder Funktion für dieses Problem ?
Im Anhang ist der jetzige Code
Delphi-Quellcode:
//------------------------ Fällt das Lot auf eine Fläche -----------------------
function lot_flaeche(p1, p2, p3, lot : TPoint3d): single;
var nx, ny, nz, hx, hy, hz, sp, ln : single;
begin
nx := p2.y*p3.z - p3.y*p2.z;
ny := -(p1.y*p3.z - p3.y*p2.z);
nz := p1.y*p2.z - p2.y*p1.z;
hx := lot.y - p1.x;
hy := lot.x - p2.x;
hz := lot.z - p3.x;
sp := hx*nx + hy*ny + hz*nz;
ln := sqrt(nx*nx + ny*ny + nz*nz);
result := abs(sp/ln);
end;