Winkel zwischen zwei Punkten



  • Nein der Betrag eines Vektors ist seine Länge.

    Aber am Besten du schaust mal hier http://www.mathe-online.at/mathint/vect1/i.html

    Nett aufbereitet und für Einsteiger zu empfehlen, wenn du etwas weiter rumsuchst findest du sogar etwas über Trigonometrische Funktionen und weiteres zu Vektoren, das sollte genügen. Wenn du dann so richtig geil drauf sein solltest, gibts in jeder Uni-Bibo schöne, große, dicke Bücher zur Linearen Algebra, viel Spass damit.

    tt



  • Richtig, der Betrag berechnet sich aber nicht aus der Summe der Komponenten sondern vielmehr so (Beispiel R3\mathbb R^3):
    x=x_12+x_22+x32\mid \vec{x} \mid = \sqrt{x\_1^2+x\_2^2+x_3^2}



  • Öppaken schrieb:

    eine arccos-Funktion müsste ich mir noch schreiben.

    in C/C++ gibt's das schon fertig. guckst du: http://www.cplusplus.com/ref/cmath/acos.html

    Öppaken schrieb:

    Was sind Vektorbeträge?

    betrag eines vektor bekommste, indem du alle komponenten quadrierst, dann alles zusammenzählst und zum schluss die quadratwurzel aus dieser summe berechnest. wenn du dir einen vektor als pfeil vorstellst, dann ist der betrag die länge des pfeils (also die richtungsangabe ist dann wech)



  • Ok, danke Leute. Das bringt mich weiter.



  • Wäre nett, wenn mir jetzt noch einer sagen könnte, wie ich zu dem Kosinus den Sinus kriege, bzw. eine arccos-Funktion schreiben könnte (nutze kein C++).



  • Öppaken schrieb:

    Wäre nett, wenn mir jetzt noch einer sagen könnte, wie ich zu dem Kosinus den Sinus kriege

    Trigonometrischer Pythagoras: (cosα)2+(sinα)2=1(\cos\alpha)^2 + (\sin\alpha)^2 = 1, einfach nach dem Sinus umstellen.

    bzw. eine arccos-Funktion schreiben könnte (nutze kein C++).

    Was für Mittel hast du denn zur Verfügung?



  • Bashar schrieb:

    Öppaken schrieb:

    Wäre nett, wenn mir jetzt noch einer sagen könnte, wie ich zu dem Kosinus den Sinus kriege

    Trigonometrischer Pythagoras: (cosα)2+(sinα)2=1(\cos\alpha)^2 + (\sin\alpha)^2 = 1, einfach nach dem Sinus umstellen.

    Wie gesagt, ich kann keine Formeln lesen. Wie würde die Rechnung denn in Pseudocode aussehen?

    bzw. eine arccos-Funktion schreiben könnte (nutze kein C++).

    Was für Mittel hast du denn zur Verfügung?[/quote]

    Ich habe Sinus-/Kosinusfunktion und die Standarddatentypen und -operatoren zur Verfügung.



  • Öppaken schrieb:

    Bashar schrieb:

    Öppaken schrieb:

    Wäre nett, wenn mir jetzt noch einer sagen könnte, wie ich zu dem Kosinus den Sinus kriege

    Trigonometrischer Pythagoras: (cosα)2+(sinα)2=1(\cos\alpha)^2 + (\sin\alpha)^2 = 1, einfach nach dem Sinus umstellen.

    Wie gesagt, ich kann keine Formeln lesen. Wie würde die Rechnung denn in Pseudocode aussehen?

    Wieso kannst du keine Formeln lesen? Ich nehm mal an, dass du die eine oder andere Schulklasse hinter dir hast, sonst würdest du wohl kaum mit Vektoren rumhantieren. Oder kann dein Browser einfach nur keine Grafiken anzeigen?

    Ich habe Sinus-/Kosinusfunktion und die Standarddatentypen und -operatoren zur Verfügung.

    Das ist eigentlich zu wenig. Mindestens eine der Arcus-Funktionen wär nicht schlecht, sonst musst du den arc cos aus einer unendlichen Reihe selbst zusammenbauen.



  • Öppaken schrieb:

    Ich habe Sinus-/Kosinusfunktion und die Standarddatentypen und -operatoren zur Verfügung.

    haste wenigstens sqrt()?
    wenn ja, dann guckst du: http://www.ibiblio.org/pub/academic/computer-science/history/pdp-11/rt/decus11/110800d1/arsico.c

    ääh...sqrt.c ist da aber in dem pfad auch zu finden.



  • Bashar schrieb:

    Wieso kannst du keine Formeln lesen? Ich nehm mal an, dass du die eine oder andere Schulklasse hinter dir hast, ...

    Es soll Schulen geben, in denen mehr Wert auf Gewalt und Drogenhandel gelegt wird. Und da ich es mir nicht aussuchen konnte...

    Jetzt muss ich mir halt alles selbst beibringen.



  • Dann hau rein!



  • Hi nochmal,

    habe jetzt versucht, die Formeln in Code zu konvertieren. Rausbekommen habe ich das hier:

    // (x1, y1) und (x2, y2) sind die zweidimensionalen ortsvektoren
    
    int cos = (x1 * x2 + y1 * y2) / (sqrtf(x1 * x1 + y1 * y1) * sqrtf(x2 * x2 + y2 * y2));
    int sin = sqrtf(1.0f - (cos * cos));
    

    Was rauskommt, stimmt aber nicht (oder ich kapier's nicht). Wie kann der Winkel von einem zum anderen Vektor genauso sein wie umgekehrt?

    Das ganze ist übrigens für 2D-Auto-Aiming gedacht.

    thx



  • Ups, sin und cos sind natürlich auch float.



  • *push*



  • Öppaken schrieb:

    Was rauskommt, stimmt aber nicht (oder ich kapier's nicht). Wie kann der Winkel von einem zum anderen Vektor genauso sein wie umgekehrt?

    Wie kann er denn verschieden sein?

    Generell wäre es hilfreich, wenn Du ein bißchen ausführlicher erklärst was Du machen willst. Ich werde aus dem was Du schreibst jedenfalls nicht schlau.



  • Wie gesagt, ich brauche den Winkel (oder auch nur Sinus/Kosinus) von einem Ortsvektor (a) zum anderen (b). Benutzen möchte ich das ganze, um den Vektor (a) in die Richtung des Vektors (b) zu schiessen.

    Hier mal eine Grafik: Grafik



  • Öppaken schrieb:

    Hier mal eine Grafik: Grafik

    sieht so aus als bräuchtest du 'nen 'verbindungsvektor' http://de.wikipedia.org/wiki/Vektor#Addition_und_Subtraktion



  • net schrieb:

    Öppaken schrieb:

    Hier mal eine Grafik: Grafik

    sieht so aus als bräuchtest du 'nen 'verbindungsvektor' http://de.wikipedia.org/wiki/Vektor#Addition_und_Subtraktion

    Aber was hat das denn mit der Richtung zu tun?



  • Wenn du einfach (a)-(b) rechnest, dann hast du einen Richtungsvektor der von b aus nach a geht. Wenn du also von b aus nach a "wandern willst", dann nimmst du einfach eine einfache Geradengleichung mit b als Ortsvektor und dem Vektor (a)-(b) als Richtungsvektor und schon kannst du die Punkt die auf der Geraden von a nach b liegen entlangwandern bzw. dein Geschoss entlangwandern lassen.



  • lolz schrieb:

    Wenn du einfach (a)-(b) rechnest, dann hast du einen Richtungsvektor der von b aus nach a geht. Wenn du also von b aus nach a "wandern willst", dann nimmst du einfach eine einfache Geradengleichung mit b als Ortsvektor und dem Vektor (a)-(b) als Richtungsvektor und schon kannst du die Punkt die auf der Geraden von a nach b liegen entlangwandern bzw. dein Geschoss entlangwandern lassen.

    Jo, aber ich brauche den Sinus oder Kosinus. Das Ganze soll in einem bereits bestehenden System laufen, welches ich nicht umändern kann.


Anmelden zum Antworten