}
Vector3D makeFarPoint(const Vector3D& minPoint,
const Vector3D& maxPoint) const
{
return Vector3D (

nearPointMask & 1 ? minPoint.x : maxPoint.x, nearPointMask & 2 ? minPoint.у : maxPoint.у, nearPointMask & 4 ? minPoint.z : maxPoint.z );

}
int getMainAxis () const {
return mainAxis;
}
void apply ( const Transform3D& ); protected:
void computeNearPointMaskAndMainAxis () ;
};

Ниже приводится описание основных методов этого класса.

Метод flip переворачивает вектор нормали, при этом плоскость остается на месте, а положительное и отрицательное полупространства меняются местами.

Метод closestPoint возвращает точку на плоскости, ближайшую к данной.

Метод intersectByRay служит для определения точки пересечения плоскости с заданным лучом, возвращает признак наличия пересечения и значения параметра луча для точки пересечения.

Метод apply позволяет применять произвольное аффинное преобразование к плоскости.

Методы signedDistanceTo и distanceTo возвращают расстояние со знаком и без него от точки до плоскости.

Метод classify служит для определения положения точки относительно плоскости и возвращает, в каком полупространстве (или же в самой плоскости) лежит заданная точка.

Методы reflectPos и reflectDir служат для отражения точки и направления относительно данной плоскости.

Обратите внимание, что отражение вектора относительно плоскости происходит по-разному в зависимости от того, является ли данный вектор координатами точки (ЗЛО, а) или направлением в пространстве (3.10, б).

Рис. 3.10

Конструктор класса Plane позволяет строить экземпляр класса по вектору нормали и расстоянию, по коэффициентам уравнения, нормали и точке на плоскости и трем точкам.

Для задания ограничивающего тела в виде прямоугольного параллелепипеда с ребрами, параллельными осям координат (ААВВ), мы будем использовать следующий класс: Л.

class BoundingBox {
Vector3D minPoint; Vector3D maxPoint; public:
BoundingBox ( const Vector3D& vl, const Vector3D& v2 ) {

⇐ Предыдущая| |Следующая ⇒