Formel korrekt umgesetzt?



  • Hallo, ich bin nicht in C++ geübt, und muss dennoch ein kleines Programm schreiben.. Ich habe eine Formel zur berechnung des Schnittwinkels zweier Geraden und wollte hier mal fragen, ob ich diese korrekt in ordentlicher C++-Syntax umgesetzt habe, da ich immer nur -1.#IND000000000 als ergebnis bekomme. Da hört mein C++ Wissen leider auf..

    Gegeben ist

    - Start(xS, yS)
    - Ziel(xZ, yZ)
    - Punkt(xP, yP)
    
    g1 = Start,Ziel
    g2 = Start,Punkt
    
    Die Geraden schneiden sich also im Punkt "Start"!
    

    Gesucht ist

    - Schnittwinkel Alpha zwischen (Start,Ziel) und (Start,Punkt)
    - Länge zwischen "Start" und Schnittpunkt der Orthogonalen von "Start"/"Ziel", die durch "Punkt" geht
    - Länge der Orthogonalen zwischen "Punkt" und Schnittpunkt der Gerade "Start"/"Ziel"
    

    Diese Formel verwende ich

    (Punkt-Start) * (Ziel-Start)
    alpha = acos ----------------------------------
                 || (Punkt-Start) * (Ziel-Start) ||
    
                      sqrt( ((xP-xS) * (xZ-xS)) + ((yP-yS) * (yZ-yS))
          = acos -------------------------------------------------------------
                 sqrt( (xP-xS)^2 + (yP-yS)^2 ) * sqrt( (xZ-xS)^2 + (yZ-yS)^2 )
    

    Und so siehts aus

    double alpha = acos( sqrt(((xP-xS)*(xZ-xS)) + ((yP-yS)*(yZ-yS))) / sqrt(((xP-xS)*(xP-xS)) + ((yP-yS)*(yP-yS))) * sqrt(((xZ-xS)*(xZ-xS)) + ((yZ-yS)*(yZ-yS))) );
    

    So, in Alpha steht -1.#IND00000000. Vielleicht kann mir jemand sagen woran es liegt?!

    Danke und schöne Grüße



  • Ach ja, ich habe WinXP und VisualStudio 2003..



  • Du weißt das acos etc mit Radiant arbeiten?



  • Ich würde mal Zwischenergebnisse erzeugen und prüfen ob

    - nicht durch 0 geteilt wird
    - Wurzel nicht aus negativer Zahl berechnet wird
    - bei acos(x) x zwischen -1 und 1 liegt



  • Fellhuhn schrieb:

    Du weißt das acos etc mit Radiant arbeiten?

    acos arbeitet nicht mit Radiant, es gibt nur einen Radiantwert zurück. 🙂



  • @Fellhuhn: radiant habe ich erwartet

    @MiP: aufsplitten in zwischenergebnisse hat mich zur lösung gebracht! beim nächsten mal weiß ich bescheid.

    der fehler lag übrigens in meiner formel, nicht an der syntax oder so. beim skalarprodukt muss ja gar keine wurzel gezogen werden! hatte das irgendwie falsch im kopf..

    ich danke trotzdem! schöne grüße dann


Anmelden zum Antworten