TrianglesOverlap - kahden kolmion törmäystunnistus
Posted: Sun Mar 15, 2009 11:52 am
Terve kaikki!
Pitkästä aikaa kaivoin koneeni uumenista CoolBasicin saatuani idean kolmioiden törmäystunnistuksesta. Parin päivän bugijahdin jälkeen sain yksinkertaisen systeemin valmiiksi: funktio testaa täysin matemaattisesti, ovatko kaksi mielivaltaisen kokoista tasasivuista kolmiota päällekkäin. Viritys on vain vähän optimoitu rekursiivinen purkkapallo, mutta toimiva. Tulevaisuudessa yritän saada funktion testaamaan mitä tahansa kolmioita. Tätä saa kuka tahansa vapaasti optimoida (sopii ottaa selvää ) ja käyttää peleissään, mutta pelien krediiteissä olisi hyvä CB-foorumin nimeni mainita.
Mihin tätä voi edes käyttää? Kai sille jotain käyttöä löytyy, esimerkiksi jossain Gigabotin tapaisessa pelissä voivat robotit olla ylhäältä katsoen kolmioita.
Funktion käyttöohjeet:
Jos et tiedä mitä teet, kutsu
TrianglesOverlap(x1,y1,r1,a1,x2,y2,r2,a2)
jossa
xN,yN = kolmion N keskipisteen koordinaatit
rN = kolmion N keskipisteen ja kärjen etäisyys
aN = kolmion N pyörityskulma
Muita funktion parametreja, joita käytetään rekursioissa, ei käyttäjän tarvitse tietää. Voin kertoa ne, jos jotakuta kiinnostaa.
Esimerkki:
Itse funktio:
Kommenttia ja parannusehdotuksia saa antaa.
EDIT: olin siivotessani poistanut tärkeän tarkistuksen. Vanha versio jakoi nollalla, jos käänsi kolmion oikeaan asentoon.
EDIT2: Lisää säätöä. Nyt saattaa toimia nopeammin, mutta ei välttämättä aina samalla nopeudella.
EDIT3: Paha aukko löytyi! Korjaan ja optimoin ennen kuin saatte koodit takaisin.
Pitkästä aikaa kaivoin koneeni uumenista CoolBasicin saatuani idean kolmioiden törmäystunnistuksesta. Parin päivän bugijahdin jälkeen sain yksinkertaisen systeemin valmiiksi: funktio testaa täysin matemaattisesti, ovatko kaksi mielivaltaisen kokoista tasasivuista kolmiota päällekkäin. Viritys on vain vähän optimoitu rekursiivinen purkkapallo, mutta toimiva. Tulevaisuudessa yritän saada funktion testaamaan mitä tahansa kolmioita. Tätä saa kuka tahansa vapaasti optimoida (sopii ottaa selvää ) ja käyttää peleissään, mutta pelien krediiteissä olisi hyvä CB-foorumin nimeni mainita.
Mihin tätä voi edes käyttää? Kai sille jotain käyttöä löytyy, esimerkiksi jossain Gigabotin tapaisessa pelissä voivat robotit olla ylhäältä katsoen kolmioita.
Funktion käyttöohjeet:
Jos et tiedä mitä teet, kutsu
TrianglesOverlap(x1,y1,r1,a1,x2,y2,r2,a2)
jossa
xN,yN = kolmion N keskipisteen koordinaatit
rN = kolmion N keskipisteen ja kärjen etäisyys
aN = kolmion N pyörityskulma
Muita funktion parametreja, joita käytetään rekursioissa, ei käyttäjän tarvitse tietää. Voin kertoa ne, jos jotakuta kiinnostaa.
Esimerkki:
Code: Select all
// korjauksessa (saattaa tulla takaisin)
Code: Select all
// korjauksessa (saattaa tulla takaisin)
EDIT: olin siivotessani poistanut tärkeän tarkistuksen. Vanha versio jakoi nollalla, jos käänsi kolmion oikeaan asentoon.
EDIT2: Lisää säätöä. Nyt saattaa toimia nopeammin, mutta ei välttämättä aina samalla nopeudella.
EDIT3: Paha aukko löytyi! Korjaan ja optimoin ennen kuin saatte koodit takaisin.