Billiard-Physik
Übersicht

![]() |
N0XBetreff: Billiard-Physik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey!
Ich schlage mir seit gestern schon den Kopf herum, wie ich eine gute Billiard-Physik hinbekomme. Wie soll ich aus der Stoßkraft die Rotation und Geschwindigkeit der Kugel hinbekommen, ganz zu schweigen die Kollision und Kraftübertragung auf die angestoßene Kugel? Ich bräuchte dringend einen Ansatz! Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht geht es mit einer Physikengine? | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die will ich ja selbstmachen. | ||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Les' dir die Grundlagen an: Impuls | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und viel Spaß beim Verstehen ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, dann doch lieber keine eigene Physik-Engine ![]() Kann mir jemand eine gute empfehlen? (nach Möglichkeit kostenlos) |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tokamak oder Devil's Physic
Links im Scene Archiv |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm... Ich hab mich nocht nicht so mit Physik Engines beschäftigt, aber ich glaube es ist im allgemeinen besser eine selbst zu schreiben. Dann weiß man auch was sie kann.
Und das wegen dem Impuls, das stimmt schon und ich glaube auch, dass du dir das selbst mit ner fremden Physik Engine in den Kopf hämmern musst.... Lg, M0rgenstern |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso keine fremde? Es ist viel einfacher. Versuch du doch mal eine selbst zu schreiben... Da muss man sich mit vielen Formeln herumschlagen und am Ende kann sie grad mal halb so viel, wie eine professionelle. Und sie ist 10x so langsam. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, okay, stimmt auch wieder. Wie gesagt, hab mich noch nie mit beschäftigt....
Das mit der Stoßkraft ist übrigens das geringere Problem denke ich... Da dürfte sich die Stoßkraft bzw Geschwindigkeit in etwa 1 zu 1 auf die Kugel übertragen, nur so nebenbei... Lg, M0rgenstern |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine Physikengine für Kugeln (die wohl auch noch alle gleichgross und gleichschwer sind) ist relativ einfach selber zu schreiben und auch die Kollision ist sehr einfach zu berechnen. Ausserdem hast du bei einem Billardspiel ja nur zwei Dimensionen, die du berücksichtigen musst; die Kugeln bewegen sich ja nur auf dem Tisch und können sich in der Höhe nicht bewegen.
Wenn man eine fremde Physikengine nimmt, hat man dann Probleme damit, dass die Kugeln sich dann auch auf der Y - Achse frei bewegen können, was bei einem Billardspiel ja nicht passieren sollte. Für dieses Projekt würde ich empfehlen, etwas eigenes zu schreiben, da ein Billardspiel ja nur gleichschwere Kugeln und eine rechteckige Spielfläche besitzt, das Programm also noch relativ simpel bleibt; ansonsten muss man sich halt mit einer fremden Physikengine rumschlagen, die nicht immer das tut, was man eigentlich will ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe selbst auch eine geschrieben, für ein 3D Billardspiel, allerdings habe ich die Y-Achse vernachlässigt, also spielte sich das ganze auf einer Ebene ab. Es ist wirklich nicht allzu schwer.
Ganz besonders diese Grafik war dabei sehr nützlich. (entnommen aus http://de.wikipedia.org/wiki/S...8Physik%29, auch sehr nützlich) |
||
Starfare: Worklog, Website (download) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, danke Leute!
Ich schreibe mir dann doch eine Engine selbst. Jetzt 'hab ich auch schon mein erstes Problem. Ich 'hab meine Kugeln ja alle in Types, wenn jetzt die weiße Kugel mit irgendeiner anderen kollidiert, wie bekomme ich dann raus mit welcher sie kollidiert? Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Verschachtelte For Each Schleifen. Darin rechnest du den Abstand der Kugeln aus und stellst fest, ob die Distanz Kleiner/Gleich den 2-Radien zusammengezählt (bzw sofern, was ich bei Billard erwarte, die Kugeln gleichgroß sind, der Durchmesser einer Kugel) ist. | ||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist das nicht viel tu kompliziert und aufwendig?
Geht das nicht mit einem Befehl? Ich hab ja einen Type (Type Kugel) In denen sind alle Kugeln 1-15 + Weiße. Jetzt kollidiert die Weiße mit der 2. Aber wie findet mein Spiel raus das sie mit der 2 kollidiert und nicht mit anderen oder gar mit sich selbst? (sind ja alle ein Type) |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For K1.Kugel=Each Kugel
For K2.Kugel=Each Kugel If Handle(K1)<>Handle(K2) Then Distanz ausrechnen (je nach 2D oder 3D Pythagoras mit 3D Koordinaten oder 2D) If D#<2*R# Then Kollision Endif Next Next Kompliziert?? Die Weiße zählt ja wie alle anderen zu ganz "normalen" Kugeln. Sie ist halt nur die einzige, die aktiv bewegt werden kann und ein Foul eintritt, sobald sie versenkt wird. Diese Extraregeln würde ich persönlich danach seperat machen. |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Satz des Pythagoras?
Hm.. bin jetzt nicht der Beste in Mathe, aber geht das nicht auch einfach mit EntityDistance? |
||
![]() |
Cireva |
![]() Antworten mit Zitat ![]() |
---|---|---|
das hat nichts mit dem satz von phytagoras zu tun...
mit der schleife überprüft man einfach, ob bei einer kugel der abstand mit einer anderen kleiner als der radius von beiden ist. und wenn er kleiner oder gleich ist berühren sich die kugeln halt |
||
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also setz ich für D#, EntityDistance(weißekugel\mesh,k1\mesh) ein und für R# den Radius von den Kugeln? (sind ja alle gleich groß)
*verwirrt* ![]() |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
... um die distanz zu kriegen braucht man den satz des pythagoras aber.
entitydistance geht zwar, macht aber nichts anderes... PS: für alle die den satz des pythagoras nicht kennen: Code: [AUSKLAPPEN] c^2=a^2+b^2
-> distanz=sqr((x1-x2)^2+(y1-y2)^2) und wenn diese distanz zwischen den kugelmittelpunkten kleiner ist als der durchmesser einer kugel (= 2mal den Radius), dann hat man eine kollision. HUSSAY! gl, hf |
||
Diese Signatur ist leer. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group