Schwerkraft

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

KnorxThieus

Betreff: Schwerkraft

BeitragMi, Jun 26, 2013 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

für einen simplen Bildschirmschoner lasse ich Kugeln umherhüpfen, wie bei Pingpong, bloß mit Schwerkraft. Die Kugeln sollen also, wenn die Y-Richtung nach unten geht (positiv ist), langsam runter sinken. Dafür habe ich geschrieben:
BlitzBasic: [AUSKLAPPEN]
If p\speedy > 0
p\speedy = p\speedy * 1.1
p\gravc = p\gravc + 1 ;gravc steht für gravcounter, also wie oft er schon schneller geworden ist
ElseIf p\speedy < 0 And p\gravc > 0
p\speedy = p\speedy / 1.1
p\gravc = p\gravc - 1
EndIf


Aber jetzt hüpfen meine Kugeln wie auf nem Trampolin!

Ich kenne mich mit Beschleunigung überhaupt noch nicht aus (haben wir in Physik noch nicht gehabt Sad ) und lege auch keinen Wert auf realistische Details (Gewicht der Kugel, Luftwiderstand, Ortsfaktor...). Da mir das alles nichts sagt, habe ich auch andere Threads hier und Wikipediaartikel nicht verstanden.
Kann mir jemand eine einfache Formel oder ein Tutorial (Wissensstand 8. Klasse, letztes Thema Mechanik I) ans Herz legen?

Würde ja auch alles selbst lernen wollen, habe aber nichts auf meinen Grundkenntnissen Basierendes gefunden. Confused

Wäre nett von euch!

Mfg,
KnorxThieus


