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.
Checking the stable version of the documentation...
Plane¶
使用黑塞范式的平面。
描述¶
代表归一化的平面方程。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)
🔗
该平面的法线,通常为单位向量。不应该为零向量,因为 normal 为零的 Plane 代表的不是有效平面。
在平面 ax + by + cz = d
的标量方程中,这是向量 (a, b, c)
,其中 d
是 d 属性。
平面法向量 normal 的 X 分量。
平面法向量 normal 的 Y 分量。
平面法向量 normal 的 Z 分量。
构造函数说明¶
构造默认初始化的 Plane,所有分量都设置为 0
。
构造给定 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 🔗
如果 point
在该平面内,则返回 true
。比较将使用一个自定义的最小 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 🔗
如果该平面和 to_plane
近似相等,则返回 true
,判断近似相等的方法是通过在每个分量上运行 @GlobalScope.is_equal_approx。
如果该平面是有限的,则返回 true
,判断方法是在每个分量上调用 @GlobalScope.is_finite。
bool is_point_over(point: Vector3) const 🔗
如果 point
位于平面上方,则返回 true
。
返回该平面归一化 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 的负值。和写 Plane(-p.normal, -p.d)
相同。该操作翻转了法线向量的方向,也翻转了距离值,得到的 Plane 位于同一个位置,但是朝向相反的方向。