Liniensegmente 2D



  • Hallo,

    es geht darum aus einer Menge von Liniensegmenten, das nächstgelegene Obere Segment zu dem Startpunkt des gerade betrachtenen zu finden.
    z.B:

    Segment1 (3,2), (5,4)
    Segment2 (1,3), (4,4)
    Segment3 (2,2), (4,3)
    Segment4 (7,2), (9,3)

    Ich "stehe" an Startpunkt seg 1 (3,2) und suche das nächstgelegene obere Segment.
    „Über“ bezieht sich auf die Segmente, die bei der aktuellen X-Koordinate einen größeren Y-Wert haben.
    Kann ich das über die Geradengleichung lösen?
    y = m*x+n

    Wie prüfe ich, ob der aktuelle X wert überhaupt in dem Bereich des zu prüfenden Segmentes liegt und wie rechne ich dann den y Wert an x aus?

    vielen Dank.



  • Unterscheide bitte zwischen Start- bzw. Endpunkt und X- bzw. Y-Koordinate. Ich werde nämlich aus deiner Beschreibung nicht schlau. Was ist die "aktuelle X-Koordinate" eines Segments?



  • Mach eine Gerade draus und such dir ein x aus (z.B. 0). Guck dann, bei welcher Gerade der nächtsgelegene y-Wert rauskommt.



  • Hallo,

    danke fürs antworten.
    Ist es so verständlicher? Was ist unklar?

    Startp(x,y) Endp (x,y)
    Segment1 (3,2), (5,4)
    Segment2 (1,3), (4,4)
    Segment3 (2,2), (4,3)
    Segment4 (7,2), (9,3)



  • Deine Aufgabenbeschreibung ist konfus, nicht deine Beispieldaten (mit denen man BTW nichts anfangen kann, solange du nicht dein Vorhaben exemplarisch durchrechnest).

    Du stehst also in einem Punkt P = (x,y). Jetzt suchst du das nächstgelegene Segment, das über dem Punkt P liegt. Wann liegt ein Segment über P? Wenn die zweite Koordinate des Startpunkts des Segments größer als y ist? Wenn es irgendeinen Punkt innerhalb des Segments gibt, dessen zweite Koordinate größer als y ist?

    Zweite Frage: Was heißt nächstgelegen? Soll der Differenz in der Y-Koordinate minimiert werden? Soll der euklidische Abstand zwischen Anfangspunkt des Segments und P minimiert werden? Soll der kleinste euklidische Abstand eines Segmentpunkts zu P minimiert werden?



  • tut mir leid, neuer Versuch.
    „Über“ bezieht sich auf die Segmente, die bei der aktuellen X-Koordinate einen größeren Y-Wert haben.
    Direkt über meint das Segment mit dem nächstgrößeren x Wert.
    Im Fall von dem Bsp. ist das nächsthöher gelegene Segment zu Segment1 das Segment2. Segment 3 hat auch einen gültigen x Wert, der Y wert ist aber weiter oben. Segment 4 kommt nicht in betracht, weil x Wert nicht im Bereich von dem Start/Endpunkt von Segment 1 ist.



  • Leider hat deine Beschreibung sich nicht verbessert. Du wiederholst du alte Formulierung, dass die "aktuelle X-Koordinate einen größeren Y-Wert hat", was ich eben schon nicht verstanden habe. Dein Beispiel ist für mich auch nicht nachvollziehbar. Segment 3 hat einen gültigen x-Wert? Was ist denn ein gültiger x-Wert? Und wie hat eine Ebene, die nicht parallel zur x-Achse läuft, nur einen einzigen x-Wert? Der Y-Wert von Segment 3 soll weiter oben liegen als der Y-Wert von Segment 2? Das Segment 3 liegt vollständig unterhalb von Segment 2, weshalb ich nicht mal erraten kann, was du meinst. Warum kommt Segment 4 nicht in Betracht? Weil es komplett rechts von Segment 1 liegt?



  • <---> schrieb:

    es geht darum aus einer Menge von Liniensegmenten, das nächstgelegene Obere Segment zu dem Startpunkt des gerade betrachtenen zu finden.
    z.B:

    Segment1 (3,2), (5,4)
    Segment2 (1,3), (4,4)
    Segment3 (2,2), (4,3)
    Segment4 (7,2), (9,3)

    Ich "stehe" an Startpunkt seg 1 (3,2) und suche das nächstgelegene obere Segment.
    „Über“ bezieht sich auf die Segmente, die bei der aktuellen X-Koordinate einen größeren Y-Wert haben.
    Kann ich das über die Geradengleichung lösen?
    y = m*x+n

    ja - das kannst Du mit Hilfe einer linearen Funktion lösen.
    Sei (x_0,y_0)(x\_0,y\_0) die Startpunktkoordinate und (x_1,y_1)(x\_1,y\_1) die Koordinate des Endpunkts des Segments, so lautet die lineare Funktion, die durch die beiden Punkte verläuft y(x)=y_1y_0x_1x_0x+y_0x_1y_1x_0x_1x_0y(x)=\frac{y\_1-y\_0}{x\_1-x\_0}x+\frac{y\_0 x\_1 - y\_1 x\_0}{x\_1-x\_0}

    Setzt Du die Daten aus Segment 3 da ein, so erhältst Du y(x)=12x+1y(x)=\frac{1}{2}x+1. nach Einsetzen des Startpunkts (x=3,2)(x=3,2) erhält man
    y(3)=2,5y(3)=2,5. Das liegt 'oberhalb' des Startpunkts - da 2,5>2 ist und unterhalb des Segments 2.
    Für Segment 2 lautet die lineare Funktiony(x)=13x+83y(x)=\frac{1}{3}x+\frac{8}{3}, also ist dort y(3)=313y(3)=3 \frac{1}{3}. Und dieser Wert ist größer als 2,5.
    Folglich ist lt. Deiner Definition das 'nächstgelegen' Segment das Segment 3 (mit dem Wert 2,5).

    <---> schrieb:

    Wie prüfe ich, ob der aktuelle X wert überhaupt in dem Bereich des zu prüfenden Segmentes liegt und wie rechne ich dann den y Wert an x aus?

    ganz einfach indem Du schaust, ob der x-Wert (hier x=3) im Intervall (das heißt zwischen) den beiden x_Werten des betrachteten Segments liegt.
    Das Intervall für Segment 2 ist [1;4] - x=3 liegt zwischen 1 und 4.
    Das Intervall für Segment 3 ist [2;4] - x=3 liegt auch zwischen 2 und 4.

    Programmtechnisch heißt das etwa

    if( x >= x_0 && x <= x_1 )
        {  // x liegt im Intervall [x_0;x_1]
    

    Gruß
    Werner


Anmelden zum Antworten