Billard Physik simulieren - HTML5

Billard Physik

Für ein neues Projekt entwickle ich derzeit ein Billardspiel. In diesem Artikel gehe ich auf die Physik ein. Schon mal vorweg, die Kugeln rotieren nicht, es gibt keinen Spin. Das macht den Physik Teil um einiges einfacher.

Aufschlag

Kommen wir direkt zum ersten spezial Fall des unelastischen Stoßes: Der Aufschlag. Vor dem Aufschlag liegen alle Kugeln, außer der weißen, dicht beieinander und bilden ein Dreieck, eine Einheit, ein ganzes. Der Aufschlag löst also eine Kettenreaktion an Stößen aus und gibt jeder Kugel für einen kurzen Moment die initial Kraft. Durch die geringe Reibung, verlieren die Kugeln wenig Energie beim Aufprall.

Die erste Kugel überträgt ihre volle Energie bis zur letzten Kugel und wieder zurück.

Ein interessantes Video zum Thema ist hier zu finden: planet-schule.de - Angestoßen. In diesem Experiment wird überprüft ob es möglich ist die Kraft eines Aufschlags bis zur letzten Kugel in einer Reihe zu übertragen. Die Reihe besteht aus 600 Kugeln.

Kugel gegen Kugel

Vielleicht auch interessant
Coop Modus - Multiplayer Indie Game - Gether
Coop Modus - Multiplayer Indie Game - Gether

Grundlegende Server/Client Logik mit SFML für Gether.

Etwas anders sieht das Ganze aus, wenn zwei einzelne Kugeln aufeinander prallen. Gehen wir hier vom Fall aus, dass eine der Kugeln ruht.

Die weiße Kugel erlebt einen Impuls, fliegt gegen die andere Kugel und tauscht mit ihr die Kräfte. Wir können hier über einen Austausch reden, da die Kugeln alle die selbe Masse und Größe haben. Bei diesem zusammentreffen beeinflussen die minimale Reibung und eventuelle Drehung der Kugel das Resultat, allerdings lassen wir das hier außer Acht.

Treffen die Kugeln mit zwei verschiedenen Geschwindigkeiten aufeinander passiert beim unelastischen Stoß dass selbe wie zuvor. Die Kräfte werden getauscht.

Aufschlagwinkel

Programmiertechnisch ist vermutlich am interessantesten wie wir die Kugeln in die richtige Richtung bewegen, nachdem sie von einer anderen Kugel getroffen wurden. Wie schaffen wir das?

Das ist viel einfacher als man vermutet, alles was wir hierzu brauchen ist atan2 und die Mittelpunkte beider Kugeln.

var a = Math.atan2(ball1.getY() - ball2.getY(), ball1.getX() - ball2.getX());
var dx= Math.cos(a);
var dy= Math.sin(a);

Mit dx und dy können wir nun die Kugel in die richtige Richtung bewegen.

Mehr zum Thema atan2 findet ihr in folgendem Artikel: In Mausrichtung schießen.

Hinterlasse gerne einen Like oder Kommentar (~‾▿‾)~
Name Text