Nein. Leider. Habs getestet. Und daß die Punkte auf der Ebene liegen ist hier gesichert weil die Ebenen so aufgespannt werden.
Der Code von #8 ist eine Pyramide. P0..P3 sind die Grundfläche, P4 die Spitze.
Bei Ebene 5 sagt er ist negativ.
Ich hab auf die Schnelle nur die ersten beiden Punkte einer Begrenzungsebene geprüft:
Delphi-Quellcode:
function TPolyeder.CrossProduct(const A, B: integer): TPolyederPoint;
begin
Result.X := FPoints[A].Y * FPoints[B].Z - FPoints[A].Z * FPoints[B].Y;
Result.Y := FPoints[A].Z * FPoints[B].X - FPoints[A].X * FPoints[B].Z;
Result.Z := FPoints[A].X * FPoints[B].Y - FPoints[A].Y * FPoints[B].X;
end;
function TPolyeder.ClockwiseSense(const Index: integer): integer;
begin
Result := Sign(CrossProduct(FPlanes[Index].Items[0], FPlanes[Index].Items[1]).Z);
ShowMessage(Format('Result %d', [Result]));
end;