Geometrie-Frage:



  • Hi!
    sorry wenn die Frage nervt, ich hab mich leider nie richtig mit Geometrie beschaeftigt, und die Frage stellt mich vor ein grosses Fragezeichen:

    ich hab eine Linie von Punkt 1 (x1/y1) nach Punkt 2(x2/y2). Von P2 aus moechte ich eine Linie zeichnen, die genauso lang ist wie die Linie von P1 nach P2, aber um 60 Grad nach oben ansteigt, bis zu Punkt 3 (x3/y3).

    hmm... ich versuch's mal Grafisch:

    P3
                       /
                      /
                     /
                    /
                   /
                  / a)       (<==  a =  60 Grad)
    -------------/- - - - 
    P1            P2
    

    Meine Frage, wie komm ich auf die Koordinaten von P3???



  • Indem Du die Eigenschaften von rechtwinkligen Dreiecken nutzt...



  • hmm... hilft mir nur bedingt weiter... du meinst dass ich das Dreieck sozusagen "in der Mitte", also von der Hypothenuse zum gegenueberliegenden Punkt (in meinem Fall P3) eine Linie ziehe. Die Laenge dieser Linie kann ich dann mit dem Satz von Pythagoras ausrechnen, und dann waer.... Ok, ich glaub danach hab ich gesucht, vielen Dank :)))))



  • Die Hypotenuse sollte die Strecke P2 - P3 sein.

    edit: *hmpf*



  • dumme andere Frage:
    was, wenn der Winkel nicht genau 60 Grad ist? dann waere das Dreieck nicht mehr Gleichschenklig, und somit faellt die Linie von P3 nicht mehr genau auf die Mitte der Hypotenuse, und damit weiss icht nicht mehr, wie lang diese ist... 😕



  • Blue-Tiger @ school schrieb:

    dumme andere Frage: was, wenn der Winkel nicht genau 60 Grad ist? dann waere das Dreieck nicht mehr Gleichschenklig...

    ... was es vorher auch nicht war! 🙄
    Die zwei bekannten Größen, Winkel und Hypotenuse P2 - P3, reichen völlig für eine Berechnung aus.



  • absolute_beginner schrieb:

    Die Hypotenuse sollte die Strecke P1 - P2 sein.

    Hoä?? Für mich ist die Hypothenuse am besten bei der Strecke P2-P3 aufgehoben.

    @Blue-Tiger: Du kennst die Winkelbeziehungen des Sinus und des Kosinus im rechtwinkligen Dreieck? Dann dürfte es für dich kein Problem geben, wenn du P2-P3 als Hypothenuse verwendest. Ob der Winkel 60 Grad ist oder nicht, spielt keine Rolle! Hauptsache, er liegt zwischen 0 und 90 Grad.



  • WebFritzi schrieb:

    absolute_beginner schrieb:

    Die Hypotenuse sollte die Strecke P1 - P2 sein.

    Hoä?? Für mich ist die Hypothenuse am besten bei der Strecke P2-P3 aufgehoben.

    Gaaanz ruhig, ich hab's noch vor deinem posting korrigiert- und das meinte ich doch sowieso, denn so blöde, daß ich das als Hypotenuse festlege, was weit und breit keinen rechten Winkel sieht, bin ich auch nicht! 🙂



  • absolute_beginner schrieb:

    denn so blöde, daß ich das als Hypotenuse festlege, was weit und breit keinen rechten Winkel sieht, bin ich auch nicht! 🙂

    Glaub ich dir. Aber oft ticken Menschen einfach verschieden. Vielleicht hattest du ja was gesehen, was ich nicht gesehen habe, verstehste? Hätte ja sein können. Aber wir meinen wohl beide das gleiche.



  • *g* Da hast Du wohl Recht; allerdings habe ich in diesem Fall hier nicht ganz richtig getickt, sonst hätte ich wohl einfach das geschrieben, was ich meinte... 😡 Könnte es sein, daß ich ein wenig *zerstreut bin? 🤡 🤡 🤡



  • Naja, was ist gesucht?

    Die Position von P3...

    Nun ja, man hat die Länge und man hat die Gradzahl, daraus ergibt sich ja)

    x(P3) = x(P2)+laengecos(60°)
    y(P3) = y(P2)+laenge
    sin(60°)

    Oder so...



  • sorry wenn ich erst jetzt dazu komme zu antworten, aber:

    Ok, ich hab die "Hoehe" des Punktes 3 ausrechnen koennen (mit "Hoehe" meine ich den Abstand von P3 zur Geraden, die durch P1 und P2 verlaeuft), mein Problem ist aber eigentlich ein anderes:

    Die Gerade durch P1 und P2 hat eine Steigung != 0, d.h. um den x bzw. y Wert von P3 auszurechnen, kann ich nicht (wie z. B. von Mis2com vorgeschlagen) einfach "hinzuaddieren". Ich hab mir folgendes Ueberlegt:

    die Gerade von P1 und P2 hat die Form g1:y = k*x + m
    ein Hilfspunkt Ph liegt auf dieser Geraden, und zwar in einem Abstand von , der die Haelfte des Abstandes der Linie von P1 zu P2 betraegt.
    Senkrecht zu g1 steht die Gerade g2, die durch diesen Punkt Ph geht. In einem Abstand von h (eben die besagte "Hoehe") zu Ph liegt Punkt P3, der ebenfalls auf dieser Gerade g2 liegt.

    Die Gleichung der Geraden g2 herauszufinden ist kein Problem, genauso wenig die genaue Position von Ph.
    Ich hab mir dann ueberlegt, dass es mit diesen 3 Angaben (der Funktion von g2, der Hoehe h und dem Punkt Ph) ja moeglich sein MUSS, die genaue Position von P3 herauszufinden, nur das "WIE" ist mir schleierhaft.

    Hab mir folgendes Ueberlegt:

    g2: y = k' * x + m
    
              1
         --------------
    k' =    P2y - P1y
            --------
            P2x - P1x
    
           P2x - P1x
    Phx =  ---------
              2
    
           P2y - P1y
    Phy =  ---------
              2
    
    m' = Phy - k' * Phx
    
    l .... Abstand P1 zu P2 == Abstand P2 zu P3  = Wurzel((P2y - P1y)^2 + (P2x -P1x)^2)
    
    l^2 = h^2 + (l/2)^2 ===>  h = Wurzel(3) * l/2
    
    Schrittlaenge s ... Laenge eines x-Schrittes = Wurzel(1 + k'^2)
    
    P3x = Phx - h/s  .... fuer k' < 0
    P3x = Phx + h/s  .... fuer k' >= 0
    
    P3y = k' P3x + m'
    

    Funktioniert meistens auch, nur irgendwo scheint ein Denkfehler zu liegen, denn fuer Punkte, die annaehernd "gerade" liegen (d.h. die Steigung von g1 ist annaehrend 0) erhalte ich absolut falsche Werte 😕

    Hier mal etwas Code dazu:

    // a und b bilden den Start- bzw. Endpunkt der Geraden g1
    	int xDiff = b.x - a.x;
    	int yDiff = b.y - a.y;
    
    	Pos p1(a.x + xDiff / 3, a.y + yDiff/3);
    
    	// p2 entspricht P3 im obigen Text
    	Pos p2;
    	float k = -1.00 / (static_cast<float>(yDiff) / xDiff);
    
    	// Punkt tmp entspricht Ph im obigen Text
    	Pos tmp(a.x + xDiff/2, a.y + yDiff/2);
    //	circlefill(offscreen, tmp.x, tmp.y, 3, makecol(0,0, 255));
    
    	float l = sqrt(static_cast<float>(xDiff * xDiff + yDiff * yDiff)) / 3;
    	float h = sqrt(3.00/4.00) * l;	
    	int m = tmp.y - static_cast<int>(k * tmp.x);
    	float xSteps = h/sqrt(1.00 + k*k);
    
    	if (k < 0)
    		p2.x = tmp.x - xSteps;
    	else
    		p2.x = tmp.x + xSteps;
    	p2.y = static_cast<int>(k * p2.x) + m;
    


  • Also nur durch die Gradzahl kannst du die Position wirklich nicht feststellen.
    Und wenn du die Position von P2 hast, dann siehe mein Beitrag.



  • Blue-Tiger schrieb:

    Von P2 aus moechte ich eine Linie zeichnen, die genauso lang ist wie die Linie von P1 nach P2, aber um 60 Grad nach oben ansteigt, bis zu Punkt 3 (x3/y3).

    Mir diesen Angaben läßt sich eine Lösung realisieren...



  • absolute_beginner schrieb:

    Blue-Tiger schrieb:

    Von P2 aus moechte ich eine Linie zeichnen, die genauso lang ist wie die Linie von P1 nach P2, aber um 60 Grad nach oben ansteigt, bis zu Punkt 3 (x3/y3).

    Mir diesen Angaben läßt sich eine Lösung realisieren...

    hmm... eine Loesung zu konstruieren (mit Geodreieck & Co) ist damit wirklich kein Problem, aber eine bessere rechnerische Loesung als die von mir oben genannte will mir einfach nicht einfallen.... So sehr ich deine Ermunterung zu mehr eigenstaendigem Nachdenken zu schaetzen weiss: bitte etwas mehr Hilfestellung 🙂

    @mis2com:
    meinem Verstaendnis von sinus/cosinus nach funktioniert deine Loesung nur, wenn die Linie P1 zu P2 absolut horizontal ist, ansonsten muesste ich das Ergebnis irgendwie dadurch anpassen, sodass ich das Koordinatensystem so drehe, dass die x-Achse parallel zur Linie P1 - P2 ist (und ich hab keine Vorstellung davon, wie so eine Koordinatensystem-Drehung funktionieren soll)



  • @Blue-Tiger: Du stellst dich ja ganz schön an...



  • 🙂

    bin jetzt endlich draufgekommen, wie das Ganze zu funktionieren hat. Danke fuer die Tipps und sorry fuer die Begriffstuetzigkeit 🙂



  • Arrgh! Ich habe schon wieder den ;)-Smiley vergessen.



  • Wie wäre es mit Polarkoordinaten?

    Streckenlänge r = Wurzel (x1 + x2)

    x1 = r ∙ cos (φ)

    x2 = r ∙ sin (φ)



  • Das ist falsch!


Anmelden zum Antworten