Geometry
Inherits: Object
用于计算通用几何操作的辅助节点。
描述
Geometry 为用户提供了一组辅助函数,用于创建几何形状、计算形状之间的交点以及处理各种其他几何操作。
方法
枚举
enum PolyBooleanOperation:
OPERATION_UNION = 0 —- 创建区域,其中主体或剪辑多边形(或两者)被填充。
OPERATION_DIFFERENCE = 1 —- 创建主体多边形被填充的区域,但剪辑多边形被填充的区域除外。
OPERATION_INTERSECTION = 2 —- 创建主体和剪辑多边形都被填充的区域。
OPERATION_XOR = 3 —- 创建主体或剪辑多边形被填充的区域,但不是两者都被填充的区域。
enum PolyJoinType:
JOIN_SQUARE = 0 —- 在
1 * delta
的所有凸边连接处均匀地应用平方。JOIN_ROUND = 1 —- 虽然扁平化路径不可能完美地追踪一个弧线,但它们可以通过一系列弧弦来近似。
JOIN_MITER = 2 —- 对斜接有一个必要的限制,因为以非常尖锐的角度连接的边缘偏移会产生过长和过窄的 “尖刺”。对于任何给定的边缘连接,当斜接偏移会超过最大距离时,就采用 “方形 “连接。
enum PolyEndType:
END_POLYGON = 0 —- 端点使用PolyJoinType值连接,路径被填充为多边形。
END_JOINED = 1 —- 端点使用PolyJoinType值连接,路径被填充为多边形线。
END_BUTT = 2 —- 端点是方形的,没有延伸。
END_SQUARE = 3 —- 端点被平方化并扩展了
delta
单位。END_ROUND = 4 —- 端点被四舍五入,并以
delta
为单位进行扩展。
方法说明
返回一个包含6个Plane的数组,描述以原点为中心的盒子的边。盒子的大小由extents
定义,它代表盒子的一个(正)角(即其实际大小的一半)。
返回一个Plane数组,该数组紧密地绑定着一个以原点为中心,半径为radius
,高度为height
的面状胶囊。参数side
定义了将为胶囊的侧面部分生成多少个平面,而lats
则给出了胶囊底部和顶部的纬向阶梯数。参数axis
描述了胶囊的方向轴(0为X,1为Y,2为Z)。
返回一个Plane数组,该数组紧密绑定以原点为中心的切面圆柱体,其半径为radius
,高度为height
。参数side
定义了将为圆柱体的圆形部分生成多少个平面。参数axis
描述了圆柱体的方向轴(0代表X,1代表Y,2代表Z)。
- PoolVector3Array clip_polygon ( PoolVector3Array points, Plane plane )
将point
中的点所定义的多边形与plane
进行对比,并返回被剪切的多边形的点。
- Array clip_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
将polygon_a
与polygon_b
进行对比,并返回一个被剪切的多边形数组。这在多边形之间执行OPERATION_DIFFERENCE。如果polygon_b
与polygon_a
完全重合,则返回一个空数组。
如果polygon_b
被polygon_a
包围,返回一个外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- Array clip_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )
将polyline
与polygon
相对应,并返回一个折线数组。在折线和多边形之间执行OPERATION_DIFFERENCE。这个操作可以被认为是用一个封闭的形状切割一条线。
- PoolVector2Array convex_hull_2d ( PoolVector2Array points )
给出一个Vector2s的数组,以逆时针的顺序返回凸面的点的列表。最后一个点与第一个点相同。
- Array exclude_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
相互排除由 polygon_a
和 polygon_b
(见 intersect_polygons_2d)的交叉点定义的公共区域,并返回一个排除的多边形数组。这在多边形之间执行了 OPERATION_XOR。换句话说,返回多边形之间除公共区域外的所有区域。
该操作可能会产生一个外部多边形(边界)和内部多边形(孔),可以通过调用 is_polygon_clockwise 来区分。
返回3D部份(s1
, s2
)上离point
最近的3D点。返回的点将总是在指定的部份内。
返回2D段(s1
, s2
)上最接近point
的2D点。返回的点将总是在指定的线段内。
返回由(s1
, s2
)定义的三维直线上最接近 point
的三维点。返回的点可以在线段内(s1
, s2
),也可以在线段外,即在线段延伸的某处。
返回由(s1
, s2
)定义的二维线上最接近point
的二维点。返回的点可以在线段(s1
, s2
)内,也可以在线段外,即在从线段延伸出来的某处。
- PoolVector3Array get_closest_points_between_segments ( Vector3 p1, Vector3 p2, Vector3 q1, Vector3 q2 )
给定两个 3D 线段 (p1
,p2
) 和 (q1
,q2
),到这两个线段上最接近的两个点。返回一个 PoolVector3Array,其中包含 (p1
,p2
) 上的这个点以及 (q1
,q2
) 上的伴随点.
- PoolVector2Array get_closest_points_between_segments_2d ( Vector2 p1, Vector2 q1, Vector2 p2, Vector2 q2 )
给定两个 2D 线段 (p1
,q1
) 和 (p2
,q2
),找到这两个线段上最接近的两个点。返回一个 PoolVector2Array,其中包含 (p1
,q1
) 上的这个点以及 (p2
, q2
) 上的伴随点.
由引擎内部使用。
- Array intersect_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
将polygon_a
与polygon_b
相交并返回相交的多边形数组。这在多边形之间执行OPERATION_INTERSECTION。换句话说,返回多边形共享的公共区域。如果没有发生相交,则返回一个空数组。
该操作可能导致产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- Array intersect_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )
将polyline
与polygon
相交,并返回相交的折线数组。这在折线和多边形之间执行了OPERATION_INTERSECTION。这个操作可以被认为是用一个封闭的形状砍断一条线。
返回true
时,point
位于圆的内部或者正好位于圆的边界上,否则将返回false
。
- bool is_point_in_polygon ( Vector2 point, PoolVector2Array polygon )
返回true
时,point
位于多边形polygon
的内部或者正好位于多边形的边界上,否则将返回false
。
- bool is_polygon_clockwise ( PoolVector2Array polygon )
如果多边形 polygon
的顶点按顺时针顺序排序,则返回 true
,否则返回 false
。
检查两行(from_a
,dir_a
)和(from_b
,dir_b
)是否相交。如果是,则将相交点返回为Vector2。如果没有交叉,则返回一个空的Variant。
注意:线是使用方向向量而不是终点指定的。
- Dictionary make_atlas ( PoolVector2Array sizes )
给定表示图块的Vector2数组,构建一个地图集。返回的字典有两个键:points
是Vector2的向量,用于指定每个图块的位置,size
包含整个图集的整体大小,作为Vector2。
- Array merge_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
合并(结合)polygon_a
和 polygon_b
,并返回一个合并的多边形数组。在多边形之间执行 OPERATION_UNION。
该操作可能会产生一个外部多边形(边界)和内部多边形(孔),可以通过调用 is_polygon_clockwise 来区分。
- Array offset_polygon_2d ( PoolVector2Array polygon, float delta, PolyJoinType join_type=0 )
通过 delta
单位(像素)膨胀或缩小多边形 polygon
。如果 delta
是正数,使多边形向外增长。如果 delta
是负数,则使多边形向内收缩。返回一个多边形数组,因为膨胀或缩小可能导致多个离散的多边形。如果 delta
为负数,并且其绝对值大约超过了多边形的最小边界矩形尺寸,则返回一个空数组。
每个多边形的顶点将按照 join_type
确定的方式进行圆角处理,见 PolyJoinType。
该操作可能会产生一个外部多边形(边界)和内部多边形(孔),可以通过调用 is_polygon_clockwise来区分。
注意:要具体平移多边形的顶点,请使用 Transform2D.xform 方法。
var polygon = PoolVector2Array([ Vector2(0, 0), Vector2(100, 0), Vector2(100, 100), Vector2(0, 100) ] )
var offset = Vector2(50, 50)
polygon = Transform2D(0, offset).xform(polygon)
print(polygon) #打印出 [Vector2(50, 50), Vector2(150, 50), Vector2(150, 150), Vector2(50, 150)] 。
- Array offset_polyline_2d ( PoolVector2Array polyline, float delta, PolyJoinType join_type=0, PolyEndType end_type=3 )
通过delta
单位(像素)对多边形线polyline
进行充气或放气,产生多边形。如果delta
为正数,则使多段线向外增长。返回一个多边形数组,因为充气/放气可能导致多个离散的多边形。如果delta
为负数,返回一个空数组。
每个多边形的顶点将由join_type
决定,见PolyJoinType。
每个多边形的端点将由end_type
决定,见PolyEndType。
该操作可能会产生一个外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
如果点point
在a
、b
和c
所指定的三角形内,则返回。
测试从from
开始,方向为dir
的3D射线是否与a
、b
和c
指定的三角形相交。如果是,返回相交点为Vector3。如果没有发生相交,将返回一个空的Variant。
- float segment_intersects_circle ( Vector2 segment_from, Vector2 segment_to, Vector2 circle_position, float circle_radius )
给出2D线段(segment_from
,segment_to
),返回线段上与圆心为 circle_position
、半径为 circle_radius
圆的相交位置(以0到1之间的数字)。如果线段没有与圆相交,则返回-1(如果延伸线段的线段与圆相交,但线段没有相交,也是这种情况)。
- PoolVector3Array segment_intersects_convex ( Vector3 from, Vector3 to, Array planes )
给定一个通过数组 planes
中的 Planes 定义的凸面体,测试线段(from
,to
)是否与该面体相交。如果找到相交点,返回一个PoolVector3Array,包含相交点和凸面体的法线。如果没有找到相交点,返回的数组为空。
- PoolVector3Array segment_intersects_cylinder ( Vector3 from, Vector3 to, float height, float radius )
检查线段(from
,to
)是否与高度 height
的圆柱体相交,圆柱体以原点为中心,半径为 radius
。如果没有,返回一个空的 PoolVector3Array。如果发生了相交,返回的数组包含相交点和圆柱体在相交点的法线。
- Variant segment_intersects_segment_2d ( Vector2 from_a, Vector2 to_a, Vector2 from_b, Vector2 to_b )
检查两段(from_a
, to_a
)和(from_b
, to_b
)是否相交。如果是,返回相交点为Vector2。如果没有发生相交,返回一个空的Variant。
- PoolVector3Array segment_intersects_sphere ( Vector3 from, Vector3 to, Vector3 sphere_position, float sphere_radius )
检查线段(from
,to
)是否与球心为 sphere_position
、半径为 sphere_radius
的球体相交。如果没有,返回一个空的 PoolVector3Array。如果相交,返回一个包含交点和交点处球体法线的 PoolVector3Array。
测试段(from
,to
)是否与三角形a
,b
,c
相交。如果是,返回相交点为Vector3。如果没有发生相交,则返回一个空的Variant。
- PoolIntArray triangulate_delaunay_2d ( PoolVector2Array points )
对由离散的 point
点集合指定的区域进行三角化,使得任何点都不在任何结果三角形的外接圆内。返回一个 PoolIntArray,其中每个三角形由 point
点的三个连续的点索引组成(即返回的数组将有 n * 3
元素,n
是找到的三角形的数量)。如果三角化没有成功,将返回一个空的 PoolIntArray。
- PoolIntArray triangulate_polygon ( PoolVector2Array polygon )
对多边形 polygon
中的点指定的多边形进行三角化。返回一个 PoolIntArray,其中每个三角形由 polygon
中三个连续的点索引组成(即返回的数组将有 n * 3
个元素,n
是找到的三角形的数量)。如果三角化没有成功,将返回一个空的 PoolIntArray。