HOOPS/3dGS I.M. Interface

     << Back      Full Index      Forward >>


lod_quadric_error_metric.h

00001 #ifndef MXQMETRIC3_INCLUDED 
00002 #define MXQMETRIC3_INCLUDED
00003 
00004 /************************************************************************
00005 
00006   3D Quadric Error Metric
00007 
00008   Copyright (C) 1998 Michael Garland.  See "COPYING.txt" for details.
00009   
00010   $Id: lod__quadric__error__metric_8h-source.html,v 1.4 2008-02-21 21:41:00 stage Exp $
00011 
00012  ************************************************************************/
00013 
00014 #include "mxmath.h"
00015 
00016 typedef struct MxQuadric3_TAG
00017 {
00018     double a2, ab, ac, ad;
00019     double     b2, bc, bd;
00020     double         c2, cd;
00021     double             d2;
00022 
00023     double r;
00024 
00025 } MxQuadric3;
00026 
00027 /* initialization */
00028 void mxquadric3_init( MxQuadric3 *, double a, double b, double c, double d, double area );
00029 void mxquadric3_init_by_matrix( MxQuadric3 *, const Mat4 *Q, double area ); 
00030 
00031 /* manipulation utilities */
00032 extern void quad_copy( MxQuadric3 *, const MxQuadric3 *Q );
00033 extern void quad_add( MxQuadric3 *, const MxQuadric3 *, const MxQuadric3 * );
00034 extern void quad_sub( MxQuadric3 *, const MxQuadric3 *, const MxQuadric3 * );
00035 extern void quad_mul( MxQuadric3 *, const MxQuadric3 *, const double );
00036 extern void quad_scale( MxQuadric3 *, double s ); /* multiply in place */
00037 extern void quad_clear( MxQuadric3 *q );
00038 extern void quad_transform( MxQuadric3 *, const MxQuadric3 *, const Mat4 *P );
00039 /*inline void quad_set_area( MxQuadric3 *q, double a ) { q->r=a; }*/
00040 #define quad_set_area(q,a) { (q)->r=(a); }
00041 
00042 /* access utilities */
00043 extern double quad_offset( const MxQuadric3 * ); 
00044 extern double quad_area( const MxQuadric3 * );
00045 
00046 /* evaluation and optimization */
00047 extern MxBool optimizev ( const MxQuadric3 *, Vec3 *v ); 
00048 extern MxBool optimize3f( const MxQuadric3 *, double *x, double *y, double *z ); 
00049 extern MxBool optimize2v( const MxQuadric3 *, Vec3 *v, const Vec3 *v1, const Vec3 *v2 ); 
00050 extern MxBool optimize3v( const MxQuadric3 *, Vec3 *v, const Vec3 *v1, const Vec3 *v2, const Vec3 *v3 );
00051 extern double quad_evaluate( const MxQuadric3 *, double x, double y, double z );
00052 extern double quad_evaluatev( const MxQuadric3 *q, const double *v );
00053 
00054 
00055 
00056 /* MXQMETRIC3_INCLUDED*/
00057 #endif
Main Index
HOOPS/3dGS I.M. Interface

     << Back      Full Index      Forward >>