Circle Physic Engine Userlib
Re: Circle Physic Engine Userlib
Soweit ich das mitbekommen habe gibs in der Physik Luftreibung, somit hält eine Objekt irgendwann seine Geschwindigkeit wenn sich Anziehungskraft und Reibungskraft sich aufheben.
ggf. muss du einfach nur die Reibung auf 0 setzen.
Die Rotation von Objekten wird vermutlich noch kommen ...
Zunächst werde ich mich am WE versuchen das Include von ARRAY -> LIST umzuschreiben ...
Wenn oh... well?! dann damit zufrieden ist gehts weiter ...
Zum Beispiel könnte man dann noch ein Medium einführen, welches "hinter" den Objekten gelegt wird, und somit die Bewegung verändert. -> Vakuum, Luft, Wasser, Öl, Honig ...
Deine Erkenntnisse zu Rotation wären bestimmt nützlich,
ich selber hatte mich immer schwer getan das genaue Verhältnis zu bestimmen
wie sich die Energie die ein Körper bekommt (Stoß)
in translation und rotation aufteilt ...
ggf. muss du einfach nur die Reibung auf 0 setzen.
Die Rotation von Objekten wird vermutlich noch kommen ...
Zunächst werde ich mich am WE versuchen das Include von ARRAY -> LIST umzuschreiben ...
Wenn oh... well?! dann damit zufrieden ist gehts weiter ...
Zum Beispiel könnte man dann noch ein Medium einführen, welches "hinter" den Objekten gelegt wird, und somit die Bewegung verändert. -> Vakuum, Luft, Wasser, Öl, Honig ...
Deine Erkenntnisse zu Rotation wären bestimmt nützlich,
ich selber hatte mich immer schwer getan das genaue Verhältnis zu bestimmen
wie sich die Energie die ein Körper bekommt (Stoß)
in translation und rotation aufteilt ...
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Re: Circle Physic Engine Userlib
Hi,
diese Funktionen sind in Chipmunk (version 5.3.1) gut integriert. Damit beschäftigt sich ja Dr.Shrek. Man muss "nur" den Code in PB umsetzen. Ich habe aber auch ein paar Codes zu diesme Thema gefunden. Sobald ich ein paar Funktionne übersetzt habe schreibe ich hier ...
Gruß Michael
diese Funktionen sind in Chipmunk (version 5.3.1) gut integriert. Damit beschäftigt sich ja Dr.Shrek. Man muss "nur" den Code in PB umsetzen. Ich habe aber auch ein paar Codes zu diesme Thema gefunden. Sobald ich ein paar Funktionne übersetzt habe schreibe ich hier ...
Gruß Michael
Working on
- LibSGD - MP3D Engine - 


- oh... well?!
- Beiträge: 98
- Registriert: 21.07.2010 10:46
- Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE
Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)
Re: Circle Physic Engine Userlib
nbisschen Arbeit wollt ich euch ja auch noch überlassen...STARGÅTE hat geschrieben:Die Rotation von Objekten wird vermutlich noch kommen ...

