Квадрат расстояния от точки до треугольника: double getDistance2 ( const Triangle3d & t, const Vector3d & p ); Расстояние от точки до прямоугольника: double getDistance ( const Rectangle3d & r, const Vector3d & p ); Расстояние от точки до границы эллипсоида: bool getDistanceEld ( double a, double b, double c, const Vector3d & p, double & d, Vector3d & r );Здесь a, b и c - это параметры эллипсоида заданного в виде ( x / a )2 + ( y / b )2 + ( z / c )2 = 1, p - заданная точка, d - вычисленное расстояние ( отрицательное, если точка находится внутри эллипсоида ), r - ближайшая точка на границе эллипсоида. Функция возвращает false, если среди чисел a, b, c есть неположительные. Пусть дан набор точек ( point ) и нужно найти его диаметр вдоль заданного направления ( dir ). Функция diameterPnt находит его, а также возвращает индексы самой ближней ( imin ) и самой дальней ( imax ) точкек: typedef unsigned int nat double diameterPnt ( CArrRef<Vector3d> point, const Vector3d & dir, nat & imin, nat & imax ); inline double diameterPnt ( CArrRef<Vector3d> point, const Vector3d & dir ) { nat imin, imax; return diameterPnt ( point, dir, imin, imax ); } Следующая функция находит минимальный диаметр множества точек: double diameterPnt ( CArrRef<Vector3d> point );
Описание класса Vector3d находится здесь.
Исходники алгоритмов находятся в func3d.cpp Наверх |