Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 07.09.09 13:36 
Es geht um dieses Thema von mir Thread

Um es mal anders zu testen brauche ich folgendes:
Ich habe ein quadrat, dass durch als TRect gegeben ist.

Jetzt möchte ich berechnen, ob es begehbar ist.
Dazu muss es folgenden Bedingungen genügen:
1) Es existieren keine Terrain- und Object Kollisions linien darin
oder 2) Terrainlinien sind innerhalb eines dreieckes eines objectes bzw. die objectlinien liegen in einem dreieck eines ANDEREN objectes

wie mache ich das? die linen mit dem rechteck auf schnittpunkte zu prüfen ist noch eifnach
aber bei den dreiecken wird es schwierig...die füllen ja nicht das ganze rechteck aus und das rechteckk ist willkürlich gewählt (sprich das dreick muss nicht ganz drin liegen und es können mehrere von verschiedenen objekten sein.

ich habe allerdings eine liste von objekten, die in diesem quadrat liegen können (sprich ich muss nur diese prüfen)

ich weiß nicht weiter als über die grafische lösung, die ich schon in dem andren thread angesprochen habe...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 08.09.09 14:08 
Kollission Dreieck mit Rechteck geht über kantenweise Schnittpunktberechnung. Existiert eine Gerade anzahl an Schnittpunkten (>0) im Dreieck, so schneiden die sich. Liegen die Schnittpunkte bei Verlängerung der Seiten des Dreiecks beide außerhalb (mit unterschiedlichem Richtungsvorzeichen) und gilt dies für alle 3 Kanten des Dreiecks, so liegt dieses innerhalb. Außerhalb liegt das Dreieck, wenn für 2 Kanten die Schnittpunkte auf der gleichen Seite liegen.

Alternativ kann man aber auch 3 Positionsbestimmungen (Punkt in Polygon) für die 3 Eckpunkte des Dreiecks vs. Polygon (Rechteck) ausführen:

0 innerhalb: Dreieck liegt außerhalb
1 und 2 innerhalb: Dreieck schneidet
3 innerhalb: Dreieck liegt im Rechteck.

HTH.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Di 08.09.09 15:48 
funktioniert so leider nicht immer:

Spezialfall: dreieck schneidet rechteck aber alle punkte liegen jeweils außerhalb der anderen figur
ist möglich und z.T. auch recht wahrscheinlich

außerdem geht es eher um strecken, mit schnittpunkt mit dem dreieck

ich bin jetzt gerade an einem ansatz, wo ich für die objecte prüfe, ob sich eine strecke darin befindet. wenn ja wird das entsprechend angepasst.

also sowas soll das ergebnis werden:Bild

die idee dahinter: ich gehe von allen begehbaren objecten alle dreiecke durch. für jedes dreieck prüfe ich alle linien in der umgebung auf kollisionen mit dem dreieck.
jetzt muss ich nur noch unterscheiden, was ich mit den linien mache. z.b könne folgende linien entfernt werden:

1.Punkt auf dreieck, 2.punkt innerhalb oder auch auf dreieck
bzw teilstrecke entfernt wenn 1 punkt auf dem dreieck und der schnittpunkt ebenfalls auf dem dreieck liegt

aber wie setze ich das um?

Edit: mir fallen 2 Möglichkeiten ein um Linien die durch dreiecke verdeckt sind zu entfernen.
1) Alle Dreiecke durchgehen und jede Linie ggfls. an den Schnittpunkten aufteilen bzw verkürzen bzw entfernen (wenn komplett im dreieck)
Vorteil: jedes Dreieck nur einmal geprüft. Recht einfach zu handhaben
2) Alle Linien durchgehen und prüfen:1
1)ob sie in einem Dreieck liegt-->entfernen
2)schnittpunkte mit allen dreiecken ermitteln und dann diese linie entsprechend aufteilen.
Vorteil: die Linie kann direkt aufgeteilt werden und es wird vermieden, diese merhfach zu prüfen.
und für den Fall dass die linie nur durch dreiecke geht, kann sie direkt entfernt werden
Nachteil: ich vermute, dass ist schwieriger zu machen, da u.U. eine große Zahl an Teilstücken entsteht.
Einloggen, um Attachments anzusehen!