Współrzędne punktu na linii lub odcinku

0

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:

  1. Zapisuję linię jako wektor i obliczam jego długość oraz wektor jednostkowy (czyli wektor podzielony przez jego długość, osobno dla X i Y).
  2. 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ą.
  3. 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.

  1. 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:

  1. 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.
  2. 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.

2

Ja chyba czegoś nie rozumiem, bo to jest prosty problem jedno wymiarowy,
podziel długość odcinka |P1, P2| przez liczbę segmentów, by dostać długość pojedynczego segmentu
a potem podziel odległość odcinka |P1,Q| przez długość pojedynczego segmentu, i masz indeks
pewnie o coś innego chodzi, bo to byłoby za proste :D

0

i dzielę na tyle części, ile wynosi długość wektora (tutaj 10)

W jaki sposób wyliczyłeś, że długość wynosi 10?

0

Wystarczy policzyć interwał czasoprzestrzenny, to są przecież podstawy o świecie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1