A* Pathfinding Project  3.8 The A* Pathfinding Project for Unity 3D
VectorMath Class Reference

Various vector math utility functions. More...

## Detailed Description

Various vector math utility functions.

Version
A lot of functions in the Polygon class have been moved to this class the names have changed slightly and everything now consistently assumes a left handed coordinate system now instead of sometimes using a left handed one and sometimes using a right handed one. This is why the 'Left' methods in the Polygon class redirect to methods named 'Right'. The functionality is exactly the same.

Note the difference between segments and lines. Lines are infinitely long but segments have only a finite length.

## Static Public Member Functions

static Vector3 ClosestPointOnLine (Vector3 lineStart, Vector3 lineEnd, Vector3 point)
Returns the closest point on the line.

static float ClosestPointOnLineFactor (Vector3 lineStart, Vector3 lineEnd, Vector3 point)
Factor along the line which is closest to the point.

static float ClosestPointOnLineFactor (Int3 lineStart, Int3 lineEnd, Int3 point)
Factor along the line which is closest to the point.

static float ClosestPointOnLineFactor (Int2 lineStart, Int2 lineEnd, Int2 point)
Factor of the nearest point on the segment.

static Vector3 ClosestPointOnSegment (Vector3 lineStart, Vector3 lineEnd, Vector3 point)
Returns the closest point on the segment.

static Vector3 ClosestPointOnSegmentXZ (Vector3 lineStart, Vector3 lineEnd, Vector3 point)
Returns the closest point on the segment in the XZ plane.

static bool IsClockwiseMarginXZ (Vector3 a, Vector3 b, Vector3 c)
Returns if the points a in a clockwise order.

static bool IsClockwiseOrColinear (Int2 a, Int2 b, Int2 c)
Returns true if the points a in a clockwise order or if they are colinear.

static bool IsClockwiseOrColinearXZ (Int3 a, Int3 b, Int3 c)
Returns true if the points a in a clockwise order or if they are colinear.

static bool IsClockwiseXZ (Vector3 a, Vector3 b, Vector3 c)
Returns if the points a in a clockwise order.

static bool IsClockwiseXZ (Int3 a, Int3 b, Int3 c)
Returns if the points a in a clockwise order.

static bool IsColinearAlmostXZ (Int3 a, Int3 b, Int3 c)
Returns if the points are colinear (lie on a straight line)

static bool IsColinearXZ (Int3 a, Int3 b, Int3 c)
Returns if the points are colinear (lie on a straight line)

static bool IsColinearXZ (Vector3 a, Vector3 b, Vector3 c)
Returns if the points are colinear (lie on a straight line)

static Vector3 LineDirIntersectionPointXZ (Vector3 start1, Vector3 dir1, Vector3 start2, Vector3 dir2)
Intersection point between two infinite lines.

static Vector3 LineDirIntersectionPointXZ (Vector3 start1, Vector3 dir1, Vector3 start2, Vector3 dir2, out bool intersects)
Intersection point between two infinite lines.

static bool LineIntersectionFactorXZ (Int3 start1, Int3 end1, Int3 start2, Int3 end2, out float factor1, out float factor2)
Returns the intersection factors for line 1 and line 2.

static bool LineIntersectionFactorXZ (Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2, out float factor1, out float factor2)
Returns the intersection factors for line 1 and line 2.

static float LineIntersectionFactorXZ (Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2)
Returns the intersection factor for line 1 with line 2.

static Vector2 LineIntersectionPoint (Vector2 start1, Vector2 end1, Vector2 start2, Vector2 end2)
Returns the intersection point between the two lines.

static Vector2 LineIntersectionPoint (Vector2 start1, Vector2 end1, Vector2 start2, Vector2 end2, out bool intersects)
Returns the intersection point between the two lines.

static Vector3 LineIntersectionPointXZ (Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2)
Returns the intersection point between the two lines.

static Vector3 LineIntersectionPointXZ (Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2, out bool intersects)
Returns the intersection point between the two lines.

static float LineRayIntersectionFactorXZ (Int3 start1, Int3 end1, Int3 start2, Int3 end2)
Returns the intersection factor for line 1 with ray 2.

static bool RaySegmentIntersectXZ (Int3 start1, Int3 end1, Int3 start2, Int3 end2)
Returns if the ray (start1, end1) intersects the segment (start2, end2).

static bool RightOrColinear (Vector2 a, Vector2 b, Vector2 p)
Returns if p lies on the right side of the line a - b.

static bool RightOrColinear (Int2 a, Int2 b, Int2 p)
Returns if p lies on the right side of the line a - b.

