Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Simple 2D Physik (https://www.delphipraxis.net/154213-simple-2d-physik.html)

sportkeks 1. Sep 2010 09:42

Simple 2D Physik
 
Hallo ich habe eine frage zur physik berechnung
undzwar geht es darum wie ich es korrekt berechne wenn Rechtecke miteinander collidieren
das ganze wird von oben gesehen d.h. es wirkt keine schwerkraft sondern nur ein reibungswiederstand der die bewegung langsam abbremmst.
kann mir dort jemand eine simple beispielrechnung zeigen oder kann mir sogar jemand eine fertige und einfach zu bedienende 2d physik engine empfehlen ?
ich habe mir schon einige angesehen aber die meisten sind für mich zu kompliziert aufgebaut und funktionieren von oben nach unten (schwerkraft und so^^)

schonmal danke im vorraus gruß Keks

blackfin 1. Sep 2010 09:54

AW: Simple 2D Physik
 
Zitat:

kann mir sogar jemand eine fertige und einfach zu bedienende 2d physik engine empfehlen
Chipmunk 2D ist ziemlich mächtig.

Nen Delphi-Port gibts hier:
http://www.par-com.net/~paulr/GLScene/chipmunkdemo.zip

Die Muhkuh 1. Sep 2010 10:01

AW: Simple 2D Physik
 
Oder die Newton Physics Engine: http://www.saschawillems.de/?page_id=75

sportkeks 1. Sep 2010 10:20

AW: Simple 2D Physik
 
danke für die schnellen antworten aber ich glaube diese engines sind schon viel zu viel des guten
ich brauche wirklich nur etwas sehr sehr einfaches
das ganze muss am ende über netzwerk laufen und da gillt desto einfacher die engine desto besser lässt sie sich für sowas anpassen.

blackfin 1. Sep 2010 10:22

AW: Simple 2D Physik
 
Beschreib doch mal (eventuell mit einer kleinen Skizze), was für eine Kollision für dich wichtig ist und wie sich die Rechtecke bewegen, dann kann man sicher was finden :)

jfheins 1. Sep 2010 10:32

AW: Simple 2D Physik
 
Eine Skizze wäre echt gut.
Außerdem hab' ich noch ein paar Fragen:
- Wie dürfen sich die Rechtecke bewegen? In einer Ebene müssten sie 3 Freiheitsgrade haben (2 x Translation + 1 x Rotation) - es sei denn sie sind immer an den Achsen orientiert oder sowas.
- Wie sind die Rechtecke in deinem Programm gespeichert? Als Klassen? records?

sportkeks 1. Sep 2010 10:41

AW: Simple 2D Physik
 
eine typische beispiel situation wäre in etwa das:

http://spk2.sp.ohost.de/spkskrempel/simplecollison.jpg

objekt 1 steht, objekt 2 bewegt darauf zu und kollidiert, objekt 1 wird etwas nach links gedreht und wird von objekt 2 ein stück mitgeschoben bis beide zum stillstand kommen
(also beide objekte sind frei beweglich keine festen achsen oder so)

das gleiche muss auch noch so funktionieren das objekt 1 statisch ist und objekt 2 praktisch gegen eine wand fährt.

ja das wars eigl. mehr muss die engine gar nicht können

umso einfacher desto besser wäre es :D

alle objekte sind als klasse in einer Tobjektlist enthalten mit allen informationen die man zur berechnung benötigen wird

Gruß Sportkeks :D

blackfin 1. Sep 2010 10:50

AW: Simple 2D Physik
 
Wenn wie in deiner Skizze das Rechteck 2 auf 1 aufschlägt, soll 1 dann in deiner Engine gedreht werden (Rechteck kippt) oder nur verschoben?

sportkeks 1. Sep 2010 10:55

AW: Simple 2D Physik
 
es wird gedreht (gekippt)
rechteck 2 wird auch etwas von seiner richtung abgebracht

blackfin 1. Sep 2010 11:02

AW: Simple 2D Physik
 
