Plane

Літак в шестигранній нормальній формі.

Опис

Представлено нормалізоване рівняння площини. normal - норма площини (а, б, 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 не представляє дійсну площину.

У scalar рівняння площини ax + від + cz = d, це вектор (a, b, c), де d is the 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)

Constructs a 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 знаходиться всередині площини. Порівняння використовує власне мінімальне порогове значення tolerance.


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_about() на кожному компоненті.


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), якщо нормаль члена не може бути нормалізована (вона має нульову довжину).


Vector3 project(point: Vector3) const 🔗

Повертає ортогональну проекцію point у точку на площині.


Описи операторів

bool operator !=(right: Plane) 🔗

Повертає true, якщо літаки не рівні.

Примітка: У зв'язку з похибками з плаваючою точкою, розглянемо використання is_equal_approx() замість того, яка є більш надійним.


Plane operator *(right: Transform3D) 🔗

Безперервно трансформується (мультати) Plane заданим Transform3D матрицею перетворення.

plane * трансформатор еквівалент transform.affine_inverse() * літак. Transform3D.affine_inverse().


bool operator ==(right: Plane) 🔗

Повертає true, якщо літаки рівно рівні.

Примітка: У зв'язку з похибками з плаваючою точкою, розглянемо використання is_equal_approx() замість того, яка є більш надійним.


Plane operator unary+() 🔗

Повертає однакову вартість, якщо + не було. `` +`` нічого не робить, але іноді це може зробити ваш код більш читабельним.


Plane operator unary-() 🔗

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