Geometry

Inherits: Object

用于计算通用几何操作的辅助节点。

描述

Geometry 为用户提供了一组辅助函数,用于创建几何形状、计算形状之间的交点以及处理各种其他几何操作。

方法

Array

build_box_planes ( Vector3 extents )

Array

build_capsule_planes ( float radius, float height, int sides, int lats, Vector3.Axis axis=2 )

Array

build_cylinder_planes ( float radius, float height, int sides, Vector3.Axis axis=2 )

PoolVector3Array

clip_polygon ( PoolVector3Array points, Plane plane )

Array

clip_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Array

clip_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )

PoolVector2Array

convex_hull_2d ( PoolVector2Array points )

Array

exclude_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Vector3

get_closest_point_to_segment ( Vector3 point, Vector3 s1, Vector3 s2 )

Vector2

get_closest_point_to_segment_2d ( Vector2 point, Vector2 s1, Vector2 s2 )

Vector3

get_closest_point_to_segment_uncapped ( Vector3 point, Vector3 s1, Vector3 s2 )

Vector2

get_closest_point_to_segment_uncapped_2d ( Vector2 point, Vector2 s1, Vector2 s2 )

PoolVector3Array

get_closest_points_between_segments ( Vector3 p1, Vector3 p2, Vector3 q1, Vector3 q2 )

PoolVector2Array

get_closest_points_between_segments_2d ( Vector2 p1, Vector2 q1, Vector2 p2, Vector2 q2 )

int

get_uv84_normal_bit ( Vector3 normal )

Array

intersect_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Array

intersect_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )

bool

is_point_in_circle ( Vector2 point, Vector2 circle_position, float circle_radius )

bool

is_point_in_polygon ( Vector2 point, PoolVector2Array polygon )

bool

is_polygon_clockwise ( PoolVector2Array polygon )

Variant

line_intersects_line_2d ( Vector2 from_a, Vector2 dir_a, Vector2 from_b, Vector2 dir_b )

Dictionary

make_atlas ( PoolVector2Array sizes )

Array

merge_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Array

offset_polygon_2d ( PoolVector2Array polygon, float delta, PolyJoinType join_type=0 )

Array

offset_polyline_2d ( PoolVector2Array polyline, float delta, PolyJoinType join_type=0, PolyEndType end_type=3 )

bool

point_is_inside_triangle ( Vector2 point, Vector2 a, Vector2 b, Vector2 c ) const

Variant

ray_intersects_triangle ( Vector3 from, Vector3 dir, Vector3 a, Vector3 b, Vector3 c )

float

segment_intersects_circle ( Vector2 segment_from, Vector2 segment_to, Vector2 circle_position, float circle_radius )

PoolVector3Array

segment_intersects_convex ( Vector3 from, Vector3 to, Array planes )

PoolVector3Array

segment_intersects_cylinder ( Vector3 from, Vector3 to, float height, float radius )

Variant

segment_intersects_segment_2d ( Vector2 from_a, Vector2 to_a, Vector2 from_b, Vector2 to_b )

PoolVector3Array

segment_intersects_sphere ( Vector3 from, Vector3 to, Vector3 sphere_position, float sphere_radius )

Variant

segment_intersects_triangle ( Vector3 from, Vector3 to, Vector3 a, Vector3 b, Vector3 c )

PoolIntArray

triangulate_delaunay_2d ( PoolVector2Array points )

PoolIntArray

triangulate_polygon ( PoolVector2Array polygon )

枚举

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)。


  • Array build_cylinder_planes ( float radius, float height, int sides, Vector3.Axis axis=2 )

返回一个Plane数组,该数组紧密绑定以原点为中心的切面圆柱体,其半径为radius,高度为height。参数side定义了将为圆柱体的圆形部分生成多少个平面。参数axis描述了圆柱体的方向轴(0代表X,1代表Y,2代表Z)。


point中的点所定义的多边形与plane进行对比,并返回被剪切的多边形的点。


polygon_apolygon_b进行对比,并返回一个被剪切的多边形数组。这在多边形之间执行OPERATION_DIFFERENCE。如果polygon_bpolygon_a完全重合,则返回一个空数组。

如果polygon_bpolygon_a包围,返回一个外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


polylinepolygon相对应,并返回一个折线数组。在折线和多边形之间执行OPERATION_DIFFERENCE。这个操作可以被认为是用一个封闭的形状切割一条线。


给出一个Vector2s的数组,以逆时针的顺序返回凸面的点的列表。最后一个点与第一个点相同。


相互排除由 polygon_apolygon_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)内,也可以在线段外,即在从线段延伸出来的某处。


给定两个 3D 线段 (p1p2) 和 (q1q2),到这两个线段上最接近的两个点。返回一个 PoolVector3Array,其中包含 (p1p2) 上的这个点以及 (q1q2) 上的伴随点.


给定两个 2D 线段 (p1q1) 和 (p2q2),找到这两个线段上最接近的两个点。返回一个 PoolVector2Array,其中包含 (p1q1) 上的这个点以及 (p2, q2) 上的伴随点.


