kollisions routine

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

kollisions routine

Beitrag von gnasen »

Hi,
es war aufwendiger als gedacht, aber ich habe meine Kollisionsroutine nun fertig.
Sie prüft sehr schnell ob sich beliebige Vielecke überschneiden und ist in PB ähnlicher Syntax geschrieben.

Vielleicht gibt es ja dann bald ein paar weniger Threads zum Thema :lol:

Beispiele, Readme und include sind im Paket

Features
-beliebige Vielecke erstellen
-drehen und verschieben
-schnelle Kollisionsprüfung zwischen den Vielecken
-PB ähnliche Syntax
-linux und windows kompatibel, 64bit noch nicht geprüft
-neu: erstellt Vieleck/Hitbox aus Sprite

Download: http://wwwhomes.uni-bielefeld.de/ddiffe ... lision.zip

Einfaches und gut verständliches Beispiel
Bild

Sandbox editor:
Bild

Performance check:
Bild

Funktionsweise werde ich vielleicht mal noch nachreichen, falls es wen interessiert.
Zuletzt geändert von gnasen am 04.02.2011 01:11, insgesamt 4-mal geändert.
pb 4.51
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Auch wenn es vllt "Krümelkackerei" ist, möchte ich trotzdem ein paar Hinweise geben, bzg. der Procedure : _col_check_line

Du kannst bei Parallelen Linien nicht davon ausgehen das sie sich nicht schneiden,
Debug _col_check_line(0,0,10,10,10,10,20,20)
Diese Beiden linen schneiden sich genau in 10,10

Einfach die eine Linie "schräg" zu machen weil x1 und x2 gleich sind, führt auch zu fehlern:
Debug _col_check_line(0,0,0,10,1,10,1,0)
diese Beiden Linien liegen parallel neben einander, werden aber durch deine "sicherheit" zu einem Kreuz.

Ich habe selber schon LineLine-Collisionen geschrieben deswegen weiß ich wo es zu problemen kommt...


Habe deine beispiele getesten, laufen Bugfrei (innerhalb der Textzeit), Gute Arbeit :allright:

EDIT: Habe dir mal n PN zur deinem Beitrag geschickt!
Zuletzt geändert von STARGÅTE am 09.03.2009 23:18, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

ich gebs zu, in der Prozedur habe ich gepfuscht, da sonst unter dem Bruchstrich Null rauskommt. Die Abweichung ist glücklicherweise vernachlässigbar, aber unschön ist die Lösung.

Falls du eine schönere Umsetzung für Linienkollision hast, immer her damit ;)
pb 4.51
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Habe den neuen Kollisionscheck eingebaut und noch mal einiges am Gesamtablauf optimieren können.
Gerade wenn keine Kollision stattfindet hat sich die Geschwindigkeit für den Vergleich drastisch erhöht.

Freiwillige Tester vor :wink:

neuer Download
siehe ersten Post

neuer speedcheck
Bild
pb 4.51
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Beitrag von kswb73 »

Ächz. Der Debugger macht dein Programm voll langsam. Bei "example_preformance.pb" war das Programm etwa 25* schneller ohne Debugger. Das ist doch nicht normal oder?
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

kswb73 hat geschrieben:Ächz. Der Debugger macht dein Programm voll langsam. Bei "example_preformance.pb" war das Programm etwa 25* schneller ohne Debugger. Das ist doch nicht normal oder?
:?: für SpeedTests muss man IMMER der debugger ausschalten, sonst besitzen die keine Aussagekraft.
das fertige Produkt soll schließlich auch ohne Debugger laufen.

wie viel langsamer ein Programm mit Debugger ist, hängt von mannigfaltigen Faktoren ab.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

auf Anfrage eines Users habe ich eine Funktion hinzugefügt, mit der man aus einem Sprite ein Kollisionsobjekt erstellen kann. Dies erleichtert die Arbeit mit Sprites ungemein.

col_import(sprite,transcolor,gridsize)

lautet der neue Aufruf. Download ist aktualisiert.

Edit: Zoom/Rotate hinzugefügt
pb 4.51
Antworten