int simplex_from_vertex(const vertex_t *v, double percent, simplex_t *s) { int i, j; vertex_t *size = vertex_alloc(); if (!size) return -1; if (vertex_percent(size, percent / 2) != 0) { vertex_free(size); return -1; } /* Generate a simplex of unit length. */ unit_simplex(s); /* Pseudo-randomly rotate the unit simplex. */ rotate(s); /* Grow and translate the simplex. */ for (i = 0; i <= N; ++i) { for (j = 0; j < N; ++j) { s->vertex[i]->term[j] *= size->term[j]; s->vertex[i]->term[j] += v->term[j]; } } if (simplex_fit(s) != 0) { vertex_free(size); return -1; } /* Fill any remaining points with random vertices. */ for (i = N+1; i < s->len; ++i) vertex_rand(s->vertex[i]); vertex_free(size); return 0; }
void graph_free(struct graph *graph) { if (!graph) { return; } int i; for (i = 0; i < graph->nr; ++i) { vertex_free(&graph->vertices[i]); } hash_free(graph->vidx); free(graph->vertices); free(graph); }