Hab auch nochmal überlegt. Ich mach es lieber mit einem Referenzvektor. Den soll/kann eine Ebene bekommen. Wären entweder (1, 0, 0) oder (0, 1, 0) oder (0, 0, 1) oder (-1, 0, 0) oder (0, -1, 0) oder (0, 0, -1) und vergleiche auf <0.
Code:
IsNeg = (PlaneNormal.X * V.X < 0) or (PlaneNormal.Y * V.Y < 0) or (PlaneNormal.Z * V.Z < 0).
Ich denke mal dieser Vektor wäre auch die 4. Zeile für die Determinante von #19. Keine Ahnung?
Wenn A,B,C die 1. Ersten drei Punkte der Ebene sind, dann geht der Normaldingens doch so, oder?
Delphi-Quellcode:
function TPolyeder.PlaneNormal(const A, B, C: integer): TPolyederPoint;
var
AB, AC: TPolyederPoint;
begin
AB.X := FPoints[B].X - FPoints[A].X;
AB.Y := FPoints[B].Y - FPoints[A].Y;
AB.Z := FPoints[B].Z - FPoints[A].Z;
AC.X := FPoints[C].X - FPoints[A].X;
AC.Y := FPoints[C].Y - FPoints[A].Y;
AC.Z := FPoints[C].Z - FPoints[A].Z;
Result.X := AB.Y * AC.Z - AB.Z * AC.Y;
Result.Y := AB.Z * AC.X - AB.X * AC.Z;
Result.Z := AB.X * AC.Y - AB.Y * AC.X;
Showmessage(Format('%.4f, %.4f, %.4f', [Result.X, Result.Y, Result.Z]));
end;