Dann solltest du vielleicht doch lieber ChipMunk oder Newton verwenden :-)
So "simpel" ist das dann gar nicht mehr, da du schon ziemlich viele physikalische Gegebenheiten brauchst:
- Einschlagspunkt, Einschlagsgeschwindigkeit, Kraftvektoren, Masse usw.

Und das ist mit einem kurzen Stück Beispiel-Code definitiv nicht mehr zu demonstrieren / erledigen :D

jfheins 1. Sep 2010 11:06

AW: Simple 2D Physik
 
Also zu den einzelnen Punkten:

:arrow: Kollisionserkennung
Wenn die Zeitintervalle fein genug sind, reicht es zu prüfen ob sich ein Punkt des einen Rechtecks in dem anderen Rechteck befindet und umgekehrt. Ein schwieriger zu verstehendes (aber möglicherweise schneller und/oder sichereres) Verfahren wäre die Minkowski Differenz.

:arrow: Was dann?
Du musst dann mit Impuls und Drallsatz hantieren, und Energieerhaltung kommt auch noch dazu ;) Das wird dann in der Tat etwas komplizierter. Aber nicht unmöglich :mrgreen:

blackfin 1. Sep 2010 11:15

AW: Simple 2D Physik
 
Unmöglich ist gar nix :D
Aber mit "simpel" hat das an sich nicht mehr viel zu tun.
Meiner Meinung nach ist ChipMunk genau das richtige dafür, und die Schwerkraft kannst du dort auch komplett weglassen.
(Das gilt übrigens für alle Physik-Engines: Die Schwerkraft ist eigentlich nichts anderes als eine permanente Kraft bestimmter Grösse auf alle Objekte in eine vorgegebene Richtung, die man aber auch annullieren kann bzw. erst gar nicht einbauen muss :))


Edit:
Folgender Artikel ist für dich als Hintergrundwissen wohl interessant:
http://www.codeproject.com/KB/GDI-pl...Collision.aspx

Aber: Nimm was fertiges. Die Materie einer physikalisch korrekten 2D-Kollisionserkennung ist alles andere als leicht und Engines wie Newton wurden von mehreren Entwicklern auch nicht innerhalb von ein paar Tagen geschrieben.
Physik ist ein klassischer Verwendungszweck für Fremd-Komponenten, das gilt für Hobby-Programmierer noch mehr als für grosse Firmen.
Ich kenne allerdings inzwischen kaum mehr eine Spiele-Firma, die ihre Physik-Engine selbst geschrieben hat (auch für 2D Games, ausser vielleicht ein paar Flash-Games), ganz einfach deswegen, weil die externen Produkte inzwischen ausgereift sind, ziemlich einfach zu implementieren sind und das Selbst-Schreiben einer Physik-Engine zwar nicht unmöglich ist, aber definitiv viel (zu viel?) Zeit in Anspruch nimmt.

sportkeks 1. Sep 2010 16:12

AW: Simple 2D Physik
 
hm nagut denn werd ich mal versuchen ob ich mit der Chipmunk engine klar komm
allerdings bekomm ich beim öffnen der demo gleich die meldung
TGLSceneViewer, TGLViewer, TGLMateriallibarary, TGL Cadencer usw .... wurden nicht gefunden
Wozu gehören diese komponenten und wo bekomm ich diese hier ?

gruß Sportkeks

blackfin 1. Sep 2010 16:21

AW: Simple 2D Physik
 
Die genannten Komponenten gehören zu GLScene.
Allerdings braucht die Chipmunk Engine GLScene nicht zwingend, die Demo benutzt halt GLScene für das Rendering.

sportkeks 2. Sep 2010 17:57

AW: Simple 2D Physik
 
ich habe noch eine andere engine im netz gefunden

http://www.objectifstudio.com/oo_en/page10.html

diese scheint mir nicht so komplex und lässt sich einfach hand haben nach ca 10 min hatte ich mein erstes kleines test programm das funtionierte :D

ok danke leute für eure hilfe

gruß Sportkeks


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:08 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