(Edit: An sich klappt die Geschichte ja jetzt, aber es gibt noch ein Problem beim Richtungswechsel - ich wäre allen sehr dankbar, die mir unter diesem Thread weiterhelfen würden! Very Happy
  • Zuletzt bearbeitet von KnorxThieus am Sa, Nov 22, 2014 18:03, insgesamt 2-mal bearbeitet
 

Kruemelator

BeitragMi, Jun 26, 2013 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Kugel braucht folgende Informationen:
- Position (x,y)
- Geschwindigkeit (x-Richtung,y-Richtung)

Dann brauchst du noch die Beschleunigung (bei uns auf der Erde ist sie z.B. 9,81),
die wird immer von der y-Geschwindigkeit abgezogen, in jedem Durchlauf. Dadurch fällt die Kugel immer schneller.
Die neue Position wird durch alte Position + Geschwindigkeit ermittelt.
 

PhillipK

BeitragMi, Jun 26, 2013 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop, Kruemelnator hats schon gesagt, aber hier nochmal etwas aufgeschlüsselt:

Jedes objekt hat eine bewegungsgeschwindigkeit.

Diese wird im normalfall mit einem vektor ausgedrückt (in 2d: X-Y komponenten reichen aus).

Nun hast du noch eine konstante, die gravitation. Diese ist ein vektor mit x = 0, y = 9.81 zb.

Pro schleifendurchlauf gehst du alle kugeln durch und addierst diese konstante auf die geschwindigkeit die die kugeln haben. Danach addierst du die geschwindigkeit auf die position der kugel.
Wenn du diverse kollisionen unterstützen willst, solltest du - je nach "größe" der geschwindigkeit, ersteinmal ein paar kollisionschecks durchführen.

Beispiel:
Simple line-line kollision zwischen A->B (Kugel und kugel+geschwindigkeit) und den wänden.
Ist eine kollision eingetreten, spiegelst du die geschwindigkeit der kugel anhand einer senkrechten die auf der kollisionsfläche steht (normal der kollisionswand!)
ODer ganz einfach: Bei wand oben/unten spieglst du die Y geschwindigkeit, bei wand links/rechts spiegelst du die X geschwindigkeit.
Als neue position nimmst du zb die position, wo die kollision vorher stattfand

E voila! simple 2d physik.


Ohne kollision ist das ganze eine sache von 5 minuten, solange du weißt wie vektoren zu verstehen sind Smile

Wichtig ist jedenfalls, das du keine abstrakten konstrukte mit "anzahl der additionen der erdanziehungskraft" machst. Das kann nur schiefgehen und/oder ist zu komplex. Eine tatsächliche gravitation auf eine geschwindigkeit draufzurechnen ist da viel verlässlicher.

Ps: Auch keine *1.1 oder /1.1 rechnungen machen - das sieht vielleicht richtig aus, aber irgendwann kommt der punkt, wo sich die kugeln unrealistisch verhalten Smile Addiere einfach pro schleifendurchlauf 9.81 auf die geschwindigkeit Y und spiegel bei einem "abprall" die Y geschwindigkeit (je nachdem wie realisistisch du es haben willst, kannst du hier *0.9 anbringen, um den abprallenergiverlust mit zu simulieren, wird allerdings darin resultieren, das die kugeln irgendwann über den boden zubbeln.)

KnorxThieus

BeitragMi, Jun 26, 2013 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Danke!

Also BlitzBasic: [AUSKLAPPEN]
p\speedy = p\speedy - GRAVACC (1 passt ganz gut, habs grade probiert)
?

Läuft sehr gut! Danke!

MFG!

EDIT: Ach, PhillipK, deines habe ich leider erst jetzt gelesen.

Naja, Bewegung selbst kann ich schon. Was Kollisionen betrifft, die hatte ich eigentlich nicht vor, denn bei 10 Kugeln müssten dann pro Schleife 90 Überprüfungen durchgeführt werden (oder?)
Vektor - das sagt mir nichts, Schwerkraft ist mir aber gelungen.

Und mal 1.1 hatte ich tatsächlich schon gerechnet Embarassed Deshalb hab ich mich auch an euch auch an euch gewandt...

Was die Spiegelung bei der Kollision betrifft - das muss ich noch mal gründlich durchdenken, ich editiere / antworte dann noch mal...

Aber auch dir ein Dankeschön!

EDIT2: Achso, du meintest mit Kollisionen nicht die Kugel zu Kugel, sondern an die Wand? Das hab ich schon - bei eintreten von kollision mit wand einfach speedx = -speedx bzw. Das ganze mit speedy Wink
Version: BlitzPlus / Blitz+
 

PhillipK

BeitragMi, Jun 26, 2013 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja im grunde..

Eine vektor ist ein pfeil.
Dieser hat n verschiedene kompontenten (du brauchst wahrscheinlich nur 2: x,y)

Dieser pfeil wird länger und länger, je mehr du drauf addierst.
Wichtig ist: Du addierst nur vektoren zusammen. Die geschwindigkeit als vektor ausgrückt wäre also:
Eine pfeil in richtung 0x und 9.81y. Dh im prinzip nach oben, aber durch das koordinatensystem von BB ist es "unten" -> erdanziehung.

Die geschwindigkeit der kugeln hingegen ist ein pfeil mit variabler länge. Wenn du sie nach links/rechts bewegen willst, ändert sich diese geschwindigkeit im prinzip nicht. DH sie haben eine statische bewegung nach X oder -X. Der anteil Y wird immer um besagte 9.81 erhöht -> der pfeil ändert seine richtung immer mehr nach unten.
Das ist die typische "Wurfparabel" die man so kennt (werf ne kugel und sie bewegt sich immer schneller nach unten, aber die bewegung von dir weg (-> x) bleibt gleich).

Die kollisionen in einem raum mit festen wänden ist einfach: Vergleiche einfach die differenz der kugeln mit den "positionen" der wände, x und y getrennt. Sind diese kleiner als der radius, musst du, je nach eintretendem fall, die x oder y geschwindigkeit der kugel *-1 rechnen - fertig.

Die kugeln untereinander sind dann auch nur ein weiterer schritt, aber das ist auch erstmal nicht notwendig,
aber ergibt sich auch recht schnell, wenn du dich ein wenig mit dem thema befasst.

Ich für meinen teil kann nun erstmal nicht weiter helfen, weil ich los muss. Bis dann ^^

KnorxThieus

BeitragMi, Jun 26, 2013 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Nochmals vielen Dank!

OK, dann hab ich "Vektor" jetzt wohl grundlegend kapiert. Interessant auch das Beispiel mit der Wurfparabel!
Gut, dass mit den Kollisionen hatte ich schon vorher raus - mit den Wänden.

Ich habe meinen Heidenspaß damit, die Kugeln jetzt abwechselnd von der Decke, dem Boden und den Seitenwänden anzuziehen!!!

Noch ne Zusatzfrage... brauch ich zwar akut nicht, aber wär später ganz nützlich, und man lernt doch immer gern Wink :
Wie kann ich die Kollision bei Wänden / Linien mit beliebigem Winkel realisieren? Brauche ich da Sinus und Cosinus? Und wenn ja wie?
Also mit denen hab ich mit soweit beschäftigt, dass ich ein einfaches Sonnensystem realisieren könnte.

MFG & vielen Dank!
Version: BlitzPlus / Blitz+
 

Kruemelator

BeitragMi, Jun 26, 2013 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Für Kollision gibt es viele Ansätze, z.B, könntest du den geringsten Abstand zwischen der Linie und der Kugel (Punkt) bestimmen. (Begriffe: gerade punkt abstand; skalarprodukt; vektor projektion)

KnorxThieus

BeitragMi, Jun 26, 2013 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist gar nicht nötig. Sie sollen nicht kollidieren.
Wenn doch würde ich wahrscheinlich irgendwie mit Sin & Cos rangehen... naja, erübrigt sich halt.
Version: BlitzPlus / Blitz+

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group