static bool RightOrColinearXZ (Vector3 a, Vector3 b, Vector3 p)
Returns if p lies on the left side of the line a - b.

static bool RightOrColinearXZ (Int3 a, Int3 b, Int3 p)
Returns if p lies on the left side of the line a - b.

static bool RightXZ (Vector3 a, Vector3 b, Vector3 p)
Returns if p lies on the right side of the line a - b.

static bool RightXZ (Int3 a, Int3 b, Int3 p)
Returns if p lies on the right side of the line a - b.

static Vector3 SegmentIntersectionPointXZ (Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2, out bool intersects)
Returns the intersection point between the two line segments in XZ space.

static bool SegmentIntersectsBounds (Bounds bounds, Vector3 a, Vector3 b)
Does the line segment intersect the bounding box.

static bool SegmentsIntersect (Int2 start1, Int2 end1, Int2 start2, Int2 end2)
Returns if the line segment start2 - end2 intersects the line segment start1 - end1.

static bool SegmentsIntersectXZ (Int3 start1, Int3 end1, Int3 start2, Int3 end2)
Returns if the line segment start2 - end2 intersects the line segment start1 - end1.

static bool SegmentsIntersectXZ (Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2)
Returns if the two line segments intersects.

static long SignedTriangleAreaTimes2XZ (Int3 a, Int3 b, Int3 c)
Signed area of a triangle in the XZ plane multiplied by 2.

static float SignedTriangleAreaTimes2XZ (Vector3 a, Vector3 b, Vector3 c)
Signed area of a triangle in the XZ plane multiplied by 2.

static float SqrDistancePointSegment (Vector3 a, Vector3 b, Vector3 p)
Returns the squared distance between p and the segment a-b.

static float SqrDistancePointSegmentApproximate (int x, int z, int px, int pz, int qx, int qz)
Returns the approximate shortest squared distance between x,z and the segment p-q.

static float SqrDistancePointSegmentApproximate (Int3 a, Int3 b, Int3 p)
Returns the approximate shortest squared distance between x,z and the segment p-q.

static float SqrDistanceSegmentSegment (Vector3 s1, Vector3 e1, Vector3 s2, Vector3 e2)
3D minimum distance between 2 segments.

static float SqrDistanceXZ (Vector3 a, Vector3 b)
Squared distance between two points in the XZ plane.

## Member Function Documentation

 static Vector3 ClosestPointOnLine ( Vector3 lineStart, Vector3 lineEnd, Vector3 point )
static

Returns the closest point on the line.

The line is treated as infinite.

ClosestPointOnSegment
ClosestPointOnLineFactor
 static float ClosestPointOnLineFactor ( Vector3 lineStart, Vector3 lineEnd, Vector3 point )
static

Factor along the line which is closest to the point.

Returned value is in the range [0,1] if the point lies on the segment otherwise it just lies on the line. The closest point can be calculated using (end-start)*factor + start.

ClosestPointOnLine
ClosestPointOnSegment
 static float ClosestPointOnLineFactor ( Int3 lineStart, Int3 lineEnd, Int3 point )
static

Factor along the line which is closest to the point.

Returned value is in the range [0,1] if the point lies on the segment otherwise it just lies on the line. The closest point can be calculated using (end-start)*factor + start

 static float ClosestPointOnLineFactor ( Int2 lineStart, Int2 lineEnd, Int2 point )
static

Factor of the nearest point on the segment.

Returned value is in the range [0,1] if the point lies on the segment otherwise it just lies on the line. The closest point can be calculated using (end-start)*factor + start;

 static Vector3 ClosestPointOnSegment ( Vector3 lineStart, Vector3 lineEnd, Vector3 point )
static

Returns the closest point on the segment.

The segment is NOT treated as infinite.

ClosestPointOnLine
ClosestPointOnSegmentXZ
 static Vector3 ClosestPointOnSegmentXZ ( Vector3 lineStart, Vector3 lineEnd, Vector3 point )
static

Returns the closest point on the segment in the XZ plane.

The y coordinate of the result will be the same as the y coordinate of the point parameter.

The segment is NOT treated as infinite.

ClosestPointOnSegment
ClosestPointOnLine
 static bool IsClockwiseMarginXZ ( Vector3 a, Vector3 b, Vector3 c )
static

Returns if the points a in a clockwise order.

Will return true even if the points are colinear or very slightly counter-clockwise (if the signed area of the triangle formed by the points has an area less than or equals to float.Epsilon)

 static bool IsClockwiseOrColinear ( Int2 a, Int2 b, Int2 c )
