Files
godot-docs-l10n/classes/zh_CN/class_geometry2d.rst

596 lines
43 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. DO NOT EDIT THIS FILE!!!
.. Generated automatically from Godot engine sources.
.. Generator: https://github.com/godotengine/godot/tree/4.4/doc/tools/make_rst.py.
.. XML source: https://github.com/godotengine/godot/tree/4.4/doc/classes/Geometry2D.xml.
.. _class_Geometry2D:
Geometry2D
==========
**继承:** :ref:`Object<class_Object>`
提供常见 2D 几何运算的方法。
.. rst-class:: classref-introduction-group
描述
----
为创建几何形状,计算形状之间的交集,以及处理 2D 中的各种其他几何操作提供了一组辅助函数。
.. rst-class:: classref-reftable-group
方法
----
.. table::
:widths: auto
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`Vector2i<class_Vector2i>`\] | :ref:`bresenham_line<class_Geometry2D_method_bresenham_line>`\ (\ from\: :ref:`Vector2i<class_Vector2i>`, to\: :ref:`Vector2i<class_Vector2i>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`clip_polygons<class_Geometry2D_method_clip_polygons>`\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`clip_polyline_with_polygon<class_Geometry2D_method_clip_polyline_with_polygon>`\ (\ polyline\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector2Array<class_PackedVector2Array>` | :ref:`convex_hull<class_Geometry2D_method_convex_hull>`\ (\ points\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`decompose_polygon_in_convex<class_Geometry2D_method_decompose_polygon_in_convex>`\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`exclude_polygons<class_Geometry2D_method_exclude_polygons>`\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Vector2<class_Vector2>` | :ref:`get_closest_point_to_segment<class_Geometry2D_method_get_closest_point_to_segment>`\ (\ point\: :ref:`Vector2<class_Vector2>`, s1\: :ref:`Vector2<class_Vector2>`, s2\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Vector2<class_Vector2>` | :ref:`get_closest_point_to_segment_uncapped<class_Geometry2D_method_get_closest_point_to_segment_uncapped>`\ (\ point\: :ref:`Vector2<class_Vector2>`, s1\: :ref:`Vector2<class_Vector2>`, s2\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector2Array<class_PackedVector2Array>` | :ref:`get_closest_points_between_segments<class_Geometry2D_method_get_closest_points_between_segments>`\ (\ p1\: :ref:`Vector2<class_Vector2>`, q1\: :ref:`Vector2<class_Vector2>`, p2\: :ref:`Vector2<class_Vector2>`, q2\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`intersect_polygons<class_Geometry2D_method_intersect_polygons>`\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`intersect_polyline_with_polygon<class_Geometry2D_method_intersect_polyline_with_polygon>`\ (\ polyline\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_point_in_circle<class_Geometry2D_method_is_point_in_circle>`\ (\ point\: :ref:`Vector2<class_Vector2>`, circle_position\: :ref:`Vector2<class_Vector2>`, circle_radius\: :ref:`float<class_float>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_point_in_polygon<class_Geometry2D_method_is_point_in_polygon>`\ (\ point\: :ref:`Vector2<class_Vector2>`, polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_polygon_clockwise<class_Geometry2D_method_is_polygon_clockwise>`\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`line_intersects_line<class_Geometry2D_method_line_intersects_line>`\ (\ from_a\: :ref:`Vector2<class_Vector2>`, dir_a\: :ref:`Vector2<class_Vector2>`, from_b\: :ref:`Vector2<class_Vector2>`, dir_b\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Dictionary<class_Dictionary>` | :ref:`make_atlas<class_Geometry2D_method_make_atlas>`\ (\ sizes\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`merge_polygons<class_Geometry2D_method_merge_polygons>`\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`offset_polygon<class_Geometry2D_method_offset_polygon>`\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`, delta\: :ref:`float<class_float>`, join_type\: :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` = 0\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] | :ref:`offset_polyline<class_Geometry2D_method_offset_polyline>`\ (\ polyline\: :ref:`PackedVector2Array<class_PackedVector2Array>`, delta\: :ref:`float<class_float>`, join_type\: :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` = 0, end_type\: :ref:`PolyEndType<enum_Geometry2D_PolyEndType>` = 3\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`point_is_inside_triangle<class_Geometry2D_method_point_is_inside_triangle>`\ (\ point\: :ref:`Vector2<class_Vector2>`, a\: :ref:`Vector2<class_Vector2>`, b\: :ref:`Vector2<class_Vector2>`, c\: :ref:`Vector2<class_Vector2>`\ ) |const| |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`float<class_float>` | :ref:`segment_intersects_circle<class_Geometry2D_method_segment_intersects_circle>`\ (\ segment_from\: :ref:`Vector2<class_Vector2>`, segment_to\: :ref:`Vector2<class_Vector2>`, circle_position\: :ref:`Vector2<class_Vector2>`, circle_radius\: :ref:`float<class_float>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`segment_intersects_segment<class_Geometry2D_method_segment_intersects_segment>`\ (\ from_a\: :ref:`Vector2<class_Vector2>`, to_a\: :ref:`Vector2<class_Vector2>`, from_b\: :ref:`Vector2<class_Vector2>`, to_b\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedInt32Array<class_PackedInt32Array>` | :ref:`triangulate_delaunay<class_Geometry2D_method_triangulate_delaunay>`\ (\ points\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedInt32Array<class_PackedInt32Array>` | :ref:`triangulate_polygon<class_Geometry2D_method_triangulate_polygon>`\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
+----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
枚举
----
.. _enum_Geometry2D_PolyBooleanOperation:
.. rst-class:: classref-enumeration
enum **PolyBooleanOperation**: :ref:`🔗<enum_Geometry2D_PolyBooleanOperation>`
.. _class_Geometry2D_constant_OPERATION_UNION:
.. rst-class:: classref-enumeration-constant
:ref:`PolyBooleanOperation<enum_Geometry2D_PolyBooleanOperation>` **OPERATION_UNION** = ``0``
创建区域,其中主体或剪辑多边形(或两者)被填充。
.. _class_Geometry2D_constant_OPERATION_DIFFERENCE:
.. rst-class:: classref-enumeration-constant
:ref:`PolyBooleanOperation<enum_Geometry2D_PolyBooleanOperation>` **OPERATION_DIFFERENCE** = ``1``
创建主体多边形被填充的区域,但剪辑多边形被填充的区域除外。
.. _class_Geometry2D_constant_OPERATION_INTERSECTION:
.. rst-class:: classref-enumeration-constant
:ref:`PolyBooleanOperation<enum_Geometry2D_PolyBooleanOperation>` **OPERATION_INTERSECTION** = ``2``
创建主体和剪辑多边形都被填充的区域。
.. _class_Geometry2D_constant_OPERATION_XOR:
.. rst-class:: classref-enumeration-constant
:ref:`PolyBooleanOperation<enum_Geometry2D_PolyBooleanOperation>` **OPERATION_XOR** = ``3``
创建主体或剪辑多边形被填充的区域,但不是两者都被填充的区域。
.. rst-class:: classref-item-separator
----
.. _enum_Geometry2D_PolyJoinType:
.. rst-class:: classref-enumeration
enum **PolyJoinType**: :ref:`🔗<enum_Geometry2D_PolyJoinType>`
.. _class_Geometry2D_constant_JOIN_SQUARE:
.. rst-class:: classref-enumeration-constant
:ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` **JOIN_SQUARE** = ``0``
``1 * delta`` 的所有凸边连接处均匀地应用平方。
.. _class_Geometry2D_constant_JOIN_ROUND:
.. rst-class:: classref-enumeration-constant
:ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` **JOIN_ROUND** = ``1``
虽然扁平化路径不可能完美地追踪一个弧线,但它们可以通过一系列弧弦来近似。
.. _class_Geometry2D_constant_JOIN_MITER:
.. rst-class:: classref-enumeration-constant
:ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` **JOIN_MITER** = ``2``
对斜接有一个必要的限制,因为以非常尖锐的角度连接的边缘偏移会产生过长和过窄的 "尖刺"。对于任何给定的边缘连接,当斜接偏移会超过最大距离时,就采用 "方形 "连接。
.. rst-class:: classref-item-separator
----
.. _enum_Geometry2D_PolyEndType:
.. rst-class:: classref-enumeration
enum **PolyEndType**: :ref:`🔗<enum_Geometry2D_PolyEndType>`
.. _class_Geometry2D_constant_END_POLYGON:
.. rst-class:: classref-enumeration-constant
:ref:`PolyEndType<enum_Geometry2D_PolyEndType>` **END_POLYGON** = ``0``
端点使用 :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` 值连接,路径被填充为多边形。
.. _class_Geometry2D_constant_END_JOINED:
.. rst-class:: classref-enumeration-constant
:ref:`PolyEndType<enum_Geometry2D_PolyEndType>` **END_JOINED** = ``1``
端点使用 :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` 值连接,路径被填充为多边形线。
.. _class_Geometry2D_constant_END_BUTT:
.. rst-class:: classref-enumeration-constant
:ref:`PolyEndType<enum_Geometry2D_PolyEndType>` **END_BUTT** = ``2``
端点是方形的,没有延伸。
.. _class_Geometry2D_constant_END_SQUARE:
.. rst-class:: classref-enumeration-constant
:ref:`PolyEndType<enum_Geometry2D_PolyEndType>` **END_SQUARE** = ``3``
端点被平方化并扩展了 ``delta`` 单位。
.. _class_Geometry2D_constant_END_ROUND:
.. rst-class:: classref-enumeration-constant
:ref:`PolyEndType<enum_Geometry2D_PolyEndType>` **END_ROUND** = ``4``
端点被四舍五入,并以 ``delta`` 为单位进行扩展。
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
方法说明
--------
.. _class_Geometry2D_method_bresenham_line:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`Vector2i<class_Vector2i>`\] **bresenham_line**\ (\ from\: :ref:`Vector2i<class_Vector2i>`, to\: :ref:`Vector2i<class_Vector2i>`\ ) :ref:`🔗<class_Geometry2D_method_bresenham_line>`
返回起点 ``from`` 和终点 ``to`` 之间的\ `布雷森汉姆直线 <https://zh.wikipedia.org/zh-hans/%E5%B8%83%E9%9B%B7%E6%A3%AE%E6%BC%A2%E5%A7%86%E7%9B%B4%E7%B7%9A%E6%BC%94%E7%AE%97%E6%B3%95>`__\ 。布雷森汉姆直线是由一系列像素点构成的直线,绘制的每一行每一列的粗细都(不多不少)始终为 1 像素。
在两个 :ref:`Marker2D<class_Marker2D>` 节点之间调用一系列 :ref:`CanvasItem.draw_rect()<class_CanvasItem_method_draw_rect>` 绘制直线:
::
func _draw():
for pixel in Geometry2D.bresenham_line($MarkerA.position, $MarkerB.position):
draw_rect(Rect2(pixel, Vector2.ONE), Color.WHITE)
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_clip_polygons:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **clip_polygons**\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_clip_polygons>`
根据 ``polygon_b`` 裁剪 ``polygon_a``\ ,并返回一组裁剪后的多边形。这会在多边形之间执行 :ref:`OPERATION_DIFFERENCE<class_Geometry2D_constant_OPERATION_DIFFERENCE>`\ 。如果 ``polygon_b`` 完全覆盖 ``polygon_a`` ,则返回一个空数组。
如果 ``polygon_b````polygon_a`` 包围,则返回一个外多边形(边界)和一个内多边形(孔),可以通过调用 :ref:`is_polygon_clockwise()<class_Geometry2D_method_is_polygon_clockwise>` 来区分。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_clip_polyline_with_polygon:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **clip_polyline_with_polygon**\ (\ polyline\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_clip_polyline_with_polygon>`
根据 ``polygon`` 裁剪 ``polyline``\ ,并返回一组裁剪后的折线。这会在折线和多边形之间执行 :ref:`OPERATION_DIFFERENCE<class_Geometry2D_constant_OPERATION_DIFFERENCE>`\ 。这个操作可以被认为是用一个封闭的形状切割一条线。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_convex_hull:
.. rst-class:: classref-method
:ref:`PackedVector2Array<class_PackedVector2Array>` **convex_hull**\ (\ points\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_convex_hull>`
给出一个 :ref:`Vector2<class_Vector2>` 的数组,以逆时针的顺序返回凸面的点的列表。最后一个点与第一个点相同。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_decompose_polygon_in_convex:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **decompose_polygon_in_convex**\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_decompose_polygon_in_convex>`
``polygon`` 分解为多个凸面,并返回一个 :ref:`PackedVector2Array<class_PackedVector2Array>` 的数组。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_exclude_polygons:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **exclude_polygons**\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_exclude_polygons>`
相互排除由 ``polygon_a````polygon_b`` 的交集(参见 :ref:`intersect_polygons()<class_Geometry2D_method_intersect_polygons>`\ )定义的公共区域,并返回一组排除的多边形。这会在多边形之间执行 :ref:`OPERATION_XOR<class_Geometry2D_constant_OPERATION_XOR>`\ 。换句话说,返回各多边形之间除公共区域之外的所有区域。
该操作可能会产生一个外多边形(边界)和一个内多边形(孔),这可以通过调用 :ref:`is_polygon_clockwise()<class_Geometry2D_method_is_polygon_clockwise>` 来区分。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_get_closest_point_to_segment:
.. rst-class:: classref-method
:ref:`Vector2<class_Vector2>` **get_closest_point_to_segment**\ (\ point\: :ref:`Vector2<class_Vector2>`, s1\: :ref:`Vector2<class_Vector2>`, s2\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_Geometry2D_method_get_closest_point_to_segment>`
返回 2D 线段 (``s1``, ``s2``) 上与 ``point`` 最接近的 2D 点。返回的点始终在指定的线段上。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_get_closest_point_to_segment_uncapped:
.. rst-class:: classref-method
:ref:`Vector2<class_Vector2>` **get_closest_point_to_segment_uncapped**\ (\ point\: :ref:`Vector2<class_Vector2>`, s1\: :ref:`Vector2<class_Vector2>`, s2\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_Geometry2D_method_get_closest_point_to_segment_uncapped>`
返回 2D 直线 (``s1``, ``s2``) 上与 ``point`` 最接近的 2D 点。返回的点可能在 (``s1``, ``s2``) 线段上,也有可能不在,即直线上该线段之外的部分。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_get_closest_points_between_segments:
.. rst-class:: classref-method
:ref:`PackedVector2Array<class_PackedVector2Array>` **get_closest_points_between_segments**\ (\ p1\: :ref:`Vector2<class_Vector2>`, q1\: :ref:`Vector2<class_Vector2>`, p2\: :ref:`Vector2<class_Vector2>`, q2\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_Geometry2D_method_get_closest_points_between_segments>`
给定两个 2D 线段 (``p1``, ``q1``) 和 (``p2``, ``q2``),找出这两个线段见距离最近的两个点。返回 :ref:`PackedVector2Array<class_PackedVector2Array>`\ ,包含 (``p1``, ``q1``) 和 (``p2``, ``q2``) 上的点。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_intersect_polygons:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **intersect_polygons**\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_intersect_polygons>`
``polygon_a````polygon_b`` 相交,并返回一组相交的多边形。这会在多边形之间执行 :ref:`OPERATION_INTERSECTION<class_Geometry2D_constant_OPERATION_INTERSECTION>`\ 。换句话说,返回由各多边形共享的公共区域。如果没有交集,则返回一个空数组。
该操作可能会产生一个外多边形(边界)和一个内多边形(孔),这可以通过调用 :ref:`is_polygon_clockwise()<class_Geometry2D_method_is_polygon_clockwise>` 来区分。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_intersect_polyline_with_polygon:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **intersect_polyline_with_polygon**\ (\ polyline\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_intersect_polyline_with_polygon>`
``polyline````polygon`` 相交,并返回一组相交的折线。这会在折线和多边形之间执行 :ref:`OPERATION_INTERSECTION<class_Geometry2D_constant_OPERATION_INTERSECTION>`\ 。这个操作可以被认为是用一个封闭的形状切割一条线。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_is_point_in_circle:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_point_in_circle**\ (\ point\: :ref:`Vector2<class_Vector2>`, circle_position\: :ref:`Vector2<class_Vector2>`, circle_radius\: :ref:`float<class_float>`\ ) :ref:`🔗<class_Geometry2D_method_is_point_in_circle>`
如果 ``point`` 在圆内或恰好位于圆的边界\ *上*\ ,则返回 ``true``\ ;否则返回 ``false``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_is_point_in_polygon:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_point_in_polygon**\ (\ point\: :ref:`Vector2<class_Vector2>`, polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_is_point_in_polygon>`
如果 ``point````polygon`` 内或者它恰好位于多边形的边界\ *上*\ ,则返回 ``true``\ ;否则返回 ``false``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_is_polygon_clockwise:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_polygon_clockwise**\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_is_polygon_clockwise>`
如果 ``polygon`` 的顶点按顺时针顺序排列,则返回 ``true``\ ,否则返回 ``false``\ 。
\ **注意:**\ 假设笛卡尔坐标系中 ``+x`` 为右,\ ``+y`` 为上。如果使用屏幕坐标(\ ``+y`` 为下),则需要翻转结果(即 ``true`` 结果将标识是逆时针)。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_line_intersects_line:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **line_intersects_line**\ (\ from_a\: :ref:`Vector2<class_Vector2>`, dir_a\: :ref:`Vector2<class_Vector2>`, from_b\: :ref:`Vector2<class_Vector2>`, dir_b\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_Geometry2D_method_line_intersects_line>`
返回直线 (``from_a``, ``dir_a``) 和直线 (``from_b``, ``dir_b``) 的交点。返回 :ref:`Vector2<class_Vector2>`\ ,直线平行则返回 ``null``\ 。
\ ``from````dir`` *不是*\ 线段或射线的端点,而是直线的斜率(\ ``dir``\ )和直线上的一个已知点(\ ``from``\ )。
.. tabs::
.. code-tab:: gdscript
var from_a = Vector2.ZERO
var dir_a = Vector2.RIGHT
var from_b = Vector2.DOWN
# 返回 Vector2(1, 0)
Geometry2D.line_intersects_line(from_a, dir_a, from_b, Vector2(1, -1))
# 返回 Vector2(-1, 0)
Geometry2D.line_intersects_line(from_a, dir_a, from_b, Vector2(-1, -1))
# 返回 null
Geometry2D.line_intersects_line(from_a, dir_a, from_b, Vector2.RIGHT)
.. code-tab:: csharp
var fromA = Vector2.Zero;
var dirA = Vector2.Right;
var fromB = Vector2.Down;
// 返回新的 Vector2(1, 0)
Geometry2D.LineIntersectsLine(fromA, dirA, fromB, new Vector2(1, -1));
// 返回新的 Vector2(-1, 0)
Geometry2D.LineIntersectsLine(fromA, dirA, fromB, new Vector2(-1, -1));
// 返回 null
Geometry2D.LineIntersectsLine(fromA, dirA, fromB, Vector2.Right);
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_make_atlas:
.. rst-class:: classref-method
:ref:`Dictionary<class_Dictionary>` **make_atlas**\ (\ sizes\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_make_atlas>`
给定一个表示图块的 :ref:`Vector2<class_Vector2>` 数组,构建一个图集。返回的字典有两个键:\ ``points`` 是一个 :ref:`PackedVector2Array<class_PackedVector2Array>`\ ,指定每个图块的位置;\ ``size`` 包含整个图集的整体大小,是一个 :ref:`Vector2i<class_Vector2i>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_merge_polygons:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **merge_polygons**\ (\ polygon_a\: :ref:`PackedVector2Array<class_PackedVector2Array>`, polygon_b\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_merge_polygons>`
合并(结合)\ ``polygon_a````polygon_b``\ ,并返回一组合并的多边形。这在多边形之间执行 :ref:`OPERATION_UNION<class_Geometry2D_constant_OPERATION_UNION>`\ 。
该操作可能会产生一个外部多边形(边界)和多个内部多边形(孔),可以通过调用 :ref:`is_polygon_clockwise()<class_Geometry2D_method_is_polygon_clockwise>` 来区分它们。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_offset_polygon:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **offset_polygon**\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`, delta\: :ref:`float<class_float>`, join_type\: :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` = 0\ ) :ref:`🔗<class_Geometry2D_method_offset_polygon>`
``delta`` 单位(像素)膨胀或缩小 ``polygon``\ 。如果 ``delta`` 为正,则使多边形向外增长。如果 ``delta`` 为负,则使多边形向内收缩。返回一个多边形数组,因为膨胀/收缩可能会产生多个离散的多边形。如果 ``delta`` 为负,且其绝对值大约超过多边形的最小边界矩形尺寸,则返回一个空数组。
每个多边形的顶点将根据 ``join_type`` 决定进行舍入,参见 :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>`\ 。
该操作可能会产生一个外部多边形(边界)和内部多边形(孔),这可以通过调用 :ref:`is_polygon_clockwise()<class_Geometry2D_method_is_polygon_clockwise>` 来区分。
\ **注意:**\ 要具体平移多边形的顶点,将它们乘以一个 :ref:`Transform2D<class_Transform2D>`\
.. tabs::
.. code-tab:: gdscript
var polygon = PackedVector2Array([Vector2(0, 0), Vector2(100, 0), Vector2(100, 100), Vector2(0, 100)])
var offset = Vector2(50, 50)
polygon = Transform2D(0, offset) * polygon
print(polygon) # 输出 [(50.0, 50.0), (150.0, 50.0), (150.0, 150.0), (50.0, 150.0)]
.. code-tab:: csharp
Vector2[] polygon = [new Vector2(0, 0), new Vector2(100, 0), new Vector2(100, 100), new Vector2(0, 100)];
var offset = new Vector2(50, 50);
polygon = new Transform2D(0, offset) * polygon;
GD.Print((Variant)polygon); // 输出 [(50, 50), (150, 50), (150, 150), (50, 150)]
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_offset_polyline:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`PackedVector2Array<class_PackedVector2Array>`\] **offset_polyline**\ (\ polyline\: :ref:`PackedVector2Array<class_PackedVector2Array>`, delta\: :ref:`float<class_float>`, join_type\: :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>` = 0, end_type\: :ref:`PolyEndType<enum_Geometry2D_PolyEndType>` = 3\ ) :ref:`🔗<class_Geometry2D_method_offset_polyline>`
``polyline`` 膨胀或缩小 ``delta`` 个单位(像素),以产生多边形。如果 ``delta`` 为正,则使折线向外增长。返回一组多边形,因为膨胀/收缩可能会产生多个离散的多边形。如果 ``delta`` 为负,则返回一个空数组。
每个多边形的顶点将由 ``join_type`` 决定进行舍入,参见 :ref:`PolyJoinType<enum_Geometry2D_PolyJoinType>`\ 。
每个多边形的端点将由 ``end_type`` 决定进行舍入,参见 :ref:`PolyEndType<enum_Geometry2D_PolyEndType>`\ 。
该操作可能会产生一个外多边形(边界)和一个内多边形(孔),这可以通过调用 :ref:`is_polygon_clockwise()<class_Geometry2D_method_is_polygon_clockwise>` 来区分。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_point_is_inside_triangle:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **point_is_inside_triangle**\ (\ point\: :ref:`Vector2<class_Vector2>`, a\: :ref:`Vector2<class_Vector2>`, b\: :ref:`Vector2<class_Vector2>`, c\: :ref:`Vector2<class_Vector2>`\ ) |const| :ref:`🔗<class_Geometry2D_method_point_is_inside_triangle>`
返回 ``point`` 是否位于由 ``a``\ 、\ ``b``\ 、\ ``c`` 指定的三角形中。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_segment_intersects_circle:
.. rst-class:: classref-method
:ref:`float<class_float>` **segment_intersects_circle**\ (\ segment_from\: :ref:`Vector2<class_Vector2>`, segment_to\: :ref:`Vector2<class_Vector2>`, circle_position\: :ref:`Vector2<class_Vector2>`, circle_radius\: :ref:`float<class_float>`\ ) :ref:`🔗<class_Geometry2D_method_segment_intersects_circle>`
给定 2D 线段 (``segment_from``, ``segment_to``)返回该线段与圆相交的位置0 和 1 之间的数),这个圆位于 ``circle_position``\ ,半径为 ``circle_radius``\ 。如果该线段与圆不相交,则返回 -1同样也适用于这条线段的延长线所在的直线与圆相交而线段本身不相交的情况
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_segment_intersects_segment:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **segment_intersects_segment**\ (\ from_a\: :ref:`Vector2<class_Vector2>`, to_a\: :ref:`Vector2<class_Vector2>`, from_b\: :ref:`Vector2<class_Vector2>`, to_b\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_Geometry2D_method_segment_intersects_segment>`
检查两条线段 (``from_a``, ``to_a``) 和 (``from_b``, ``to_b``) 是否相交。如果相交,则返回交点 :ref:`Vector2<class_Vector2>`\ 。如果不相交,则返回 ``null``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_triangulate_delaunay:
.. rst-class:: classref-method
:ref:`PackedInt32Array<class_PackedInt32Array>` **triangulate_delaunay**\ (\ points\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_triangulate_delaunay>`
对由离散的 ``points`` 集指定的区域进行三角化,使得任何点都不在任何生成的三角形的外接圆内。返回一个 :ref:`PackedInt32Array<class_PackedInt32Array>`\ ,其中每个三角形由 ``points`` 中的三个连续点的索引组成(即返回的数组将具有 ``n * 3`` 个元素,其中 ``n`` 是找到的三角形的数量)。如果三角化没有成功,则返回一个空的 :ref:`PackedInt32Array<class_PackedInt32Array>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_Geometry2D_method_triangulate_polygon:
.. rst-class:: classref-method
:ref:`PackedInt32Array<class_PackedInt32Array>` **triangulate_polygon**\ (\ polygon\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) :ref:`🔗<class_Geometry2D_method_triangulate_polygon>`
对由 ``polygon`` 中的点指定的多边形进行三角化。 返回一个 :ref:`PackedInt32Array<class_PackedInt32Array>`\ ,其中每个三角形由 ``polygon`` 中的三个连续点的索引组成(即返回的数组将具有 ``n * 3`` 个元素,其中 ``n`` 是找到的三角形的数量)。输出三角形将始终为逆时针旋转,如果为顺时针旋转,则轮廓将翻转。如果三角化没有成功,则返回一个空的 :ref:`PackedInt32Array<class_PackedInt32Array>`\ 。
.. |virtual| replace:: :abbr:`virtual (本方法通常需要用户覆盖才能生效。)`
.. |const| replace:: :abbr:`const (本方法无副作用,不会修改该实例的任何成员变量。)`
.. |vararg| replace:: :abbr:`vararg (本方法除了能接受在此处描述的参数外,还能够继续接受任意数量的参数。)`
.. |constructor| replace:: :abbr:`constructor (本方法用于构造某个类型。)`
.. |static| replace:: :abbr:`static (调用本方法无需实例,可直接使用类名进行调用。)`
.. |operator| replace:: :abbr:`operator (本方法描述的是使用本类型作为左操作数的有效运算符。)`
.. |bitfield| replace:: :abbr:`BitField (这个值是由下列位标志构成位掩码的整数。)`
.. |void| replace:: :abbr:`void (无返回值。)`