# namespace MagesMath¶

## Overview¶

namespace MagesMath {

// structs

struct FPointNormalPlane;
struct FTriangle;
struct FTriplet;

// global functions

int FindRoots(float K, float M, float N, float Out[2]);

static FORCEINLINE FPointNormalPlane PlanePerpendicularToPlane(
const FPointNormalPlane& TearPlane,
FVector A,
FVector B
);

static FORCEINLINE FVector LineIntersectPlane(
FVector Point0,
FVector Point1,
const FPointNormalPlane& Plane
);

static FORCEINLINE float PointIntersectPlane(
FVector Point,
const FPointNormalPlane& Plane
);

static FORCEINLINE bool SameSide(FVector P1, FVector P2, FVector A, FVector B);

static FORCEINLINE bool IsPointInsideTriangle(
FVector Point,
FTriangle& Triangle
);

static FORCEINLINE FVector FindMidpoint(FVector A, FVector B);
static FORCEINLINE int Orient3D(FVector A, FVector B, FVector C, FVector D);

static FORCEINLINE FVector RotatePointAroundPivot(
FVector Point,
FVector Pivot,
FQuat Rotation
);

static FORCEINLINE FVector ProjectPointOntoPlane(
FVector PlaneNormal,
FVector PlanePoint,
FVector Point
);

static FORCEINLINE FVector2D SortSwizzleVector(FVector2D V);

static FORCEINLINE FTriplet FindNewFace(
TArray<int32>& triangles,
int32 i,
int32 cid0,
int32 cid1,
int32 id0,
int32 id1
);

static FORCEINLINE bool IsPointWithinShapeComponent(
FVector Point,
UShapeComponent* Shape,
const FTransform& Transform = FTransform::Identity
);

static FORCEINLINE FVector LineIntersectPlane(
const FLineSegment& Segment,
const FPointNormalPlane& Plane
);

static FORCEINLINE void DrawDebugWireTriangle(
const UWorld* World,
FVector A,
FVector B,
FVector C,
FColor Color,
bool Persistent = false,
float Duration = 0.f
);

static FORCEINLINE FVector4 BoundedPlaneToWorldSpaceCartesian(
UBoundedPlane* plane,
FTransform Transform
);

static FORCEINLINE FVector4 PointNormalToCartesian(
FVector point,
FVector normal
);

} // namespace MagesMath

## Detailed Documentation¶

### Global Functions¶

int FindRoots(float K, float M, float N, float Out[2])

Finds the roots of a 2nd degree equation with K, M, N as the parameters

static FORCEINLINE FPointNormalPlane PlanePerpendicularToPlane(
const FPointNormalPlane& TearPlane,
FVector A,
FVector B
)

Find a new plane perpendicular to the tear_plane and that passes from v1, v2

static FORCEINLINE FVector LineIntersectPlane(
FVector Point0,
FVector Point1,
const FPointNormalPlane& Plane
)

Find intersection of a line segment and a plane

static FORCEINLINE float PointIntersectPlane(
FVector Point,
const FPointNormalPlane& Plane
)

Returns the side of the up-projected point with respect to the plane: +,- or 0 = on the plane

static FORCEINLINE bool IsPointInsideTriangle(
FVector Point,
FTriangle& Triangle
)

Test Point inside Triangle

static FORCEINLINE FVector FindMidpoint(FVector A, FVector B)

Midpoint of A and B

static FORCEINLINE int Orient3D(FVector A, FVector B, FVector C, FVector D)

Returns the orientation of the tetrahedron defined by a,b,c,d

static FORCEINLINE FVector ProjectPointOntoPlane(
FVector PlaneNormal,
FVector PlanePoint,
FVector Point
)

Project point onto a plane with the specified normal and contained point

static FORCEINLINE bool IsPointWithinShapeComponent(
FVector Point,
UShapeComponent* Shape,
const FTransform& Transform = FTransform::Identity
)

Returns true when the point is inside the shape