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:
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 */