Расстояния в пространстве

Квадрат расстояния от точки до треугольника:

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 находится здесь.
Описание классов Triangle3d и Rectangle3d находится здесь,

Исходники алгоритмов находятся в func3d.cpp

Наверх