#include <stdio.h>
#include <math.h>
void worley_noise() {
const int S = 1024; // image Size
const int N = 128; // Number of points
const int K = 2; // color value sKale
static int x[N],y[N]; // points positions
int i,j,k;
for(i=0;i<N;++i){ x[i] = rand()%S; y[i] = rand()%S; }
FILE * fo = fopen("c:\\temp\\worley.pnm","wb");
fprintf(fo,"P5\n#Created by Shqn\n%d %d\n255\n",S,S);
for(j=0;j<S;++j) for(i=0;i<S;++i){ // for each pixel...
int mind = S;
for(k=0;k<N;++k) { // compute min distance
int dx = i-x[k];
int dy = j-y[k];
int d = (int)sqrt((double)(dx*dx+dy*dy));
if(mind>d) mind = d;
}
mind *= K; // scale and clip
unsigned char b = mind<255 ? mind : 255;
fwrite(&b,1,1,fo);
}
fclose(fo);
}
// Worley noise: example of worley noise with euclidean distance function by Rocchini
#include <stdio.h>
#include <stdlib.h> // rand
#include <time.h>
#include <math.h>
int main() {
const int S = 1024; // image Size
const int N = 128; // Number of points
const int K = 2; // color value sKale
int x[N],y[N]; // points positions
int i,j,k;
srand(time(NULL)); // Initialization, should only be called once.
for(i=0;i<N;++i){ x[i] = rand()%S; y[i] = rand()%S; }
FILE * fo = fopen("worley.pnm","wb");
fprintf(fo,"P5\n %d %d\n255\n",S,S);
for(j=0;j<S;++j)
for(i=0;i<S;++i){ // for each pixel...
int mind = S;
for(k=0;k<N;++k) { // compute min distance
int dx = i-x[k];
int dy = j-y[k];
int d = (int)sqrt((double)(dx*dx+dy*dy));
if(mind>d) mind = d;
}
mind *= K; // scale and clip
unsigned char b = mind<255 ? mind : 255;
fwrite(&b,1,1,fo);
}
fclose(fo);
return 0;
}