DIFF

Math3D library

Classes

Enums

Values

CatmullRom
NaturalCubic
UniformCubic

Functions

private void ~Math3D()
proto static float AngleFromPosition(vector origin, vector originDir, vector target)Angle that a target is from the direction of an originmore…
proto static void BlendCartesian(vector samplePosition, notnull array<vector> inPositions, notnull array<float> outWeights)Output 2D blend space weights for `inPositions` when sampled at `samplePosition`more…
static vector BoxCenter(vector a, vector b)
static vector BoxSize(vector a, vector b)more…
proto static int CheckBoundBox(vector mins1, vector maxs1, vector mins2, vector maxs2)Returns 1, when bounding boxes intersectsmore…
proto static vector ClipLine(vector start, vector end, vector norm, float d)
proto static void ConePoints(vector origin, float length, float halfAngle, float angleOffset, out vector leftPoint, out vector rightPoint)Calculates the points of a right 2D cone in 3D spacemore…
proto static native vector Curve(ECurveType type, float param, notnull array<vector> points)Computes curvemore…
proto static void DirectionAndUpMatrix(vector dir, vector up, out vector mat[4])Creates rotation matrix from direction and up vectormore…
static vector GetRandomDir()Returns randon normalized directionmore…
proto static bool IntersectCylinderOBB(vector mins, vector maxs, vector obbMat[4], vector cylMat[4], float cylinderRadius, float cylinderHeight)Tests whether cylinder is intersecting oriented box.more…
proto static float IntersectRayBox(vector start, vector end, vector mins, vector maxs)Tests whether ray is intersecting axis aligned box.more…
proto static bool IntersectRayCylinder(vector rayStart, vector rayEnd, vector center, float radius, float height)Tests whether ray is intersecting cylinder.more…
proto static int IntersectRayPlane(vector rayStart, vector rayEnd, vector planeNormal, float planeDist, out vector intersection)Tests whether ray is intersecting plane.more…
proto static float IntersectRaySphere(vector raybase, vector raycos, vector center, float radius)Tests whether ray is intersecting sphere.more…
proto static bool IntersectSphereBox(vector origin, float radius, vector mins, vector maxs)Tests whether sphere is intersecting axis aligned box.more…
proto static bool IntersectSphereCone(vector origin, float radius, vector conepos, vector axis, float angle)Tests whether sphere is intersecting cone.more…
proto static bool IntersectWholeSphereCone(vector origin, float radius, vector conepos, vector axis, float angle)Tests whether sphere is fully inside cone.more…
private void Math3D()
static void MatrixIdentity3(out vector mat[3])Creates identity matrixmore…
static void MatrixIdentity4(out vector mat[4])Creates identity matrixmore…
proto static void MatrixInverse3(vector mat[3])Inverses a matrixmore…
proto static void MatrixInverse4(vector mat[4])Inverses a matrixmore…
proto static void MatrixInvMultiply3(vector mat0[3], vector mat1[3], out vector res[3])Invert-transforms rotation matrixmore…
proto static void MatrixInvMultiply4(vector mat0[4], vector mat1[4], out vector res[4])Invert-transforms matrixmore…
proto static void MatrixMultiply3(vector mat0[3], vector mat1[3], out vector res[3])Transforms rotation matrixmore…
proto static void MatrixMultiply4(vector mat0[4], vector mat1[4], out vector res[4])Transforms matrixmore…
proto static void MatrixOrthogonalize3(vector mat[3])Orthogonalizes matrixmore…
proto static void MatrixOrthogonalize4(vector mat[4])Orthogonalizes matrixmore…
proto static vector MatrixToAngles(vector mat[3])Returns angles of rotation matrixmore…
proto static void MatrixToQuat(vector mat[3], out float d[4])Converts rotation matrix to quaternionmore…
proto static vector NearestPoint(vector beg, vector end, vector pos)Point on line beg .. end nearest to posmore…
static void QuatCopy(float s[4], out float d[4])Copies quaternionmore…
static void QuatIdentity(out float q[4])Creates identity quaternionmore…
proto static void QuatLerp(out float qout[4], float q1[4], float q2[4], float frac)Linear interpolation between q1 and q2 with weight 'frac' (0...1)more…
proto static void QuatMultiply(out float qout[4], float q1[4], float q2[4])Multiplies quaternionsmore…
proto static vector QuatToAngles(float q[4])Returns Angles vector from quaternion
proto static void QuatToMatrix(float q[4], out vector mat[3])Converts quaternion to rotation matrix
static void ScaleMatrix(float scale, out vector mat[3])Creates scale matrixmore…
proto native vector Vector(float x, float y, float z)Vector constructor from componentsmore…
proto static void YawPitchRollMatrix(vector ang, out vector mat[3])Creates rotation matrix from anglesmore…

