aboutsummaryrefslogtreecommitdiff
path: root/src/mtx_qhull/zhull.h
blob: cc40f47a67855bde51df905b2533ef136efb1027 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef QHULL_ZHULL_H
#define QHULL_ZHULL_H

#include "vectors.h"
#include "list.h"
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#define TOL_OUTSIDEPOINT 1e-7
#define TOL_INSIDEPOINT  -1e-7
#define TOL_DEGENERATE  1e-6
#define MAXIT 1000000
/*
 *  zhull
 *
 *  own qhull algorithm implementation
 *
 * Copyright (c) 2012, Franz Zotter
 * with friendly help from 
 * IOhannes zmoelnig
 * IEM, Graz, Austria
 * 
 * own Implementation after the QHULL algorithm
 * that is documented in
 * Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., 
 * "The Quickhull algorithm for convex hulls," ACM Trans.
 * on Mathematical Software, 22(4):469-483, Dec 1996, 
 * http://www.qhull.org
 *
 */

typedef struct facet_ {
    plane_t plane;
    list_t corners;
    list_t outsideset;
    list_t insideset;
    size_t farthest_outside_point;
    list_t neighbors;
    float maxdistance;
} facet_t;

typedef struct zhull_ {
    points_t pts;
    list_t used_pts;
    list_t facets;
    list_t facets_with_outsidepoints;
    list_t facets_with_insidepoints;
} zhull_t;

int calculateZHull(zhull_t *zh);
index_t getTriangleCorner(const zhull_t * const zh,
        const index_t triangle_idx,
        const index_t corner_idx);
void printZhull(const zhull_t * const  zh);
void freeZhull(zhull_t *zh);
zhull_t zhullInitPoints(const float *x, const float *y, 
        const float *z, const size_t num_points);
void printFacet(const zhull_t * const zh, 
      const facet_t * const f);
#endif /* QHULL_ZHULL_H */