Kollision und Reflexion



  • Also ich finde darüber nichts.



  • Marzian schrieb:

    Also ich finde darüber nichts.

    Also ich finde auf der ersten Google-Seite gleich mehrere Volltreffer 😕



  • Ja das ist aber alles auf englisch da verstehe ich ja nur die Hälfte 😞



  • Marzian schrieb:

    Ja das ist aber alles auf englisch da verstehe ich ja nur die Hälfte 😞

    Das wird dir leider bei 90% aller Dokumentationen, Tutorials, Beschreibungen etc. im Internet passieren.



  • Also 1.: Lern englisch.
    2.: Lern Pong-Collision.



  • Sgt. Nukem schrieb:

    Also 1.: Lern englisch.
    2.: Lern Pong-Collision.

    Pong: wahrscheinlich schlechtes Beispiel, da bei Pong nur gerade wände existieren, also horizontal und vertikal, is natürlich die Kollisionsberechnung wesentlich einfacher; davon kann man aber wesentlich weniger lernen.

    Ich würd so rangehen:

    Als erstes ma ne Klasse/Struktur für 2dimensionale Vektoren und die ganzen rechenarten schreiben (gibts bestimmt auch irgendwo schon ne gute .. googlen)

    Geradengleichung für Wände
    [ x = WandAnfang + s * ( WandEnde-WandAnfang ) ]

    Geradengleichung für Ballposition von vor bis nach dem Frame
    [ x = lastPos + t * ( Pos-lastPos ) ]

    Errechnen, ob Geraden sich schneiden ( in 2D nicht unwahrscheinlich ), und dann wo, wenn der Punkt in beiden Streckenabschnitten liegt ..
    [ 0 >= s >= 1 ]
    [ 0 >= t >= 1 ]
    .. liegt tatsächlich eine Kollision vor, also:

    if( Kollision )
    {

    dann: normale zur Wand:

    normale.x = 1 / ( WandEnde-WandAnfang ).x
    normale.y = 1 / ( WandEnde-WandAnfang ).y

    [ Ausnahmen: Division durch 0 ]

    Winkel zw, normale und Richtungsvektor der Bewegung des Balls - Einfallswinkel:

    a = WandEnde - WandAnfang;
    b = Pos-lastPos;

    ( und da haste auch dein Skalarprodukt: )

    einfallsWinkel = arcCosin( a ** b / abs(a) / abs(b) )

    neuen Richtungswinkel der Geschwindigkeit ermitteln

    Bewegung = (0,0) - Bewegung;
    Bewegung = rotate( Bewegung, 2*einfallsWinkel );

    rotate musst du dir jetz ma selber schreiben, kein Bock zu denken, machs irgendwie mit sin/cos

    }

    btw welche ProgSprache? Klassen ala C++ währen extrem nützlich ...



  • achso, sinnvoll is noch, die Ballposition bei einer Kollision ein bischen vor die Wand zu setzen, da sonst doofe Unendlichkollisionen auftreten ....



  • Auch schon x-mal hier erklärt worden, hoffe das war so das letzte Mal.

    Bye, TGGC (Keine Macht den Dummen)



  • Nun sind es X+1 Male.



  • Hallo Jungs also eure Hilfe find ich echt cool aber ich komme trotzdem nich weiter ich glaube ich bin zu blöd:

    class Vector
    {
    public:
    int X;
    int Y;

    Vector();
    Vector(int x, int y);
    };
    class Obstacle
    {
    public:
    Vector *Vector1;
    Vector *Vector2;
    Vector *TestIntersection(Vector start, Vector direction);
    Obstacle(Vector vector1, Vector vector2);
    };

    Obstacle::Obstacle(Vector *vector1, Vector *vector2) : Vector1(vector1), Vector2(vector2)
    {
    }

    Vector::Vector() : X(0), Y(0)
    {
    }

    Vector::Vector(int x, int y) : X(x), Y(y)
    {
    }

    void main()
    {
    Obstacle *obs = new Obstacle(new Vector(8,7), new Vector(2,6));
    Vector *vec = new Vector(8,7);
    }

    Soweit bin ich schonmal aber ich weiß nicht wie ich meinem Programm beibringen soll, dass er die Vektoren und das Hinderniss als Gerade sieht und nicht als Punkt.Das wäre erst mal das wichtigste, damit ich erstmal anfangen kann.
    CyA



  • Marzian schrieb:

    Hallo Jungs also eure Hilfe find ich echt cool aber ich komme trotzdem nich weiter ich glaube ich bin zu blöd:

    Du sollst nicht glauben, du sollst wissen.

    Bye, TGGC (Wähle deine Helden)



  • na komm du hast doch sicherlich noch einen flotten Spruch auf Lager!



  • Marzian schrieb:

    na komm du hast doch sicherlich noch einen flotten Spruch auf Lager!

    Und du?

    Bye, TGGC (Wähle deine Helden)



  • nee du bist doch der meister der weisheiten.



  • Definitiv.

    Bye, TGGC (Keine Macht den Dummen)



  • Und ich der Arschkriecher des Meisters der Weisheiten... 🤡 👍

    Gestern "Der Name der Rose" geguckt? Ich bin Adson... 😃

    Tag, Sean! 🤡 👍


Anmelden zum Antworten