Plane
Плоскость в нормальной форме Гессе (Hessian).
Описание
Представляет собой нормализованное уравнение плоскости. normal — нормаль плоскости (a, b, c нормализованы), а d — расстояние от начала координат до плоскости (в направлении «нормали»). «Над» или «Выше» плоскости считается сторона плоскости, в сторону которой направлена нормаль.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
Конструкторы
Plane() |
|
Методы
distance_to(point: Vector3) const |
|
get_center() const |
|
intersect_3(b: Plane, c: Plane) const |
|
intersects_ray(from: Vector3, dir: Vector3) const |
|
intersects_segment(from: Vector3, to: Vector3) const |
|
is_equal_approx(to_plane: Plane) const |
|
is_finite() const |
|
is_point_over(point: Vector3) const |
|
normalized() const |
|
Операторы
operator !=(right: Plane) |
|
operator *(right: Transform3D) |
|
operator ==(right: Plane) |
|
Константы
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).
Описания свойств
Расстояние от начала координат до плоскости, выраженное через 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.
Компонент X вектора normal плоскости.
Компонент Y вектора normal плоскости.
Компонент Z вектора normal плоскости.
Описания конструктора
Создает инициализированную по умолчанию Plane со всеми компонентами, установленными на 0.
Создает Plane как копию заданной Plane.
Plane Plane(a: float, b: float, c: float, d: float)
Создает плоскость из четырех параметров. Три компонента normal результирующей плоскости — a, b и c, а плоскость имеет расстояние d от начала координат.
Создает плоскость из вектора нормали. Плоскость пересечет начало координат.
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. Если точка находится выше плоскости, расстояние будет положительным. Если ниже, расстояние будет отрицательным.
Возвращает центр плоскости.
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() для каждого компонента.
Возвращает true, если эта плоскость конечна, вызывая @GlobalScope.is_finite() для каждого компонента.
bool is_point_over(point: Vector3) const 🔗
Возвращает true, если point расположена над плоскостью.
Возвращает копию плоскости с нормализованным 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. Это то же самое, что и запись Plane(-p.normal, -p.d). Эта операция меняет направление вектора нормали, а также меняет значение расстояния, в результате чего Plane находится в том же месте, но смотрит в противоположном направлении.