Geometry¶
Inherits: Object
Helper node to calculate generic geometry operations.
Descripción¶
Geometry provides users with a set of helper functions to create geometric shapes, compute intersections between shapes, and process various other geometric operations.
Métodos¶
Enumeraciones¶
enum PolyBooleanOperation:
OPERATION_UNION = 0 --- Crear regiones en las que se llenen los polígonos del sujeto o del recorte (o ambos).
OPERATION_DIFFERENCE = 1 --- Crea regiones en las que se rellenen los polígonos del sujeto, excepto cuando se rellenen los polígonos de clips.
OPERATION_INTERSECTION = 2 --- Crea regiones en las que se llenen tanto los polígonos del sujeto como los del recorte.
OPERATION_XOR = 3 --- Crea regiones en las que se llenen los polígonos del sujeto o del recorte pero no en las que se llenen ambos.
enum PolyJoinType:
JOIN_SQUARE = 0 --- La cuadratura se aplica uniformemente en todas las uniones de bordes convexos en
1 * delta
.JOIN_ROUND = 1 --- Mientras que los caminos aplanados nunca pueden trazar perfectamente un arco, son aproximados por una serie de acordes de arco.
JOIN_MITER = 2 --- Hay un límite necesario para las uniones a inglete, ya que los bordes desplazados que se unen en ángulos muy agudos producirán "picos" excesivamente largos y estrechos. Para cualquier unión de borde, cuando la compensación de inglete exceda esa distancia máxima, se aplica la unión "cuadrada".
enum PolyEndType:
END_POLYGON = 0 --- Los puntos finales se unen usando el valor PolyJoinType y el camino llenado como un polígono.
END_JOINED = 1 --- Los puntos finales se unen usando el valor PolyJoinType y el camino llenado como una polilínea.
END_BUTT = 2 --- Los puntos finales son cuadrados sin extensión.
END_SQUARE = 3 --- Los puntos finales se cuadran y se amplían con unidades
delta
.END_ROUND = 4 --- Los puntos finales se redondean y se amplían con unidades
delta
.
Descripciones de Métodos¶
Devuelve un array con 6 Planes que describen los lados de una caja centrada en el origen. El tamaño de la caja está definido por extents
, que representa una esquina (positiva) de la caja (es decir, la mitad de su tamaño real).
Devuelve un conjunto de Planes que delimita estrechamente una cápsula con caras centrada en el origen con radio radio
y altura height
. El parámetro sides
define cuántos planos se generarán para la parte lateral de la cápsula, mientras que lats
da el número de pasos latitudinales en la parte inferior y superior de la cápsula. El parámetro axis
describe el eje a lo largo del cual se orienta la cápsula (0 para X, 1 para Y, 2 para Z).
Devuelve un conjunto de Planes que delimita estrechamente un cilindro facetado centrado en el origen con radio radius
y altura height
. El parámetro sides
define cuántos planos se generarán para la parte redonda del cilindro. El parámetro axis
describe el eje a lo largo del cual se orienta el cilindro (0 para X, 1 para Y, 2 para Z).
PoolVector3Array clip_polygon ( PoolVector3Array points, Plane plane )
Recorta el polígono definido por los puntos en points
contra el plane
y devuelve los puntos del polígono recortado.
Array clip_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
Recorta el polygon_a
contra polygon_b
y devuelve un array de polígonos recortados. Esto realiza OPERATION_DIFFERENCE entre los polígonos. Devuelve un array vacío si polygon_b
se superpone completamente a polygon_a
.
Si polygon_b
está encerrado por polygon_a
, devuelve un polígono exterior (límite) y un polígono interior (agujero) que se pueden distinguir llamando a is_polygon_clockwise.
Array clip_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )
Recorta polyline
contra polygon
y devuelve un conjunto de polilíneas recortadas. Esto realiza OPERATION_DIFFERENCE entre la polilínea y el polígono. Esta operación puede ser pensada como el corte de una línea con una forma cerrada.
PoolVector2Array convex_hull_2d ( PoolVector2Array points )
Dado un conjunto de Vector2, devuelve el casco convexo como una lista de puntos en orden antihorario. El último punto es el mismo que el primero.
Array exclude_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
Mutually excludes common area defined by intersection of polygon_a
and polygon_b
(see intersect_polygons_2d) and returns an array of excluded polygons. This performs OPERATION_XOR between polygons. In other words, returns all but common area between polygons.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling is_polygon_clockwise.
Devuelve el punto 3D en el segmento 3D (s1
, s2
) que está más cerca del point
. El punto devuelto siempre estará dentro del segmento especificado.
Devuelve el punto 2D en el segmento 2D (s1
, s2
) que está más cerca del point
. El punto devuelto siempre estará dentro del segmento especificado.
Devuelve el punto 3D en la línea 3D definida por (s1
, s2
) que está más cerca de point
. El punto devuelto puede estar dentro del segmento (s1
, s2
) o fuera de él, es decir, en algún lugar de la línea que se extiende desde el segmento.
Devuelve el punto 2D en la línea 2D definida por (s1
, s2
) que está más cerca del point
. El punto devuelto puede estar dentro del segmento (s1
, s2
) o fuera de él, es decir, en algún lugar de la línea que se extiende desde el segmento.
PoolVector3Array get_closest_points_between_segments ( Vector3 p1, Vector3 p2, Vector3 q1, Vector3 q2 )
Given the two 3D segments (p1
, p2
) and (q1
, q2
), finds those two points on the two segments that are closest to each other. Returns a PoolVector3Array that contains this point on (p1
, p2
) as well the accompanying point on (q1
, q2
).
PoolVector2Array get_closest_points_between_segments_2d ( Vector2 p1, Vector2 q1, Vector2 p2, Vector2 q2 )
Given the two 2D segments (p1
, q1
) and (p2
, q2
), finds those two points on the two segments that are closest to each other. Returns a PoolVector2Array that contains this point on (p1
, q1
) as well the accompanying point on (p2
, q2
).
Usado internamente por el motor.
Array intersect_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
Intersecta polygon_a
con polygon_b
y devuelve una matriz de polígonos intersectados. Esto realiza OPERATION_INTERSECTION entre los polígonos. En otras palabras, devuelve el área común compartida por los polígonos. Devuelve una matriz vacía si no se produce ninguna intersección.
La operación puede dar como resultado un polígono exterior (límite) y un polígono interior (agujero) producidos que se podrían distinguir llamando a is_polygon_clockwise.
Array intersect_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )
Intersecta polyline
con polygon
y devuelve un conjunto de polilíneas intersectadas. Esto realiza OPERATION_INTERSECTION entre la polilínea y el polígono. Esta operación puede ser pensada como cortar una línea con una forma cerrada.
Devuelve true
si point
está dentro del círculo o si está situado exactamente on el límite del círculo, de lo contrario devuelve false
.
bool is_point_in_polygon ( Vector2 point, PoolVector2Array polygon )
Devuelve true
si point
está dentro de polygon
o si se encuentra exactamente en el límite del polígono, de lo contrario devuelve false
.
bool is_polygon_clockwise ( PoolVector2Array polygon )
Devuelve true
si los vértices de polygon
están ordenados en el sentido de las agujas del reloj, de lo contrario devuelve false
.
Comprueba si las dos líneas (from_a
, dir_a
) y (from_b
, dir_b
) se cruzan. Si es así, devuelve el punto de intersección como Vector2. Si no hay intersección, devuelve un Variant vacío.
Nota: Las rectas se especifican usando vectores de dirección, no puntos finales.
Dictionary make_atlas ( PoolVector2Array sizes )
Dada una serie de Vector2s que representan piezas que construye un atlas. El diccionario devuelto tiene dos claves: points
es un vector de Vector2 que especifica las posiciones de cada pieza, size
contiene el tamaño global de todo el atlas como Vector2.
Array merge_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )
Merges (combines) polygon_a
and polygon_b
and returns an array of merged polygons. This performs OPERATION_UNION between polygons.
The operation may result in an outer polygon (boundary) and multiple inner polygons (holes) produced which could be distinguished by calling is_polygon_clockwise.
Array offset_polygon_2d ( PoolVector2Array polygon, float delta, PolyJoinType join_type=0 )
Inflates or deflates polygon
by delta
units (pixels). If delta
is positive, makes the polygon grow outward. If delta
is negative, shrinks the polygon inward. Returns an array of polygons because inflating/deflating may result in multiple discrete polygons. Returns an empty array if delta
is negative and the absolute value of it approximately exceeds the minimum bounding rectangle dimensions of the polygon.
Each polygon's vertices will be rounded as determined by join_type
, see PolyJoinType.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling is_polygon_clockwise.
Note: To translate the polygon's vertices specifically, use the Transform2D.xform method:
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) # prints [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 )
Infla o desinfla la polyline
por unidades delta
(píxeles), produciendo polígonos. Si delta
es positivo, hace que la polilínea crezca hacia afuera. Devuelve un conjunto de polígonos porque inflarse/desinflarse puede resultar en múltiples polígonos discretos. Si delta
es negativo, devuelve una matriz vacía.
Los vértices de cada polígono se redondearán según lo determinado por join_type
, ver PolyJoinType.
Los vértices de cada polígono se redondearán según lo determinado por end_type
, ver PolyEndType.
La operación puede dar como resultado un polígono exterior (límite) y un polígono interior (agujero) producidos que pueden distinguirse llamando a is_polygon_clockwise.
Regresa si point
está dentro del triángulo especificado por a
, b
y c
.
Comprueba si el rayo 3D que comienza en from
con la dirección de dir
intersecta el triángulo especificado por a
, b
y c
. Si es así, devuelve el punto de intersección como Vector3. Si no hay intersección, se devuelve una Variant vacía.
float segment_intersects_circle ( Vector2 segment_from, Vector2 segment_to, Vector2 circle_position, float circle_radius )
Given the 2D segment (segment_from
, segment_to
), returns the position on the segment (as a number between 0 and 1) at which the segment hits the circle that is located at position circle_position
and has radius circle_radius
. If the segment does not intersect the circle, -1 is returned (this is also the case if the line extending the segment would intersect the circle, but the segment does not).
PoolVector3Array segment_intersects_convex ( Vector3 from, Vector3 to, Array planes )
Given a convex hull defined though the Planes in the array planes
, tests if the segment (from
, to
) intersects with that hull. If an intersection is found, returns a PoolVector3Array containing the point the intersection and the hull's normal. If no intersecion is found, an the returned array is empty.
PoolVector3Array segment_intersects_cylinder ( Vector3 from, Vector3 to, float height, float radius )
Checks if the segment (from
, to
) intersects the cylinder with height height
that is centered at the origin and has radius radius
. If no, returns an empty PoolVector3Array. If an intersection takes place, the returned array contains the point of intersection and the cylinder's normal at the point of intersection.
Variant segment_intersects_segment_2d ( Vector2 from_a, Vector2 to_a, Vector2 from_b, Vector2 to_b )
Comprueba si los dos segmentos (from_a
, to_a
) y (from_b
, to_b
) se cruzan. Si es así, devuelve el punto de intersección como Vector2. Si no hay intersección, devuelve un Variant vacío.
PoolVector3Array segment_intersects_sphere ( Vector3 from, Vector3 to, Vector3 sphere_position, float sphere_radius )
Checks if the segment (from
, to
) intersects the sphere that is located at sphere_position
and has radius sphere_radius
. If no, returns an empty PoolVector3Array. If yes, returns a PoolVector3Array containing the point of intersection and the sphere's normal at the point of intersection.
Comprueba si el segmento (de
, a
) intersecta el triángulo a
, b
, c
. Si es así, devuelve el punto de intersección como Vector3. Si no hay intersección, se devuelve una Variant vacía.
PoolIntArray triangulate_delaunay_2d ( PoolVector2Array points )
Triangulates the area specified by discrete set of points
such that no point is inside the circumcircle of any resulting triangle. Returns a PoolIntArray where each triangle consists of three consecutive point indices into points
(i.e. the returned array will have n * 3
elements, with n
being the number of found triangles). If the triangulation did not succeed, an empty PoolIntArray is returned.
PoolIntArray triangulate_polygon ( PoolVector2Array polygon )
Triangulates the polygon specified by the points in polygon
. Returns a PoolIntArray where each triangle consists of three consecutive point indices into polygon
(i.e. the returned array will have n * 3
elements, with n
being the number of found triangles). If the triangulation did not succeed, an empty PoolIntArray is returned.