2D gömb

Fórumok

Nemrég gondolkodtam, hogy nekiállok csak úgy programozgatni szabadidőmben, egy felülről 2d mászkálós (egy kicsit klasszikus rougelike) játék lenne a cél, egy elég nagy térképen... itt jön kérdés, amire nem találtam választ: hogy lehetne leglogikusabban megoldani, hogy egy bolygó (kisbolygó :) ) gömbfelszinén a klasszkus 2D megjelenítéssel mozogjon valaki? Ugyanis ha elindul észak felé (felfelé), előbb utóbb eljut az Északi-sarkra, ahonnán tovább menve felfele, valójában már fejjel lefele megy dél felé, meg a többi problémás dolog, ami ebből a furcsa vetületből fakad...
Elsőre ilyen halva született ötletnek tűnik, de hátha valakinek lenne ötlete... :)

Hozzászólások

en csak atdobmnam a karakter poziciojat mutato valtozo erteket a masik vegkiteresre. 2D-ben valoban nehez gombot abrazolni, szoval szerintem siman eleg mondjuk egy teglatest alaku terkep es ott teljesen egyertelmu, ha valamely koordinata "tulcsordulna" akkor oda dobod neki a masik vegerteket az adott tartomanynak es kesz is.

-------------------------------------------------------------------
Semmi közöm ahhoz, ami aktuális. Az mindig látszat...

(Amíg az ember egyszer nem szembesül egy konkrét feladattal, bele se nagyon gondol, mennyire nem egyszerű munka végeredménye az a hétköznapi dolog, hogy bárminek a térképét megnézheti.
Azt meg pláne nem sejti, hogy ahhoz a térképhez mennyit kell csalni. http://thetruesize.com)

Ez elég egyszerű, de torus alakú geometriát eredményez (észak-dél kör és kelet-nyugat kör csak egy pontban metszik egymást), ami lehet, hogy nem probléma.
Valami koordináta transformációval gondolnám megoldani, ha tényleg gömb kell, de arra nem jut egyszerű megoldás az eszembe.

Topológiailag nézve ha északon vagy, akkor onnan tetszőleges szélességre tudnod kéne lépni.

Talán négyzet alakú pálya helyett ha mondjuk köralakú lenne (egy csomó koordináta levágva), és ugyanígy, csak vízszintesen dobálna, akkor topológiailag is rendben lenne. Nem "gömb" lenne, de egy valamilyen krumpli.

Mint ahogy egy térkép kinéz.

A helyzete a karakternek egy érték ami nyilván a gömb geometriáját veszi alapul és az alapján lesznek a szabályszerűségei, de annak megjelenítése egy másik kérdés, az az, hogy hogyan fogsz a kettő közt transzformálni, vagyis mennyire.

Javaslom, nézd meg például a régi jó UFO Enemy Unknown-t, hogyan oldja meg ezt a kérdést. Nem feltétlenül gond szerintem, hogy az északi sark után dél fele menet kvázi "fejjel lefele" megy, ha van valami gomb, amivel "resetelheted" a nézetet.

Nem X+Y-ban kell gondolkodni, hanem eleváció+azimuth-ban.

Fuszenecker Róbert

Tehat:
- Lokalisan mindig tudsz definialni egy koordinatarendszert, lenyegeben a gomb adott pontjahoz tartozo erintosikjaban felveszel ket egymasra meroleges egysegvektort.
- Pelda: allsz valahol a Foldon, mondjuk az egyszeruseg kedveert valahol a Guinea-i obolben (foldrajzi szelesseg = 0, foldrajzi hosszusag = 0). Az egyik egysegvektor kelet fele mutat, a masik pedig eszak fele mutat (de nem az eszaki sark iranyaba mert az nincs benne az erintosikban).
- A jobbra-balra nyillal tudsz mondjuk az elso egysegvektor menten mozogni (konkretan: jobbra: a vektor menten elore, balra: a vektorral ellentetes iranyban), a fel-le nyillal a masodik egysegvektor menten.
- Igy elindulhatsz barmerre a ket egysegvektor menten, ugy hogy (infinitezimalis lepeseket nezve) mindig visszavetited a poziciodat a gomb felszinere.
- Peldaul ha a masodik egysegvektor menten mesz igy 10000km-t, akkor az eszaki polusra jutsz, ugyhogy az elso egysegvekor delre fog mutatni (konkretan valahol az egyenlito menten levo, Sri Lankatol delkeletre levo pontra), a masik egysegvektor meg szinten del fele fog mutatni (konkretan valahova a Csendes-ocean kozepere).
- Ha innen elindulsz mondjuk az elso egysegvektor menten 10000km-t, akkor Sri Lanka kozelebe, az egyenlitohoz jutsz.
- Ha innen tovabbmesz a masodik egysegvektor menten 10000km-t hatrafele akkor visszajutsz a kiindulasi pontba, _de_ az elso egysegvektor az del fele fog mutatni, a masodik pedig keletnek. Azaz a koordinatarendszered elfordult 90 fokkal.

Szoval lehet maszkalni, ha:
- Az erintosikon felvett koord rendszert is "viszed magaddal" a maszkalas soran.
- Elfogadod azt a tenyt hogy a gomb az egy ilyen vicces dolog: azaz, hogyha vissza is jutsz ugyanoda, lehet hogy a nezopontod az elfordul kisebb-nagyobb mertekben.
- Legkenyelmesebben ezt ugy tudod felprogramozni hogy a ket foldrajzi koordinata mellett folyamatosan tarolod a 2x3 darab terbeli koordinatajat az egysegvektoroknak. Ez ugye redundans, viszont csak 3 szammal nem tudod megoldani (naivan pl a ket foldrajzi koordinata + elforgatas szoge) mert vannak a gombon olyan pontok, ahol az "elforgatas szoge" nem ertelmezheto: lasd pl polusok a naiv egyszeru szokasos foldrajzi koordinatazasban.
- Lehet mindenfele egyeb trukkoket bevetni (SO(3) matrixok, kvaterniok, ...) amik kis tapasztalattal mar marha intuitivek lesznek es minimalizaljak a tarolando valos szamok szamat. A trukk alapja az hogy a ket egysegvektor vektorszorzata _mindig_ egy olyan vektor lesz, ami a gomb kozeppontjaba helyezve pont a maszkalas helye fele mutat. Harom darab egymasra kolcsonosen meroleges egysegvektor egy SO(3) matrixot ad, amit viszont ekvivalens modon tudsz 4 darab valos szammal, kvaternio formajaban abrazolni, lasd itten.

-

[insert line here]
B.C. 3500 - DIY Vehicle / A.D. 30 - DIY Religion / A.D. 1991 - DIY OS

Futball-labda lefedés?

Üdv,
Marci