![]() |
AW: Drehsinn von Ebenen
Wie soll der Drehsinn in 3D überhaupt definiert sein :gruebel:
Wenn man das ganze auf eine festgelegte Ebene projiziert dann kann man wieder den 2D-Ansatz nehmen. In deinem Beispiel wäre die Projektionsebene eine die parallel zur x- und zur y-Achse ist. Ansonsten macht das Ganze imho nicht so viel Sinn. |
AW: Drehsinn von Ebenen
Normal zur Plattenebene. Und da liegt wohl der Haken. Woher weiß die Ebene was Ihre Unterseite ist. Dazu bräuchte man erst eine Transformationsmatrix E um dann auf E[3, 3] > 0 o.ä. zu prüfen. Oder man gibt einen Referenzknoten an. Keine Ahnung?
|
AW: Drehsinn von Ebenen
Ich denke, man müsste/könnte von einem Punkt der Fläche aus in Richtung der Normalen einen
![]() Oder, falls der Polyeder konvex ist, könnte man auch die vektorielle Distanz zwischen dem Mittelpunkt und einem Punkt auf der Fläche berechnen, und dann schauen, ob dieser "in die gleiche Richtung" zeigt wie die Normale der Fläche (Skalarprodukt > 0), was einfacher und schneller wäre. |
AW: Drehsinn von Ebenen
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:
Ich denke mal dieser Vektor wäre auch die 4. Zeile für die Determinante von #19. Keine Ahnung?
IsNeg = (PlaneNormal.X * V.X < 0) or (PlaneNormal.Y * V.Y < 0) or (PlaneNormal.Z * V.Z < 0).
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 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