Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Plane

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

Описание

Represents a normalized plane equation. normal is the normal of the plane (a, b, c normalized), and d is the distance from the origin to the plane (in the direction of "normal"). "Over" or "Above" the plane is considered the side of the plane towards where the normal is pointing.

Note: In a boolean context, a plane will evaluate to false if all its components equal 0. Otherwise, a plane will always evaluate to true.

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

Свойства

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 находится в том же месте, но смотрит в противоположном направлении.