Вычисление ближайшей точки к заданным прямым в пространстве

Если считать критерием близости сумму квадратов расстояний от точки до каждой прямой, то эта задача является задачей наименьших квадратов, и она может быть решена одним из описанных там методов.

Квадрат расстояния от точки до прямой можно представить, как

    | dir % ( v - point ) |2

Здесь dir - направление вдоль прямой ( единичный вектор ), % - векторное произведение, point - точка через которую проходит прямая, v - координаты точки для которой определяется расстояние. Следующая функция вычисляет эту точку:

Def<Vector3d> getNearPoint2 ( CArrRef<Line3d> line );

Если нужно задать прямым разный вес, то для этого надо умножить поле dir на соответствующий вес.

Предыдущий алгоритм минимизирует 2-норму вектора расстояний от точки до прямых. Если же выбрать бесконечную норму, то задача сводится к поиску минимальной сферы, пересекающей все данные прямые. Центр этой сферы будет точкой у которой максимальное расстояние до прямых будет минимальным:

Def<Vector3d> getNearPointU ( CArrRef<Line3d> line );

Описание класса Line3d находится здесь.
Описание класса Vector3d находится здесь.
Описание шаблона классов Def находится здесь.
Описание шаблона классов CArrRef находится здесь.

Исходники находятся в approx3d.cpp

Наверх