Wie würdet ihr den Schnittpunkt zweier Orthogonalen ermitteln,
wenn:
1 Linie waagrecht ist und
1 senkrecht und
(Es gibt nur diesen einen Fall in der Anwendung)
die Geradengleichungsformen (bzw. Steigungsform, 2 Punkteform) nicht verwendet werden sollen?
Ich habe folgende Lösung (wurde auf diese Art verlangt, warum auch immer)
public static Point SimpleIntersection(ILineControl a, ILineControl b)
{
Point point = NoneIntersect;
//one line vertical another horizontal
if (a.StartPoint.Y == a.EndPoint.Y
&& b.StartPoint.X == b.EndPoint.X
&& (b.StartPoint.X > a.StartPoint.X && b.StartPoint.X < a.EndPoint.X) //point has also to be in interval of other linesegment
)
{
point = new Point(b.StartPoint.X, a.StartPoint.Y); // then there lines hit
}
//exactly the other way round
else if (a.StartPoint.X == a.EndPoint.X
&& b.StartPoint.Y == b.EndPoint.Y
&& (a.StartPoint.X > b.StartPoint.X && a.StartPoint.X < b.EndPoint.X) //point has also to be in interval of other linesegment
)
{
point = new Point(a.StartPoint.X, b.EndPoint.Y); // then there lines hit
}
return point;
}
Kommt jemand noch auf eine elegantere Lösung?
ich überprüfe mit dem Intervall ob der Punkt auf der Linie liegt jeweils speziell für vertikal oder senkrecht...
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
die Geradengleichungsformen (bzw. Steigungsform, 2 Punkteform) nicht verwendet werden sollen?
Alternative wären dann ja noch die Beschreibung der Gerade mittels Vektoren (x = a + b*y, wobei x, a und b jeweils Vektoren sind). Dann kann man - soweit ich mich erinnern kann - recht elegant den Schnittpunkt berechnen (und hat auch keine Probleme mit der Steigung im Falle der vertikalen Linie).
Ist aber doch schon wieder eine Weile her, das ganze - aber evtl. findest du damit ja noch was Eleganteres 😉
Die Situation ist ja sehr einfach. Wenn eine Linie durch konstantes x und die andere durch konstantes y beschrieben werden kann, ist der Schnittpunkt: (x, y)
Steigungsform kann nicht verwendet werden, weil die senkrechte Gerade keine darstellbare Steigung hat. Vektorform ist auch viel zu umständlich.
Du berechnest da nichts sondern findest nur raus welche Koordinaten du einsetzen musst und ob die Linien sich überhaupt schneiden. Ich würde sagen einfacher geht das nicht mehr.
Hallo dr4g0n76,
ist für alle ILineControls sichergestellt ist, dass Startpunkt.X ≤ Endpunkt.X und Startpunkt.Y ≤ Endpunkt.Y ist? Nur dann funktioniert deine Bedingung in allen Fällen korrekt.
Ansonsten fällt mir für dieses Repräsentation keine nennenswerte Vereinfachungsmöglichkeit ein. Vielleicht wäre es einfacher, wenn man die Linen als Startpunkt, Orientierung (hor./vert) und Länge repräsentiert.
herbivore