Geometrie-Frage:
-
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!
-
http://free.pages.at/yaso86/polar2.jpg
Klär mich auf, was ist daran falsch?
-
Yaso schrieb:
Streckenlänge r = Wurzel (x1 + x2)
Das ist falsch. Außerdem hast du die schon lange bekannte Lösung nur nochmal anders hingeschrieben. Und dazu - wie gesagt - auch noch falsch.
-
Ich hatte keine Ahnung, wie man hier die "Wurzel aus" schreibt.
r = √x² + y²
-
Yaso schrieb:
Ich hatte keine Ahnung, wie man hier die "Wurzel aus" schreibt.
Das tut nichts zur Sache. Du hast einfach die Quadrate nicht hingeschrieben. DAS war das falsche.
-
Stimmt, ist mir auch da erst aufgefallen. Wie gesagt, es tut mir leid. Aber es stimmt doch jetzt, nicht wahr?
-
Yeah, boy. You got it!