Function Documentation

AngleFromPositionMath3D

proto static float AngleFromPosition(vector origin, vector originDir, vector target)

Angle that a target is from the direction of an origin

Returns: float Angle in radians


BlendCartesianMath3D

proto static void BlendCartesian(vector samplePosition, notnull array<vector> inPositions, notnull array<float> outWeights)

Output 2D blend space weights for `inPositions` when sampled at `samplePosition`

samplePosition
[X, Y, unused] coordinate to sample the 2d space
inPositions
[X, Y, unused] positions in the 2d space
outWeights
Output weights for individual nodes 1:1 to inPositions
Referenced by Blend2D.Blend()

BoxSizeMath3D

static vector BoxSize(vector a, vector b)
References Math.AbsFloat(), and Vector()
Referenced by BoxDraw.Update()

CheckBoundBoxMath3D

proto static int CheckBoundBox(vector mins1, vector maxs1, vector mins2, vector maxs2)

Returns 1, when bounding boxes intersects

mins1
vector minimum point of first bounding box
maxs1
vector maximum point of first bounding box
mins2
vector minimum point of second bounding box
maxs2
vector maximum point of second bounding box

Returns: int 1 if boundig boxes intersects, otherwise 0

vector mins1 = "1 1 1";
vector maxs1 = "3 3 3";
vector mins2 = "2 2 2";
vector maxs2 = "4 4 4";
Print( Math3D.CheckBoundBox(mins1, maxs1, mins2, maxs2) );

>> 1

ConePointsMath3D

proto static void ConePoints(vector origin, float length, float halfAngle, float angleOffset, out vector leftPoint, out vector rightPoint)

Calculates the points of a right 2D cone in 3D space

origin
vector Origin of cone
length
float Length of the cone
halfAngle
float Half of the angle of the cone in radians
angleOffset
float Angle offset of the cone in radians (handy for rotating it along with something in the world)
out leftPoint
vector Left point of the cone
out rightPoint
vector Right point of the cone

CurveMath3D

proto static native vector Curve(ECurveType type, float param, notnull array<vector> points)

Computes curve

Returns: vector

auto points = new array<vector>();
points.Insert( Vector( 0, 0, 0) );
  	points.Insert( Vector( 5, 0, 0) );
  	points.Insert( Vector( 8, 3, 0) );
  	points.Insert( Vector( 6, 1, 0) );

float t = 0.5;
vector result = Math3D.Curve(ECurveType.CatmullRom, t, points);

DirectionAndUpMatrixMath3D

proto static void DirectionAndUpMatrix(vector dir, vector up, out vector mat[4])

Creates rotation matrix from direction and up vector

dir
vector direction vector
up
vector up vector
out mat
vector[4] created rotation matrix
vector mat[4];
vector dir = "1 0 1";
vector up = "0 1 0";
DirectionAndUpMatrix( dir, up, mat );
Print( mat );

>> <0.707107,0,-0.707107>,<0,1,0>,<0.707107,0,0.707107>,<0,0,0>

GetRandomDirMath3D

static vector GetRandomDir()

Returns randon normalized direction

Returns: vector

Print( Math3D.GetRandomDir() );

>>vector ret =  0x0000000007c1a1c0 {<0.422565,0,-0.906333>}

IntersectCylinderOBBMath3D

proto static bool IntersectCylinderOBB(vector mins, vector maxs, vector obbMat[4], vector cylMat[4], float cylinderRadius, float cylinderHeight)

Tests whether cylinder is intersecting oriented box.

mins
vector Minimums of bound box
maxs
vector Maximums of bound box
obbMat
vector Transform of box
cylMat
vector Transform of cylinder
cylinderRadius
float Radius of cylinder
cylinderHeight
float Height of cylinder

Returns: bool True when cylinder is intersecting oriented box


IntersectRayBoxMath3D

proto static float IntersectRayBox(vector start, vector end, vector mins, vector maxs)

Tests whether ray is intersecting axis aligned box.

start
vector Start of ray
end
vector End of ray
mins
vector Minimums of bound box
maxs
vector Maximums of bound box

Returns: float -1 when not intersecting, else the fraction of ray


IntersectRayCylinderMath3D

proto static bool IntersectRayCylinder(vector rayStart, vector rayEnd, vector center, float radius, float height)

Tests whether ray is intersecting cylinder.

rayStart
vector Start of ray
rayEnd
vector End of ray
center
vector Center of cylinder
radius
float Radius of cylinder
height
float Height of cylinder

