Przecinanie się dwóch odcinków

Odpowiedz Nowy wątek
2014-12-29 00:37
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/geome[...]przecinanie-sie-odcinkow.html
którego implementacja na owej stronie również uważa, że takie odcinki się przecinają.

edytowany 1x, ostatnio: test001, 2014-12-29 00:44

Pozostało 580 znaków

2014-12-29 00:58
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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-29 02:44
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.

A ja widzę tylko 2 przypadki w którym jest dzielenie przez 0, gdzie widzisz to mnóstwo? - misiakufal 2014-12-29 09:18
Jaki byłby zatem algorytm rozwiązania tego problemu? Uwierz mi, ze tak to pisałem i kod wygląda o wiele gorzej niż rozwiązanie z iloczynem wektorowym. - test001 2014-12-29 11:11

Pozostało 580 znaków

2014-12-29 19:41
0

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

Pozostało 580 znaków

2014-12-29 20:04
1
  1. wywalić to co napisałeś.
  2. napisać wg tego co napisałem.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-29 22:20
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.

Pozostało 580 znaków

2014-12-29 22:22
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-29 22:36
0

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

Pozostało 580 znaków

2014-12-29 22:40
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

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-30 14:23
0

Jesteś pewien?
http://ideone.com/fCul0s
http://ideone.com/AeRRKS

edytowany 1x, ostatnio: test001, 2014-12-30 14:24

Pozostało 580 znaków

2014-12-30 14:35
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)


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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