Przecinanie się dwóch odcinków

Przecinanie się dwóch odcinków
T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

http://ideone.com/m0tKkS
Dlaczego funkcja intersection nie działa poprawnie? Te dwa odcinki nie przecinają się, jednak iloczyny wektorowe (wyznaczniki odpowiednich macierzy) są różnych znaków. Próbowałem liczyć to na tysiące sposobów, w każdym jednak jest problem, którego nie potrafię obejść lub jego obejście byłoby zbyt kosztowne czasowo. Co ciekawe - opierałem się na tym algorytmie
http://www.algorytm.org/geometria-obliczeniowa/przecinanie-sie-odcinkow.html
którego implementacja na owej stronie również uważa, że takie odcinki się przecinają.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
3

Ponieważ jest okropnie przekombinowana, linia przez A-B przecina linię przez C-D w:

Kopiuj
x=((Bx-Ax)*(Dx*Cy-Dy*Cx)-(Dx-Cx)*(Bx*Ay-By*Ax))/((By-Ay)*(Dx-Cx)-(Dy-Cy)*(Bx-Ax))
y=((Dy-Cy)*(Bx*Ay-By*Ax)-(By-Ay)*(Dx*Cy-Dy*Cx))/((Dy-Cy)*(Bx-Ax)-(By-Ay)*(Dx-Cx))

Wystarczy sprawdzić czy x lezy pomiędzy Ax a Bx

T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Wiem o tym, ale tutaj jest mnóstwo przypadków wynikających z dzielenia przez zero. Imo nie jest to dobre rozwiązanie. Tym bardziej, że tracimy na dokładności tutaj.

T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Nikt nie jest w stanie powiedzieć mi jak naprawić mój algorytm?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
  1. wywalić to co napisałeś.
  2. napisać wg tego co napisałem.
T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Twoje rozwiązanie jest błędne, nie uwzględnia kilku możliwości. Jedyne co napisałeś, to przekształcenie dwóch wzorów znanych z podstawówki.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Jest poprawne i nie uwzględnia jedynie zerowych długości wektorów.

T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

I dzielenia przez zero w dwóch przypadkach, skąd podczas implementacji tego robią się co najmniej trzy.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Tak dokładnie dwa przypadki:

  1. Pierwszy wektor ma zerową długość - czyli nie jest wektorem
  2. Drugi wektor ma zerową długość - czyli nie jest wektorem
T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

To może mnie mądrala oświeci w jakim punkcie

_13th_Dragon napisał(a):

linia przez A-B przecina linię przez C-D
gdzie A(0,0), B(1,1), C(1,1), D(5,5)

T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Temat brzmi "Przecinanie się dwóch odcinków". Proste wymyśliłeś sam, a te odcinki się przecinają, tak? Czy nie?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

W podpowiedzi http://4programmers.net/Forum/1095898 podałem wyraźnie, możesz sobie to przerobić na odcinki.

Vardamir
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1

Sprawdzaj po prostu czy oba punkty pierwszego odcinka znajdują się po tej samej prostej wyznaczonej przez drugi odcinek.
http://www.math.us.edu.pl/pgladki/faq/node102.html

T0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Zatem podales algorytm sprawdzania przecinania się "linii" poprzez wyliczenie punktu przecięcia i sprawdzenie czegoś tam? Genialne..

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.