Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Ympyrän (tai pisteen) ja janan törmäystarkistus

Gaxx [02.10.2004 13:25:16]

#

Olen jo jonkin aikaa miettinyt kuinka voisin tehdä törmäystarkistuksen ilman ruutuja pelkillä pelkillä viivoilla. Eräänlaisen purkkaviritelmän olen päässäni kehitellyt, muuta en sitä ole vielä testannut.

Siispä, jos joku tietää hyvän ratkaisun tällaiseen, niin olisi kiva kun vähän valaisisi minuakin.

Tarkoitus on siis saada laskettua pisteen etäisyys janasta.

Edit: Tiedossa on siis janan päätepisteet ja törmäävän pisteen/pallon koordinaatit.

Blaze [02.10.2004 13:44:52]

#

Pisteen etäisyys suorasta:
d = |ax_0 + by_0 + c| / sqrt(a^2 + b^2)
(Lähde: MAOL-taulukot)

Lukion pitkänmatikan vitoskurssin asiaa :)

Edit: Tuossa vielä kyseinen sivu kirjasta: http://pp.kpnet.fi/blaze/temp/pisteenetaisyyssuorasta.jpg

Nuo suorien yhtälöt on meikäläisellä aika tehokkaasti painunu unholaan (kuten muukin matikka ^^;;), mutta jos sulla on tiedossa janan päätepisteet, niin voinet soveltaa tuota "pisteiden (x1, y1), (x2, y2) kulkeva suora", y - y1 = [(y2 - y1) / (x2 - x1)] * (x - x1) kaavaa joka kaiketi pitää sieventää tuohon normaalimuotoon ax + by + c = 0, jotta voit napsia nuo kertoimet tuohon "pisteen etäisyys suorasta" kaavaan.

Joku mahdollisesti lukiossa tällä hetkellä oleva tai ainakin minua paremmin matikkaa osaava selventäkööt lisää :)

Gaxx [02.10.2004 14:05:06]

#

Blaze kirjoitti:

Pisteen etäisyys suorasta:
d = |ax_0 + by_0 + c| / sqrt(a^2 + b^2)
(Lähde: MAOL-taulukot)

ax_0 + by_0 + c on kai sen suoran yhtälö ja a ja b pisteen koordinaatit. Lukion pitkänmatikan vitoskurssin asiaa :)

Juu, itsekin juuri suoritin kyseisen kurssin ja kaava on vielä hyvässä muistissa. Ongelma on kumminkin siinä, ettei kaavaa voi käyttää sellaisenaan, sillä suoralla ei ole päätepisteitä. Viiva(suora) siis kulkisi koko pelikentän halki.

Oma purkkaviritykseni perustuu kaavaan, muuta lisäehtona on, ettei summa(törmäävän pisteen etäisyys janan päätepisteistä) ole enempää kuin janan_pituus + mahdollisen ympyrän säde(siis tietenkin janan vastakkaisesta päästä).

Onko olemassa parempaa vaihtoehtoa?

Edit: ehkä olisi kuitenkin parempi käyttää janan keskipistettä pisteenä josta lisäehdon pituus laskettaisiin.

Edit2: Siis jos "lisäehto" toteutuu, niin sitten vasta lasketaan pisteen_etäisyys_suorasta kaavalla.

Gaxx [02.10.2004 16:05:58]

#

Juup, laitan ton oman viritelmäni peliin, kun se kerta tuntuu toimivan tarpeeksi nopeasti.

Kiitos kumminkin!

Markus [02.10.2004 16:35:09]

#

Et voi käyttää MAOL:ssa olevaa kaavaa, koska se ei käsittele oikein joitakin erikoistapauksia esim. pystysuoraa janaa. ympyrän ja janan etäisyyden laskemiseen löytyy kaava mm. http://astronomy.swin.edu.au/~pbourke/geometry/

Lue myös http://www.gamedev.net/reference/articles/article1026.asp .
Se on käsittelee kyllä pallon ja polygonin törmäystä, mutta se on helppo yksinkertaistaa ympyrän ja janan törmäykseksi.

Gaxx [02.10.2004 17:06:36]

#

Joo, huomasin kans just ennen kuin päivitin, ettei tota pisteen etäsyys suorasta kaavaa voi käyttää juuri tuon pystysuorajutun takia. Kiitos linkeistä! Eiköhän tämä tästä rupea edistymään.

firebug [02.10.2004 22:21:46]

#

Kiitokset tosiaan Markukselle noista linkeistä, juuri tuollaista sivua etsiskelinkin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta