Diskussion zum Thema Kollision und Reflexion - Elastischer Stoß

  • C#

Es gibt 50 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    naja, hats schon - die Kugeln stossen ja gegeneinander.
    Nur der Lösungs-Ansatz ist komplett anners, quasi pysikalisch. Dort wird ja richtig elastische Verformung simuliert, und Bewegung ergibt sich aus Kräften und Trägheit.

    Hier der Ansatz ist mathematisch, die Bälle sind ideal hart und gleichzeitig ideal elastisch (was ja eiglich Quatsch ist). Und statt den Stoß im Detail nachzubilden werden mathematische Global-Aussagen darüber angewendet.



    Ich hab übrigens im Tut auch auf mein Pong-Tut verwiesen.
    Weil inzwischen habe ich ausgetüftelt, wie man von einer Überlappungs-Situation rückschließt auf den exakten(!!) Kollisions-Punkt kurz zuvor. Unds geht mit versch. Massen und mit Radien.
    Ungenauigkeiten treten nicht mehr auf.
    Ein Mehrfach-Stoss-Problem ist mir noch nicht aufgefallen - wie stellt man das dar, und wie würde es sich auswirken?
    Ich könnt mir vorstellen garnicht, weil egal ist, welche Kollision zuerst gerechnet wird.
    ABer sicher bin ich da nicht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ErfinderDesRades
    Wenn es sich, wie Rod meinte, um eine reine Simulation von elektrischen Kräften handelt (ich vermute jetzt mal, dass er damit Punktladungen meint), dann hat das mit dem Problem hier überhaupt nichts zu tun: Die Bewegung der "Kugeln" entspricht der Interaktion zwischen den Ladungen entsprechend dem Coulombschen Gesetz, welches nichts mit "normalen" Kugeln zu tun hat, da die Punktladungen ja, wie der Name vermuten lässt, Punkte und keine Kugeln/Kreise sind. Mit elastischen Stößen hat das nichts zu tun.

    Außerdem verwechselst du hier den elastischen Stoß mit Elastizität wie bei Gummibällen: Ein idealer elastischer Stoß bedeutet lediglich, dass die Summe der kinetischen Energien der Kugeln vor und nach dem Stoß identisch ist - nicht, dass die Körper "elastisch" seien. Bei diesem idealisierten elastischen Stoß betrachtet man die Kugeln als unverformbar, nicht als "elastisch".

    nafets schrieb:

    Ein idealer elastischer Stoß bedeutet lediglich, dass die Summe der kinetischen Energien der Kugeln vor und nach dem Stoß identisch ist
    Na, genau diese Bedingung ist vom ActiveVb-Teil doch erfüllt.

    (Und dass der Begriff "elastischer Stoß" Elastizität der stossenden Körper nu unbedingt ausschließt - scheint mir recht willkürlich definiert, und sprachlich gradezu paradox.)

    Ansonsten geb ich euch recht: Ein Beitrag, das Problem zu lösen, wie wir es uns hier vorgenommen haben - nämlich rein geometrisch - ist das nicht.
    Allenfalls ein interessanter Seitenblick, welche physikalischen Gesetzmäßigkeiten im Wechselspiel miteinander es im Einzelnen sind, die wir hier ganz abstrakt-mathematisch zu beschreiben versuchen - und wie sie tatsächlich dieselben Bewegungsmuster generieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    dass der Begriff "elastischer Stoß" Elastizität der stossenden Körper nu unbedingt ausschließt - scheint mir recht willkürlich definiert, und sprachlich gradezu paradox

    Bei der Verformung von Körpern wird ein Teil der ursprünglichen Bewegungsenergie für die Verformung aufgewendet - dieser Teil wird teilweise in Wärme und potentiell in permanente Verformung des Körpers umgesetzt. Damit kann es sich nicht um einen vollelastischen Stoß handeln, bei welchem keine Energie verloren geht.

    In diesem Fall ergibt das aber sprachlich wirklich keinen Sinn, da gebe ich dir recht.

    ErfinderDesRades schrieb:

    Ein Mehrfach-Stoss-Problem ist mir noch nicht aufgefallen - wie stellt man das dar, und wie würde es sich auswirken?
    Beim Snooker, wenn die 10 roten Kugeln im Dreieck auf dem Tisch liegen, und dort reingestoßen wird...
    Der Begriff Elastischer Stoß ist in der Festklörperphysik wohl definiert.
    Da gibt es gute mechanische Simulationen. Keine Kugeln, sondern flache Scheiben, und von unten im engen Raster kleine Löcher, wo wohldosiert Luft nach oben geblasen wird, womit die Reibung minimiert wird.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Richtig ist, ich arbeite da mit der Coulombkraft. Allerdings ist es so, dass bei einer realen Kollision ausschließlich diese zum tragen kommt: Wenn 2 Stahlkugeln kollidieren, findet die Kraftübertragung über die Ladung der Elektronen im Festkörper statt. Eine rein mechanische Kollision gibt es eigentlich garnicht.
    Man kann eine solche zwar im Simulationsprogramm darstellen, aber das ist dann künstlich, d.h. man definiert die Kollistion zu einem Zeitpunkt in dem dier Abstand zw. den Festkörpern minimal ist, (also im Bereich von nm) und wendet da die Regeln der Impulsübertragung an: D.h. bei gleichen Massen und beim Zentralen Stoß überträgt man den gesamten Impuls der bewegten Kugel auf die Ruhende, wobei die zunächst bewegte zum stehen kommt. Beim nicht zentralen Stoß wendet man die Regeln aus dem Schulbuch an. Das kann man machen, es ist aber nicht 100% korrekt.
    Der Vorteil bei der Berechnung über die Coulombkraft ist, dass man sich nicht großartig mit der Vektorrechnung auseinandersetzen muß. Das Ergebnis ist letztendlich das Gleiche.
    Problematisch bei der Simulation via Coulombkraft ist die Unschärferelation: Man kann den Kollisionszeitpunkt oder den Ort nicht genau bestimmen.

    Zu deinem Einwand bezüglich Timer1.Enabled ^ 2: Das hat nichts mit Vb3 zu tun. Es ist einfach eine Methode die funktioniert. Sie ist unter VB.Net genauso valide wie unter VB3 oder VB6. Das ursprüngleiche Programm wurde in VB6 geschrieben.

    Zum Stil der Foren: Bei AVB kann es schonmal Diskussionen mit 100 Posts oder mehr geben, aber dafür gibt es einen Threadbaum. Hier bei VB-P komm ich nicht so ganz klar, weil ich den Board-Stil halt nicht gewohnt bin.

    Beste Grüße,
    Vb3-Guru
    @VB3-Guru
    Ich bin zwar kein Physiker, aber bringen wir hier nicht Teilchenphysik, Elektrizitätslehre und Mechanik durcheinander? Wenn man mal davon absieht, dass unsere Billiardkugeln überhaupt gar keine Ladungen besitzen, gilt doch für die Coulombkraft
    $F \propto \frac{1}{r^2}$
    , womit bei der Anwendung auf unsere Billiardkugeln schon Kräfte wirken würden, bevor irgendeine mechanische Interaktion zwischen den Kugeln stattfindet. Zusätzlich ist es, wenn man nur die Coulombkraft betrachtet, möglich, dass die Billiardkugeln mit geringem Kraftaufwand ineinander eindringen können, was ebenfalls nicht der Realität entspricht. Vielleicht laufen auf Teilchenebene irgendwelche Prozesse ab, welche sich durch das Coulombsche Gesetz annähern lassen, ich bezweifle jedoch stark, dass sich das ohne einen gigantischen Aufwand irgendwie auf mechanische Stöße anwenden lässt. Ansonsten könnten wir doch gleich die ganze Mechanik über den Haufen schmeißen.
    ich find das eigenartig, wie du deine Sichtweise mutwillig unnötig einschränkst, und drauf beharrst, das irgendetwas ganz abwegig sei, und man womöglich aus iwelchen Gründen die Mechanik überhäufen müsse - ich gestehe, deinen Ausführungen auch nicht ganz folgen zu können.
    Anstatt sich drüber zu freuen, wie mathematische Axiome auf der einen Seite, und physikalische Gesetze auf der anderen sich wunderbar gegenseitig bestätigen.

    Und mir ist auch ganz egal, wie vb3 Elastizität modelliert, ob mit Coulomb-Kräften oder mit kleinen grünen Luftballons. Elastisch ist, was kinetische Energie speichert und wieder abgibt, in Gegenrichtung.
    @nafets
    Es ist tatsächlich so, dass in der klassischen Mechanik die Kraftübertragung zw. 2 Körpern über die Coulombkraft zustandekommt: Wenn du also eine Kugel auf eine Stahlplatte legst, fällt sie ja nicht durch die Platte durch. Was tatsächlich geschieht ist, dass sich die Elektronen der Kugel und der Stahlplatte so nahe kommen, dass sie sich gegenseitig abstossen. Damit wird die Kugel gewissermaßen in der Schwebe gehalten.
    Auch der Zusammenhalt eines Festkörpers wird ja durch die Coulombkräfte gewährleistet. Ebenso wird ein Wassermolekül ja auch nur durch Coulombkräfet zusammengehalten.

    Jo, man kann eigentlich die gesamte klassische Mechanik über den Haufen werfen. Aber sie ist halt gut etabliert und ganz hilfreich um z.B. die Hebelgesetze zu berechnen oder auch um den Stoß an einer Wand zu simulieren.

    Hier noch ein Link zur Erklärung, warum die Coulombkraft entscheidend in der Mechanik ist und durch welche Kraft eine Kugel die auf eine Stahlplatte fällt, zurückgeworfen wird.

    activevb.de/rubriken/physik/physik.html

    Gruß,
    vb3-Guru

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB3-Guru“ ()

    @VB3-Guru
    Ich weiß, dass auf Teilchenebene die Coulombkraft einen wichtigen Beitrag zur Mechanik liefert - mein Punkt ist, dass man sie hier nicht braucht. (die Coulombkraft lässt sich nicht direkt auf Billiardkugeln anwenden, sondern könnte, soweit ich das beurteilen kann, höchstens die Interaktion zwischen deren Atomen auf Teilchenebene beschreiben)
    Mir geht es in erster Linie darum, dass die Mechanik eine Existenzberechtigung hat: Dank ihr können wir Sachen wie die Coulombkraft bei "großen", ungeladenen Objekten wegabstrahieren und müssen nur das "große Ganze" betrachten, was sich durch wesentlich einfachere Formeln darstellen lässt. (so habe ich das zumindest in meinen Physikvorlesungen an der Uni erklärt bekommen)

    @ErfinderDesRades
    Mein Punkt ist, dass VB3-Guru die Mechanik, welche für diesen Zweck absolut ausreicht, komplett übergehen will, was alles nur verkomplizieren würde. Die Mechanik exisitert genau deswegen, damit man in Fällen wie diesem die ganze Teilchenphysik nicht beachten muss.
    @nafets
    Ich versteh schon was du meinst, aber auch für Billard-Kugeln gilt das oben gesagte. Und bei Verwendung der Coulombkraft wird die ganze Berechnung wesentlich einfacher und keinesfalls komplizierter. Das gilt insbes. für den schiefen Stoß.
    Ich vertsteh auch deine Bedenken, der Ansatz den Stoß über die Coulomkraft zu berechnen ist schon etwas ungewöhnlich. Aber letztendlich muß man die Kräfte zw. den Billard-Kugeln ja irgendwo herkriegen, d.h. man muss den Stoß im mikroskopischen Maßstab betrachten. Wenn mans schulbuchmäßig vorgeht (wie das allgemein üblich ist), unterdrückt man die ganze Wahrheit ;) und verwendet einfach die empirischen Formeln. Aber beim Newton'schen Pendel, wo sich mehrere Kugeln in einer Reihe "berühren", ist es schon ganzschön schwierig den Impuls durch die ganzen Kugeln zu transportieren.

    Und keine Sorge, ich will ja den gewöhnlichen Ansatz nicht madig machen. Ich hab ihn an anderer Stelle auch schon eingesetzt. Ich bin halt von der Plasmaphysik her etwas vorbelastet...

    Also nichts für Ungut und "Use your Imagination" :thumbup:

    VB3-Guru schrieb:

    Es ist einfach eine Methode die funktioniert.
    Und zwar ausschließlich mit Strict Off.
    Ich schubse nun mal keine Entenkücken in die Pfütze, bei mir ist Strict On und Deine Begründung ist suspekt, weil Du nicht garantieren kannst, dass Dir iwo ein Strict-Off-Fehler reingerutscht ist, der nicht beabsichtigt ist.
    In der Festkörperphysik kommt Elektrizität und damit die Coloumb-Kraft nicht vor. Aber ich würde mal glatt behaupten, dass die Aussagen der Festkörperphysik auch ohne Coloumb-Kraft nicht unbedingt falsch sind.
    Wir lassen ja auch die relativistischen Effekte der Kugeln bei hohen Geschwindigkeiten weg sowie Effekte einer Kernverschmelzung bei höheren Stoßgeschwindigkeiten. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @'Rod...
    Es geht doch garnicht um Strict on oder off. Es geht nur um die Aufschrift eines Buttons.

    Zur Festkörperphysik: Selbstverständlich werden alle Atome in einem Festkörper durch die Coulombkräfte zusammengehalten. Ohne dieselbe würden sie einfach auseinanderfallen. Die relativistischen Effekte kann man dann weglassen, wenn die Kugeln nicht relativistisch sind, also bei <0,1% Lichtgeschwindigkeit (z.B. bei Protonen mit 10keV)
    Bei der Kernfusion solltest du mal nachrechnen, welche Geschwindigkeit die Kerne haben müssen, um über den Coulombwall zu kommen. Die nackten Kerne stoßen sich ja aufgrund der Protonenladung zunächst mal ab. Fusionieren können sie erst wenn die Kernkräfte überwiegen. D.h. auch hier spielt die Coulombkraft eine große Rolle.

    Beste Grüße,
    Vb3-Guru

    VB3-Guru schrieb:

    Es geht doch garnicht um Strict on oder off.
    Bei mir schon.


    Ich denke mal, wenn Billiard- oder Snooker-Spieler am Brett stehen, denken die in Einheiten von Festkörperphysik, nicht aber in Coloumb-Kräften.
    Und genau das ist es, was wir hier diskutieren. Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Zitat aus Wikipedia:
    Die auf die Elektronenhülle der regelmäßig angeordneten Atome zurückgehenden Eigenschaften führen zu Bändermodell und Bandstruktur, deren Parameter diverse makroskopische Eigenschaften (Optik usw.) berechenbar machen.
    Siehe de.wikipedia.org/wiki/Festk%C3%B6rperphysik
    In der Festkörperphysik befasst man sich hauptsächlich mit Halbleitern, wobei natürlich die Elektronen eine besondere Rolle spielen.
    Beim Billard haben die Elektronen selbstverständlich beim Stoß die entscheidende Rolle: Sie sind für die Übertragung der Kraft verantwortlich. Ohne Kraft gibts keinen Impulsübertrag.

    Ich bin gerne bereit, den Unterschied zw. dem Stoß ohne Berücksichtigung der Coulombkraft und mit Coulombraft mal in einem kleinen Programm herauszuarbeiten (d.h. ein Vergleich der beiden Methoden in einem Simulationsprogramm).

    Ach so, nun nun noch ein kleiner Scherz am Rande: Arbeiten mit Option Strict ist wie Fahradfahren mit Stützrädchen :P

    Beste Grüße

    VB3-Guru schrieb:

    Arbeiten mit Option Strict ist wie Fahradfahren mit Stützrädchen
    besdeutet, dass alle C-, C++- und C#-Programmierer mit Stützrädern fahren.
    Das schrammt sehr sehr knapp an einer Beleidigung vorbei. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ErfinderDesRades Ich hab mal eben fix Deine PhysicEngine eingebaut, das sieht richtig gut aus.
    Die Test-Stöße mit m1 = m2; 2 m1 = m2; m1 = 2 m2; geht da schon richtig was los.
    Ich werd das ganze noch etwas gerade ziehen und dann posten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Im anderen Thread ist in Post #1 die neue Version angehängt.
    @ErfinderDesRades Danke für Dein Ping-Pong.
    Ich hab mir erlaubt, wieder meine Berechnung der Parallel-Komponente reinzubauen, beide liefern identische Ergebnisse.
    Dein 3-fach-Vektor-Produkt ist dahingehend etwas unschön, dass die erste Multiplikation ein Vector-Vector-Skalarprodukt (Ergebnis Skalar) ist und die zweite ein Vector-Skalar-Produkt (Ergebnis Vector).
    Besser wäre es, wenn das Vector-Vector-Skalarprodukt in Klammern stehen würde, auch wenn das der Compiler richtig gemacht hat.
    Ich denke mal, der Resharper hätte da genölt und das Setzen von Klammern verlangt (hab leider keinen zur Hand zum Testen).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Besser wäre es, wenn das Vector-Vector-Skalarprodukt in Klammern stehen würde, auch wenn das der Compiler richtig gemacht hat.
    Pest - du hast recht.
    Ich hab ja gedacht, trotz ihrer Unterschiedlichkeit seien die Multiplikationen kommutativ, aber jetzt habich ausprobiert durch Setzen von Klammern, und so geklammert

    VB.NET-Quellcode

    1. ' (alle 3 sind Typ Vector)
    2. Dim vColl1 = v1 * (positionDelta * positionDelta)
    kommt wirklich Mist raus
    Also vonne Datentypen her geht das auf - nur das Ergebnis ist falsch.

    ErfinderDesRades schrieb:

    kommutativ
    können sie nicht sein, denn das sind verschiedene Überladungen des *-Operators, also was völlig verschiedenes, für das der Logik halber dasselbe Symbol verwendet wird.
    Unser Mathelehrer hat da bei der Einführung der Vektor-Multiplikationen einen Kreis um das * gemacht, damit wir lernen, das zu unterscheiden.
    Das Produkt Deiner letzten beiden Vektoren ist 1, da positionDelta normiert ist, somit ist vColl1 = v1. In diesem Falle eine Umsonst-Operation.
    Umsonst bitte sorgfältig unterscheiden von Kostenfrei. :thumbsup:
    ======
    Bei Klammersetzung gilt hier:
    In der Klammer steht ein Vector-Vector-Skalarprodukt (Ergebnis Skalar),
    die dann nachrangige Operation ist ein Vector-Skalar-Produkt (Ergebnis Vector).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()