reman3/Rayman_X/cpa/public/MTH/Specif/VEC/sl12_3D.h

440 lines
22 KiB
C

/* ##H_FILE#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FILE : sl12_3D.h
MODULE : sl12 (Common Mathematic Library)
DESCRIPTION : 3D Vectorial implementation
VERSION : sl12 V5.0.13 / Alexandre LANGER [ALX] Ubi R&D / Add Comments
VERSION PC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/* -----------------15/04/98 18:36-------------------
* Conversion : OK avec version 23.04.98 19:58 31153
* --------------------------------------------------*/
#ifndef _SCA_sl12_3D_H_
#define _SCA_sl12_3D_H_
#include "MTH\Specif\SCA\SCA_sl12.h"
/* ##TYPEDEF#----------------------------------------------------------------------------
Types definition
---------------------------------------------------------------------------------------*/
/* 3D Vector : */
/*
#if 0
typedef VECTOR sl12_3D_tdstVector;
#else
typedef struct sl12_3D_tdstVector_
{
SCA_td_sl12 xX;
SCA_td_sl12 xY;
SCA_td_sl12 xZ;
SCA_td_sl12 pad;
} sl12_3D_tdstVector;
#endif
*/
#define sl12_3D_tdstVector MTH3D_tdstVector
/* 3D Matrix */
/*
typedef struct sl12_3D_tdstMatrix_
{
sl12_3D_tdstVector stCol_0;
sl12_3D_tdstVector stCol_1;
sl12_3D_tdstVector stCol_2;
} sl12_3D_tdstMatrix;
*/
#define sl12_3D_tdstMatrix MTH3D_tdstMatrix
/* ##MACRO#----------------------------------------------------------------------------
MACRO definition
---------------------------------------------------------------------------------------*/
/*+ ##-######################################
## MACRO AND FUNCTION FOR 3D MATHEMATICS
######################################### */
/* ##-###########################
## Vector Operations
############################## */
/* ##M==================================================================================
NAME : sl12_3D_M_vAddVector
DESCRIPTION : Add two vectors : VectDest= VectA + VectB
INPUT : VectDest, VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vAddVector( VectDest, VectA, VectB) MTH3D_M_vAddVector( VectDest, VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_vSubVector
DESCRIPTION : Sub two vectors : VectDest= VectA - VectB
INPUT : VectDest, VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSubVector( VectDest, VectA, VectB) MTH3D_M_vSubVector( VectDest, VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_vNegVector
DESCRIPTION : Negation of a vector : VectDest= - VectA
INPUT : VectDest, VectA : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vNegVector( VectDest, VectA) MTH3D_M_vNegVector( VectDest, VectA)
/* ##M==================================================================================
NAME : sl12_3D_M_bEqualVector
DESCRIPTION : Test if two vectors are equal
INPUT : VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : VectA==VectB : Boolean
=======================================================================================*/
#define sl12_3D_M_bEqualVector( VectA, VectB) MTH3D_M_bEqualVector( VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_vAddScalarVector
DESCRIPTION : Add a scalare with a vector : VectDest= a.Id + VectA
INPUT : VectDest: address of sl12_3D_tdstVector,
a: SCA_td_sl12, VectA: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vAddScalarVector( VectDest, a, VectA) MTH3D_M_vAddScalarVector( VectDest, a, VectA)
/* ##M==================================================================================
NAME : sl12_3D_M_vSubScalarVector
DESCRIPTION : Add a scalare with a vector : VectDest= VectA - a.Id
INPUT : VectDest: address of sl12_3D_tdstVector,
a: SCA_td_sl12, VectA: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSubScalarVector( VectDest, a, VectA) MTH3D_M_vSubScalarVector( VectDest, a, VectA)
/* ##M==================================================================================
NAME : sl12_3D_M_vMulScalarVector
DESCRIPTION : Multiplicate a scalare with a vector : VectDest= a*VectA
INPUT : VectDest: address of sl12_3D_tdstVector,
a: SCA_td_sl12, VectA: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vMulScalarVector( VectDest, a, VectA) MTH3D_M_vMulScalarVector( VectDest, a, VectA)
/* ##M==================================================================================
NAME : sl12_3D_M_vDivScalarVector
DESCRIPTION : Divide a vector by a scalare : VectDest= VectA/a
INPUT : VectDest, VectA: address of sl12_3D_tdstVector, a: SCA_td_sl12
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vDivScalarVector( VectDest, VectA, a) MTH3D_M_vDivScalarVector( VectDest, VectA, a)
/* ##M==================================================================================
NAME : sl12_3D_M_xDotProductVector
DESCRIPTION : Return the Dot Product of two vectors
INPUT : VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : VectA.VectB : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xDotProductVector( VectA, VectB) MTH3D_M_xDotProductVector( VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_vCrossProductVectorWithoutBuffer
DESCRIPTION : Calculate the cross product of two vectors : VectDest= VectA^VectB,
VectDest must be a other vector
INPUT : VectDest, VectA, VectA: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_fn_vCrossProductVectorWithoutBuffer(_p_stVectDest, _p_stVectA, _p_stVectB) \
MTH3D_M_vCrossProductVectorWithoutBuffer(_p_stVectDest, _p_stVectA, _p_stVectB)
#define sl12_3D_M_vCrossProductVectorWithoutBuffer(VectDest, VectA, VectB) \
sl12_3D_fn_vCrossProductVectorWithoutBuffer(VectDest, VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_vCrossProductVector
DESCRIPTION : Calculate the cross product of two vectors : VectDest= VectA^VectB
INPUT : VectDest, VectA, VectA: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vCrossProductVector(VectDest,VectA,VectB) MTH3D_M_vCrossProductVector(VectDest,VectA,VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_xSqrVector
DESCRIPTION : Return the square of a vector
INPUT : VectA : address of sl12_3D_tdstVector
OUTPUT : VectA.VectA : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xSqrVector( VectA) MTH3D_M_xSqrVector( VectA )
/* ##M==================================================================================
NAME : sl12_3D_M_xNormVector
DESCRIPTION : Return the norm of a vector
INPUT : VectA : address of sl12_3D_tdstVector
OUTPUT : ||VectA|| : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xNormVector( VectA ) MTH3D_M_xNormVector( VectA )
/* ##M==================================================================================
NAME : sl12_3D_M_xInvNormVector
DESCRIPTION : Return the inverse of the norm of a vector
INPUT : VectA : address of sl12_3D_tdstVector
OUTPUT : 1/||VectA|| : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xInvNormVector( VectA ) MTH3D_M_xInvNormVector( VectA )
/* ##M==================================================================================
NAME : sl12_3D_M_xVectorGapSqr
DESCRIPTION : Return the square Gap between two vectors
INPUT : VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : Sqr(||VectA-VectB||) : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xVectorGapSqr(VectA, VectB) MTH3D_M_xVectorGapSqr(VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_xVectorGap
DESCRIPTION : Return the Gap between two vectors
INPUT : VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : ||VectA-VectB|| : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xVectorGap(VectA, VectB) MTH3D_M_xVectorGap(VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_vFillVector
DESCRIPTION : Fill each vector element with a value
INPUT : VectA: address of sl12_3D_tdstVector, a: SCA_td_sl12
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vFillVector( VectDest, a) MTH3D_M_vFillVector( VectDest, a)
/* ##M==================================================================================
NAME : sl12_3D_M_vNormalizeVector
DESCRIPTION : Normalize a vector : VectDest= VectA/||VectA||
INPUT : VectDest, VectA : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
/* Cf 3D_Conv.h */
/*#define sl12_3D_M_vNormalizeVector(VectDest, VectA) MTH3D_M_vNormalizeVector(VectDest, VectA)*/
/* ##M==================================================================================
NAME : sl12_3D_M_vGetVectorElements
DESCRIPTION : Get x, y, z values of a vector
INPUT : x, y, z : address of SCA_td_sl12, VectA : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vGetVectorElements( Vx, Vy, Vz, VectA) MTH3D_M_vGetVectorElements( Vx, Vy, Vz, VectA)
/* ##M==================================================================================
NAME : sl12_3D_M_vSetVectorElements
DESCRIPTION : Set a vector with x, y, z values
INPUT : VectDest : address of sl12_3D_tdstVector, x, y, z : address of SCA_td_sl12,
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSetVectorElements( VectDest, Vx, Vy, Vz) MTH3D_M_vSetVectorElements( VectDest, Vx, Vy, Vz)
/* ##M==================================================================================
NAME : sl12_3D_M_xGetXofVector
DESCRIPTION : Return x element of a vector
INPUT : VectA : address of sl12_3D_tdstVector
OUTPUT : x : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xGetXofVector( VectA ) MTH3D_M_xGetXofVector( VectA )
/* ##M==================================================================================
NAME : sl12_3D_M_vSetXofVector
DESCRIPTION : Set x element of a vector
INPUT : VectDest : address of sl12_3D_tdstVector, Vx : SCA_td_sl12
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSetXofVector( VectDest, Vx) MTH3D_M_vSetXofVector( VectDest, Vx)
/* ##M==================================================================================
NAME : sl12_3D_M_xGetYofVector
DESCRIPTION : Return y element of a vector
INPUT : VectA : address of sl12_3D_tdstVector
OUTPUT : y : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xGetYofVector( VectA ) MTH3D_M_xGetYofVector( VectA )
/* ##M==================================================================================
NAME : sl12_3D_M_vSetYofVector
DESCRIPTION : Set y element of a vector
INPUT : VectDest : address of sl12_3D_tdstVector, Vy : SCA_td_sl12
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSetYofVector( VectDest, Vy) MTH3D_M_vSetYofVector( VectDest, Vy)
/* ##M==================================================================================
NAME : sl12_3D_M_xGetZofVector
DESCRIPTION : Return z element of a vector
INPUT : VectA : address of sl12_3D_tdstVector
OUTPUT : z : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xGetZofVector( VectA ) MTH3D_M_xGetZofVector( VectA )
/* ##M==================================================================================
NAME : sl12_3D_M_vSetZofVector
DESCRIPTION : Set z element of a vector
INPUT : VectDest : address of sl12_3D_tdstVector, Vz : SCA_td_sl12
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSetZofVector( VectDest, Vz) MTH3D_M_vSetZofVector( VectDest, Vz)
/* ##M==================================================================================
NAME : sl12_3D_M_vCopyVector
DESCRIPTION : Copy a vector : VectDest=VectA
INPUT : VectDest, VectA : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vCopyVector( VectDest, VectA) MTH3D_M_vCopyVector( VectDest, VectA)
/* ##M==================================================================================
NAME : sl12_3D_M_vNullVector
DESCRIPTION : Set all elements of a vector to zero
INPUT : VectDest : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vNullVector( VectDest) MTH3D_M_vNullVector( VectDest)
/* ##M==================================================================================
NAME : sl12_3D_M_vScaleVector
DESCRIPTION : Set each element of VectDest with the multiplication of element of VectA by element of VectB
INPUT : VectDest, VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vScaleVector( VectDest, VectA, VectB ) MTH3D_M_vScaleVector( VectDest, VectA, VectB )
/* ##M==================================================================================
NAME : sl12_3D_M_vMiddleVector
DESCRIPTION : Calculate the middle of two vectors : VectDest= (VectA+VectB)/2
INPUT : VectDest, VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vMiddleVector( VectDest, VectA, VectB ) MTH3D_M_vMiddleVector( VectDest, VectA, VectB )
/* ##M==================================================================================
NAME : sl12_3D_M_vLinearInterpolVector
DESCRIPTION : Calculate the lineat interpolation of two vectors : VectDest= VectA + t.(VectB-VectA)
INPUT : VectDest, VectA, VectB: address of sl12_3D_tdstVector, t: SCA_td_sl12
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vLinearInterpolVector( VectDest, VectA, VectB, t) MTH3D_M_vLinearInterpolVector( VectDest, VectA, VectB, t)
/* ##M==================================================================================
NAME : sl12_3D_M_vMaxVector
DESCRIPTION : Make a vector with max elements of two other vectors
INPUT : VectDest, VectA, VectB: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vMaxVector( VectDest, VectA, VectB) MTH3D_M_vMaxVector( VectDest, VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_vMinVector
DESCRIPTION : Make a vector with min elements of two other vectors
INPUT : VectDest, VectA, VectB: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vMinVector( VectDest, VectA, VectB) MTH3D_M_vMinVector( VectDest, VectA, VectB)
/* ##M==================================================================================
NAME : sl12_3D_M_xDetxYVector
DESCRIPTION : Return the 2D determinant between X and Y elements
INPUT : VectA, VectB: address of sl12_3D_tdstVector
OUTPUT : DetxY |VectA, VectB| : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xDetxYVector( VectA, VectB ) MTH3D_M_xDetxYVector( VectA, VectB )
/* ##M==================================================================================
NAME : sl12_3D_M_xDetYZVector
DESCRIPTION : Return the 2D determinant between Y and Z elements
INPUT : VectA, VectB: address of sl12_3D_tdstVector
OUTPUT : DetYZ |VectA, VectB| : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xDetYZVector( VectA, VectB ) MTH3D_M_xDetYZVector( VectA, VectB )
/* ##M==================================================================================
NAME : sl12_3D_M_xDetZXVector
DESCRIPTION : Return the 2D determinant between Z and X elements
INPUT : VectA, VectB: address of sl12_3D_tdstVector
OUTPUT : DetZX |VectA, VectB| : SCA_td_sl12
=======================================================================================*/
#define sl12_3D_M_xDetZXVector( VectA, VectB ) MTH3D_M_xDetZXVector( VectA, VectB )
/* ##M==================================================================================
NAME : sl12_3D_M_bIsNullVector
DESCRIPTION : Test if a vector is null
INPUT : VectA : address of sl12_3D_tdstVector
OUTPUT : VectA==Null vector : Boolean
=======================================================================================*/
#define sl12_3D_M_bIsNullVector( VectA ) MTH3D_M_bIsNullVector( VectA )
/* ##M==================================================================================
NAME : sl12_3D_M_vMulAddVector
DESCRIPTION : Multiply a scalar to a vector, and add it to a other vector: VectDest = x.VectA + VectB
INPUT : VectDest: address of sl12_3D_tdstVector,
x: SCA_td_sl12, VectA, VectB : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vMulAddVector( VectDest, x, VectA, VectB) MTH3D_M_vMulAddVector( VectDest, x, VectA, VectB)
/* sl12_3D_M_vMullAddVector( VectDest, x, VectA, VectB) : VectDest = x.VectA + VectB */
#define sl12_3D_M_vMullAddVector sl12_3D_M_vMulAddVector
/* ##M==================================================================================
NAME : sl12_3D_M_vSetBaseIVector
DESCRIPTION : Set a vector to Ox base vector : VectDest = ( 1, 0, 0 )
INPUT : VectDest: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSetBaseIVector( VectDest ) MTH3D_M_vSetBaseIVector( VectDest )
/* ##M==================================================================================
NAME : sl12_3D_M_vSetBaseJVector
DESCRIPTION : Set a vector to Oy base vector : VectDest = ( 0, 1, 0 )
INPUT : VectDest: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSetBaseJVector( VectDest ) MTH3D_M_vSetBaseJVector( VectDest )
/* ##M==================================================================================
NAME : sl12_3D_M_vSetBaseKVector
DESCRIPTION : Set a vector to Oz base vector : VectDest = ( 0, 0, 1 )
INPUT : VectDest: address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
#define sl12_3D_M_vSetBaseKVector( VectDest ) MTH3D_M_vSetBaseKVector( VectDest )
/* ##M==================================================================================
NAME : sl12_3D_M_vPrintfVector
DESCRIPTION : Print a Vector : Name + its values
INPUT : Name : string
VectA : address of sl12_3D_tdstVector
OUTPUT : void
=======================================================================================*/
__inline void Pf_sl12(td_sl12 _xValue)
{
printf( " %e",_xValue );
}
__inline void sl12_3D_fn_vPrintfVector( char * Name, sl12_3D_tdstVector * VectA)
{
MTH3D_M_vPrintfVector( Name, VectA );
}
#define sl12_3D_M_vPrintfVector( Name, VectA) sl12_3D_fn_vPrintfVector( Name, VectA)
#endif /* sl12_3D_H */