Geometrieproblem mit gleichseiugem Dreieck



  • wtf? schrieb:

    gibt unendlich viele lösungen für C

    Im R2 nicht.



  • Höhe von C über AB mit Seitenlänge a:

    h=sqrt(a^2-(0.5*a)^2)
    

    Dann die y-Koordinate von C mit A+h berechnen, und der x-Koordinate von A 0.5*a hinzfügen, dann hast du dein C.



  • shit, sorry für den destruktiven beitrag, hab "gleichschenkligem" statt "gleichseitigem" gelesen. so gibt es dennoch keine eindeutige lösung - sie ist zweideutig!!!



  • wtf? schrieb:

    shit, sorry für den destruktiven beitrag, hab "gleichschenkligem" statt "gleichseitigem" gelesen. so gibt es dennoch keine eindeutige lösung - sie ist zweideutig!!!

    nicht, wenn die punkte richtig (also gegen den uhrzeigersinn) angeordnet sein sollen



  • Danke für eure Bemühungen!

    @MasterCounter: Gut, das hab ich auch schon gefunden mit der Höhe. Nur ist eben nicht jede 3Ecks-Höhe entlang der Y-Achse ausgerichtet, sondern die Punkte sind variabel im Raum verteilt.

    Bis jetzt hab ich das über ne Rotationssmatrix gemacht weil ich da nicht so viel überlegen musste, das ist bloß (entschuldigt) a r s c h l a h m. Und ich such nach nem schnellerem Algorhytmus.

    Das hier ist der den ich bis jetzt benutzt habe:

    GTVector2 KSBerechne3Punkt(GTVector2 A,GTVector2 B)
    { //3. Punkt in einem gleichseitugem Dreieck wird ermittelt
    	GTVector2 C=B-A;
    	GTMatrix m;
    	m.SetRotateZ(GTDeg2Rad(-60.F));
    	C.SetTransformCoord(m);
    	C+=A;
    	return(C);
    }
    


  • Nur ist eben nicht jede 3Ecks-Höhe entlang der Y-Achse ausgerichtet, sondern die Punkte sind variabel im Raum verteilt.

    Das ist doch dem guten Pythagoras egal, der wusste wahrscheinlich noch nicht mal was von y-Achsen ^^

    EDIT: Achso du meinst das mit dem weiterrechnen... Das ist natürlich richtig, das geht nur wenn das Dreieck senkrecht zur y-Achse ist.



  • So, ich hatte langeweile und bins mal durchgegangen.

    Also du hast die Punkte
    A(x_Ay_B)A({x\_A}|{y\_B})
    B(x_By_B)B(x\_B|y\_B)

    Gesucht ist:
    C(x_Cy_C)C(x\_C|y\_C)

    Dann folgt: (a ist die Seite des Dreiecks, h ist die Höhe)
    a=(x)2+(y)2a=\left(\bigtriangleup{}x\right)^2+\left(\bigtriangleup{}y\right)^2
    h2=a2+(a2)2h^2=a^2+\left(\frac{a}{2}\right)^2

    Daraus kann man den Höhenfußpunkt berechnen (h trifft a)
    H(x_Hy_H)H(x\_H|y\_H)
    x_H=x_B+xA2x\_H=\frac{x\_B+x_A}{2}
    y_H=y_B+yA2y\_H=\frac{y\_B+y_A}{2}

    Steigung der Seite AB:
    m=y_By_Ax_Bx_Am=\frac{y\_B-y\_A}{x\_B-x\_A}

    Hier muss man eine Fallunterscheidung durchführen:
    I. m = 1:
    x_C=x_Hx\_C=x\_H
    y_C=y_H+hy\_C=y\_H+h

    II. m ≠ 1
    Winkel α zwischen Seite a und der Parallele zur x-Achse durch H
    tanα=m\tan{\alpha}=|m|

    Winkel β = Winkel zwischen Parallele zur x-Achse und h
    \beta=90°-\alpha

    Dann den Punkt ausrechnen:
    x_C=x_H+(cosβ×h)x\_C=x\_H+\left(\cos{\beta}\times h\right)
    y_C=y_H+(sinβ×h)y\_C=y\_H+\left(\sin{\beta}\times h\right)

    Ich hoffe, dass ich jetzt keinen Fehler hineingebracht habe.



  • Blaze schrieb:

    Bis jetzt hab ich das über ne Rotationssmatrix gemacht weil ich da nicht so viel überlegen musste, das ist bloß (entschuldigt) a r s c h l a h m. Und ich such nach nem schnellerem Algorhytmus.

    Eine weitere Möglichkeit wäre folgendes:
    Nimm den (2d-)Vektor AB\vec{AB} und einen beliebigen linear abhängigen Vektor von AB\vec{AB}, zum Beispiel AB-\vec{AB}. Aus diesen machst du das kreuzprodukt, dabei kommt ein orthogonaler vektor heraus, nennen wir ihn k\vec{k}. Nun bringst du k auf die mit pythagoras berechnete länge und dann ist 0C=0A+12AB+k\vec{0C} = \vec{0A} + \frac12 * \vec{AB} + \vec{k}.

    Da ich mich aber nicht mit matrixmultiplikation auskenne, weiß ich nicht, ob das hier schneller ist.



  • Hi danke für eure Vorschläge.

    @Heinzelotte: Das geht nicht weil man erstens das Kreuzprodukt aus 2d vektoren nicht berechnen kann und zweitens ist das kreuzprodukt aus V und -V ein Nullvektor. Trozdem danke für deine Bemühung.

    und @ Steef: Gute Arbeit. Bloß leider dauert das Rechnen länger als meine Matrix. Trotzdem danke.

    Mal sehen. Ich werde wahrscheinlich den Teil der Rotationsmatrix direkt auf den Vektor anwenden. Da immer sin und cos von 60° berechnet werden wären das am Ende nur n bissl + - * /

    Es kann aber auch sein dass ich den Wald vor Bäumen nicht sehe, und mir die einfachste Lösung einfällt. Naja, wenn jemand was schnelleres findet kann ers ja schreiben!

    danke



  • Blaze schrieb:

    @Heinzelotte: Das geht nicht weil man erstens das Kreuzprodukt aus 2d vektoren nicht berechnen kann und zweitens ist das kreuzprodukt aus V und -V ein Nullvektor. Trozdem danke für deine Bemühung.

    Im Prinzip funktioniert das schon... der Vektor AB ist ja von der Form (x,y). Dazu orthogonal und damit als Vektor k geeignet (mit geeigneter Skalierung) ist (-y,x).



  • Blaze schrieb:

    @ Steef: Gute Arbeit. Bloß leider dauert das Rechnen länger als meine Matrix. Trotzdem danke.

    Einen Versuch war es wert.



  • Nur kurz:

    Siehe Jester, dann Mittelsenkrechte und die Länge

    solle eine konstanten Faktor * Länge AB haben.

    Bitte selber ausrechnen

    Andreas


Anmelden zum Antworten