static

Returns true if the points a in a clockwise order or if they are colinear.

 static bool IsClockwiseOrColinearXZ ( Int3 a, Int3 b, Int3 c )
static

Returns true if the points a in a clockwise order or if they are colinear.

 static bool IsClockwiseXZ ( Vector3 a, Vector3 b, Vector3 c )
static

Returns if the points a in a clockwise order.

 static bool IsClockwiseXZ ( Int3 a, Int3 b, Int3 c )
static

Returns if the points a in a clockwise order.

 static bool IsColinearAlmostXZ ( Int3 a, Int3 b, Int3 c )
static

Returns if the points are colinear (lie on a straight line)

 static bool IsColinearXZ ( Int3 a, Int3 b, Int3 c )
static

Returns if the points are colinear (lie on a straight line)

 static bool IsColinearXZ ( Vector3 a, Vector3 b, Vector3 c )
static

Returns if the points are colinear (lie on a straight line)

 static Vector3 LineDirIntersectionPointXZ ( Vector3 start1, Vector3 dir1, Vector3 start2, Vector3 dir2 )
static

Intersection point between two infinite lines.

Note that start points and directions are taken as parameters instead of start and end points. Lines are treated as infinite. If the lines are parallel 'start1' will be returned. Intersections are calculated on the XZ plane.

LineIntersectionPointXZ
 static Vector3 LineDirIntersectionPointXZ ( Vector3 start1, Vector3 dir1, Vector3 start2, Vector3 dir2, out bool intersects )
static

Intersection point between two infinite lines.

Note that start points and directions are taken as parameters instead of start and end points. Lines are treated as infinite. If the lines are parallel 'start1' will be returned. Intersections are calculated on the XZ plane.

LineIntersectionPointXZ
 static bool LineIntersectionFactorXZ ( Int3 start1, Int3 end1, Int3 start2, Int3 end2, out float factor1, out float factor2 )
static

Returns the intersection factors for line 1 and line 2.

The intersection factors is a distance along the line start - end where the other line intersects it.

intersectionPoint = start1 + factor1 * (end1-start1)
intersectionPoint2 = start2 + factor2 * (end2-start2)

Lines are treated as infinite.
false is returned if the lines are parallel and true if they are not. Only the XZ coordinates are used.

 static bool LineIntersectionFactorXZ ( Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2, out float factor1, out float factor2 )
static

Returns the intersection factors for line 1 and line 2.

The intersection factors is a distance along the line start - end where the other line intersects it.

intersectionPoint = start1 + factor1 * (end1-start1)
intersectionPoint2 = start2 + factor2 * (end2-start2)

Lines are treated as infinite.
false is returned if the lines are parallel and true if they are not. Only the XZ coordinates are used.

 static float LineIntersectionFactorXZ ( Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2 )
static

Returns the intersection factor for line 1 with line 2.

The intersection factor is a distance along the line start1 - end1 where the line start2 - end2 intersects it.

intersectionPoint = start1 + intersectionFactor * (end1-start1)

. Lines are treated as infinite.
-1 is returned if the lines are parallel (note that this is a valid return value if they are not parallel too)

 static Vector2 LineIntersectionPoint ( Vector2 start1, Vector2 end1, Vector2 start2, Vector2 end2 )
static

Returns the intersection point between the two lines.

Lines are treated as infinite. start1 is returned if the lines are parallel

 static Vector2 LineIntersectionPoint ( Vector2 start1, Vector2 end1, Vector2 start2, Vector2 end2, out bool intersects )
static

Returns the intersection point between the two lines.

Lines are treated as infinite. start1 is returned if the lines are parallel

 static Vector3 LineIntersectionPointXZ ( Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2 )
static

Returns the intersection point between the two lines.

Lines are treated as infinite. start1 is returned if the lines are parallel

 static Vector3 LineIntersectionPointXZ ( Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2, out bool intersects )
static

Returns the intersection point between the two lines.

Lines are treated as infinite. start1 is returned if the lines are parallel

 static float LineRayIntersectionFactorXZ ( Int3 start1, Int3 end1, Int3 start2, Int3 end2 )
static

Returns the intersection factor for line 1 with ray 2.

The intersection factors is a factor distance along the line start - end where the other line intersects it.

intersectionPoint = start1 + factor * (end1-start1)

Lines are treated as infinite.

The second "line" is treated as a ray, meaning only matches on start2 or forwards towards end2 (and beyond) will be returned If the point lies on the wrong side of the ray start, Nan will be returned.

