Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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);
}