From 291c783983b64f4b0ae4f6f67a016233193efa8c Mon Sep 17 00:00:00 2001 From: Franz Zotter Date: Wed, 29 Aug 2012 06:58:22 +0000 Subject: cleaned up code for mtx_qhull svn path=/trunk/externals/iem/iemmatrix/; revision=16183 --- src/mtx_qhull/vectors.c | 91 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 25 deletions(-) (limited to 'src/mtx_qhull/vectors.c') diff --git a/src/mtx_qhull/vectors.c b/src/mtx_qhull/vectors.c index 655ed94..5e520a3 100644 --- a/src/mtx_qhull/vectors.c +++ b/src/mtx_qhull/vectors.c @@ -1,12 +1,21 @@ #include "vectors.h" +/* + * vector operations for zhull + * + * Copyright (c) 2012, Franz Zotter + * IEM, Graz, Austria + * + * + */ + -vector_t initVector (float x, float y, float z) { +vector_t initVector (const float x, const float y, const float z) { vector_t vec={x, y, z}; return vec; } -float lengthVector(vector_t v) { +float lengthVector(const vector_t v) { return sqrtf(v.c[0]*v.c[0]+v.c[1]*v.c[1]+v.c[2]*v.c[2]); } vector_t normalizeVector(vector_t v) { @@ -17,33 +26,36 @@ vector_t normalizeVector(vector_t v) { return v; } -plane_t initPlane (vector_t normal, vector_t point) { +plane_t initPlane (vector_t normal, const vector_t point) { plane_t plane; plane.point = point; plane.normal = normalizeVector(normal); return plane; } -line_t initLine (vector_t direction, vector_t point) { +line_t initLine (vector_t direction, const vector_t point) { line_t line; line.point = point; line.direction = normalizeVector(direction); return line; } +points_t allocatePoints (const size_t num_points) { + points_t points; + points.v = (vector_t *) malloc(sizeof(vector_t)*num_points); + if (points.v!=0) + points.num_points = num_points; + return points; +} + points_t initPoints (const float *x, const float *y, const float *z, - size_t num_points) { - points_t points; + const size_t num_points) { + points_t points = allocatePoints(num_points); size_t i; - points.v = (vector_t*) malloc (sizeof(vector_t)*num_points); - if (points.v!=0) { -// printf("created %li\n",points.v); - points.num_points = num_points; - for (i=0; i0)&&(points!=0)) { + if (getNumPoints(*points)==0) + *points=allocatePoints(num_points); + else { + points->v = (vector_t *) realloc(points->v,sizeof(vector_t)*num_points); + if (points->v!=0) + points->num_points=num_points; + else + points->num_points=0; + } + if (points->v!=0) + points->num_points = num_points; + } + else + freePoints(points); +} + +void appendPoints(points_t *points, + const float *x, const float *y, + const float *z, const size_t num_points) { + const size_t n=getNumPoints(*points); + size_t i,j; + reallocatePoints(points,getNumPoints(*points)+num_points); + for (i=n,j=0; iv[i] = initVector(x[j],y[j],z[j]); + } +} + +vector_t crossProduct (const vector_t v1, const vector_t v2) { vector_t cp; cp.c[0]= v1.c[1]*v2.c[2]-v1.c[2]*v2.c[1]; cp.c[1]=-v1.c[0]*v2.c[2]+v1.c[2]*v2.c[0]; @@ -66,7 +107,7 @@ vector_t crossProduct (vector_t v1, vector_t v2) { return cp; } -float innerProduct (vector_t v1, vector_t v2) { +float innerProduct (const vector_t v1, const vector_t v2) { return v1.c[0]*v2.c[0] + v1.c[1]*v2.c[1] + v1.c[2]*v2.c[2]; } @@ -76,24 +117,24 @@ float distancePointPoint(const vector_t a, return lengthVector(d); } -float distancePointPlane (vector_t point, plane_t plane) { +float distancePointPlane (const vector_t point, const plane_t plane) { return innerProduct(point, plane.normal) - innerProduct(plane.point, plane.normal); } -float distancePointLine (vector_t point, line_t line) { +float distancePointLine (const vector_t point, const line_t line) { return lengthVector(crossProduct(line.direction, subtractVectors(point,line.point))); } -float distancePointLineOnPlane (vector_t point, - line_t line, plane_t plane) { +float distancePointLineOnPlane (vector_t const point, + const line_t line, const plane_t plane) { vector_t normal_in_plane = normalizeVector(crossProduct( line.direction, plane.normal)); return innerProduct(subtractVectors(point,line.point),normal_in_plane); } -vector_t addVectors(vector_t v1, vector_t v2) { +vector_t addVectors(const vector_t v1, const vector_t v2) { vector_t v3; v3.c[0]=v1.c[0]+v2.c[0]; v3.c[1]=v1.c[1]+v2.c[1]; @@ -101,7 +142,7 @@ vector_t addVectors(vector_t v1, vector_t v2) { return v3; } -vector_t subtractVectors(vector_t v1, vector_t v2) { +vector_t subtractVectors(const vector_t v1, const vector_t v2) { vector_t v3; v3.c[0]=v1.c[0]-v2.c[0]; v3.c[1]=v1.c[1]-v2.c[1]; @@ -109,7 +150,7 @@ vector_t subtractVectors(vector_t v1, vector_t v2) { return v3; } -vector_t scaleVector(vector_t v1, float f) { +vector_t scaleVector(vector_t v1, const float f) { vector_t v2; v2.c[0]=f*v1.c[0]; v2.c[1]=f*v1.c[1]; @@ -227,18 +268,18 @@ line_t lineFromListedPoints(const points_t points, const list_t list) { return l; } -void printVector(vector_t v) { +void printVector(const vector_t v) { printf("[%5.2f,%5.2f,%5.2f], ", v.c[0],v.c[1],v.c[2]); } -void printPlane(plane_t p) { +void printPlane(const plane_t p) { printf("n="); printVector(p.normal); printf(", p="); printVector(p.point); } -void printLine(line_t l) { +void printLine(const line_t l) { printf("d="); printVector(l.direction); printf(", p="); -- cgit v1.2.1