![]() |
AW: Polygon - Punkte im Uhrzeigersinn
Zitat:
|
AW: Polygon - Punkte im Uhrzeigersinn
Für meinem Polyeder hatte ich mir das überlegt. Ich verwende es nicht, aber wenn ich noch recht erinnere, funktioniert das nur, wenn die Ebenen parallel einer globalen Bezugsebene liegen.
Das sollte bei deiner Tür aber der Fall sein. Prüfen tut man drei aufeinanderfolgende Punkte. Wenn die Tür 4 Punkte hat dann (P1, P2, P3), (P2, P3, P4), (P3, P4, P1) und (P4, P1, P2) prüfen. Alle müssen Counterclockwise sein.
Delphi-Quellcode:
function TPolyeder.Counterclockwise(const A, B, C: integer;
const Align: TPlaneAlign): boolean; var AB, AC, N, E: 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; N.X := AB.Y * AC.Z - AB.Z * AC.Y; // PlaneNormal N.Y := AB.Z * AC.X - AB.X * AC.Z; // .. N.Z := AB.X * AC.Y - AB.Y * AC.X; // .. E.X := 0; E.Y := 0; E.Z := 0; case Align of paPlusX: E.X := 1; paPlusY: E.Y := 1; paPlusZ: E.Z := 1; paMinusX: E.X := -1; paMinusY: E.Y := -1; paMinusZ: E.Z := -1; end; if (E.X * N.X < 0) or (E.Y * N.Y < 0) or (E.Z * N.Z < 0) then Result := false else Result := true; end;
Code:
Wenn das globake KOO so ist, und die Tür in X-Z Ebene liegt dann wäre PlaneAlign paPlusY oder paMinusY.
Z
| | /Y -/-------X Kannst ja mal probieren? LG Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz