W
<---> 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)(x_0,y_0) die Startpunktkoordinate und (x_1,y_1)(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_1−y_0x_1−x_0x+y_0x_1−y_1x_0x_1−x_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}y(x)=x_1−x_0y_1−y_0x+x_1−x_0y_0x_1−y_1x_0
Setzt Du die Daten aus Segment 3 da ein, so erhältst Du y(x)=12x+1y(x)=\frac{1}{2}x+1y(x)=21x+1. nach Einsetzen des Startpunkts (x=3,2)(x=3,2)(x=3,2) erhält man
y(3)=2,5y(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}y(x)=31x+38, also ist dort y(3)=313y(3)=3 \frac{1}{3}y(3)=331. 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