vector_t initVector (float x, float y, float z) { vector_t vec={x, y, z}; return vec; } vector_t normalizeVector(vector_t v) { float r=sqrtf(v.c[0]*v.c[0]+v.c[1]*v.c[1]+v.c[2]*v.c[2]); v.c[0]/=r; v.c[1]/=r; v.c[2]/=r; return v; }; plane_t initPlane (vector_t normal, vector_t point) { plane_t plane; plane.point = point; plane.normal = normalizeVector(normal); return plane; } points_t initPoints (const float *x, const float *y, const float *z, size_t num_points) { points_t 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; iv); if (points!=0) { if (points->v!=0) free(points->v); points->v = 0; points->num_points = 0; } } vector_t crossProduct (vector_t v1, 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]; cp.c[2]= v1.c[0]*v2.c[1]-v1.c[1]*v2.c[0]; return cp; } float innerProduct (vector_t v1, vector_t v2) { return v1.c[0]*v2.c[0] + v1.c[1]*v2.c[1] + v1.c[2]*v2.c[2]; } float distancePointPlane (vector_t point, plane_t plane) { return innerProduct(point, plane.normal) - innerProduct(plane.point, plane.normal); } vector_t addVectors(vector_t v1, vector_t v2) { vector_t v3; v3.c[0]=v1.c[0]+v2.c[0]; v3.c[1]=v1.c[1]+v2.c[1]; v3.c[2]=v1.c[2]+v2.c[2]; return v3; } vector_t subtractVectors(vector_t v1, vector_t v2) { vector_t v3; v3.c[0]=v1.c[0]-v2.c[0]; v3.c[1]=v1.c[1]-v2.c[1]; v3.c[2]=v1.c[2]-v2.c[2]; return v3; } vector_t scaleVector(vector_t v1, float f) { vector_t v2; v2.c[0]=f*v1.c[0]; v2.c[1]=f*v1.c[1]; v2.c[2]=f*v1.c[2]; return v2; } vector_t averagePoints(points_t points) { vector_t m = initVector(0.0f, 0.0f, 0.0f); size_t i; for (i=0; i