geo.h

Go to the documentation of this file.
00001 /*
00002 **      PFSGeo.h - header file for the computational geometry package
00003 **
00004 **      Version:        1.0
00005 **
00006 **      History:        Created 28-Mar-88       Luiz F. Martha
00007 **                      Modified 7-jun-88       PWW     version 1.0
00008 **                      Modified 24-Nov-94      LFM
00009 **                         Changed float to real.
00010 **      Modified 11-May-95      Kubrusly
00011 **         Changed real to double
00012 **      Modified 08-Feb-96      LFM
00013 **         Modified GeoPoly structure, replancing 
00014 **         fields a, u, v, n by a GeoNormPlane 
00015 **         structure field.
00016 **      Modified 17-Apr-06      Alexandre A. Del Savio
00017 **         Modified the name of this package from "Geo"
00018 **         to "PFSGeo".
00019 */
00020 
00021 #ifndef _PFSGeo_h
00022 #define _PFSGeo_h
00023 
00024 /*      --------------------------------------------------
00025 **      computational geometry data types :     
00026 */
00027 
00028 
00029 typedef struct _PFSGeoPoint { double x, y, z ; }            PFSGeoPoint ;
00030 
00031 typedef struct _PFSGeoLine { PFSGeoPoint d, e ; }         PFSGeoLine ;
00032 
00033 typedef struct _PFSGeoPlane { PFSGeoPoint a, b, c ; }     PFSGeoPlane ;
00034 
00035 typedef struct _PFSGeoNormPlane { PFSGeoPoint a, u, 
00036                                         v, n ; }    PFSGeoNormPlane ;
00037 
00038 typedef struct _PFSGeoPoly { PFSGeoNormPlane nplane ;
00039                   int n_verts; PFSGeoPoint *verts ; }  PFSGeoPoly ;
00040 
00041 typedef struct _PFSGeoPlanEqn { double a, b, c, d ; }   PFSGeoPlanEqn ;
00042 
00043 typedef struct _PFSGeoSurfPoint { double x, y, z ;
00044                                double xn, yn, zn ; } PFSGeoSurfPoint ;
00045 
00046 typedef double                                      PFSGeoPointPar ;
00047 
00048 typedef struct _PFSGeoSurfPar { double u, v ; }         PFSGeoSurfPar ;
00049 
00050 typedef enum _PFSGeoStatus { PFSGeoInvalid, PFSGeoValid }    PFSGeoStatus ;
00051 
00052 typedef enum _PFSGeoPredicate { PFSGeoFalse, PFSGeoTrue }    PFSGeoPredicate ;
00053 
00054 typedef enum _PFSGeoPtTest { PFSGeoAbove,
00055                           PFSGeoOn,
00056                           PFSGeoBelow         }     PFSGeoPtTest ;
00057 
00058 /*      --------------------------------------------------
00059 **      function prototypes :   
00060 */
00061 
00062 #ifdef __cplusplus
00063 extern "C" {
00064 #endif
00065 
00066 void PFSGeoSetTolerance( double tol );
00067 double PFSGeoGetTolerance( void );
00068 
00069 PFSGeoPredicate PFSGeoIntscPolyLine ( PFSGeoSurfPar *line, PFSGeoSurfPar *spar ) ;
00070 PFSGeoPredicate PFSGeoIsInsidePoly  ( PFSGeoPoly *poly, PFSGeoSurfPar *spar ) ;
00071 PFSGeoPredicate    PFSGeoIsOnPolyBdry  ( PFSGeoPoly *poly, PFSGeoPoint *pt );
00072 
00073 void      PFSGeoGenLine  ( PFSGeoPoint *pt0, PFSGeoPoint *pt1, PFSGeoLine *line ) ;
00074 void      PFSGeoGenPlane ( PFSGeoPoint *pt0, PFSGeoPoint *pt1, PFSGeoPoint *pt2,
00075                         PFSGeoPlane *plane ) ;
00076 void      PFSGeoGenPlanEqn( PFSGeoPoint *pt0, PFSGeoPoint *pt1, PFSGeoPoint *pt2,
00077                          PFSGeoPlanEqn *plan_eqn ) ;
00078 
00079 PFSGeoStatus PFSGeoGenPoly  ( int *n_verts, PFSGeoPoint *verts, PFSGeoNormPlane *plane ) ;
00080 
00081 void      PFSGeoEvalLine    ( PFSGeoPointPar *par, PFSGeoLine *line, PFSGeoPoint *pt ) ;
00082 void      PFSGeoEvalPlane   ( PFSGeoSurfPar  *par, PFSGeoPlane *pln, PFSGeoPoint *pt ) ;
00083 
00084 double        PFSGeoDotProd    ( PFSGeoPoint *in0, PFSGeoPoint *in1 ) ;
00085 void         PFSGeoCrossProd  ( PFSGeoPoint *in0, PFSGeoPoint *in1, PFSGeoPoint *out ) ;
00086 double        PFSGeoTripleProd ( PFSGeoPoint *in0, PFSGeoPoint *in1, PFSGeoPoint *in2 ) ;
00087 double       PFSGeoVecLen     ( PFSGeoPoint *vec ) ;
00088 void         PFSGeoVecNormalize ( PFSGeoPoint *vec, PFSGeoPoint *n ) ;
00089 double       PFSGeoDist    ( PFSGeoPoint *in0, PFSGeoPoint *in1 ) ;
00090 PFSGeoPredicate PFSGeoNullVec    ( PFSGeoPoint *vec, double *tolerance ) ;
00091 
00092 void    PFSGeoDiffVec( PFSGeoPoint *in0, PFSGeoPoint *in1, PFSGeoPoint *out );
00093 void    PFSGeoSumVec( PFSGeoPoint *in0, PFSGeoPoint *in1, PFSGeoPoint *out );
00094 void    PFSGeoProdScalVec( PFSGeoPoint *in, double *csi, PFSGeoPoint *out );
00095 void    PFSGeoLinCombVec( PFSGeoPoint *in0, double *csi0, PFSGeoPoint *in1, double *csi1,
00096                        PFSGeoPoint *out );
00097 
00098 void      PFSGeoRotateX ( double *angle, PFSGeoPoint *in, PFSGeoPoint *out ) ;
00099 void      PFSGeoRotateY ( double *angle, PFSGeoPoint *in, PFSGeoPoint *out ) ;
00100 void      PFSGeoRotateZ ( double *angle, PFSGeoPoint *in, PFSGeoPoint *out ) ;
00101 void      PFSGeoRotateAxis ( PFSGeoPoint *axis, double *angle, 
00102                           PFSGeoPoint *in, PFSGeoPoint *out ) ;
00103 
00104 PFSGeoStatus PFSGeoIntscLinePlane ( PFSGeoLine *line, PFSGeoPlane *plane, 
00105                               PFSGeoPoint *pt, PFSGeoPointPar *ptpar,
00106                               PFSGeoSurfPar *spar ) ;
00107 PFSGeoStatus PFSGeoIntscLinePoly ( PFSGeoLine *line, PFSGeoPoly *poly, 
00108                               PFSGeoPoint *pt, PFSGeoPointPar *ptpar,
00109                               PFSGeoSurfPar *spar ) ;
00110 
00111 PFSGeoStatus PFSGeoPolyNormal  ( int *n_verts, PFSGeoPoint *verts,  PFSGeoPoint *norm ) ;
00112 
00113 PFSGeoStatus  PFSGeoLstSqrPlanEqn( int *num_pts, PFSGeoPoint *pts, 
00114                              PFSGeoPlanEqn *plan_eqn ) ;
00115 
00116 void      PFSGeoClstPtLine  ( PFSGeoLine *line, PFSGeoPoint *pt, PFSGeoPoint *clst,
00117                            PFSGeoPointPar *par ) ;
00118 void      PFSGeoClstPtNormPlane  ( PFSGeoNormPlane *plane, PFSGeoPoint *pt, 
00119                                 PFSGeoPoint *clst, PFSGeoSurfPar *spar ) ;
00120 PFSGeoStatus PFSGeoClstPtPoly  ( PFSGeoPoly *poly, PFSGeoPoint *pt, 
00121                            PFSGeoPoint *clst, PFSGeoSurfPar *spar ) ;
00122 
00123 PFSGeoPredicate PFSGeoIsOnPlane( PFSGeoPoint  *pt, PFSGeoNormPlane  *pla ) ;
00124 
00125 PFSGeoStatus PFSGeoInvert2x2 ( double a[2][2], double b[2][2] ) ;
00126 PFSGeoStatus PFSGeoInvert3x3 ( double a[3][3], double b[3][3] ) ;
00127 PFSGeoStatus PFSGeodInvert3x3 ( double a[3][3], double b[3][3] ) ;
00128 
00129 void    PFSGeoCentroid( int *num_pts,  PFSGeoPoint *pts,  PFSGeoPoint *cntrd ) ;
00130 
00131 PFSGeoStatus PFSGeoPerpLine ( PFSGeoLine *in0, PFSGeoLine *in1, PFSGeoLine *out,
00132                         PFSGeoPointPar *par0, PFSGeoPointPar *par1,
00133                         PFSGeoPointPar *parout ) ;
00134 
00135 void PFSGeoPtNormToParPlan( PFSGeoPoint *pt, PFSGeoPoint *normal, PFSGeoNormPlane *plane ) ;
00136 
00137 void PFSGeoPlanToNormPlan( PFSGeoPlane *plane, PFSGeoNormPlane *normplane );
00138 PFSGeoStatus  PFSGeo3PointsToNormPlane( PFSGeoPoint *in0, PFSGeoPoint *in1, 
00139                                   PFSGeoPoint *in2, PFSGeoNormPlane *plane );
00140 
00141 void PFSGeoPlanEqnToParPlan( PFSGeoPlanEqn *plan_eqn, PFSGeoNormPlane *plane ) ;
00142 
00143 PFSGeoPtTest PFSGeoSideofPlan( PFSGeoPlanEqn *plan_eqn, PFSGeoPoint *pt ) ;
00144 
00145 void PFSGeoSurfInterp( int *num_pts, double *map_func,PFSGeoSurfPar *pts_val, 
00146                         PFSGeoSurfPar *interp_val ) ;
00147 
00148 void PFSGeoSurfJacob( int *num_pts, double *map_deriv_s, double *map_deriv_t, 
00149                         PFSGeoSurfPar *pts_val, double jac[2][2] ) ;
00150 
00151 double PFSGeoAngVecAboutLine( PFSGeoLine *l, PFSGeoPoint *v0, PFSGeoPoint *v1 ) ;
00152 double PFSGeoAngPtAboutLine ( PFSGeoLine *l, PFSGeoPoint *p0, PFSGeoPoint *p1 ) ;
00153 double PFSGeoAngPtAboutPt( PFSGeoPoint *pivot, PFSGeoPoint *p0, PFSGeoPoint *p1 ) ;
00154 
00155 PFSGeoStatus PFSGeoProjVecPlane( PFSGeoPoint *vec, PFSGeoPlane *plane, PFSGeoPoint *proj ) ;
00156 double PFSGeoDistPtNormPlane( PFSGeoNormPlane *plane, PFSGeoPoint *pt );
00157 
00158 #ifdef __cplusplus
00159 }
00160 #endif
00161 
00162 #endif

Generated on Tue Oct 23 11:23:29 2007 for Relax by  doxygen 1.5.3