Domanda

Qual è il modo più semplice per disegnare una griglia esagonale algoritmicamente? Come non li ho presentare nei dati?

Ad esempio, in una griglia quadrata, ho potuto solo risparmiare x-y coordinate ..

È stato utile?

Soluzione

esagono è un libreria ordinata per i giochi AS3, ha alcune classi esagonali che potrebbero essere utile nella vostra ricerca. Questo articolo ha alcuni molto piacevoli dettagli sulle piastrelle esagonali in Flash .

Altri suggerimenti

Ci sono diversi modi per gestire esagonali coordinate della mappa e la maggior parte di loro unintuitively insistono su di loro mappatura di coordinate X-Y, che è importante solo per il rendering. Una qualche forma di coordinate polari di solito è meglio. Ho una libreria Perl per la gestione maggior parte dei calcoli vettoriali che è molto utile calcolo punto di riferimento come AI e altri alberi di ricerca.

http://en.wikipedia.org/wiki/Polar_coordinate_system

Per i sedili economiche, coordinate polari trame un punto come origine (come il grafico cartesiano xy standard), raccoglie un vettore come linea di base (come il cartesiano) e quindi indica punti (grandezza, gradi).

Quando questo colpisce davvero una casa-run con le mappe esagonali è che ogni angolo di pura è un multiplo di 60 gradi. Se si assegna ogni lato esagono un rivestimento ((a, b, d, e, f, g) e applicare un vettore come una grandezza e di fronte, diverse proprietà utili emergono.

1) Ogni esagono può essere rappresentata come somma di due vettori adiacenti (o un singolo vettore in cui il secondo vettore è una grandezza 0 o elemento identità). per esempio. 1a + 1b = 1a1b o 1b1a. In entrambi i casi, si tratta di un attraversamento di 2 esagoni, di magnitudo 2, e designa un esagono unico dall'origine (0,0). 2) vettori non adiacenti possono sempre essere semplificata per due vettori adiacenti applicano queste regole: 2) Negazione: 1A + 1D = 0, 1B + 1E = 0, 1C + 1F = 0, ad esempio 3) Combinazione: 1A + 1C = 1B, 1B + 1D = 1C, 1C + 1E = 1D, 1D + 1F = 1E, 1E + 1A = 1F

Tenendo a mente questi principi, un missile che deve attraversare lo spazio effettivo, ha bisogno di conservare i vettori come una concatenazione o l'ordine di attraversamenti più piccoli. 1A + 1A + 1C + 1C rappresenta un missile che viaggia due esagoni e poi banche bruscamente (120 gradi) e viaggia due esagoni, termina la sua attraversamento soli 2 esagoni ma 60 gradi fuori rotta dalla sua direzione iniziale.

Il computer di puntamento o risultanti esplosione, tuttavia, possono interessa solo il campo, in modo da semplificare tali vettori che utilizzano tali norme possono essere importanti. Per capire la distanza minima tra due punti qualsiasi, semplicemente concatenare i vettori e semplificare.

E 'anche abbastanza facile da creare una mappa esagonale e renderlo Creare un oggetto Hex come origine con le proprietà, Magnitudo = 0, vettore = NULL, Etichetta (opzionale) = qualche stringa (mi piace fare questo il valore leggibile), Name = 0 (la concatenazione della grandezza e Vector), e Esce = Array (avrete popolano 6 nodi, salvo wormholes o altro). Tracciare l'origine centrata sul pixel si sceglie di rendere il centro della mappa. Rendering l'esagono. Scegli un raggio per la vostra mappa

Magnitudo Foreach, --- popolare l'anello con ogni combinazione di vettori adiacenti. Ci sono un certo numero di modi per farlo, ma il più semplice è scegliere un singolo vettore come base e poi attraversare esagoni grandezza nella direzione appropriata e orbita con una girata di 60 gradi. per esempio. Per magnitudo 3, Inizia a 3E, poi andare 3A, 3B, 3C, 3D, 3E, 3F calcolando ogni esagono come somme dell'ultimo esagono attraversato e il nuovo singolo vettore esagono. --- In ognuno di questi esagoni, applicare un po 'di trigonometria per calcolare dove il pixel centrale dovrebbe essere relativo al pixel origine e rendere l'esagono

La speranza che aiuta qualcuno. Mappe Hex roccia. rendendoli succhia un po '.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top