Returns: bool True when ray is intersecting cylinder


IntersectRayPlaneMath3D

proto static int IntersectRayPlane(vector rayStart, vector rayEnd, vector planeNormal, float planeDist, out vector intersection)

Tests whether ray is intersecting plane.

rayStart
vector Start of ray
rayEnd
vector End of ray
planeNormal
vector Normal of the plane
planeDist
float Length of the plane
intersection
vector Intersection point of the plane, only valid when return is 3

Returns: int 1 when behind, 2 when in front and 3 when intersecting the plane


IntersectRaySphereMath3D

proto static float IntersectRaySphere(vector raybase, vector raycos, vector center, float radius)

Tests whether ray is intersecting sphere.

raybase
vector Start of ray
raycos
vector End of ray
center
vector Center of sphere
radius
float Radius of sphere

Returns: float -1 when not intersecting, else the fraction of ray


IntersectSphereBoxMath3D

proto static bool IntersectSphereBox(vector origin, float radius, vector mins, vector maxs)

Tests whether sphere is intersecting axis aligned box.

origin
vector Origin of sphere
radius
float Radius of sphere
mins
vector Minimums of bound box
maxs
vector Maximums of bound box

Returns: bool True when intersects


IntersectSphereConeMath3D

proto static bool IntersectSphereCone(vector origin, float radius, vector conepos, vector axis, float angle)

Tests whether sphere is intersecting cone.

origin
vector Origin of sphere
radius
float Radius of sphere
conepos
vector Position of top of cone
axis
vector Orientation of cone in direction from top to bottom
angle
float Angle of cone in radians

Returns: bool True when sphere is intersecting cone


IntersectWholeSphereConeMath3D

proto static bool IntersectWholeSphereCone(vector origin, float radius, vector conepos, vector axis, float angle)

Tests whether sphere is fully inside cone.

origin
vector Origin of sphere
radius
float Radius of sphere
conepos
vector Position of top of cone
axis
vector Orientation of cone in direction from top to bottom
angle
float Angle of cone in radians

Returns: bool True when sphere is fully inside cone


MatrixIdentity3Math3D

static void MatrixIdentity3(out vector mat[3])

Creates identity matrix

out mat
created identity matrix
      vector mat[3];
  	Math3D.MatrixIdentity3( mat );
  	Print( mat );

>> <1,0,0>,<0,1,0>,<0,0,1>


MatrixInverse3Math3D

proto static void MatrixInverse3(vector mat[3])

Inverses a matrix

it mat
matrix which should be inversed

MatrixInverse4Math3D

proto static void MatrixInverse4(vector mat[4])

Inverses a matrix

it mat
matrix which should be inversed

MatrixInvMultiply3Math3D

proto static void MatrixInvMultiply3(vector mat0[3], vector mat1[3], out vector res[3])

Invert-transforms rotation matrix

mat0
vector[3] first matrix
mat1
vector[3] second matrix
out res
vector[3] result of first and second matrix multiplication
vector mat0[3] = { "1.5 2.5 0", "0.1 1.3 0", "0 0 1" }; // rotation matrix
vector mat1[3] = { "1 0.4 0", "0 1 0", "0 1.3 2.7" }; // rotation matrix
vector res[3];
Math3D.MatrixInvMultiply3(mat0, mat1, res)
Print( res );

>> <2.5,0.62,0>,<2.5,1.3,0>,<3.25,1.69,2.7>

MatrixInvMultiply4Math3D

proto static void MatrixInvMultiply4(vector mat0[4], vector mat1[4], out vector res[4])

Invert-transforms matrix

mat0
vector[4] first matrix
mat1
vector[4] second matrix
out res
vector[4] inverse result of first and second matrix multiplication
vector mat0[4] = { "2 0 0", "0 3 0", "0 0 1", "0 0 0" }; // scale matrix
vector mat1[4] = { "1 0 0", "0 1 0", "0 0 1", "2 4 1" }; // translation matrix
vector res[4];
Math3D.MatrixInvMultiply4(mat0, mat1, res)
Print( res );

>> <2,0,0>,<0,3,1>,<0,3,1>,<4,12,4>

MatrixMultiply3Math3D

proto static void MatrixMultiply3(vector mat0[3], vector mat1[3], out vector res[3])

Transforms rotation matrix

mat0
vector[3] first matrix
mat1
vector[3] second matrix
out res
vector[3] result of first and second matrix multiplication
vector mat0[3] = { "1.5 2.5 0", "0.1 1.3 0", "0 0 1" }; // rotation matrix
vector mat1[3] = { "1 0.4 0", "0 1 0", "0 1.3 2.7" }; // rotation matrix
vector res[3];
Math3D.MatrixMultiply3(mat0, mat1, res)
Print( res );

