Spiegelung an Geraden ohne Funktionsgleichung



  • moin,
    lol hoffentlich steht die LΓΆsung nicht schon wieder irgendwo im Forum πŸ˜ƒ

    gegeben sind 3 Punkte a,b und c. Und a soll an der Geraden die durch b und c geht gespiegelt werden. Wie mache ich das OHNE die Gerade in eine Gleichung f(x) = mx + n umzurechnen??

    thxia



  • ESS_CB schrieb:

    gegeben sind 3 Punkte a,b und c. Und a soll an der Geraden die durch b und c geht gespiegelt werden. Wie mache ich das OHNE die Gerade in eine Gleichung f(x) = mx + n umzurechnen??

    Mit Hilfe des Vectors in diesem Thread. Etwa so

    #include <iostream>
    #include "Vector.h" // siehe Beitrag vom 1.8.06
    
    int main()
    {
        using namespace std;
        Vector b( 4, 1 );
        Vector c( 7, 7 );
        Vector a( 4, 6 );
    
        Vector n = Vector( 0, 0, 1 ) % (c-b); // 90Β° Grad drehen
        n /= abs( n );
        Vector as = a + 2 * n * (c - a) * n;
        cout << "Ergebnis: " << as << endl;
        return 0;
    }
    

    as ist der gespiegelte Punkt. Die Gleichung dafΓΌr lautet:
    aβƒ—β€²=aβƒ—+2nβƒ—(cβƒ—βˆ’aβƒ—)nβƒ—\vec a' = \vec a + 2\vec n\left( {\vec c - \vec a} \right)\vec n
    wobei n⃗\vec n der normierte Normalen-Vektor der Geraden durch bc ist. Er berechnet sich aus
    nβƒ—=eβƒ—_zΓ—(cβƒ—βˆ’bβƒ—)∣eβƒ—_zΓ—(cβƒ—βˆ’bβƒ—)∣\vec n = \frac{{\vec e\_z \times \left( {\vec c - \vec b} \right)}}{{\left| {\vec e\_z \times \left( {\vec c - \vec b} \right)} \right|}}
    Die Kreuzmultiplikation mit ez dient nur dazu den Vektor um 90Β° zu drehen.

    Gruß
    Werner



  • ok, danke.

    Einen Hinweis nur noch: Die Berechnung ist fΓΌr den Bundeswettbewerb Informatik und natΓΌrlich kann ich die vector.h nicht auf meine Kappe schreiben^^

    Ich hab deshalb bei der vector.h am Anfang noch ein

    // by Werner Salomon
    

    am Anfang eingefΓΌgt. Ich hoffe es ist so in Ordnung. Wenn du ne Γ„nderung wΓΌnscht kannst du die hier ja posten.

    thx

    PS: beim Scalarprodukt hast du ein ';' vergessen πŸ˜‰


Anmelden zum Antworten