/*************************************************************************/ /* File : VxDistance.h */ /* Author : Aymeric Bard */ /* */ /* Virtools SDK */ /* Copyright (c) Virtools 2000, All Rights Reserved. */ /*************************************************************************/ #ifndef VXDISTANCE_H #define VXDISTANCE_H /********************************************************** Name: VxDistance Summary: Static methods for Distance tests. Remarks: VxDistance class contains a list of static methods useful for miscellaneous Distance tests. Using these methods one can test Distance of ray,segment or line with a Box,infinite planes, triangle faces or Sphere. See Also : VxPlane,VxRay,VxBbox,VxVector,Distances *********************************************************/ class VxDistance { public: // Lines - Lines Distances VX_EXPORT static float LineLineSquareDistance (const VxRay& line0, const VxRay& line1,float* t0 = NULL, float* t1 = NULL); VX_EXPORT static float LineRaySquareDistance (const VxRay& line, const VxRay& ray,float* t0 = NULL, float* t1 = NULL); VX_EXPORT static float LineSegmentSquareDistance (const VxRay& line, const VxRay& segment,float* t0 = NULL, float* t1 = NULL); VX_EXPORT static float RayRaySquareDistance (const VxRay& ray0, const VxRay& ray1,float* t0 = NULL, float* t1 = NULL); VX_EXPORT static float RaySegmentSquareDistance (const VxRay& ray, const VxRay& segment,float* t0 = NULL, float* t1 = NULL); VX_EXPORT static float SegmentSegmentSquareDistance (const VxRay& segment0, const VxRay& segment1,float* t0 = NULL, float* t1 = NULL); static float LineLineDistance (const VxRay& line0, const VxRay& line1,float* t0 = NULL, float* t1 = NULL) {return XSqrt(LineLineSquareDistance(line0,line1,t0,t1));} static float LineRayDistance (const VxRay& line, const VxRay& ray,float* t0 = NULL, float* t1 = NULL) {return XSqrt(LineRaySquareDistance(line,ray,t0,t1));} static float LineSegmentDistance (const VxRay& line, const VxRay& segment,float* t0 = NULL, float* t1 = NULL) {return XSqrt(LineSegmentSquareDistance(line,segment,t0,t1));} static float RayRayDistance (const VxRay& ray0, const VxRay& ray1,float* t0 = NULL, float* t1 = NULL) {return XSqrt(RayRaySquareDistance(ray0,ray1,t0,t1));} static float RaySegmentDistance (const VxRay& ray, const VxRay& segment,float* t0 = NULL, float* t1 = NULL) {return XSqrt(RaySegmentSquareDistance(ray,segment,t0,t1));} static float SegmentSegmentDistance (const VxRay& segment0, const VxRay& segment1,float* t0 = NULL, float* t1 = NULL) {return XSqrt(SegmentSegmentSquareDistance(segment0,segment1,t0,t1));} // Line - Point distance VX_EXPORT static float PointLineSquareDistance(const VxVector& point, const VxRay& line1,float* t0 = NULL); VX_EXPORT static float PointRaySquareDistance(const VxVector& point, const VxRay& ray,float* t0 = NULL); VX_EXPORT static float PointSegmentSquareDistance(const VxVector& point, const VxRay& segment,float* t0 = NULL); static float PointLineDistance(const VxVector& point, const VxRay& line,float* t0 = NULL) {return XSqrt(PointLineSquareDistance(point,line,t0));} static float PointRayDistance(const VxVector& point, const VxRay& ray,float* t0 = NULL) {return XSqrt(PointRaySquareDistance(point,ray,t0));} static float PointSegmentDistance(const VxVector& point, const VxRay& segment,float* t0 = NULL) {return XSqrt(PointSegmentSquareDistance(point,segment,t0));} }; #endif