Voronoi diagram: Difference between revisions

(its new so it should be a draft. itd be nice to get information from WP on this page.)
Line 3:
A [[wp:Voronoi Diagram|Voronoi Diagram]] is a diagram consisting of a number of sites. Each Voronoi ''s'' also has a Voronoi cell consisting of all points closest to ''s''.
 
=={{header|C}}==
[[File:voronoi-C.png|center|300px]]
C code drawing a color map of a set of Voronoi sites. Image is in PNM P6, written to stdout. Run as <code>a.out > stuff.pnm</code>.
<lang C>#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define N_SITES 150
double site[N_SITES][2];
unsigned char rgb[N_SITES][3];
 
int size_x = 640, size_y = 480;
 
inline double sq2(double x, double y)
{
return x * x + y * y;
}
 
void gen_map()
{
int i, j, k, nearest = 0;
unsigned char *ptr, *buf, color;
double dist, d;
 
ptr = buf = malloc(3 * size_x * size_y);
for (i = 0; i < size_y; i++) {
for (j = 0; j < size_x; j++, ptr += 3) {
dist = 1e100;
for (k = 0; k < N_SITES; k++) {
d = sq2(i - site[k][1], j - site[k][0]);
if (d >= dist) continue;
dist = d;
nearest = k;
}
memcpy(ptr, rgb[nearest], 3);
}
}
 
/* draw sites */
for (k = 0; k < N_SITES; k++) {
color = (rgb[k][0]*.25 + rgb[k][1]*.6 + rgb[k][2]*.15 > 80) ? 0 : 255;
 
for (i = site[k][1] - 1; i <= site[k][1] + 1; i++) {
if (i < 0 || i >= size_y) continue;
for (j = site[k][0] - 1; j <= site[k][0] + 1; j++) {
if (j < 0 || j >= size_x) continue;
ptr = buf + 3 * (i * size_x + j);
ptr[0] = ptr[1] = ptr[2] = color;
}
}
}
 
printf("P6\n%d %d\n255\n", size_x, size_y);
fflush(stdout);
fwrite(buf, size_y * size_x * 3, 1, stdout);
}
 
int main()
{
int i;
for (i = 0; i < N_SITES; i++) {
site[i][0] = (double)rand() / RAND_MAX * size_x;
site[i][1] = (double)rand() / RAND_MAX * size_y;
rgb[i][0] = (double)rand() / RAND_MAX * 256;
rgb[i][1] = (double)rand() / RAND_MAX * 256;
rgb[i][2] = (double)rand() / RAND_MAX * 256;
}
gen_map();
return 0;
}</lang>
=={{header|Python}}==
 
Anonymous user