Kezdőoldal » Számítástechnika » Programozás » Galaxis legenerálás, hogyan?

Galaxis legenerálás, hogyan?

Figyelt kérdés
Unityben próbálkozom. Egy galaxist szeretnék legenerálni de vannak vele problémáim. Itt egy kód igen egyszerű: [link] (1 et cseréld le i re.) Random pozícióra rak gömböket. De a gond az néha a gömbök egymáshoz érnek. Hogyan lehetne megoldani, hogy legyen köztük egy minimális távolság. Gondoltam arra hogy egy másik láthatatlan gömböt rakok köréje és ha benne van egy másik gömb akkor legenerál egy újabb pozíciót. De engem igazi megoldás érdekelne. Az algoritmus megtervezése okoz gondot. Nem vagyok egy matek zseni. Hogyan generálhatnék úgy pozíciókat, hogy random legyen, de túl közel sem kerülhetnek egymáshoz a gömbök? Esetleg még az lenne rossz ha a galaxis közepe fele sűrűbben fordulnának elő a gömbök, mint egy igazi galaxisban. Csak az algoritmus érdekel. Vagy egy elméleti matematikai megközelítés.

2014. dec. 23. 13:20
 1/9 anonim ***** válasza:

1. Eltárolod minden létrehozott gömb középpontját és sugarát

2. Amikor generálsz egy következő gömböt, akkor végignézed az eddigi gömböket, és ha az új gömb középpontja valamelyik régi gömb középpontjától vett távolsága < (régi_gömb_sugara + új_gömb_sugara + elvárt_távolság), akkor újragenerálod.

2014. dec. 23. 15:02
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:

Hasznalhatsz peldaul graph layout algoritmusokat. Ott szokas reszecske taszitas/vonzas szimulaciot hasznalni annak megoldasara, hogy a csucsok ne legyenek egymashoz tul kozel, de tul tavol sem. Ez azt is megoldja, hogy a galaxis kozepen surubben legyenek a gombok.


Itt van egy jo cikk a Wikipedian, ami elmondja, hogy mirol is beszelek. Van egy kep is, ami szerintem pont olyan, mint amilyet te szeretnel generalni.

[link]


Itt van peldaul egy nyilt forrasu JavaScript implementacio

[link]

2014. dec. 23. 15:18
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:
Hello az első megoldásra én is gondoltam, minél több a gömb annál többet kell számolni. Nem tetszik. A második megoldás sokall érdekesebb. Köszönöm megnézem.
2014. dec. 23. 16:17
 4/9 anonim ***** válasza:
51%

Ha az elsőnél sokat kell számolni, akkor szerinted a másodiknál keveset???

Az első megoldást úgy tudod optimalizálni, hogy a teret felosztott akkora szegmensekre, amiknek minden oldala a maximális gömbátmérő + a biztonsági távolság. Amikor létrehozol egy új gömböt, azt is eltárolod, hogy melyik szegmensben van. Ellenőrzésnél csak a szomszédos szegmensben lévő gömböket kell ellenőrizned. A végigjárást nem spórolod meg, de a távolságszámítást e legtöbb esetben igen.

A galaxis közepe felé sűrűsödést pedig úgy éred el, hogy nem egyenletes eloszlású véletlen számokat generálsz a helyzetüknek, hanem pl. normál eloszlásút.

2014. dec. 23. 17:05
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

#1 vagyok


Igen, lényegében a te gondolatodat tisztáztam le. És scribával egyet értve, nem gondolom, hogy a részecske- és gravitáció szimuláció hatékonyabb lenne, mint egy szimpla O(n)-es számítás. Pláne scriba optimalizálásával. Persze a sűrűsödést lehet, hogy szebben oldja meg a szimuláció. :)


Egyébként az objektumok ADATAINAK legenerálása

(1) pillanatok alatt megvan, tök felesleges a milliszekundumokon aggódni és emiatt elvetni egy egyszerű és triviális megoldást, és

(2) csak 1x kell megcsinálni a játékmenet előtt.

2014. dec. 23. 18:10
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:
Áhh csak a szomszédos szegmenst kell ellenőrizni én erre nem is gondoltam. Én úgy gondoltam ha van 10000 ezer gömb akkor mind a 10000 pozíciót megvizsgálnám, egyenként. :)
2014. dec. 23. 20:21
 7/9 anonim ***** válasza:

Szerintem az en megoldasom szebb eredmenyt ad, abban viszont valoban igazuk van, hogy sokkal tobb szamitast igenyel. Szerintem ugy kb. 1000-3000 bolygo eseten lehet 2 masodperc alatti generalasi idovel szamolni. Ha ennel tobb kell, akkor lassu lesz.


Viszont, a ket emlitett megoldast kombinalni is lehet, ugyanis az en altalam linkelt megoldas lenyegesen gyorsabb, ha nem kell sokat alakitani az elrendezesen. Vagyis, ha egy masik algoritmussal keszul egy megkozelitoleg jo elrendezes, akkor nagyon-nagyon gyorsan tudja tokeletesiteni.

2014. dec. 24. 01:35
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:

Az #1. a fapados 'gány' megoldás. A #2. szép. Sokkal szebb és eltszerűbb eredményt fogsz kapni, mint egy teljesen randomizált algoritmussal.


A futási idő szerintem ebben az esetben mellékes. Komoly, nagy méretű modelleket nem szokás on-the-fly generálni:

legnerálod -> eltárolod -> dolgozol vele. Ha újra kell kezdeni visszatöltöd, de nem generálsz minden egyes futtatásnál.

2014. dec. 24. 12:33
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

Ha esetleg valakit érdekelne itt találtam tökéletes (fél )megoldást. Megoldható a dolog. [link]


Nearest-neighbor search

2014. dec. 24. 23:56

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!