Laden...

Schnittpunkt(e) zweier Linien (1 Strecke ist vertikal, 1 Strecke ist Horizontal)

Erstellt von dr4g0n76 vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.771 Views
dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 10 Jahren
Schnittpunkt(e) zweier Linien (1 Strecke ist vertikal, 1 Strecke ist Horizontal)

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.

5.742 Beiträge seit 2007
vor 10 Jahren

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 😉

C
2.121 Beiträge seit 2010
vor 10 Jahren

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.

49.485 Beiträge seit 2005
vor 10 Jahren

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