spiegelung im kreis



  • hallo alle

    bin neu hier und freu mich auf eure antworten 🙂
    leider komme ich selber nicht drauf 😞

    ein ball bewegt sich in einem kreis.
    es gibt die eigenschaft des balles
    ball.speedX
    ball.speedY
    um diesen wert "bewegt" sich das ballObjekt über den Screen.

    berührt der ball die Randlinie des Kreises, soll
    er nach innen zurückreflektiert werden.

    also eine spiegelung an der tangente im berührungspunkt.

    wie berechne ich die neuen werte für ball.speedX
    und ball.speedY.

    es liegen vor:
    kreis.radius
    ball.x
    ball.y

    und das event ballHitKreisrand (der ball berührt nun die keislinie)

    würde mich sehr über tips freuen,
    elo 🙂



  • sorry, habe einen fehler gemacht.
    ich habe oben das gefragt und ihr könnt
    an mich schreiben.

    grüße,
    elo



  • Sieht man den Ball als punktförmig an (also seine Ausmaße spielen keine Rolle), würde ich an dem Kollisionspunkt des Kreises die Tangente errechnen und dann den wie die Lichtspiegelung am ebenen Spiegel (Ausfallswinkel = Einfallswinkel) rechnen.

    EDIT: Ach, das mit der Tangente hast du ja schon selber geschrieben.
    Na, wie du das Lot auf der Tangente fällst, weißt du ja?



  • hi nochmal,

    ich brauch die geradengleichung y=ax+b der tangente in dem punkt an dem der ball die kreislinie berührt. (angenommen wird ein punktförmiger ball)

    die spiegelung hm...
    ich denke das schaffe ich sogar noch 😉

    naja, der winkel zum lot zur tangente wird invertiert.

    y=sqr(1-x^2) gilt im einheitskreis.

    nun habe ich einen kreis mit R=kreis.radius
    der kreis hat seinen mittelpunkt in kreis.x und kreis.y

    kanns du mir weiterhelfen ?

    viele grüße,
    elo 🙂



  • elohim schrieb:

    y=sqr(1-x^2) gilt im einheitskreis.

    Viel zu kompliziert 😉
    Wenn du vom Kreismittelpunkt zur Berührstelle eine Linie ziehst, was hast du dann?

    Zum Errechnen der Geradengleichung:
    http://www.realmath.de/Mathematik/Gerade/vorlage5c.html



  • habs mir schon gedacht.

    der winkel alpha zwischen x-achse und radius kreis zum auftreffpunkt
    ist der selbe winkel wie
    zwischen ballegeraden und radius zum auftreffpunkt.

    so siehts mal aus.

    das kann ich dann über pyt. ausrechnen.

    die tangente in auftreffpunkt hätte eine um 90 grad gedrehte
    steigung, wie das lot auf ihr zum kreismittelpunkt.

    sin alpha = (|kreis.y-ball.y|)/kreis.radius. (gegenK/Hypot)

    die formel über die erste ableitung der kreisfunktion in dem auftreffpunkt hätte mich auch mal interessiert 😉

    danke und grüße,
    elo



  • kann mir noch jemand sagen,
    wie ich aus dem winkel wieder auf den neuen speedX und speedY komme?

    grüße,
    daniel



  • hallo

    Folgende Überlegung:
    Du triffst den Keis in dem Punkt P=(p1.p2) , Der Kreis hat den Radius R
    Dann P in Polarkoodinaten P=(R*cos(a),R*sin(a))
    a=arccos(p1/R) bzw a=arcsin(p2/R)
    Du hast den Geschwindigkeitsvektor V=(v1,v2).

    Nun nimm Die Drehmatrix D:=
    cos(a) sin(a)
    -sin(a) cos(a)

    und multipliziere diese mit V
    also D*V

    Damit drehst du den Punkt P auf die x-achse

    Nun nimmst nun einfach den den x-Wert mal (-1) (d.h. Spiegelung an der y-Achse)

    diesen Wert multiplizierst du nun mit der Inversen Drehmatrix (alse statt a nimmst du -a) und schon hast du deinen neuen Geschwindigkeitsvektor

    rechnnen must du nun selbst

    gruss Linus



  • Ableitung der Kreisfunktion:

    1. f(x):= +- sqrt((R2-x2)) → f'(x) = -+x/sqrt(R2-x2)

    2. c(t):= (R*cos(t),R*sin(t)) → (-R*sin(t),R*cos(t))

    Gruss Linus



  • wau linus,

    das klingt alles recht kompliziert.

    kannst du diese sachen bitte in eine art pseudocode schreiben?
    das wäre super nett.

    vielen dank,
    daniel



  • Hallo

    ? Pseudocode ?

    Hier noch einmal die Formel (wenn du so willst):

    v=(v1,v2) = der Geschwindigkeitsvektor
    R:= Radius des Kreises
    p=(p1,p2) = der Punkt des Kreises
    dann ist: α=arcsin(p1)/R der Winkel bzgl (1,0)

    D:= cos(α) sin(α)
    | -sin(α) cos(α)
    die Drehmatrix um α im Uhrzegersinn

    S:= -1 0
    | 0 1
    Die Matrix welche an der Y-Achse spiegelt

    T:= cos(α) -sin(α)
    | sin(α) cos(α)
    Die Drehmatrix welche um den Winkel -α zurückdreht

    (Das sollen alles 2x2 Matrizen sein , weiss der Teufel wie man die hier darstellen soll)
    nun rechnest du einfach:

    w:=T*S*D*v

    und schon erhälst du den gespiegelten Geschwindigkeits vektor

    Die Werte für cos(α) und sin(α) sind dir jedoch bekannt
    da cos(α)=p1/R
    und sin(α)=p2/R

    so nun sollte es aber kein Problem sein

    Gruss Linus


Anmelden zum Antworten