Bernd: Rollende Kugeln simulieren

Hallo,

Ich weiss, das Thema passt nicht direkt in das Gebiet des WWW, dafür entschuldige ich mich.

Ich bin gerade dabei, eine Simulation zu programmieren, die rollende Kugeln darstellt, die aufeinanderprallen und damit ihre Bahnen ändern. Ich weiss, wie ich eine Kollision abfrage, und wie ich die neuen Bahnen und Geschwindigkeiten berechne, aber mein Problem liegt woanders:

Die Positionen der Bälle werden in einem gewissen Zeitintervall (0.005s) berechnet. Und da kann es schon mal vorkommen, dass Bälle, die mit grösserer Geschw. aufeinander aufprallen, im Moment des Berechnes quasi ineinander drin sind. Es passiert wegen der Wahrscheinlichkeit praktisch nie, dass zwei Kugeln im Berechnungsmoment tatsächlich exakt aufeinanderliegen.

Wie kann ich das also steuern, dass ich die Aufprälle im richtigen Moment erkenne? Ich dachte daran, die Positionen der Kugeln zurückzurechnen an die Positionen, an denen sie tatsächlich aufgeprallt sind, und von da an weiterzurechnen. Aber ich weiss nicht wie ich diese Positionen bestimmen kann, denn die Kugeln rollen ja auch selten geradlinig aufeinander und haben verschiedene Geschwindigkeiten.

Ich hoffe, ihr versteht, was ich meine. Sonst versuche ich gerne, es genauer zu erklären.

