Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Polygon - Punkte im Uhrzeigersinn (https://www.delphipraxis.net/193594-polygon-punkte-im-uhrzeigersinn.html)

Jens01 18. Aug 2017 16:30

AW: Polygon - Punkte im Uhrzeigersinn
 
Zitat:

Nimmt man z.B. ein Polygon, daß eine Acht bildet: Was ist denn da links/rechts rum?
Bei Räumen wäre sowas schlecht. Vllt sollte man das Polygon vorher auf einen Überschlag prüfen.

Bjoerk 18. Aug 2017 17:34

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:
 Z
 |
 | /Y
-/-------X
Wenn das globake KOO so ist, und die Tür in X-Z Ebene liegt dann wäre PlaneAlign paPlusY oder paMinusY.

Kannst ja mal probieren?

LG Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz