J'ai pas très bien compris ce que tu voulais, mais je vais quand même essayer de t'expliquer le fonctionnement de MapAndreas.
Alors, MapAndreas stock toute les coordonnées Z dans un tableau à une dimension, de 72000000 octets (~68.6 méga octets).
Donc, la normalement si on connait un peu le plugin MapAndreas, on va se dire mais comment un tableau à une dimension peut servir à stocker la position Z selon X et Y.
Le plus logique serai d'utiliser un tableau à deux dimension.
Oui, mais on peut quand même utiliser un tableau à une dimension pour cela car au niveau mémoire, ces deux lignes sont exactement les mêmes.
unsigned short m_pPointData[6000][6000];
unsigned short m_pPointData[6000*6000];
La seule différence est la façon d'accéder aux données, par exemple pour accéder à X, Y.
m_pPointData[X][Y];
m_pPointData[X * 6000 + Y]; // (Par contre Kye, a inversé X et Y) c'est pour cela qu'il multiplie Y par 6000
Il n'existe pas de faille au niveau des valeurs (si tu parle de sortir de la limite du tableau) car, juste avant il vérifie que les valeurs sont bonnes.
if(X < -3000.0f || X > 3000.0f || Y > 3000.0f || Y < -3000.0f) return 0.0f;
Et ensuite ces calculs la
int iGridX = ((int)X) + 3000;
int iGridY = (((int)Y) - 3000) * -1;
ne servent qu'à faire en sorte que X et Y commencent à 0 car elles peuvent être négative et permettent d'arrondir à l'inférieur, pour qu'ensuite on puisse accéder à la bonne valeur de Z dans le tableau.
Par exemple :
X = -2999.7894, sera transformé en 0
X = 1500.897, sera transformé en 4500
Y = -2.549, sera transformé en 3002.
Y = 3000, sera transformé en 0.
J'espère que j'aurai répondu à quelques une de tes question car je suis pas sûr que ce soit ce que tu ai demandé.