Danke & Grüsse, Bernd

  1. Hi there,

    vielleicht hilft DIr ja diese Seite http://bioguest.btbs.unimib.it/~brandizi/balls/balls.html weiter.

    Die Positionen der Bälle werden in einem gewissen Zeitintervall (0.005s) berechnet. Und da kann es schon mal vorkommen, dass Bälle, die mit grösserer Geschw. aufeinander aufprallen, im Moment des Berechnes quasi ineinander drin sind.

    Worin genau besteht das Problem? Ich nehme an, daß Du für die Position der Kugeln ohnehin punktförmige Kugeln annimmst, oder? Brauchst Du es so genau, daß Dich die Parallelverschiebung der Bahn nach dem Stoss bei nicht exact zeitrichtigem "Zusammenstoss" stört? In dem Fall sollte eigentlich eine Relation Ort des Zusammenstosses mit dem Kugeldurchmesser weiterhelfen. (Bei Kugeln, die sich nicht verformen ;))

    1. Hi,

      Brauchst Du es so genau, daß Dich die Parallelverschiebung der Bahn nach dem Stoss bei nicht exact zeitrichtigem "Zusammenstoss" stört?

      So ist es ;) Wie schaff ich es, dass es korrekt weiterläuft?

      In dem Fall sollte eigentlich eine Relation Ort des Zusammenstosses mit dem Kugeldurchmesser weiterhelfen. (Bei Kugeln, die sich nicht verformen ;))

      Versteh ich nicht, was soll das heissen?

      Danke, Bernd

      1. Hi there,

        In dem Fall sollte eigentlich eine Relation Ort des Zusammenstosses mit dem Kugeldurchmesser weiterhelfen. (Bei Kugeln, die sich nicht verformen ;))

        Versteh ich nicht, was soll das heissen?

        Naja, ich denke einmal, Du hast einen bestimmten Bereich definiert, indem ein Zusammenstoss stattfinden kann und ich nehme weiters einmal an, daß dieser Bereich in etwa der Durchmesser der Kugeln ist. Wenn Du zum Zeitpunkt des Zusammenstosses feststellen kannst, "wo" die Kugeln zusammengestossen sind und wie weit dieser "Ort" von den Mittelpunkten der Kugeln entfernt ist, dann weisst Du durch Kenntnis des Durchmessers auch den Ort des "tatsächlichen" Zusammenstosses, der Rest sollte sich von alleine ergeben...

        1. Hi,

          Wenn Du zum Zeitpunkt des Zusammenstosses feststellen kannst, "wo" die Kugeln zusammengestossen sind [...] dann weisst Du durch Kenntnis des Durchmessers auch den Ort des "tatsächlichen" Zusammenstosses, der Rest sollte sich von alleine ergeben...

          Nun, das ist mir klar, aber wie finde ich den Ort raus, an dem sie zusammengestossen sind? Das ist ja das Schwierige! Wenn sie linear aufeinander stossen, ist es trivial, aber meine Kugeln schneiden sich so gut wie immer an.

          Gruss

          1. Hallo Freunde des gehobenen Forumsgenusses,

            Nun, das ist mir klar, aber wie finde ich den Ort raus, an dem sie zusammengestossen sind? Das ist ja das Schwierige! Wenn sie linear aufeinander stossen, ist es trivial, aber meine Kugeln schneiden sich so gut wie immer an.

            Sind die Bahnen der Kugeln Geraden oder (sinus|parabel|hyperbel|etc..)-förmig?

            Gruß
            Alexander Brock

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hi,

              Sind die Bahnen der Kugeln Geraden oder (sinus|parabel|hyperbel|etc..)-förmig?

              Es sind gerade Bahnen.

              Gruss

              1. Hallo, Bernd!

                Sind die Bahnen der Kugeln Geraden oder (sinus|parabel|hyperbel|etc..)-förmig?
                Es sind gerade Bahnen.

                aus position1(x,y) und position1(x,y) lässt sich doch sicher der momentane abstand der kugeln zueinander berechnen? beide radien abgezogen und wir haben den abstand.
                nach dem nächsten intervall haben wir die änderung dieses abstandes als differenz zum vorherigen wert.
                damit lässt sich exakt gestimmen, nach wievielen intervallen der zusammenstoss bevorsteht und um wieviel der verbleibende abstand kürzer ist, als die intervallmässige änderung.

                Gruss

                freundl. Grüsse aus Berlin, Raik

                --
                Der IE ist wichtig. Man benötigt ihn, um sich einen Browser zu besorgen.
                Resizeable Textarea 0.1a
                1. Hi Raik,

                  aus position1(x,y) und position1(x,y) lässt sich doch sicher der momentane abstand der kugeln zueinander berechnen? beide radien abgezogen und wir haben den abstand.
                  nach dem nächsten intervall haben wir die änderung dieses abstandes als differenz zum vorherigen wert.
                  damit lässt sich exakt gestimmen, nach wievielen intervallen der zusammenstoss bevorsteht und um wieviel der verbleibende abstand kürzer ist, als die intervallmässige änderung.

                  Das wäre wohl möglich, aber dann müsste ich ja pro Kugel jeweils die Abstände zu allen anderen Kugeln speichern und bei jedem Rechenschritt für alle anderne Kugeln die ganzen Rechnungen vollführen lassen. Ist das nicht etwas viel bei z.B. 20 Kugeln?

                  Ok, einen Versuch ist es Wert.

                  Gruss & Danke

                  1. Hallo, Bernd!

                    Das wäre wohl möglich, aber dann müsste ich ja pro Kugel jeweils die Abstände zu allen anderen Kugeln speichern und bei jedem Rechenschritt für alle anderne Kugeln die ganzen Rechnungen vollführen lassen.

                    du kannst auch die jeweils letzte x/y-position speichern und nach kollision damit den vor b.z.w. nach der kollision zurückgelegten weg berechnen. (2 linien, die durch eine "alte"
                    und eine "neue" x/y-koordinate bestimmt sind und sich kreuzen)

                    freundl. Grüsse aus Berlin, Raik

                    --
                    Der IE ist wichtig. Man benötigt ihn, um sich einen Browser zu besorgen.
                    Resizeable Textarea 0.1a
                  2. Hi,

                    Das wäre wohl möglich, aber dann müsste ich ja pro Kugel jeweils die Abstände zu allen anderen Kugeln speichern und bei jedem Rechenschritt für alle anderne Kugeln die ganzen Rechnungen vollführen lassen. Ist das nicht etwas viel bei z.B. 20 Kugeln?

                    Ja, das ... aehm ... skaliert nicht wirklich, was? ;-)

                    Du koenntest das Gebiet z.B. in kleinere Kaestchen teilen. Es wird dann gespeichert wieviele Kugeln, evt auch mit Vektor in diesen Kaestchen enthalten sind. Jede Kugel kennt ihren eigenen Vektor. Uebertritt eine Kugel eine oder, aufgrund des eigenen Umfanges auch mehrere Grenzen muss lediglich innerhalb dieser Kaestchen gerechnet werden.
                    Je nach Verhaeltniss zwischen Kaestchengroese, Gesamtgroesse und Kugelgroesse gibt es eine minimale Menge an Kugeln in einem Kaestchen und eine maximale. Die Kaestchengroesse ist also so zu waehlen, das moeglichst selten die maximale Menge an Kugeln in einem Kaestchen sich versammeln (es reicht hier die Packungsdichte zu schaetzen, also ein Kaestchen um die Kugeln zu bauen und die dann zu packen). Ich glaube aber, das es da ein riesiges Mittelfeld gibt, wo die Minima eng an den Maxima liegen, deshalb wuerde ich einfach mal ausprobieren anstatt die Analysis zu bemuehen. Obwohl: es waere ja eine schoene Fingeruebung! ;-)
                    Aber gut: die Trigonometrie zur Bestimmung der Vektoren im Reflexionsfall bleibt ja noch >:->

                    so short

                    Christoph Zurnieden

                  3. Hallo Freunde des gehobenen Forumsgenusses,

                    Das wäre wohl möglich, aber dann müsste ich ja pro Kugel jeweils die Abstände zu allen anderen Kugeln speichern und bei jedem Rechenschritt für alle anderne Kugeln die ganzen Rechnungen vollführen lassen. Ist das nicht etwas viel bei z.B. 20 Kugeln?

                    Also die Berechnung der Abstände sollte so skalieren:

                    [latex]n: Anzahl;der;Kugeln[/latex]
                    [latex]u: Aufwand;pro;Berechnung[/latex]
                    [latex]Aufwand = n{n-1\over2}*u = {n^2-n\over2}*u[/latex]

                    Es könnte schlimmer sein, nämlich exponentiell :-)

                    Gruß
                    Alexander Brock

                    --
                    SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
                    http://againsttcpa.com
          2. Hi there,

            Nun, das ist mir klar, aber wie finde ich den Ort raus, an dem sie zusammengestossen sind? Das ist ja das Schwierige! Wenn sie linear aufeinander stossen, ist es trivial, aber meine Kugeln schneiden sich so gut wie immer an.

            Naja, die Winkel erhältst Du doch einfach, wenn Du nicht nur die Orte des Zusammenstosses sondern auch noch die Orte der vorletzten "Messung" vor dem Zusammenstoss berücksichtigst. Das ist ja eigentlich auch trivial, oder bin ich da dejenige mit den Tomaten auf den Augen???

  2. Hallo Bernd

    Ich nehme mal an, jeder Ball eine derzeitige Position(x,y), eine Richtung(z.B. alpha) und eine Geschwindigkeit(d (Pixel pro gezeichnetes Bild))

    Nun entdeckst Dein Programm, dass zwei Baelle zu nahe gekommen sind (sprich Distanz ist kleiner als 2 mal Radius).

    Falls Du dich etwas auskennst mit Vektorrechnung, dann hast Du das Werkzeug folgendes zu berechnen:

    r1=(x1,y1) Position von Kugel 1, als der Zusammenprall entdeckt wurde
    r2=(x2,y2) Position von Kugel 2
    v1=(vx1,vy1) Bewegungsvektor von Kugel 1 (von einem Bild zum naechsten bewegt sich die Kugel mit vx1 in x-Richtung und mit vy1 in y-Richtung)
    v2=(vx2,vy2) fuer die andere Kugel
    d Summe der Radien

    Nun gilt, dass es einen Ort r1+k*v1 gibt, welcher den Abstand d vom Ort r2+k*v2 hat.

    Du hast also die beiden Gleichungen
    x1 + k* vx1 + d*q           = x2 + k* vx2
    y2 + k* vy1 + d*sqrt(1-q^2) = y2 + k* vy2

    Unbekannt sind k und die Richtung eines Vektor mit Laenge 1, welcher die Verbindung anzeigt, wenn die beiden Kugeln sich treffen.

    Also zwei Gleichungen und zwei Unbekannte. Aber Vorsicht beim Aufloesen: es wird zwei Loesungen geben. Es braucht noch die Einschraenkung, dass k negativ ist. Von Hand geschickt aufloesen und einprogrammieren.

    Na ich weiss ja nicht, ob das hier verstaendlich ist. Ausserdem hoffe ich, dass mir kein Fehler in der Eile eingeschlichen ist. Mit Sicherheit koennte ich es besser erklaeren, wenn ich Dir das mit Papier und Bleistift erklaeren koennte.

    Deshalb: Mach dir eine Skizze und zeichne Dir alle ganz genau auf. Ich wuerde alles schoen mit Vektoren zeichnen.

    Gute Nacht
    Louis

    1. Hi,

      Vielen Dank für die Antwort. Ich mache das ganze Programm über Vektoren, von daher sollte es kein Problem sein.

      Ich habe auch eine Skizze gemacht, aber geometrisch scheint man das nicht lösen zu können (Trigonometrie).

      Ausserdem ist das ganze in 3D, also gibt es noch eine z-Komponente. Ich schaffe es nicht, die Gleichung "geschickt" zu lösen, kannst Du mir da ein wenig helfen?

      Danke, Bernd

      1. Hallo Bernd

        Ich habe auch eine Skizze gemacht, aber geometrisch scheint man das nicht lösen zu können (Trigonometrie).

        Ich wuerde mal sagen mit Vektorrechnung, muss sich das doch schon irgendwie loesen lassen. Wobei ich natuerlich keine Ahnung habe, ob es nicht eine bessere Loesung gaebe.

        Ausserdem ist das ganze in 3D, also gibt es noch eine z-Komponente. Ich schaffe es nicht, die Gleichung "geschickt" zu lösen, kannst Du mir da ein wenig helfen?

        Hm. Es ist Abend spaet und ich muss noch parallel ein paar Messungen laufen lassen und habe daher nicht wirklich Zeit und Lust dazu.. ;)

        Aber es sollte schon gehen:
        Wir haben also folgende vier Gleichungen: (ich hab das plus durch minus ersetzt, weil es der Realitaet naeher kommt und das k dann positiv sein muss.)

        [latex]x_{1} - k\cdot v_{x1} + d\cdot e_{x} = x_{2} - k\cdot v_{x2}[/latex]
        [latex]y_{1} - k\cdot v_{y1} + d\cdot e_{y} = y_{2} - k\cdot v_{y2}[/latex]
        [latex]z_{1} - k\cdot v_{z1} + d\cdot e_{z} = z_{2} - k\cdot v_{z2}[/latex]
        [latex]e_{x}^2+e_{y}^2+e_{z}^2=1[/latex]

        Darin haben wir 4 Unbekannte. Es sollte eigentlich nur noch eine Fleissuebung sein, dies nach k aufzuloesen.
        Am Schluss hast du also eine Formel, wo Du die Koordinaten und Geschwindigkeiten eingibst und k erhaeltst. Mit k kannst Du dann die Punkte berechnen, wo die Kugeln zusammengestossen waren.

        Viel Spass noch! ;)

        Louis

        1. Hi,

          Aber es sollte schon gehen:
          Wir haben also folgende vier Gleichungen: (ich hab das plus durch minus ersetzt, weil es der Realitaet naeher kommt und das k dann positiv sein muss.)

          [latex]x_{1} - k\cdot v_{x1} + d\cdot e_{x} = x_{2} - k\cdot v_{x2}[/latex]
          [latex]y_{1} - k\cdot v_{y1} + d\cdot e_{y} = y_{2} - k\cdot v_{y2}[/latex]
          [latex]z_{1} - k\cdot v_{z1} + d\cdot e_{z} = z_{2} - k\cdot v_{z2}[/latex]
          [latex]e_{x}^2+e_{y}^2+e_{z}^2=1[/latex]

          Darin haben wir 4 Unbekannte. Es sollte eigentlich nur noch eine Fleissuebung sein, dies nach k aufzuloesen.

          Hast du schon mal versucht das aufzulösen? Vergessen wir mal die dritte Dimension, dann hat das Gleichungssystem, wie in deinem vorigen Posting, nur zwei Gleichungen und zwei Unbekannte. Nicht einmal MuPad hat es geschafft, und meni TI89 ebensowenig :o

          1. Hallo Bernd

            Hast du schon mal versucht das aufzulösen? Vergessen wir mal die dritte Dimension, dann hat das Gleichungssystem, wie in deinem vorigen Posting, nur zwei Gleichungen und zwei Unbekannte. Nicht einmal MuPad hat es geschafft, und meni TI89 ebensowenig :o

            Ja ich habe es soeben ausgerechnet. Es ist halt etwas muehsam, aber da musst Du durch und zwar von Hand...

            [latex]x_{1} - k\cdot v_{x1} + d\cdot e_{x} = x_{2} - k\cdot v_{x2}[/latex]
            [latex]y_{1} - k\cdot v_{y1} + d\cdot e_{y} = y_{2} - k\cdot v_{y2}[/latex]
            [latex]e_{x}^2+e_{y}^2=1[/latex]

            Muss umgeformt werden zu einer Gleichung vom Typ:

            [latex]a k^2 + b k + c = 0[/latex]

            damit Du die quadratische Gleichung loesen kannst. Wobei Du von den beiden moeglichen Loesungen einfach die positive Waehlen musst.

            Es gibt halt eine Seite Rechnung, aber versuchs mal.

            Gruss
            Louis

            P.S.: rechne zuerst, wir koennen dann die Loesungen vergleichen. Habe sowieso jetzt gerade keine Zeit sie hier einzutippen.

            1. Hallo nochmals

              [latex]x_{1} - k\cdot v_{x1} + d\cdot e_{x} = x_{2} - k\cdot v_{x2}[/latex]
              [latex]y_{1} - k\cdot v_{y1} + d\cdot e_{y} = y_{2} - k\cdot v_{y2}[/latex]
              [latex]e_{x}^2+e_{y}^2=1[/latex]

              Ich loese letzte Gleichung nach [latex]e_{y}[/latex] auf und setze in die zweite ein. Dann z.B. die erste nach [latex]e_{x}[/latex] aufloesen und in die "neue" zweite einsetzen. Dann haben wir relativ schnell (sortieren und noch quadrieren, um die Wurzel wegzukriegen):

              [latex]d^2-\big[\underbrace{x_2-x_1}_u+k\underbrace{(v_{x1}-v_{x2})}_w\big]^2=
              \big[\underbrace{y_2-y_1}_p+k\underbrace{(v_{y1}-v_{y2})}_q\big]^2[/latex]

              Kurz umformen:
              [latex]k^2(w^2-q^2)+k(2uw-2pq)+d^2-u^2-p^2=0[/latex]

              womit wir eigentlich haben was wir wollen! Einfach in die Formel zur Loesung quadratischer Gleichungen einsetzen.

              Gruss
              Louis

              P.S.: mit etwas anderem Loesungsweg (deshalb die umgekehrten Vorzeichen als, wenn Du obigen Weg nimmst, aber das ist ja egal) bin ich auf folgendes gekommen:

              [latex]a k^2 + b k + c = 0[/latex]

              [latex]a=v_{x1}^2+v_{x2}^2+v_{y1}^2+v_{y2}^2+
              2v_{x1}v_{x2}+2v_{y1}v_{y2}[/latex]
              [latex]b=2\big(-x_1 v_{x1}+x_1 v_{x2}-x_2 v_{x1}-x_2 v_{x2}
              -y_1 v_{y1}+y_1 v_{y2}-y_2 v_{y1}-y_2 v_{y2}\big)[/latex]
              [latex]c=x_1^2+x_2^2+y_1^2+y_2^2-d^2[/latex]

              alles ohne Gewaehr. Rechen und Tippfehler vorbehalten... ;)

              1. Hi,

                Vielen Dank für die Mühen, aber leider scheint absolut keine Formel zu funktionieren, weder meine noch deine :( Ich bekomme zwar für k Zahlen, die sind aber immer zu gross.

                Gruss, Bernd

                1. Hi,

                  Vielen Dank für die Mühen, aber leider scheint absolut keine Formel zu funktionieren, weder meine noch deine :( Ich bekomme zwar für k Zahlen, die sind aber immer zu gross.

                  Ich nehme alles zurück, deine zweite Formel stimmt :D Tausend Dank!

                  Gruss, Bernd

                  1. Hi

                    Ich nehme alles zurück, deine zweite Formel stimmt :D Tausend Dank!

                    Echt?!! Ich hab mich nicht verrechnet? Das ueberrascht mich ja selber :))

                    Darf man eigentlich wissen, was es fuer ein Prograemmchen gibt? Darf man dann das Werk mal bestaunen, an dem man selbst so wesentlich mitgewirkt hat? ;)

                    Gruss
                    Louis

                    1. Hi,

                      Echt?!! Ich hab mich nicht verrechnet? Das ueberrascht mich ja selber :))

                      Ich muss dich leider enttäuschen, doch nicht :O Es hat geklappt, weil beim Testen die eine Kugel keine Geschwindigkeit hatte.

                      Hast Du einen Instant Messenger? Ich weiss, Wissen ist für alle da, aber ab diesem Punkt ist es glaube ich besser, den Rest im Direktgespräch zu machen.

                      Kannst natürlich ne Demo haben, obwohl sie noch nicht viel hergibt ;)

                      Gruss

                      1. Hallo Bernd

                        Ich muss dich leider enttäuschen, doch nicht :O Es hat geklappt, weil beim Testen die eine Kugel keine Geschwindigkeit hatte.

                        Schade

                        Hast Du einen Instant Messenger? Ich weiss, Wissen ist für alle da, aber ab diesem Punkt ist es glaube ich besser, den Rest im Direktgespräch zu machen.

                        Nein ich habe nichts solches und sitze eh an einem Computer, wo ich nicht mal Administratorzugang habe...

                        Kannst natürlich ne Demo haben, obwohl sie noch nicht viel hergibt ;)

                        Gerne (wobei ich mir diese erst morgen anschauen koennte.) Kannst du es online stellen?
                        sonst louis.brandenberger (at) gmail

                        Zur Loesung: Du musst die Loesung schon selber genau ausrechnen. Aber ich behaupte mal, dass es mit meinem Loesungs_weg_ geht.

                        Schau mal, dass Du das Gleichungssystem auf folgende Form nachrechnest:

                        [latex]d^2-\big[\underbrace{x_2-x_1}_u+k\underbrace{(v_{x1}-v_{x2})}_w\big]^2=
                        \big[\underbrace{y_2-y_1}_p+k\underbrace{(v_{y1}-v_{y2})}_q\big]^2[/latex]

                        Damits einfacher wird, mache die Substitionen wie ich mit den Klammern angezeigt hab. Rechne die Quadrate mit der binomischn Formel aus und forme um bis Du die Standardform der quadratischen Gleichung hast, welche z.B. so aussehen koennte:
                        [latex]k^2\underbrace{(w^2-q^2)}_a+k\underbrace{(2uw-2pq)}_b+
                        \underbrace{d^2-u^2-p^2}_c=0[/latex]

                        und dann erhaelst Du die Loesung:

                        [latex]k_{1,2}=\frac{-b\pm \sqrt{b^2-4a}}{2a}[/latex]

                        Wenn Du alles richtig einsetzt und richtig rechnest, dann sollte das wirklich funktionieren. Mehr kann ich Dir leider nicht helfen, Sorry.

                        Schoenen Abend noch
                        Louis

                        1. Hi,

                          Zur Loesung: Du musst die Loesung schon selber genau ausrechnen. Aber ich behaupte mal, dass es mit meinem Loesungs_weg_ geht.

                          Ich weiss, macht ja auch Sinn :)

                          Schau mal, dass Du das Gleichungssystem auf folgende Form nachrechnest:

                          [latex]d^2-\big[\underbrace{x_2-x_1}_u+k\underbrace{(v_{x1}-v_{x2})}_w\big]^2=

                          Wieso d^2-... und nicht d^2*...? Wenn man ne Variable in die Wurzel speisen will, muss man doch danach multiplizieren...

                          Wenn Du alles richtig einsetzt und richtig rechnest, dann sollte das wirklich funktionieren. Mehr kann ich Dir leider nicht helfen, Sorry.

                          Kein Problem ;) Danke vielmals trotzdem, wäre nicht auf den Gedanken gekommen das so zu lösen.

                          1. Hi

                            Wieso d^2-... und nicht d^2*...? Wenn man ne Variable in die Wurzel speisen will, muss man doch danach multiplizieren...

                            Ja, wenn ich das richtig gerechnet habe, komme ich auf das nach einigen Schritten... ;)

                            Wenn ich Gleichung 1 ([latex]e_x=\frac{1}{d}\cdot(\textbf{blabla})[/latex]) in Gleichung 2 einsetze, hab ich dort (fuer [latex]d\cdot e_y=\sqrt{1-e_x^2}[/latex])
                            [latex]\textbf{...}+d\cdot \sqrt{1-\frac{1}{d^2}\cdot(\textbf{blabla})^2}\textbf{...}[/latex]
                            und das gibt, wenn ich das d reinziehe:
                            [latex]\textbf{...}\sqrt{d^2-\frac{d^2}{d^2}\cdot(\textbf{blabla})^2}\textbf{...}[/latex]
                            nun streicht sich ein d^2...

                            Uebrigens: ich schreibe hier nie den ganzen Loesungsweg. Erstens weil ich zu faul bin und zweitens die Gefahr von Tipp und Rechenfehlern meinerseits zu gross ist und drittens, weil Du ein paar Blaetter einen Bleistift nehmen sollst und alles in Seelenruhe selbst durchrechnen musst.

                            Viel Spass ;)

                            1. So, dank Deiner Hilfe hab ich es nun endlich doch noch gepackt!

                              Lösung:

                              a=q^2+w^2
                              b=2*(p*q+w*u)
                              c=p^2+u^2-d^2

                              wobei
                              p=y2-y1
                              q=vy2-vy1
                              w=vx1-vx2
                              u=x1-x2

                              Ciao

            2. Hi,

              P.S.: rechne zuerst, wir koennen dann die Loesungen vergleichen. Habe sowieso jetzt gerade keine Zeit sie hier einzutippen.

              Nun, ich habe eine Lösung, aber die scheint nicht zu stimmen nach meinem Experiment:

              a*k^2+b*k+c

              wobei a=(vy1^2+2*vy1*vy2+vy2^2)+(vx1^2-2*vx1*vx2+vx2^2)
              und b=2*((vy1*y1-vy1*y2+vy2*y1-vy2*y2)-(vx1*x1-vx1*x2-vx2*x1+vx2*x2))
              und c=y1^2-x1^2+2*(x1*x2-y1*y2)+y2^2-x2^2-d^2;

              Achtung: Ich habe im Gleichungssystem das +k*... belassen. Das heisst bei mir ist das negative k das gesuchte.

              Was ist denn deine Lösung?

              Danke, Bernd

              1. Was ist denn deine Lösung?

                Siehe in meinem anderen Posting. Es sieht nicht genau gleich. Es kann aber auch gut sein, dass ich mich verrechnet habe...

                https://forum.selfhtml.org/?t=118150&m=757537

      2. Hallo nochmals

        Ich hab vorhin Deine Frage wien Automat geantwortet. Aber Halt, das macht doch keinen Sinn?!
        Ist es wirklich 3D? Du sprachst doch von _rollenden_ Kugeln? Wenn sie aber rollen, dann ist es ja nur 2D. Oder gibt es verschieden grosse Kugeln??

        Oder fliegen die Kugeln in einem Raum und machen womoeglich noch Parabeln (durch die Erdanziehung)?

        Gruss
        Louis

        1. Hallo,

          Ich hab vorhin Deine Frage wien Automat geantwortet. Aber Halt, das macht doch keinen Sinn?!
          Ist es wirklich 3D? Du sprachst doch von _rollenden_ Kugeln? Wenn sie aber rollen, dann ist es ja nur 2D. Oder gibt es verschieden grosse Kugeln??

          Ja, natürlich hast du Recht, ich hab ein wenig quergedacht, denn sie rollen natürlich 2D, aber das Programm ist halt 3D. Handelt sich um ein Billiardspiel, und ich berücksichtigte schon vorausdenkend die Kugeln, die man anhebt.

          Gruss

    2. Hi,

      Du hast also die beiden Gleichungen
      x1 + k* vx1 + d*q           = x2 + k* vx2
      y2 + k* vy1 + d*sqrt(1-q^2) = y2 + k* vy2

      Das mit der Wurzel verstehe ich nicht ganz, wie läuft das?

      Gruss

      1. Hi,

        Du hast also die beiden Gleichungen
        x1 + k* vx1 + d*q           = x2 + k* vx2
        y2 + k* vy1 + d*sqrt(1-q^2) = y2 + k* vy2

        Das mit der Wurzel verstehe ich nicht ganz, wie läuft das?

        Gruss

      2. Hallo Bernd

        Du hast also die beiden Gleichungen
        x1 + k* vx1 + d*q           = x2 + k* vx2
        y2 + k* vy1 + d*sqrt(1-q^2) = y2 + k* vy2

        Das mit der Wurzel verstehe ich nicht ganz, wie läuft das?

        Also die Punkte

        [latex]\left( \begin{array}{c} x_{1} \ y_{1} \end{array} \right)

        • k\cdot\left( \begin{array}{c} v_{x1} \ v_{y1} \end{array} \right);\textbf{und};\left( \begin{array}{c} x_{2} \ y_{2} \end{array} \right)
        • k\cdot\left( \begin{array}{c} v_{x2} \ v_{y2} \end{array} \right)[/latex]

        haben ja einen Abstand von d. (Das sind die beiden Punkte, wo die Baelle beim "realen" Zusammenstoss waren.)

        Der Vekor den die beiden verbinden hat also die Laenge d. Dieser Vektor kann ich schreiben als
        [latex]\vec d = d\cdot\vec e[/latex],
        wobei [latex]\vec e[/latex] die Laenge 1 hat. Wenn ich also die erste Komponente frei waehle und z.B. q nenne, dann ist die zweite Komponente (nennen wir sie p) gegeben durch [latex]|\vec e|=\sqrt{q^2+p^2}=1[/latex]. Nach p aufloesen und dann kommt raus, was oben steht.

        Gute Nacht

        Louis

  3. Die Positionen der Bälle werden in einem gewissen Zeitintervall (0.005s) berechnet.

    im Moment des Berechnes quasi ineinander drin sind. .

    wie ist das möglich ???? du kannst doch immer nur EINEN ball zu einer zeit berechnen. was soll 0.005s ????

    Wie kann ich das also steuern, dass ich die Aufprälle im richtigen Moment erkenne?

    du machst vermutlich folgendes:
    1. du berechnest für alle bälle eine neue position und verschiebst diese dort hin.
    2. dann ermittelst du wiederum über alle bälle eine kollision.
    3. dann ist es bereits zu spät.

    daher mußt du die struktur ändern:
    in einer schleife einzeln für jeden ball:
    1. eine neue (soll) position errechnen.
    2. (soll) position auf kollision testen.
    3. den ball auf die neue position setzen.