sandbox/Antoonvh/tree/plantenna.c
Plantenna
This page is part of the Plantenna project.
#include "distance.h"
#include "view.h"
#define BVIEW 1
int n_part;
#include "../scatter.h"
#include "colonization.h"
A movie-making function is defined below:.
void movie_maker (Tnode * tnodes, int tn, coord * atr, int na) {
coord * nlocs = (coord*)malloc (sizeof(coord)*tn);
for (int j = 0; j < tn; j++)
foreach_dimension()
nlocs[j].x = tnodes[j].x;
n_part = tn;
scatter (nlocs, s = 10);
save ("letters.mp4");
free (nlocs);
}
int main() {
init_grid (8);
size (350);
origin (50, 350);
Letters are read following this test case.
coord * p = input_xy (fopen ("plantenna.gnu", "r"));
scalar d[];
distance (d, p);
while (adapt_wavelet ({d}, (double[]){1e-2}, 9).nf);
boundary ({d});
The atraction points are seeded inside the letters.
int nam = 3000, na = 0;
coord * atr = malloc (sizeof(coord)*nam);
while (na < nam) {
coord a = {X0 + L0*(noise() + 1)/2., Y0 + L0/2 + 50*noise()};
if (interpolate (d, a.x, a.y) > 0)
atr[na++] = a;
}
Nine seed nodes are also initialized.
int tn = 9;
Tnode * nodes = calloc (tn, sizeof(Tnode));
nodes[0].x = 100;
nodes[0].y = 530;
nodes[1].x = 130;
nodes[1].y = 530;
nodes[2].x = 160;
nodes[2].y = 530;
nodes[3].x = 200;
nodes[3].y = 540;
nodes[4].x = 220;
nodes[4].y = 530;
nodes[5].x = 240;
nodes[5].y = 530;
nodes[6].x = 270;
nodes[6].y = 550;
nodes[7].x = 300;
nodes[7].y = 540;
nodes[8].x = 340;
nodes[8].y = 530;
The camera is set and the nodes are computed with a link to the movie_maker
function.
view (fov = 3., width = 900, height = 180,
tx = -0.65, ty = -1.56);
colonize (atr, na, &nodes, tn, 4.2, 0.2, 0.5, myfun = movie_maker);
free (atr);
free (nodes);
}