www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit adb5d714d9510104e9abb3b4de34ab409fd26a6b
parent 0a7ea95bd8c25187b82517c8db5dedef6275f04b
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Sun,  2 Oct 2011 12:17:31 +0200

Petite optimisation de la fonction de hachage.

Diffstat:
Mdisplay.c | 4++--
Mroam.c | 39+++++----------------------------------
2 files changed, 7 insertions(+), 36 deletions(-)

diff --git a/display.c b/display.c @@ -102,12 +102,12 @@ int main() { // Pour afficher le terrain : /* int x; */ /* int y; */ - /* #define SIZE 256 */ + /* #define SIZE 1024 */ /* printf("P5 %d %d 255\n", SIZE, SIZE); */ /* for (y = 0; y < SIZE; y++) { */ /* for (x = 0; x < SIZE; x++) { */ /* //int bit = y / (SIZE/32); */ - /* //int h = hash2(t,hash2(x, y)); */ + /* //int h = hash2(x, 300+y); */ /* //if (y % (SIZE/32) == 0) h = 0; */ /* //printf("%c", ((h >> (31-bit)) & 1) * 255); */ /* //printf("%c", interpolation(256+x, 256+y, 256, 256, 512, 512, 0, 255, 255, 255)); */ diff --git a/roam.c b/roam.c @@ -41,23 +41,17 @@ int getFirstTriangleSize(Triangle* t) { return sqrt(((t->vRight->x - t->vLeft->x)^2) + ((t->vRight->y - t->vLeft->y)^2)); } -// TODO : à supprimer. -unsigned int getValueForSeed(unsigned int seed) { - unsigned int primeA = 65521; // Plus grand premier < 2^16 - unsigned int primeB = 4294967291U; // Plus grand premier < 2^32 - return ((seed * primeA) ^ ((seed+1) * primeB)) + seed; // + seed pour éviter d'avoir uniquement des nombres impairs. -} - // Ce hash donne des bons résultats sur tous les bits de l'entier // généré (pas d'artefacts, répartition homogène des 0 et des 1). unsigned int hash2(unsigned int a, unsigned int b) { unsigned int h = 1; int i; for (i = 0; i < 32; i+=8) { - a *= h; - b *= h; - h = h * 65599 + ((a >> i) & 0xff); - h = h * 65599 + ((b >> i) & 0xff); + a = a*h + 1; + b = b*h + 1; + // marche aussi avec 65521. + h = (h << 6) + (h << 16) - h + ((a >> i) & 0xff); // h * 65599 + ieme octet de a + h = (h << 6) + (h << 16) - h + ((b >> i) & 0xff); // h * 65599 + ieme octet de b } return h; } @@ -83,29 +77,6 @@ int interpolation(int x, int y, int x1, int y1, int x2, int y2, int ne, int se, return ret / ((x2-x1) * (y2-y1)); } -short** PerlinNoise(Triangle* t) { - short **values; - int triangleSize = getFirstTriangleSize(t); - int i; - int seed; - int x,y; - - seed = (int)(t->vApex->x / triangleSize + t->vApex->y / triangleSize)*1111; - - values = (short**) malloc(sizeof(short*)*triangleSize); - for(i=0; i<triangleSize;i++) - values[i] = (short*) malloc(sizeof(short)*triangleSize); - - for(i=0; i<8;i++) { - x = getValueForSeed(seed); - y = getValueForSeed(x); - values[x][y] = 255; - } - - // TODO Yoann : tout le reste. - return values; -} - // renvoie un z entre 0 et 255 int get_z(int x, int y) { x = x; /* Unused */