← Back to topics
Topic

z-skakac

n
nrmmyth
Zanimaju me vasa rijesenja.
I kad ce biti dostupni test podatci za ovaj problem.

Pozdrav.
r
rajkon
Moje reshenje :

od svake krajnje tacke linije sam napravio novih 8 tacaka (+-0.01,+-0.01) ...
i onda povezem one koje mogu da se povezu, pustim bfs, i to je to ... :)
n
nrmmyth
nesto sam i ja slicno napravio... slijedi da je greska bila u kodu ne u algoritmu...
n
nalism
jel postoji laksi i brzi nacin proveravanja da li se dve duzi seku, osim racunanja presecne tacke ?? sta mislite?
a
andrejko
Pa jednostavno je. Da bi ispitao da li se duzi AB i CD seku samo treba da vidis daje VP (A, B, C) * VP (A, B, D) <= 0 i VP (C, D, A) * VP (C, D, B) <= 0. To ustvari znaci da su tacke C i D sa razlicitih strana prave AB (tj. da cu A i D sa razlicitih strana prave CD).
n
nalism
sta je "VP"? :)
n
nalism
cek, cek, onda ne razumem oznaku VP (tacka A, tacka B, tacka C)? ???
jel to vektorski proizvod vektora AB i vektora BC!
a
andrejko
Izvinjavam se sto to nisam objasnio :-)
Da VP (A, B, C) je proizvod vektora AB i BC, tj.


VP (A, B, C) = (A.x - B.x) * (C.y - B.y) - (C.x - B.x) * (A.y - B.y)

tj.
                     | 1  A.x  A.y |
VP (A, B, C) = | 1  B.x  B.y |
                     | 1  C.x  C.y |


Takodje imas da je: |VP (A, B, C)| * 0.5 = Povrsina_trougla_ABC.
n
nalism
da, da... sad je jasno, provalio sam! :)
jos sam pomislio da se onda vektorski mora racunati uz pomoc sinusa a ovako je preko determinante jos lakse!
hvala puno Andrejko!