``````    public static class Geometry
``````

### Static Methods

``````    public static object[] BuildBoxPlanes(Vector3 extents)
``````

Returns an array with 6 Planes that describe the sides of a box centered at the origin. The box size is defined by `extents`, which represents one (positive) corner of the box (i.e. half its actual size).

``````    public static object[] BuildCapsulePlanes(float radius, float height, int sides, int lats, Vector3.Axis axis = Vector3.Axis.Z)
``````

Returns an array of Planes closely bounding a faceted capsule centered at the origin with radius `radius` and height `height`. The parameter `sides` defines how many planes will be generated for the side part of the capsule, whereas `lats` gives the number of latitudinal steps at the bottom and top of the capsule. The parameter `axis` describes the axis along which the capsule is oriented (0 for X, 1 for Y, 2 for Z).

``````    public static object[] BuildCylinderPlanes(float radius, float height, int sides, Vector3.Axis axis = Vector3.Axis.Z)
``````

Returns an array of Planes closely bounding a faceted cylinder centered at the origin with radius `radius` and height `height`. The parameter `sides` defines how many planes will be generated for the round part of the cylinder. The parameter `axis` describes the axis along which the cylinder is oriented (0 for X, 1 for Y, 2 for Z).

``````    public static Vector3[] ClipPolygon(Vector3[] points, Plane plane)
``````

Clips the polygon defined by the points in `points` against the `plane` and returns the points of the clipped polygon.

``````    public static Vector2[] ConvexHull2d(Vector2[] points)
``````

Given an array of Vector2s, returns the convex hull as a list of points in counter-clockwise order. The last point is the same as the first one.

``````    public static Vector3[] GetClosestPointsBetweenSegments(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`).

``````    public static Vector2[] GetClosestPointsBetweenSegments2d(Vector2 p1, Vector2 q1, Vector2 p2, Vector2 q2)
``````

Given the two 2d segments (`p1`, `p2`) and (`q1`, `q2`), finds those two points on the two segments that are closest to each other. Returns a PoolVector2Array that contains this point on (`p1`, `p2`) as well the accompanying point on (`q1`, `q2`).

``````    public static Vector3 GetClosestPointToSegment(Vector3 point, Vector3 s1, Vector3 s2)
``````

Returns the 3d point on the 3d segment (`s1`, `s2`) that is closest to `point`. The returned point will always be inside the specified segment.

``````    public static Vector2 GetClosestPointToSegment2d(Vector2 point, Vector2 s1, Vector2 s2)
``````

Returns the 2d point on the 2d segment (`s1`, `s2`) that is closest to `point`. The returned point will always be inside the specified segment.

``````    public static Vector3 GetClosestPointToSegmentUncapped(Vector3 point, Vector3 s1, Vector3 s2)
``````

Returns the 3d point on the 3d line defined by (`s1`, `s2`) that is closest to `point`. The returned point can be inside the segment (`s1`, `s2`) or outside of it, i.e. somewhere on the line extending from the segment.

``````    public static Vector2 GetClosestPointToSegmentUncapped2d(Vector2 point, Vector2 s1, Vector2 s2)
``````

Returns the 2d point on the 2d line defined by (`s1`, `s2`) that is closest to `point`. The returned point can be inside the segment (`s1`, `s2`) or outside of it, i.e. somewhere on the line extending from the segment.

``````    public static int GetUv84NormalBit(Vector3 normal)
``````

``````    public static Dictionary<object, object> MakeAtlas(Vector2[] sizes)
``````

Given an array of Vector2s representing tiles, builds an atlas. The returned dictionary has two keys: `points` is a vector of Vector2 that specifies the positions of each tile, `size` contains the overall size of the whole atlas as Vector2.

``````    public static bool PointIsInsideTriangle(Vector2 point, Vector2 a, Vector2 b, Vector2 c)
``````

Returns if `point` is inside the triangle specified by `a`, `b` and `c`.

``````    public static object RayIntersectsTriangle(Vector3 from, Vector3 dir, Vector3 a, Vector3 b, Vector3 c)
``````

Tests if the 3d ray starting at `from` with the direction of `dir` intersects the triangle specified by `a`, `b` and `c`. If yes, returns the point of intersection as Vector3. If no intersection takes place, an empty Variant is returned.

``````    public static float SegmentIntersectsCircle(Vector2 segmentFrom, Vector2 segmentTo, Vector2 circlePosition, float circleRadius)
``````

Given the 2d segment (`segmentFrom`, `segmentTo`), 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 `circlePosition` and has radius `circleRadius`. 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).

``````    public static Vector3[] SegmentIntersectsConvex(Vector3 from, Vector3 to, object[] 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.

``````    public static Vector3[] SegmentIntersectsCylinder(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.

``````    public static object SegmentIntersectsSegment2d(Vector2 fromA, Vector2 toA, Vector2 fromB, Vector2 toB)
``````

Checks if the two segments (`fromA`, `toA`) and (`fromB`, `toB`) intersect. If yes, return the point of intersection as Vector2. If no intersection takes place, returns an empty Variant.

``````    public static Vector3[] SegmentIntersectsSphere(Vector3 from, Vector3 to, Vector3 spherePosition, float sphereRadius)
``````

Checks if the segment (`from`, `to`) intersects the sphere that is located at `spherePosition` and has radius `sphereRadius`. 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.

``````    public static object SegmentIntersectsTriangle(Vector3 from, Vector3 to, Vector3 a, Vector3 b, Vector3 c)
``````

Tests if the segment (`from`, `to`) intersects the triangle `a`, `b`, `c`. If yes, returns the point of intersection as Vector3. If no intersection takes place, an empty Variant is returned.

``````    public static int[] TriangulatePolygon(Vector2[] 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.

Tags: