AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Kollision zweier 2dim Polygonen.
Thema durchsuchen
Ansicht
Themen-Optionen

Kollision zweier 2dim Polygonen.

Ein Thema von Chris88 · begonnen am 8. Dez 2006 · letzter Beitrag vom 9. Dez 2006
Antwort Antwort
Seite 2 von 2     12   
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Kollision zweier 2dim Polygonen.

  Alt 8. Dez 2006, 17:11
Zitat von Chris88:
@igel457: Das ist ja nur eine Funktion, um zu testen, ob ein Punkt in einem Polygon liegt. Ich suche aber eine Funktion, welche prüft ob ein Polygon in einem anderen Polygon ist...
Wenn ein Punkt eines Polygons in einem anderen liegt, müssten die beiden Polygone kollidieren, sonst nicht.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#12

Re: Kollision zweier 2dim Polygonen.

  Alt 8. Dez 2006, 17:21
leider funktioniert das bei folgendem nicht mehr: (siehe anhang?)
Miniaturansicht angehängter Grafiken
intersection_190.gif  
  Mit Zitat antworten Zitat
F34r0fTh3D4rk

Registriert seit: 15. Okt 2005
8 Beiträge
 
#13

Re: Kollision zweier 2dim Polygonen.

  Alt 8. Dez 2006, 17:29
und wenn du möchtest dass das schneller geht, solltest du dich mal über Trennungsachsen informieren (Separation Axis)
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Kollision zweier 2dim Polygonen.

  Alt 8. Dez 2006, 18:05
Zitat von NamenLozer:
leider funktioniert das bei folgendem nicht mehr: (siehe anhang?)
Stimmt
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#15

Re: Kollision zweier 2dim Polygonen.

  Alt 8. Dez 2006, 23:27
Delphi-Quellcode:
....
  RgnA := CreatePolygonRgn(TestA,3,Winding);
  RgnB := CreatePolygonRgn(TestB,3,Winding);

  RgnC := CreateRectRgn(0,0,0,0);
....
wenn ich mich richtig erinnere musst du für die Resulatat Region RgnC ein Region Handle erzeugen. CombineRgn() macht dies nicht für dich.

du könntest also auch so arbeiten

Delphi-Quellcode:
  RgnA := CreatePolygonRgn(TestA,3,Winding);
  RgnB := CreatePolygonRgn(TestB,3,Winding);
  try
    case CombineRgn(RgnA, RgnA, RgnB, RGN_AND) of
    end;
  finally
    ...
  end;
sprich inplaced in Region A.

Gruß Hagen
  Mit Zitat antworten Zitat
Chris88

Registriert seit: 25. Sep 2005
4 Beiträge
 
#16

Re: Kollision zweier 2dim Polygonen.

  Alt 9. Dez 2006, 18:05
Ich hab es jetzt so gemacht, wie es in der aller ersten Antwort angedeutet war:

Zitat von Reinhard Kern:
2 Polygone kollidieren, wenn sich irgendwelche ihrer Umrandungslinien schneiden. D.h. bei 1 Fünf- und 1 Sechseck 5 x 6 = 30 mal berechnen, ob sich 2 Geradenstücke (nicht Geraden!) schneiden. Ich weiss nicht, ob es eine schnellere Möglichkeit gibt.
Danach muss natürlich noch jeweils ein Punkt gegengeprüft werden.

Hab davor noch eine BoundingBox-Collision geschaltet. Die BoundingBox zu berechnen geht ja einfach. Man geht einfach das Polygon durch und ermittelt MinX, MaxX, MinY, MaxY.

Damit fallen schon mal viele Kollisionen für die relativ Aufwändige Schnittpunktberechnung weg. Was sich im Vergleich zu der Windows API Funktion aber nur einen Bruchteil braucht. Hier hab ich es mit Hilfe von Vektoren gemacht. Die meiner Meinung nach schnellte Funktion.

Nun möchte ich meine Objekte aber noch in einen Quadtree speichern. Da ich mitunter mal > 10000 Objekte habe. Ich kapiere dort allerdings das Vorgehen nur wage. Für einzelne Punkte kann ich mir es noch vorstellen. Aber wie sieht das mit Polygonen aus. Betrachtet man da nur den Startpunkt?
Kann mir jemand mal erklären, wie man bei einem Quadtree seine Knoten anordnet? Oder ein gutes Tutorial hier verlinken. Finde nämlich immer nur ausführliche wissenschaftliche Artikel, welche ich kaum verstehen kann.

Gruß
Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:15 Uhr.
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