Biorąc pod uwagę 4 punkty opisujące 2 segmenty linii, jak obliczyć, czy linia A jest w kierunku do linii B czy od niej?
Dwie linie mają stałą długość i można je zmierzyć jako odległość od x1 / y1 do x2 / y2.
Biorąc pod uwagę 4 punkty opisujące 2 segmenty linii, jak obliczyć, czy linia A jest w kierunku do linii B czy od niej?
Dwie linie mają stałą długość i można je zmierzyć jako odległość od x1 / y1 do x2 / y2.
Odpowiedzi:
Niech A
i B
dwa punkty na czarnej linii. Pozwól C
i D
bądź twoim niebieskim segmentem. Znak z
współrzędnej krzyżowego iloczynu AB^AC
informuje, czy C
„lewa”, czy „prawa” czarnej linii. Podobnie, krzyżowy produkt AB^CD
informuje, czy CD
steruje „w lewo” czy „w prawo” czarnej linii.
Naprawdę nie chcemy wiedzieć, czy jest w lewo, czy w prawo; wszystko, czego chcemy, to upewnić się, że są w tym samym kierunku lub w przeciwnym kierunku, dlatego mnożymy te dwie wartości.
Dlatego powinien działać następujący pseudokod:
z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;
if (z3 < 0)
; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
; /* Pointing away */
else
; /* Parallel */
Obawiam się, że potrzebuję trochę czasu, aby napisać właściwe rozwiązanie dla krzywej Beziera. Czy następująca sytuacja jest w kierunku, czy nie?
Zakładając, że punktem początkowym jest zielone kółko, a punktem końcowym jest czerwona strzałka
Oblicz odległość między punktem początkowym jako DS i czarnym segmentem i zrób to samo dla punktu końcowego (czerwona strzałka) jak DE. Jeśli DS> DE, segment wskazuje w kierunku. jeśli DE> DS, to wskazuje. Jeśli oba są równe, oba są równoległe.
Można znaleźć w jaki sposób obliczyć odległość od punktu do segmentu tutaj oraz kwadratowej Krzywa Beziera tutaj . Jednak w zależności od kształtu krzywej Beziera może ona zwracać dziwne wyniki (krzywa może się przecinać)