>> <1.54,3.02,0>,<0.1,1.3,0>,<0.13,1.69,2.7>

MatrixMultiply4Math3D

proto static void MatrixMultiply4(vector mat0[4], vector mat1[4], out vector res[4])

Transforms matrix

mat0
vector[4] first matrix
mat1
vector[4] second matrix
out res
vector[4] result of first and second matrix multiplication
vector mat0[4] = { "2 0 0 0", "0 3 0 0", "0 1 0 0", "0 0 0 1" }; // scale matrix
vector mat1[4] = { "1 0 0 0", "0 1 0 0", "0 1 0 0", "2 4 1 3" }; // translation matrix
vector res[4];
Math3D.MatrixMultiply4(mat0, mat1, res)
Print( res );

>> <2,0,0>,<0,3,0>,<0,3,0>,<4,13,0>

MatrixOrthogonalize3Math3D

proto static void MatrixOrthogonalize3(vector mat[3])

Orthogonalizes matrix

it mat
matrix which should be orthogonalized

MatrixOrthogonalize4Math3D

proto static void MatrixOrthogonalize4(vector mat[4])

Orthogonalizes matrix

it mat
matrix which should be orthogonalized

MatrixToAnglesMath3D

proto static vector MatrixToAngles(vector mat[3])

Returns angles of rotation matrix

mat
vector[3] rotation matrix

Returns: vector roll, pitch, yaw angles

vector mat[3];
Math3D.RollPitchYawMatrix( "70 15 45", mat );
vector ang = Math3D.MatrixToAngles( mat );
Print( ang );

>> <70,15,-45>

MatrixToQuatMath3D

proto static void MatrixToQuat(vector mat[3], out float d[4])

Converts rotation matrix to quaternion

mat
vector[3] rotation matrix
out d
float[4] created quaternion copy
vector mat[3];
vector rot = "70 15 45";
rot.RotationMatrixFromAngles( mat );
float d[4];
Math3D.MatrixToQuat( mat, d );
Print( d );

>> {0.241626,0.566299,-0.118838,0.778973}

NearestPointMath3D

proto static vector NearestPoint(vector beg, vector end, vector pos)

Point on line beg .. end nearest to pos

Returns: vector


QuatCopyMath3D

static void QuatCopy(float s[4], out float d[4])

Copies quaternion

s
float[4] quaternion to copy
out d
float[4] created quaternion copy
float s[4] = { 2, 3, 4, 1 };
float d[4];
Math3D.QuatCopy( s, d );
Print( d );

>> {2,3,4,1}

QuatIdentityMath3D

static void QuatIdentity(out float q[4])

Creates identity quaternion

out q
float[4] created identity quaternion
float q[4];
Math3D.QuatIdentity( q );
Print( q );

>> {0,0,0,1}

QuatLerpMath3D

proto static void QuatLerp(out float qout[4], float q1[4], float q2[4], float frac)

Linear interpolation between q1 and q2 with weight 'frac' (0...1)

out qout
float[4] result quaternion
q1
float[4] first quaternion
q2
float[4] second quaternion
frac
float interpolation weight
float q1[4] = { 1, 1, 1, 1 };
float q2[4] = { 2, 2, 2, 1 };
float qout[4];
Math3D.QuatLerp( qout, q1, q2, 0.5 );
Print( qout );

>> {1.5,1.5,1.5,1}

QuatMultiplyMath3D

proto static void QuatMultiply(out float qout[4], float q1[4], float q2[4])

Multiplies quaternions

out qout
float[4] result quaternion
q1
float[4] first quaternion
q2
float[4] second quaternion
float q1[4] = { 1, 2, 3, 1 };
float q2[4] = { 2, 2, 2, 1 };
float qout[4];
Math3D.QuatMultiply( qout, q1, q2 );
Print( qout );

>> {2,4,6,1}

ScaleMatrixMath3D

static void ScaleMatrix(float scale, out vector mat[3])

Creates scale matrix

scale
scale coeficient
out mat
created scale matrix
      vector mat[3];
  	Math3D.ScaleMatrix( 2.5, mat );
  	Print( mat );

>> <2.5,0,0>,<0,2.5,0>,<0,0,2.5>

Vector

proto native vector Vector(float x, float y, float z)

Vector constructor from components

x
float x component
y
float y component
z
float z component

Returns: vector resulting vector

Print( Vector(1, 2, 3) );

>> <1,2,3>