AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Polygon - Punkte im Uhrzeigersinn

Ein Thema von e-gon · begonnen am 18. Aug 2017 · letzter Beitrag vom 18. Aug 2017
Antwort Antwort
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#1

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 11:48
@Sherlock
Ich verstehe die Frage nicht. Die Punkte liegen als dynamisches Array von Points vor, die der Funktion Canvas.Polygon übergeben werden.

@Hannes
Das muss ich mir mal genauer anschauen.

@ibp
Danke für den Tipp.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.590 Beiträge
 
Delphi 12 Athens
 
#2

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 12:31
Hätte einfach gedacht
* Mittelpunkt berechnen
* Winkel des des jeweils ersten und zweiten Punktes vom Mittelpunkt aus berechnen
* Differenz der beiten Winkel
* wenn 0-180° dann sorum und ansonsten andersrum
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Aug 2017 um 12:34 Uhr)
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 12:45
Die Lösung war die Gaußsche Trapezformel.

Delphi-Quellcode:
var
  P: Array of TPoint;
  n,i: Word;
  Summe: Extended;

...

Summe:= 0;
n:= Length(P);
for i:= 0 to n-1 do Summe:= Summe+(P[i].Y+P[(i+1) mod n].Y)*(P[i].X+P[(i+1) mod n].X);
Wenn Summe>0 dann Uhrzeigersinn, sonst Gegenuhrzeigersinn.

Gruß und Danke an alle!
e-gon
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.826 Beiträge
 
Delphi 12 Athens
 
#4

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 13:27
@Sherlock
Ich verstehe die Frage nicht. Die Punkte liegen als dynamisches Array von Points vor, die der Funktion Canvas.Polygon übergeben werden.
FMX liefert einiges mit, daß bei der Arbeit mit 3D-Objekten hilft. VCL... nicht so sehr, wie du siehst. Das ist alles worauf meine Frage hinaus wollte.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.242 Beiträge
 
Delphi 12 Athens
 
#5

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 14:15
Die Frage wäre vielleicht auch ob sich die Polygone selbst schneiden und zerteilen, oder nicht.
Bei so komplexen Polygonen kann es ganz schön unübersichtlich werden.
Funktioniert die Gaußsche Formel da auch noch 100% sicher ?

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.785 Beiträge
 
Delphi 12 Athens
 
#6

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 14:23
Die Frage wäre vielleicht auch ob sich die Polygone selbst schneiden und zerteilen, oder nicht.
Bei so komplexen Polygonen kann es ganz schön unübersichtlich werden.
Funktioniert die Gaußsche Formel da auch noch 100% sicher ?
Solange die Definition von rechts/links mit Flache > 0 oder < 0 definiert ist, funktioniert das schon.

Nimmt man z.B. ein Polygon, daß eine Acht bildet: Was ist denn da links/rechts rum?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
675 Beiträge
 
#7

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 16:30
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.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Polygon - Punkte im Uhrzeigersinn

  Alt 18. Aug 2017, 17:34
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 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