Also Drehung (momentum) gibt noch nich bei den Objekten und Lufwiederstand und Gravitation sind wie gesagt veränderbar.
Z.B. kann man auch Gravitation nach links oder oben laufen lassen. Jedes Objekt hat seine eigene Gravitation (genaugenommen Beschleunigung) welche in der Structur "a" genannt ist. Bei erstellen eines Particles wird die Beschleunigung gleich der Gravitation gesetzt. Durch änderung der Beschleunigung eines Particels kann man Beispielsweise Luftballongs (wie im testprogramm ) erstellen.
Re: Circle Physic Engine Userlib
Stimmt. "Nur" brauchts auch Zeit...und Zeit ist grad mal wieder nicht über.mpz hat geschrieben:...diese Funktionen sind in Chipmunk (version 5.3.1) gut integriert. Damit beschäftigt sich ja Dr.Shrek. Man muss "nur" den Code in PB umsetzen.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Re: Circle Physic Engine Userlib
So von mir nun erst mal die Übersetzung des Codes von Array zu LinkedList ...
Spart ein paar Prozeduren und ist an der einen oder anderen stellen auch schneller.
CircleVerletPhysics.rar
Spart ein paar Prozeduren und ist an der einen oder anderen stellen auch schneller.
CircleVerletPhysics.rar
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- oh... well?!
- Beiträge: 98
- Registriert: 21.07.2010 10:46
- Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE
Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)
Re: Circle Physic Engine Userlib
weiß nich ob der Threat noch mit Interesse verfolgt wird.
hier mal nen Update :
http://www.xup.in/dl,82663857/CircleVer ... cs0.1.rar/
Neues:
-Die Geschwindikeit wird jetzt auch in iterrations-steps aktualisiert, somit ist es wesentlich schwerer für Körper sich gegenseitig bei hoher Geschwindigkeit zu durchdringen.
-Leitungsfähigkeit ist um ca 25% gestiegen
-Es gibt eine Freeze Procedur, welche Particlegruppen die lange untätig rumliegen freezed, also aus der Rechenschleife nimmt um Leitung einzusparen. Die Procedure selbst braucht leider auch ein wenig Leistung. Mann kann sie aber einfach aus der CalcStep()-Procedure auskommentiern falls sie nicht benötigt wird.
Was ich vor habe:
-eine Particle-Constraint-Collision. Dammit könnten dann auch Rigid-Bodies erstellt werden
jo, das wars. Testprogramm wurde auch aktualisiert.
Würd mich natürlich freuen wenn das Script mal ein nem kleinen Spiel eingebunden werden würde.
hier mal nen Update :
http://www.xup.in/dl,82663857/CircleVer ... cs0.1.rar/
Neues:
-Die Geschwindikeit wird jetzt auch in iterrations-steps aktualisiert, somit ist es wesentlich schwerer für Körper sich gegenseitig bei hoher Geschwindigkeit zu durchdringen.
-Leitungsfähigkeit ist um ca 25% gestiegen
-Es gibt eine Freeze Procedur, welche Particlegruppen die lange untätig rumliegen freezed, also aus der Rechenschleife nimmt um Leitung einzusparen. Die Procedure selbst braucht leider auch ein wenig Leistung. Mann kann sie aber einfach aus der CalcStep()-Procedure auskommentiern falls sie nicht benötigt wird.
Was ich vor habe:
-eine Particle-Constraint-Collision. Dammit könnten dann auch Rigid-Bodies erstellt werden
jo, das wars. Testprogramm wurde auch aktualisiert.
Würd mich natürlich freuen wenn das Script mal ein nem kleinen Spiel eingebunden werden würde.
Zuletzt geändert von oh... well?! am 12.05.2011 21:31, insgesamt 2-mal geändert.
Re: Circle Physic Engine Userlib
Da hast du wohl etwas falsches hochgeladen. Beim Versuch zu kompilieren erscheinen mehrere Fehlermeldungen...
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
- oh... well?!
- Beiträge: 98
- Registriert: 21.07.2010 10:46
- Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE
Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)
Re: Circle Physic Engine Userlib
Oh, hast wohl recht. Hatte "CircleVerletPhysics.pbi" mit der alten "CircleVerletPhysics.pb" verwechselt.
Hab neu hoch geladen und den Link aktualisiert, jetzt müsste es gehen.
Hab neu hoch geladen und den Link aktualisiert, jetzt müsste es gehen.
Re: Circle Physic Engine Userlib
Wenn ich per mittlerer Maustaste sehr viele "Tropfen" erstelle - einfach für 2-3 Sek. an einer Stelle gedrückt lassen - bekomme ich einen IMA in der Include an Zeile 466 (If Constraint()\p1\group\id<>Constraint()\p2\group\id).
Und vielleicht könnte man es noch dahingehend optimieren, dass sehr kleine "weitergereichte Impulse" einfach ignoriert werden?
Und vielleicht könnte man es noch dahingehend optimieren, dass sehr kleine "weitergereichte Impulse" einfach ignoriert werden?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
- oh... well?!
- Beiträge: 98
- Registriert: 21.07.2010 10:46
- Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE
Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)
Re: Circle Physic Engine Userlib
Zu deiner Optimierungsidee (wenn ich sie richtig verstanden habe) :
Es würde für mich nich sehr viel Sinn ergeben, da die eigentliche Rechnerleistung bei der Kollisionsüberprüfung gebraucht wird. Hab ich also schon herrausgefunden das ein kleiner Impulsaustausch stattfinden müsste, ist die Rechnerleistung diesen auch durchzuführen praktisch gleich 0. Außerdem könnte eine Außerachtlassung kleiner Impulse dazuführen dass die Particel "zittern" würden, also nur noch große Bewegungen machen und das System nicht mehr zum Stillstand kommt. Das passiert dann auch gerne bei großen gestapelten Particle-Mengen ("stacking"). Trotzdem danke für deine Idee .
Den Error bekomm ich auch. Hab bis jetzt nur absolut keine Ahnung warum, weil es für mich keinen Sinn macht. Also irgendwie liegt der Fehler in der GroupParticle() Procedure. Vielleicht stimmt was mit der Logik einfach nich... wär erfreut wenn ihr da helfen könntet.
zum Erklären:
Die Procedure GroupParticle() soll einfach nur die Particle gruppieren.
Das geschieht wie folgt:
1. Alle Gruppen des letzten Frames werden gelöscht, vorrausgesetzt die Gruppe ist nicht "gefreezed" worden.
2. Für alle Particle die nun keine Gruppe besitzten wird eine neue Gruppe erstellt
3. Aus den Daten der CollisionsRemark() Liste (dort sind alle Kollisionen (oder fast Kollisionen) der aktuellen Kollisionsrutine gespeichert) werden die Particlegruppen zusammengeführt, welche sich berrühren oder sich sehr nahe sind.
4. nun werden alle Gruppen zusammengeführt, die mit Constraints verbunden sind.
Die Gruppierung wird für die Freeze() Procedure benötigt, da man Particel, die miteinander interargieren nur als Gruppe freezen kann.
Wenn jemand ne bessere/einfachere/leistungsfähigere Idee hat kann er sie gerne mitteilen. Aber was bei dem was ich so gelesen hab wird das etwa so auch in anderen Physik-Engines gemacht.
Es würde für mich nich sehr viel Sinn ergeben, da die eigentliche Rechnerleistung bei der Kollisionsüberprüfung gebraucht wird. Hab ich also schon herrausgefunden das ein kleiner Impulsaustausch stattfinden müsste, ist die Rechnerleistung diesen auch durchzuführen praktisch gleich 0. Außerdem könnte eine Außerachtlassung kleiner Impulse dazuführen dass die Particel "zittern" würden, also nur noch große Bewegungen machen und das System nicht mehr zum Stillstand kommt. Das passiert dann auch gerne bei großen gestapelten Particle-Mengen ("stacking"). Trotzdem danke für deine Idee .
Den Error bekomm ich auch. Hab bis jetzt nur absolut keine Ahnung warum, weil es für mich keinen Sinn macht. Also irgendwie liegt der Fehler in der GroupParticle() Procedure. Vielleicht stimmt was mit der Logik einfach nich... wär erfreut wenn ihr da helfen könntet.
zum Erklären:
Die Procedure GroupParticle() soll einfach nur die Particle gruppieren.
Das geschieht wie folgt:
1. Alle Gruppen des letzten Frames werden gelöscht, vorrausgesetzt die Gruppe ist nicht "gefreezed" worden.
2. Für alle Particle die nun keine Gruppe besitzten wird eine neue Gruppe erstellt
3. Aus den Daten der CollisionsRemark() Liste (dort sind alle Kollisionen (oder fast Kollisionen) der aktuellen Kollisionsrutine gespeichert) werden die Particlegruppen zusammengeführt, welche sich berrühren oder sich sehr nahe sind.
4. nun werden alle Gruppen zusammengeführt, die mit Constraints verbunden sind.
Die Gruppierung wird für die Freeze() Procedure benötigt, da man Particel, die miteinander interargieren nur als Gruppe freezen kann.
Wenn jemand ne bessere/einfachere/leistungsfähigere Idee hat kann er sie gerne mitteilen. Aber was bei dem was ich so gelesen hab wird das etwa so auch in anderen Physik-Engines gemacht.