Przecinanie się dwóch odcinków

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ą.

3

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

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

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.

0

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

1
  1. wywalić to co napisałeś.
  2. napisać wg tego co napisałem.
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.

0

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

0

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

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
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)

0

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

0

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

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

0

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

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