Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [erledigt] Ball rollt und hält nicht an - Reibung (https://www.delphipraxis.net/64206-%5Berledigt%5D-ball-rollt-und-haelt-nicht-reibung.html)

Airblader 28. Feb 2006 21:14


[erledigt] Ball rollt und hält nicht an - Reibung
 
Hi ;)
Ich habe hier grade ein sehr nerviges Problem...

Es geht darum, dass Bälle (Sollen später mal Snookerbälle präsentieren ;) ) auf einem Tisch rollen.
Logischerweise verlieren sie dabei Geschwindigkeit durch die Bodenreibung.
Deshalb multipliziere ich den Bewegungsvektor in jedem Rechenschritt mit einem Reibungsfaktor, den ich momentan so auf ~0.995 habe.

Das Problem:
Die Kugel wird zwar langsam, aber wenn man denkt, sie steht, rollt sie noch ne Weile im Minitempo weiter (anfangs so jede 1-2 Sekunden noch ein Pixelchen).

Darum meine Frage:
Die Geschwindigkeitsabnahme muss doch - ein ebener Tisch vorausgesetzt - linear ablaufen. Doch wie kann ich dieses Problem umgehen?
Ich kann zwar einfach ab einer gewissen Geschw. sagen, der neue Bewegungsvektor ist 0, aber das klingt in meinen Ohren noch irgendwie unsauber.

Jemand eine Idee?

MfG, air

Nikolas 28. Feb 2006 21:22

Re: Ball rollt...und rollt...und rollt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Deshalb multipliziere ich den Bewegungsvektor in jedem Rechenschritt mit einem Reibungsfaktor, den ich momentan so auf ~0.995 habe.
Zitat:

Die Geschwindigkeitsabnahme muss doch - ein ebener Tisch vorausgesetzt - linear ablaufen.
Das widerspricht sich. Wenn du bei jedem Zeitsschritt den neuen Wert errechnest, indem du den alten mit 0,995 multiplizierst, simulierst du einen exponentiellen Zerfall und die Kugel wird nie zu Ruhe kommen.
So wie ich es verstanden habe, geht es hier nur darum, eine einsame Kugel zu simulieren. Mit der Gleichung für die Reibungseenergie (W=Weg*Reibuungskraft) und der für kinetische Energie kannst du einfach analytisch den Zielpunkt berechnen. Wenn Kugeln im Weg liegen, kannst du einfach ausrechnen, wann die Kugeln sich treffen, und rechne dann über die Gleichungen die Geschwindigkeit an diesem Ort aus.

Für die Kollision könnte dir ein Programm helfen, dass ich letztes Jahr für die zweite Runde des BWINF geschrieben habe:

Airblader 28. Feb 2006 21:30

Re: Ball rollt...und rollt...und rollt
 
Ups...stimmt. War wohl ein Denkfehler, ist aber auch spät.

Die Kollision etc. habe ich ja alles, es geht hier nur um die Abnahme.
Vorberechnen geht auch nicht, es soll ja Echtzeitsimuliert werden ;)

*ratter ratter* Also muss ich den Bewegungsvektor per Subtraktion verkleinern.
Muss ich nur nen geeigneten Wert finden...allerdings würde das ja auch recht unrealistisch werden.

Gibts da evtl. Werte für sowas?

air

Edit:
Narf, das Problem mit den negativen Werten kommt natürlich dazu ;)
Momentan habe ich es zwar hinbekommen (Schätzwert für die Reibung), aber ob das so ganz sauber ist.
Ich überprüfe erst, ob der Wert größer oder kleiner 0 ist und je nachdem subtrahiere oder addiere ich den Reibungsfaktor.
Ist der Wert innerhalb gewisser Grenzen nahe an 0, so setze ich ihn direkt auf 0 (damit er nicht so ganz leicht zittert).

Nikolas 28. Feb 2006 21:49

Re: Ball rollt...und rollt...und rollt
 
Was du natürlich auch berücksichtigen musst, ist der Drehimpuls, den die Kugel hat. Je nachdem, wie groß der ist, und wie sich die Kugel dreht, musst du dann auch bei Energieüberlegungen diese Energie betrachten.
Wenn das aber ein halbwegs realistisches Snooker werden soll, solltest du von Anfang an genau rechnen und dann die Ergebnisse auf dem Bildschirm anzeigen lassen. Wenn du hier versuchst, so etwas zu simulieren, wirst du später vor dem Problem stehen, dass du die Zeitintervalle, in denen du den Zustand der Kugeln bestimmst, gegen Null laufen lassen musst und das stelle ich mir als deutlich schwieriger vor, als die genauen Gleichungen hinzuschreiben und die dann Lösen zu lassen.

Für solche Probleme wirst du beim Physiker-Board sicherlich Hilfe finden.

Airblader 28. Feb 2006 21:59

Re: Ball rollt...und rollt...und rollt
 
Dass ich auf Timebased Movement umstellen muss, ist mir eig. schon auch klar, sonst hätte es ja so oder so keinen Sinn ;)
Danke jedenfalls mal für den Link :) Für heute mach ich erstmal Schluss - jetzt kommt schließlich Snooker ;)

Aber werde dann mal im Board nachfragen.

air

Luckie 28. Feb 2006 22:10

Re: Ball rollt...und rollt...und rollt
 
Du bist nun schon über ein Jahr dabei, langsam solltest du wissen, das wir hier aussagekräftige Threadtitel wünschen. :?

Airblader 28. Feb 2006 22:17

Re: Ball rollt...und rollt...und rollt
 
Zitat:

Zitat von Luckie
Du bist nun schon über ein Jahr dabei, langsam solltest du wissen, das wir hier aussagekräftige Threadtitel wünschen. :?

Entschuldige, aber ich denke, dass trifft das Thema doch auf den Punkt? :gruebel:
Jedenfalls habe ich ja nicht "Hilfe habe ein Problem" geschrieben ;)

Aber naja...wenn du das nicht für aussagekräftig genug hälst, denk ich mir eben was besseres aus ;)
Anfangs habe ich ja noch nicht gewusst, warum er nicht anhält :)

air

Luckie 28. Feb 2006 22:31

Re: [erledigt] Ball rollt und hält nicht an - Reibung
 
Simulation einer rollenden Billardkugel.

Airblader 28. Feb 2006 22:40

Re: [erledigt] Ball rollt und hält nicht an - Reibung
 
Zitat:

Zitat von Luckie
Simulation einer rollenden Billardkugel.

Nunja, eine rollende Kugel und ein rollender Ball sind schon ziemlich das selbe.
Und Billard ist nicht Snooker, aber das ist Nebensache ;)

air

Luckie 28. Feb 2006 22:50

Re: [erledigt] Ball rollt und hält nicht an - Reibung
 
Ächtz. Wer kennt schon Snooker? Und ob nun eine Billardkugel rollt oder ein Snookerball, ist für das Problem absolut unerheblich. Eine Bild rollende Billardkugel ist aber wesentlich vertrauter. So, jetzt aber genug Offtopic.


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