DIFF

class Math3DSource

Part of Math3D library

Constructors 2

private void Math3D()
private void ~Math3D()

Methods 39

proto static vector ClipLine(vector start, vector end, vector norm, float d)
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

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

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

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

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

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

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

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

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>
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>
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>
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>
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>
proto static void MatrixInverse4(vector mat[4])

Inverses a matrix

it mat
matrix which should be inversed
proto static void MatrixInverse3(vector mat[3])

Inverses a matrix

it mat
matrix which should be inversed
proto static void MatrixOrthogonalize4(vector mat[4])

Orthogonalizes matrix

it mat
matrix which should be orthogonalized
proto static void MatrixOrthogonalize3(vector mat[3])

Orthogonalizes matrix

it mat
matrix which should be orthogonalized
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>
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>
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}
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}
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}
proto static void QuatToMatrix(float q[4], out vector mat[3])

Converts quaternion to rotation matrix

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>
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}
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}
proto static vector QuatToAngles(float q[4])

Returns Angles vector from quaternion

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
static vector GetRandomDir()

Returns randon normalized direction

Returns: vector

Print( Math3D.GetRandomDir() );

>>vector ret =  0x0000000007c1a1c0 {<0.422565,0,-0.906333>}
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);
proto static vector NearestPoint(vector beg, vector end, vector pos)

Point on line beg .. end nearest to pos

Returns: vector

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

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
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()
static vector BoxCenter(vector a, vector b)
Referenced by BoxDraw.BoxDraw()
static vector BoxSize(vector a, vector b)
References Math.AbsFloat(), and Vector()
Referenced by BoxDraw.Update()