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.
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/
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ää :)
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.
Juup, laitan ton oman viritelmäni peliin, kun se kerta tuntuu toimivan tarpeeksi nopeasti.
Kiitos kumminkin!
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/
Se on käsittelee kyllä pallon ja polygonin törmäystä, mutta se on helppo yksinkertaistaa ympyrän ja janan törmäykseksi.
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.
Kiitokset tosiaan Markukselle noista linkeistä, juuri tuollaista sivua etsiskelinkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.