NaN is returned if the lines are parallel.

 static bool RaySegmentIntersectXZ ( Int3 start1, Int3 end1, Int3 start2, Int3 end2 )
static

Returns if the ray (start1, end1) intersects the segment (start2, end2).

false is returned if the lines are parallel. Only the XZ coordinates are used.

Todo:
Double check that this actually works
 static bool RightOrColinear ( Vector2 a, Vector2 b, Vector2 p )
static

Returns if p lies on the right side of the line a - b.

Also returns true if the points are colinear.

 static bool RightOrColinear ( Int2 a, Int2 b, Int2 p )
static

Returns if p lies on the right side of the line a - b.

Also returns true if the points are colinear.

 static bool RightOrColinearXZ ( Vector3 a, Vector3 b, Vector3 p )
static

Returns if p lies on the left side of the line a - b.

Uses XZ space. Also returns true if the points are colinear.

 static bool RightOrColinearXZ ( Int3 a, Int3 b, Int3 p )
static

Returns if p lies on the left side of the line a - b.

Uses XZ space. Also returns true if the points are colinear.

 static bool RightXZ ( Vector3 a, Vector3 b, Vector3 p )
static

Returns if p lies on the right side of the line a - b.

Uses XZ space. Does not return true if the points are colinear.

 static bool RightXZ ( Int3 a, Int3 b, Int3 p )
static

Returns if p lies on the right side of the line a - b.

Uses XZ space. Does not return true if the points are colinear.

 static Vector3 SegmentIntersectionPointXZ ( Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2, out bool intersects )
static

Returns the intersection point between the two line segments in XZ space.

Lines are NOT treated as infinite. start1 is returned if the line segments do not intersect The point will be returned along the line [start1, end1] (this matters only for the y coordinate).

 static bool SegmentIntersectsBounds ( Bounds bounds, Vector3 a, Vector3 b )
static

Does the line segment intersect the bounding box.

The line is NOT treated as infinite.

 static bool SegmentsIntersect ( Int2 start1, Int2 end1, Int2 start2, Int2 end2 )
static

Returns if the line segment start2 - end2 intersects the line segment start1 - end1.

If only the endpoints coincide, the result is undefined (may be true or false).

 static bool SegmentsIntersectXZ ( Int3 start1, Int3 end1, Int3 start2, Int3 end2 )
static

Returns if the line segment start2 - end2 intersects the line segment start1 - end1.

If only the endpoints coincide, the result is undefined (may be true or false).

Note
XZ space
 static bool SegmentsIntersectXZ ( Vector3 start1, Vector3 end1, Vector3 start2, Vector3 end2 )
static

Returns if the two line segments intersects.

The lines are NOT treated as infinite (just for clarification)

IntersectionPoint
 static long SignedTriangleAreaTimes2XZ ( Int3 a, Int3 b, Int3 c )
static

Signed area of a triangle in the XZ plane multiplied by 2.

This will be negative for clockwise triangles and positive for counter-clockwise ones

 static float SignedTriangleAreaTimes2XZ ( Vector3 a, Vector3 b, Vector3 c )
static

Signed area of a triangle in the XZ plane multiplied by 2.

This will be negative for clockwise triangles and positive for counter-clockwise ones.

 static float SqrDistancePointSegment ( Vector3 a, Vector3 b, Vector3 p )
static

Returns the squared distance between p and the segment a-b.

The line is not considered infinite.

 static float SqrDistancePointSegmentApproximate ( int x, int z, int px, int pz, int qx, int qz )
static

Returns the approximate shortest squared distance between x,z and the segment p-q.

The segment is not considered infinite. This function is not entirely exact, but it is about twice as fast as DistancePointSegment2.

Todo:
Is this actually approximate? It looks exact.
 static float SqrDistancePointSegmentApproximate ( Int3 a, Int3 b, Int3 p )
static

Returns the approximate shortest squared distance between x,z and the segment p-q.

The segment is not considered infinite. This function is not entirely exact, but it is about twice as fast as DistancePointSegment2.

Todo:
Is this actually approximate? It looks exact.
 static float SqrDistanceSegmentSegment ( Vector3 s1, Vector3 e1, Vector3 s2, Vector3 e2 )
static

3D minimum distance between 2 segments.

Input: two 3D line segments S1 and S2

Returns
the shortest squared distance between S1 and S2
 static float SqrDistanceXZ ( Vector3 a, Vector3 b )
static

Squared distance between two points in the XZ plane.

The documentation for this class was generated from the following file:
• /Users/arong/Unity/a-pathfinding-project/Assets/AstarPathfindingProject/Core/AstarMath.cs