Abprallverhalten eines Balles



  • Naja, du könntest wenn du nen Vektor in X und in Y Richtung hast, einen Resultierenden ausrechnen, über trigonometrische Funktionen!

    Und über diesen Resultierenden könntest du wiederum den Anstieg errechnen, also im Prinzip ne Funktion der der Ball folgt, laut f(x) = mx + n, wobei m der Anstieg und n unwichtig.



  • und wie geht das?



  • Die resultierende Geschwindigkeit errechnen?



  • Du musst nicht mal Winkelfunktionen nehmen, es geht auch der Pytagoras:

    Vres=v_x2+v_y2V_{res} = \sqrt{v\_x ^2 + v\_y ^2}

    Hm, ich überleg grad nochmal, eigentlich brauchst du vres gar nicht.



  • Zu allererst ergibt sich eh das Problem, dass du eine Kollision Ball - Balken abfragen musst.



  • Ja, wenn du die Bewegung des Balls und auch die Balken als Funktionen ansiehst, dann kannst du doch einfach die Schnittpunkte berechnen. Ist es denn eigentlich 2D oder 3D?



  • michaelwitzik schrieb:

    Ja, wenn du die Bewegung des Balls und auch die Balken als Funktionen ansiehst, dann kannst du doch einfach die Schnittpunkte berechnen.

    Nein, denn das ist dann die Kollision des Mittelpunkt des Balles und dem Balken. Der Ball hat aber eine Ausdehnung.



  • Na dann nimmst du nicht die Koordinaten des Balls zur Schnittpunktprüfung sondern gehts z.b. 2 Stellen auf der X Achse und den zugeörigen Y Wert vor und nimmst diesen Punkt zur Prüfung!



  • Sei <a,b> das Skalarprodukt zweier Vektoren a,b (ist der Begriff bekannt?).
    Sei n der Normalenvektor der Wand, v der Geschwindigkeitsvektor des Balls.
    Dann ist v_n := -<n,v>n die Komponente der Geschwindigkeit, die senkrecht zur Wand steht (Normalenkomponente).
    Und v_t := v - v_n ist die verbleibende Tangentialkomponente.
    Für die Reflexion muss jetzt lediglich die Normalenkomponente umgedreht werden:
    v_n --> -v_n,
    die Tangentialkomponente bleibt gleich.
    und nun wieder die Komponenten zusammenzählen: v = v_n + v_t. fertig is der reflektierte Geschwindigkeitsvektor!
    (funktionert in 2D und 3D gleichermaßen)
    Kurz zusammengefasst: v_reflektiert := v + 2
    <n,v>*n



  • Ähm, sicher dass es bei der Normalenkomponente minus lauten muss?
    <n,v> ist, wenn die beiden in unterschiedliche Richtung zeigen (phi > 90 Grad),
    ja schon negativ, d.h. dass, wenn man das ganze mit n multipliziert, der passende vektor v_n rauskommt.

    Dann wäre
    v_reflektiert := v - 2*n*<n,v>
    oder

    vreflektiert:=v2n(<v,n>n2)\vec{v}_{reflektiert} := \vec{v} - 2\vec{n} \left( \frac{<\vec{v},\vec{n}>}{\| \vec{n} \| ^2 } \right)

    wenn n nicht die Länge 1 hat.



  • vielen Dank schonmal, ich hoffe ich kann das jetzt noch in C++ umsetzen...


Anmelden zum Antworten