Mam linię łączącą 2 punty:
P1 = [1, 2]
P2 = [10, 2]
Dodatkowo na tej linii znajduje się punkt Q o współrzędnych [4, 2]
Zapisuję sobie ową linię jako wektor i dzielę na tyle części, ile wynosi długość wektora (tutaj 10), następnie każdej z tak wydzielonych części, przypisuję jej współrzędną leżącą na tej linii:
1 = [1, 2]
2 = [2, 2]
3 = [3, 2]
4 = [4, 2]
itd., aż do 10
Używając prostego wzoru mogę wyliczyć, że punt Q [4, 2] znajduje się w 4 części tej linii. To działa jednak tylko wtedy, gdy muszę przejmować się jedną współrzędną (a więc na liniach idealnie pionowych i poziomych). Nie wiem natomiast jak mam osiągnąć podobny efekt przy liniach niepoziomych i niepionowych.
Obecnie robię coś takiego:
- Zapisuję linię jako wektor i obliczam jego długość oraz wektor jednostkowy (czyli wektor podzielony przez jego długość, osobno dla X i Y).
- Biorę współrzędną P1 i w pętli dodaję do niej wektor jednostkowy zwielokrotniony o N (powtarzam to tyle razy ile wynosi długość wektora), a potem zaokrąglam by uzyskać właściwą współrzędną.
- Z powyższej operacji otrzymuję tablicę wyników:
1 = P1 + (0 x Wektor Jednostkowy)
2 = P1 + (1 x Wektor Jednostkowy)
3 = P1 + (2 x Wektor Jednostkowy)
4 = P1 + (3 x Wektor Jednostkowy)
itd.
- Przelatuję całą tablicę i porównuję, czy któraś z wartości X, Y nie jest równa współrzędnej punktu Q. Jeżeli tak to mam odpowiedź i wiem, że punkt Q leży np. w 8 części linii P1-P2.
==============
PROBLEMY:
- Nie jest to rozwiązanie zbyt szybkie ani zbyt eleganckie, zwłaszcza przy dłuższych liniach i większej ilości poszukiwanych punktów.
- Czasem zdarza się taka, że żadna z wyznaczonych w ten sposób części nie odpowiada poszukiwanej współrzędnej punktu Q (nieraz to różnica o 0,1 czy 1,0 ale jednak) i algorytm zwraca pustkę.
Ktoś ma jakiś pomysł jak to rozwiązać? Chciałbym to mieć na zasadzie funkcji, gdzie podaję współrzędne linii, a także współrzędne punktu Q, otrzymując zwrotkę w postaci indeksu części linii, w której leży punkt Q.