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

使用黑塞范式的平面。

描述

代表归一化的平面方程。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) 🔗

该平面的法线,通常为单位向量。不应该为零向量,因为 normal 为零的 Plane 代表的不是有效平面。

在平面 ax + by + cz = d 的标量方程中,这是向量 (a, b, c),其中 dd 属性。


float x = 0.0 🔗

平面法向量 normal 的 X 分量。


float y = 0.0 🔗

平面法向量 normal 的 Y 分量。


float z = 0.0 🔗

平面法向量 normal 的 Z 分量。


构造函数说明

Plane Plane() 🔗

构造默认初始化的 Plane,所有分量都设置为 0


Plane Plane(from: Plane)

构造给定 Plane 的副本。


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

根据四个参数创建一个平面。产生的平面的 normal 的三个分量是 abc,且该平面与原点的距离为 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 🔗

如果 point 在该平面内,则返回 true。比较将使用一个自定义的最小 tolerance 阈值。


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

返回 bc、该平面这三个平面的交点。如果没有找到交点,则返回 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 🔗

如果该平面和 to_plane 近似相等,则返回 true,判断近似相等的方法是通过在每个分量上运行 @GlobalScope.is_equal_approx


bool is_finite() const 🔗

如果该平面是有限的,则返回 true,判断方法是在每个分量上调用 @GlobalScope.is_finite


bool is_point_over(point: Vector3) const 🔗

如果 point 位于平面上方,则返回 true


Plane normalized() const 🔗

返回该平面归一化 normal 后的副本(法线成为单位向量)。如果 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 相当于 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 位于同一个位置,但是朝向相反的方向。