Billiard-Physik

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

N0X

Betreff: Billiard-Physik

BeitragFr, Jul 31, 2009 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Die will ich ja selbstmachen.
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragFr, Jul 31, 2009 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Nicdel

BeitragFr, Jul 31, 2009 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Und viel Spaß beim Verstehen Very Happy
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

BeitragFr, Jul 31, 2009 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann doch lieber keine eigene Physik-Engine Rolling Eyes
Kann mir jemand eine gute empfehlen? (nach Möglichkeit kostenlos)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

skey-z

BeitragFr, Jul 31, 2009 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Tokamak oder Devil's Physic

Links im Scene Archiv
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

M0rgenstern

BeitragFr, Jul 31, 2009 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Razz
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

BeitragFr, Jul 31, 2009 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Satz des Pythagoras?
Hm.. bin jetzt nicht der Beste in Mathe, aber geht das nicht auch einfach mit EntityDistance?

Cireva

BeitragFr, Jul 31, 2009 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 31, 2009 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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* Confused
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

darth

BeitragFr, Jul 31, 2009 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
... 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.

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group