由引擎内部使用。


polygon_apolygon_b相交并返回相交的多边形数组。这在多边形之间执行OPERATION_INTERSECTION。换句话说,返回多边形共享的公共区域。如果没有发生相交,则返回一个空数组。

该操作可能导致产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


polylinepolygon相交,并返回相交的折线数组。这在折线和多边形之间执行了OPERATION_INTERSECTION。这个操作可以被认为是用一个封闭的形状砍断一条线。


返回true时,point位于圆的内部或者正好位于圆的边界上,否则将返回false


返回true时,point位于多边形polygon的内部或者正好位于多边形的边界上,否则将返回false


如果多边形 polygon 的顶点按顺时针顺序排序,则返回 true,否则返回 false


检查两行(from_adir_a)和(from_bdir_b)是否相交。如果是,则将相交点返回为Vector2。如果没有交叉,则返回一个空的Variant

注意:线是使用方向向量而不是终点指定的。


给定表示图块的Vector2数组,构建一个地图集。返回的字典有两个键:pointsVector2的向量,用于指定每个图块的位置,size包含整个图集的整体大小,作为Vector2


合并(结合)polygon_apolygon_b,并返回一个合并的多边形数组。在多边形之间执行 OPERATION_UNION

该操作可能会产生一个外部多边形(边界)和内部多边形(孔),可以通过调用 is_polygon_clockwise 来区分。


通过 delta 单位(像素)膨胀或缩小多边形 polygon。如果 delta 是正数,使多边形向外增长。如果 delta 是负数,则使多边形向内收缩。返回一个多边形数组,因为膨胀或缩小可能导致多个离散的多边形。如果 delta 为负数,并且其绝对值大约超过了多边形的最小边界矩形尺寸,则返回一个空数组。

每个多边形的顶点将按照 join_type 确定的方式进行圆角处理,见 PolyJoinType

该操作可能会产生一个外部多边形(边界)和内部多边形(孔),可以通过调用 is_polygon_clockwise来区分。

注意:要具体平移多边形的顶点,请使用 Transform2D.xform 方法。

  1. var polygon = PoolVector2Array([ Vector2(0, 0), Vector2(100, 0), Vector2(100, 100), Vector2(0, 100) ] )
  2. var offset = Vector2(50, 50)
  3. polygon = Transform2D(0, offset).xform(polygon)
  4. print(polygon) #打印出 [Vector2(50, 50), Vector2(150, 50), Vector2(150, 150), Vector2(50, 150)] 。

通过delta单位(像素)对多边形线polyline进行充气或放气,产生多边形。如果delta为正数,则使多段线向外增长。返回一个多边形数组,因为充气/放气可能导致多个离散的多边形。如果delta为负数,返回一个空数组。

每个多边形的顶点将由join_type决定,见PolyJoinType

每个多边形的端点将由end_type决定,见PolyEndType

该操作可能会产生一个外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


如果点pointabc所指定的三角形内,则返回。


测试从from开始,方向为dir的3D射线是否与abc指定的三角形相交。如果是,返回相交点为Vector3。如果没有发生相交,将返回一个空的Variant


给出2D线段(segment_fromsegment_to),返回线段上与圆心为 circle_position 、半径为 circle_radius 圆的相交位置(以0到1之间的数字)。如果线段没有与圆相交,则返回-1(如果延伸线段的线段与圆相交,但线段没有相交,也是这种情况)。


给定一个通过数组 planes 中的 Planes 定义的凸面体,测试线段(fromto)是否与该面体相交。如果找到相交点,返回一个PoolVector3Array,包含相交点和凸面体的法线。如果没有找到相交点,返回的数组为空。


检查线段(fromto)是否与高度 height 的圆柱体相交,圆柱体以原点为中心,半径为 radius。如果没有,返回一个空的 PoolVector3Array。如果发生了相交,返回的数组包含相交点和圆柱体在相交点的法线。


检查两段(from_a, to_a)和(from_b, to_b)是否相交。如果是,返回相交点为Vector2。如果没有发生相交,返回一个空的Variant


检查线段(fromto)是否与球心为 sphere_position、半径为 sphere_radius 的球体相交。如果没有,返回一个空的 PoolVector3Array。如果相交,返回一个包含交点和交点处球体法线的 PoolVector3Array


测试段(fromto)是否与三角形abc相交。如果是,返回相交点为Vector3。如果没有发生相交,则返回一个空的Variant


对由离散的 point 点集合指定的区域进行三角化,使得任何点都不在任何结果三角形的外接圆内。返回一个 PoolIntArray,其中每个三角形由 point 点的三个连续的点索引组成(即返回的数组将有 n * 3 元素,n 是找到的三角形的数量)。如果三角化没有成功,将返回一个空的 PoolIntArray


对多边形 polygon 中的点指定的多边形进行三角化。返回一个 PoolIntArray,其中每个三角形由 polygon 中三个连续的点索引组成(即返回的数组将有 n * 3 个元素,n 是找到的三角形的数量)。如果三角化没有成功,将返回一个空的 PoolIntArray