[ StefanJer91 @ 22.01.2008. 20:33 ] @
Aj prvo da kazem za sta mi ovo treba: Ja se bavim programiranjem, tj programiranjem igara za cije je pravljenje potrebno dosta matematike tj. logike uopste. Igra na kojoj radim je sidescroller (gleda se sa strane kao u super mariju), stim sto je dosta naprednije. Posto sam uspeo da uradim fiziku za igru i detekciju kolizije za razlicita geom. tela, bilo mi je potrebno da odradim lasere kojih ce biti u igri. Kako bi igra brze radila (bila optimizovanija), cela mapa u igri je podeljena na celije. Sve celije ustvari predstavljaju matrix. Celija sadrzi informaciju o tome kakva se tela nalaze u njoj (to su staticka i dinamicka). Laser se moze reprezentovati kao poluprava mada ga ja definisem sa 2 vektora. 1 vektor predstavlja njegovu poziciju, dok je drugi tu samo da bi odredio smer (dakle on moze biti jedinicni). Uspeo sam da napravi da lako pronadjem celije kroz koje zrak prolazi, za ovaj trenuto problem nije ni bitno kako. E sada za svaku celiju u kojoj je laser moze biti neki staticni objekat kroz koji laser ne bi trebalo da prodje. Jedan od staticnih objekata u igri je i krug. Ja sam dosta lupao glavu, ali nisam uspeo da pronajdem resenje kako bih ovo uradio sa vektorima, tako da mi je na kraju jedino preostala linearna f-ja i slucaj kada je laser paralelan sa y osom (dakle prava linija ali nije linearna f-ja ). Dakle ono sto mi je potrebno su tacke u kojima se prava i krug seku u slucaju da ih ima. Evo kako sam to uradio preko linerne f-je: laser predstavim kao lineranu f-ju tj. y = k*x+n i imamo ovu jednacinu x^2+y^2 = R^2 Recicemo da je kordinatni pocetak u centru kruga. Dakle R nam je poznato i k i n nam je poznato, ostaje nam da nadjemo x i y: x^2 + (k*x + n)^2 = R^2 x^2 + k^2*x^2 + 2*k*n*x + n^2 - R^2 = 0 Ovo je ustvari kvadratna jednacina: (1 + k^2)*x^2 + 2*k*n*x + (n^2 - R^2) = 0 Radi bolje citljivosti bice da je: A = 1 + k^2 B = 2*k*n C = n^2 - R^2 determinanta je: D = B^2 - 4*A*C Dalje i sami znate kako da dobijete x i y... Ako je D = 0 znaci da prava tangira krug, ako je D > 0 znaci da ga sece pa imamo 2 resenja, a ako je D < 0 znaci da se krug i prava ne seku. Dakle moje pitanje je dal postoji nacin da se ovo odradi vektorski? Od informacija posedujete pocetnu tacku lasera, njegov smer (moze biti to drugi vektor, ugao nije ni bitno..) i naravno poziciju centra i poluprecnik kruga. Izvinjavam se za ovoliki tekst, koji ni nije bio potreban, al jbg kad sam se vec raspisao :) |