Plane

Плоскость в нормальной форме Гессе (Hessian).

Описание

Представляет собой нормализованное уравнение плоскости. normal — нормаль плоскости (a, b, c нормализованы), а d — расстояние от начала координат до плоскости (в направлении «нормали»). «Над» или «Выше» плоскости считается сторона плоскости, в сторону которой направлена нормаль.

Обучающие материалы

Свойства

float

d

0.0

Vector3

normal

Vector3(0, 0, 0)

float

x

0.0

float

y

0.0

float

z

0.0

Конструкторы

Plane

Plane()

Plane

Plane(from: Plane)

Plane

Plane(a: float, b: float, c: float, d: float)

Plane

Plane(normal: Vector3)

Plane

Plane(normal: Vector3, d: float)

Plane

Plane(normal: Vector3, point: Vector3)

Plane

Plane(point1: Vector3, point2: Vector3, point3: Vector3)

Методы

float

distance_to(point: Vector3) const

Vector3

get_center() const

bool

has_point(point: Vector3, tolerance: float = 1e-05) const

Variant

intersect_3(b: Plane, c: Plane) const

Variant

intersects_ray(from: Vector3, dir: Vector3) const

Variant

intersects_segment(from: Vector3, to: Vector3) const

bool

is_equal_approx(to_plane: Plane) const

bool

is_finite() const

bool

is_point_over(point: Vector3) const

Plane

normalized() const

Vector3

project(point: Vector3) const

Операторы

bool

operator !=(right: Plane)

Plane

operator *(right: Transform3D)

bool

operator ==(right: Plane)

Plane

operator unary+()

Plane

operator unary-()


Константы

PLANE_YZ = Plane(1, 0, 0, 0) 🔗

Плоскость, простирающаяся по осям Y и Z (нормальный вектор точек +X).

PLANE_XZ = Plane(0, 1, 0, 0) 🔗

Плоскость, простирающаяся по осям X и Z (нормальный вектор точек +Y).

PLANE_XY = Plane(0, 0, 1, 0) 🔗

Плоскость, простирающаяся по осям X и Y (нормальный вектор точек +Z).


Описания свойств

float d = 0.0 🔗

Расстояние от начала координат до плоскости, выраженное через normal (в соответствии с его направлением и величиной). Фактическое абсолютное расстояние от начала координат до плоскости можно вычислить как abs(d) / normal.length() (если normal имеет нулевую длину, то эта Plane не представляет допустимую плоскость).

В скалярном уравнении плоскости ax + by + cz = d это d, тогда как координаты (a, b, c) представлены свойством normal.


Vector3 normal = Vector3(0, 0, 0) 🔗

Нормаль плоскости, обычно единичный вектор. Не должен быть нулевым вектором, так как Plane с такой normal не представляет допустимую плоскость.

В скалярном уравнении плоскости ax + by + cz = d это вектор (a, b, c), где d — свойство d.


float x = 0.0 🔗

Компонент X вектора normal плоскости.


float y = 0.0 🔗

Компонент Y вектора normal плоскости.


float z = 0.0 🔗

Компонент Z вектора normal плоскости.


Описания конструктора

Plane Plane() 🔗

Создает инициализированную по умолчанию Plane со всеми компонентами, установленными на 0.


Plane Plane(from: Plane)

Создает Plane как копию заданной Plane.


Plane Plane(a: float, b: float, c: float, d: float)

Создает плоскость из четырех параметров. Три компонента normal результирующей плоскости — a, b и c, а плоскость имеет расстояние d от начала координат.


Plane Plane(normal: Vector3)

Создает плоскость из вектора нормали. Плоскость пересечет начало координат.

normal плоскости должен быть единичным вектором.


Plane Plane(normal: Vector3, d: float)

Создает плоскость из вектора нормали и расстояния плоскости от начала координат.

normal плоскости должен быть единичным вектором.


Plane Plane(normal: Vector3, point: Vector3)

Создает плоскость из вектора нормали и точки на плоскости.

normal плоскости должен быть единичным вектором.


Plane Plane(point1: Vector3, point2: Vector3, point3: Vector3)

Создает плоскость из трех точек, указанных по часовой стрелке.


Описания метода

float distance_to(point: Vector3) const 🔗

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


Vector3 get_center() const 🔗

Возвращает центр плоскости.


bool has_point(point: Vector3, tolerance: float = 1e-05) const 🔗

Возвращает true, если point находится внутри плоскости. Сравнение использует пользовательский минимальный порог allowance.


Variant intersect_3(b: Plane, c: Plane) const 🔗

Возвращает точку пересечения трех плоскостей b, c и этой плоскости. Если пересечение не найдено, возвращается null.


Variant intersects_ray(from: Vector3, dir: Vector3) const 🔗

Возвращает точку пересечения луча, состоящего из позиции from и направления нормали dir с этой плоскостью. Если пересечение не найдено, возвращается null.


Variant intersects_segment(from: Vector3, to: Vector3) const 🔗

Возвращает точку пересечения сегмента от позиции from до позиции to с этой плоскостью. Если пересечение не найдено, возвращается null.


bool is_equal_approx(to_plane: Plane) const 🔗

Возвращает true, если эта плоскость и to_plane приблизительно равны, путем запуска @GlobalScope.is_equal_approx() для каждого компонента.


bool is_finite() const 🔗

Возвращает true, если эта плоскость конечна, вызывая @GlobalScope.is_finite() для каждого компонента.


bool is_point_over(point: Vector3) const 🔗

Возвращает true, если point расположена над плоскостью.


Plane normalized() const 🔗

Возвращает копию плоскости с нормализованным normal (то есть это единичный вектор). Возвращает Plane(0, 0, 0, 0), если normal не может быть нормализован (он имеет нулевую длину).


Vector3 project(point: Vector3) const 🔗

Возвращает ортогональную проекцию point на точку на плоскости.


Описания оператора

bool operator !=(right: Plane) 🔗

Возвращает true, если плоскости не равны.

Примечание: Из-за ошибок точности с плавающей точкой рассмотрите возможность использования is_equal_approx() вместо этого, что более надежно.


Plane operator *(right: Transform3D) 🔗

Обратно преобразует (умножает) Plane на заданную матрицу преобразования Transform3D.

plane * transform эквивалентно transform.affine_inverse() * plane. См. Transform3D.affine_inverse().


bool operator ==(right: Plane) 🔗

Возвращает true, если плоскости точно равны.

Примечание: Из-за ошибок точности с плавающей точкой рассмотрите возможность использования is_equal_approx(), который более надежен.


Plane operator unary+() 🔗

Возвращает то же значение, как если бы + не было. Унарный + ничего не делает, но иногда он может сделать ваш код более читаемым.


Plane operator unary-() 🔗

Возвращает отрицательное значение Plane. Это то же самое, что и запись Plane(-p.normal, -p.d). Эта операция меняет направление вектора нормали, а также меняет значение расстояния, в результате чего Plane находится в том же месте, но смотрит в противоположном направлении.