00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef GEOMETRY_HH
00026 #define GEOMETRY_HH
00027
00028 #include "inline-macro.hh"
00029 #include "math-extension.hh"
00030 #include "vertex.hh"
00031
00032
00047 class CGeometry
00048 {
00049 public:
00050
00051
00052
00064 static CVertex orthoProjectVertexOnLine(const CVertex& AVertex,
00065 const CVertex& ALineVertex,
00066 const CVertex& ALineDirection);
00067
00076 static CVertex
00077 orthoProjectVertexOnPlane(const CVertex& AVertex,
00078 const TCoordinate& AA, const TCoordinate& AB,
00079 const TCoordinate& AC, const TCoordinate& AD);
00080
00092 static CVertex orthoProjectVertexOnPlane(const CVertex& AVertex,
00093 const CVertex& APlaneVertex,
00094 const CVertex& APlaneNormal);
00095
00096
00097
00098
00099
00109 static CVertex centralHomothety(const CVertex& AVertex,
00110 const CVertex& ACenter,
00111 const TCoordinate& ACoef);
00112
00122 static CVertex centralHomothety(const CVertex& AVertex,
00123 const CVertex& ACenter,
00124 const CVertex& ACoef);
00125
00139 static CVertex axialHomothety(const CVertex& AVertex,
00140 const CVertex& ALineVertex,
00141 const CVertex& ALineDirection,
00142 const TCoordinate& ACoef);
00143
00157 static CVertex planarHomothety(const CVertex& AVertex,
00158 const CVertex& APlaneVertex,
00159 const CVertex& APlaneNormal,
00160 const TCoordinate& ACoef);
00161
00162
00163
00164
00165
00173 static TCoordinate distanceToVertex(const CVertex& AVertex,
00174 const CVertex& AOtherVertex);
00175
00188 static TCoordinate distanceToLine(const CVertex& AVertex,
00189 const CVertex& ALineVertex,
00190 const CVertex& ALineDirection);
00191
00204 static TCoordinate distanceToPlane(const CVertex& AVertex,
00205 const CVertex& APlaneVertex,
00206 const CVertex& APlaneNormal);
00207
00208
00209
00210
00211
00223 static CVertex getBissectrix(const CVertex& AVector1,
00224 const CVertex& AVector2,
00225 const CVertex& ANormal = ORIGIN);
00226
00234 static CVertex getNormalVector(const CVertex& AVector);
00235
00249 static CVertex getNormalVector(const CVertex& AVector1,
00250 const CVertex& AVector2);
00251
00256 static CVertex getNormalVector(const CVertex& AVertex1,
00257 const CVertex& AVertex2,
00258 const CVertex& AVertex3);
00259
00274 static CVertex getLinesIntersection(const CVertex& ALine1Vertex1,
00275 const CVertex& ALine1Vertex2,
00276 const CVertex& ALine2Vertex1,
00277 const CVertex& ALine2Vertex2);
00278
00286 static bool areColinear(const CVertex& AVertex1, const CVertex& AVertex2);
00287
00299 static TCoordinate getAngle(const CVertex& AVector1,
00300 const CVertex& AVector2,
00301 const CVertex& ANormal = ORIGIN);
00302
00317 static CVertex getAngles(const CVertex& AVx, const CVertex& AVz);
00318
00319
00320
00321
00322
00343 static int localiseVertexComparedToLine(const CVertex& AVertex,
00344 const CVertex& ALineVertex,
00345 const CVertex& ALineDirection,
00346 const CVertex& APlaneNormal);
00347
00384 static void getSegmentsIntersection(const CVertex& AVertexA,
00385 const CVertex& AVertexB,
00386 const CVertex& AVertexC,
00387 const CVertex& AVertexD,
00388 const CVertex& APlaneNormal,
00389 int& AIntersection1On,
00390 CVertex& AIntersection1,
00391 int& AIntersection2On,
00392 CVertex& AIntersection2);
00393
00398 static void getSegmentsIntersection2d(const CVertex& AVertexA,
00399 const CVertex& AVertexB,
00400 const CVertex& AVertexC,
00401 const CVertex& AVertexD,
00402 int& AIntersection1On,
00403 CVertex& AIntersection1,
00404 int& AIntersection2On,
00405 CVertex& AIntersection2);
00406
00407
00408
00409
00410
00416 static CVertex getRoundingNormalVector(const CVertex& AVertex1,
00417 const CVertex& AVertex2,
00418 const CVertex& AVertex3);
00419
00420
00421 };
00422
00423 #include INCLUDE_INLINE("geometry.icc")
00424
00425 #endif // GEOMETRY_HH
00426