324 lines
15 KiB
C
324 lines
15 KiB
C
/*--------------------------------*/
|
|
/* Conversion of numericals types */
|
|
/*--------------------------------*/
|
|
/* Version 1.0 */
|
|
/* Author : S Leroy */
|
|
/* Date : 5/03/98 */
|
|
/* Modification : 9/03/98 */
|
|
/*--------------------------------*/
|
|
/* PC Version by M Trabucato */
|
|
/*--------------------------------*/
|
|
/* Conversion : OK (avec version 27.04.98 11:35 (22582) */
|
|
/*--------------------------------*/
|
|
|
|
#ifndef _3DCONV_H_
|
|
#define _3DCONV_H_
|
|
|
|
#include "MTH\Specif\VEC\sl12_3D.h"
|
|
#include "MTH\Specif\VEC\sl_3D.h"
|
|
#include "MTH\Specif\VEC\sw12_3D.h"
|
|
#include "MTH\Specif\VEC\sw_3D.h"
|
|
#include "MTH\Specif\SCA\converse.h"
|
|
|
|
/*--------------------------------------*/
|
|
/* 2D Vector Outer Product */
|
|
/*--------------------------------------*/
|
|
__inline SCA_td_sl sl_fn_2DOuterProduct(
|
|
SCA_td_sl x0,
|
|
SCA_td_sl y0,
|
|
SCA_td_sl x1,
|
|
SCA_td_sl y1,
|
|
SCA_td_sl x2,
|
|
SCA_td_sl y2
|
|
)
|
|
{
|
|
return MTH_M_xAdd3( MTH_M_xMul( x0 , MTH_M_xSub( y1 , y2 ) ) ,
|
|
MTH_M_xMul( x1 , MTH_M_xSub( y2 , y0 ) ) ,
|
|
MTH_M_xMul( x2 , MTH_M_xSub( y0 , y1 ) ) );
|
|
}
|
|
|
|
/*--------------------------------------------*/
|
|
/* Vector Conversion */
|
|
/*--------------------------------------------*/
|
|
/* Vector Normalisation */
|
|
__inline sw12_3D_tdstVector * VEC_p_sw12_3DNormalise_sl3D(
|
|
sw12_3D_tdstVector * _p_stsw12_3D_Dest,
|
|
sw12_3D_tdstVector * _p_stsl3_DSrc
|
|
)
|
|
{
|
|
MTH3D_M_vNormalizeVector(_p_stsw12_3D_Dest,_p_stsl3_DSrc);
|
|
return _p_stsw12_3D_Dest;
|
|
}
|
|
|
|
/*------------------------------*/
|
|
/* sw12_3D <- Normalise (sl_3D) */
|
|
/*------------------------------*/
|
|
__inline sw12_3D_tdstVector * VEC_p_sw12_3DNormalize_sw3D(
|
|
sw12_3D_tdstVector * _p_stsw12_3D_Dest,
|
|
sw_3D_tdstVector * _p_stsw_3DSrc
|
|
)
|
|
{
|
|
MTH3D_M_vNormalizeVector(_p_stsw12_3D_Dest,_p_stsw_3DSrc);
|
|
return _p_stsw12_3D_Dest;
|
|
}
|
|
|
|
|
|
/*--------------------------------*/
|
|
/* sw12_3D <- Normalise (sl12_3D) */
|
|
/*--------------------------------*/
|
|
__inline sw12_3D_tdstVector * VEC_p_sw12_3DNormalize_sl123D(
|
|
sw12_3D_tdstVector * _p_stsw12_3D_Dest,
|
|
sl12_3D_tdstVector * _p_stsl12_3DSrc
|
|
)
|
|
{
|
|
MTH3D_M_vNormalizeVector(_p_stsw12_3D_Dest,_p_stsl12_3DSrc);
|
|
return _p_stsw12_3D_Dest;
|
|
}
|
|
|
|
|
|
/*--------------------------------*/
|
|
/* Vector Normalisation functions */
|
|
/*--------------------------------*/
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssl(VectDest, VectA) VEC_p_sw12_3DNormalize_sl3D(VectDest, VectA)
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssl12(VectDest, VectA) VEC_p_sw12_3DNormalize_sl123D(VectDest, VectA)
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssw(VectDest, VectA) VEC_p_sw12_3DNormalize_sw3D(VectDest, VectA)
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssw12(VectDest, VectA) VEC_p_sw12_3DNormalize_sw3D(VectDest, VectA)
|
|
|
|
|
|
/*--------------------------------------------*/
|
|
/* Vector Conversion */
|
|
/*--------------------------------------------*/
|
|
/* Conversion sw3D in sl3D */
|
|
__inline sl_3D_tdstVector * VEC_p_sw3DConverse_sw3DTosl3D(
|
|
sl_3D_tdstVector * _p_stsl3DDest,
|
|
sw_3D_tdstVector * _p_stsw3DSrc
|
|
)
|
|
{
|
|
MTH3D_M_vCopyVector(_p_stsl3DDest,_p_stsw3DSrc);
|
|
return _p_stsl3DDest;
|
|
}
|
|
|
|
/* Conversion sl3D in sw3D */
|
|
__inline sw_3D_tdstVector * VEC_p_sw3DConverse_sl3DTosw3D(
|
|
sw_3D_tdstVector * _p_stsw3DDest,
|
|
sl_3D_tdstVector * _p_stsl3DSrc
|
|
)
|
|
{
|
|
MTH3D_M_vCopyVector(_p_stsw3DDest,_p_stsl3DSrc);
|
|
return _p_stsw3DDest;
|
|
}
|
|
|
|
/*--------------------------------------------*/
|
|
/* Vector/Matrix Multiplication */
|
|
/*--------------------------------------------*/
|
|
/* Specific functions */
|
|
/* PC OK */
|
|
__inline void sw12_3D_fn_vMulMatrixVector_Dsl_SswWithoutBuffer(
|
|
sl_3D_tdstVector * p_VectDest,
|
|
sw12_3D_tdstMatrix * p_MatA,
|
|
sw_3D_tdstVector * p_VectA)
|
|
{
|
|
MTH3D_M_vMulMatrixVectorWithoutBuffer(p_VectDest,p_MatA,p_VectA);
|
|
}
|
|
|
|
/* Explicit name */
|
|
/* To be optimzed of course */
|
|
/* PC OK */
|
|
__inline void sw12_3D_fn_vMulMatrixSw12Vector_Dsl_Ssl(
|
|
sl_3D_tdstVector * p_VectDest,
|
|
sw12_3D_tdstMatrix * p_MatA,
|
|
sl_3D_tdstVector * p_VectA)
|
|
|
|
{
|
|
MTH3D_M_vMulMatrixVectorWithoutBuffer(p_VectDest,p_MatA,p_VectA);
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------------------------*/
|
|
/* Mul Add Vector */
|
|
/*-------------------------------------------------------------------------------------------*/
|
|
/*--------------------------------------------------------------------------------*/
|
|
/* sw_3D_M_vMulAddVector( sw_3D, sl12, sw_3D, sw_3D) sw_3D = sl12*sw_3D + sw_3D */
|
|
/*--------------------------------------------------------------------------------*/
|
|
/* PC OK */
|
|
__inline void sw_3D_fn_vMulAddVector_sw3D_sl12_sw3D_sw_3D(
|
|
sw_3D_tdstVector * _p_stswVectorResult,
|
|
td_sl12 _sl12_scalar,
|
|
sw_3D_tdstVector * _p_stswVectorA,
|
|
sw_3D_tdstVector * _p_stswVectorB
|
|
)
|
|
{
|
|
MTH3D_M_vMulScalarVector( _p_stswVectorResult, _sl12_scalar, _p_stswVectorA);
|
|
MTH3D_M_vAddVector( _p_stswVectorResult, _p_stswVectorResult, _p_stswVectorB);
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------------*/
|
|
/* sl_3D_M_vMulAddVector : sl_3D <- sw * sw12_3D + sl_3D */
|
|
/*----------------------------------------------------------------------------------*/
|
|
__inline void sl_3D_fn_vMulAddVector_sl3D_sw_sw123D_sl3D(
|
|
sl_3D_tdstVector * _p_stslVectorResult,
|
|
td_sw _sw_scalar,
|
|
sw12_3D_tdstVector * _p_stsw12VectorA,
|
|
sl_3D_tdstVector * _p_stslVectorB
|
|
)
|
|
{
|
|
MTH3D_M_vMulScalarVector( _p_stslVectorResult, _sw_scalar, _p_stsw12VectorA);
|
|
MTH3D_M_vAddVector( _p_stslVectorResult, _p_stslVectorResult, _p_stslVectorB);
|
|
}
|
|
/*----------------------------------------------------------------------------------*/
|
|
/* sl_3D_M_vMulAddVector : sl_3D <- sw12 * sw_3D + sl_3D */
|
|
/*----------------------------------------------------------------------------------*/
|
|
#define sl_3D_M_vMulAddVector_sl3D_sw12_sw3D_sl3D( _p_sl_3DResult, _sw12, _p_sw_3D, _p_sl_3D) \
|
|
{ \
|
|
MTH3D_M_vMulScalarVector( _p_sl_3DResult, _sw12, _p_sw_3D); \
|
|
MTH3D_M_vAddVector( _p_sl_3DResult, _p_sl_3DResult, _p_sl_3D); \
|
|
}
|
|
/*----------------------------------------------------------------------------------*/
|
|
/* sl_3D_M_vMulAddVector : sw_3D <- sw * sw12_3D + sw_3D */
|
|
/*----------------------------------------------------------------------------------*/
|
|
#define sw_3D_M_vMulAddVector_sw3D_sw_sw123D_sw3D( _p_sw_3DResult, _sw, _p_sw12_3D, _p_sw_3D) \
|
|
{ \
|
|
MTH3D_M_vMulScalarVector( _p_sw_3DResult, _sw, _p_sw12_3D); \
|
|
MTH3D_M_vAddVector( _p_sw_3DResult, _p_sw_3DResult, _p_sw_3D); \
|
|
}
|
|
|
|
#define sl_3D_M_vMulAddVector_sl3D_sw_sw123D_sl3D( sl_3DResult, sw, sw12_3D, sl_3D) sl_3D_fn_vMulAddVector_sl3D_sw_sw123D_sl3D( sl_3DResult, sw, sw12_3D, sl_3D)
|
|
#define sw_3D_M_vMulAddVector_sw3D_sl12_sw3D_sw3D( sw_3DResult, sl12, sw_3D_1, sw_3D_2) sw_3D_fn_vMulAddVector_sw3D_sl12_sw3D_sw3D( sw_3DResult, sl12, sw_3D_1, sw_3D_2)
|
|
/*-------------------------------------------------------------------------------------------*/
|
|
/* Dot Products */
|
|
/*-------------------------------------------------------------------------------------------*/
|
|
/*----------------------------------------------*/
|
|
/* sw_3D_M_xDotProductVector ( sw_3D, sw12_3D ) */
|
|
/*----------------------------------------------*/
|
|
/* PC OK */
|
|
__inline td_sl VEC_3D_fn_sl_DotProductVector_sw_sw(
|
|
sw_3D_tdstVector * _p_stswVectorA,
|
|
sw_3D_tdstVector * _p_stswVectorB
|
|
)
|
|
{
|
|
return MTH3D_M_xDotProductVector(_p_stswVectorA,_p_stswVectorB);
|
|
}
|
|
|
|
/*--------------------------------------------------------*/
|
|
/* sw_3D_M_sw_DotProductVector_sw_sw12 ( sw_3D, sw12_3D ) */
|
|
/*--------------------------------------------------------*/
|
|
__inline td_sw VEC_3D_fn_sw_DotProductVector_sw_sw12(
|
|
sw_3D_tdstVector * _p_stswVector,
|
|
sw12_3D_tdstVector * _p_stsw12Vector
|
|
)
|
|
{
|
|
return MTH3D_M_xDotProductVector(_p_stswVector,_p_stsw12Vector);
|
|
}
|
|
|
|
/*--------------------------------------------------------*/
|
|
/* sw_3D_M_sl_DotProductVector_sl_sw12 ( sl_3D, sw12_3D ) */
|
|
/*--------------------------------------------------------*/
|
|
__inline td_sl VEC_3D_fn_sl_DotProductVector_sl_sw12(
|
|
sl_3D_tdstVector * _p_stslVector,
|
|
sw12_3D_tdstVector * _p_stsw12Vector
|
|
)
|
|
{
|
|
return MTH3D_M_xDotProductVector(_p_stslVector,_p_stsw12Vector);
|
|
}
|
|
|
|
#define VEC_3D_M_sl_DotProductVector_sw_sw( sw_3D_1, sw_3D_2 ) VEC_3D_fn_sl_DotProductVector_sw_sw( sw_3D_1, sw_3D_2 )
|
|
#define VEC_3D_M_sw_DotProductVector_sw_sw12( sw_3D, sw12_3D ) VEC_3D_fn_sw_DotProductVector_sw_sw12( sw_3D, sw12_3D )
|
|
#define VEC_3D_M_sl_DotProductVector_sl_sw12( sl_3D, sw12_3D ) VEC_3D_fn_sl_DotProductVector_sl_sw12( sl_3D, sw12_3D )
|
|
|
|
/*------------------------------------------------------------------------------------------------------------------------*/
|
|
/* Mul Scalar Vector */
|
|
/*------------------------------------------------------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------*/
|
|
/* MulScalar sw_3D <- sl12 * sw_3D */
|
|
/*----------------------------------------------*/
|
|
/* PC OK */
|
|
__inline sw_3D_tdstVector * sw_3D_fn_MulScalarVector_sl12_Sw3D
|
|
(
|
|
sw_3D_tdstVector * _p_stswVectorResult,
|
|
td_sl12 _p_s12Scalar,
|
|
sw_3D_tdstVector * _p_stswVector
|
|
)
|
|
{
|
|
MTH3D_M_vMulScalarVector( _p_stswVectorResult, _p_s12Scalar, _p_stswVector);
|
|
|
|
return _p_stswVectorResult;
|
|
}
|
|
|
|
/*----------------------------------------------*/
|
|
/* MulScalar sw_3D <- sw * sw12_3D */
|
|
/*----------------------------------------------*/
|
|
__inline sw_3D_tdstVector * sw_3D_fn_MulScalarVector_sw_sw123D
|
|
(
|
|
sw_3D_tdstVector * _p_stswVectorResult,
|
|
td_sw swScalar,
|
|
sw12_3D_tdstVector * _p_stsw12Vector
|
|
)
|
|
{
|
|
MTH3D_M_vMulScalarVector( _p_stswVectorResult, swScalar, _p_stsw12Vector);
|
|
|
|
return _p_stswVectorResult;
|
|
}
|
|
|
|
#define sw_3D_M_MulScalarVector_sw_sw123D(Vectd,a,VectA) sw_3D_fn_MulScalarVector_sw_sw123D(Vectd,a,VectA)
|
|
#define sw_3D_M_MulScalarVector_sl12_sw3D(Vectd,a,VectA) sw_3D_fn_MulScalarVector_sl12_sw3D(Vectd,a,VectA)
|
|
/*------------------------------------------------------------------------------------------------------------------------*/
|
|
/* Div Vector Scalar */
|
|
/*------------------------------------------------------------------------------------------------------------------------*/
|
|
/*-----------------------*/
|
|
/* sw12_3D <- sw_3D / sw */
|
|
/*-----------------------*/
|
|
__inline sw12_3D_tdstVector * sw12_3D_fn_VectorDivScalar_sw3D_sw
|
|
(
|
|
sw12_3D_tdstVector * _p_stsw12VectorResult,
|
|
sw_3D_tdstVector * _p_stswVector,
|
|
td_sw swScalar
|
|
)
|
|
{
|
|
MTH3D_M_vDivScalarVector( _p_stsw12VectorResult, _p_stswVector, swScalar);
|
|
|
|
return _p_stsw12VectorResult;
|
|
}
|
|
#define sw12_3D_M_VectorDivScalar_sw3D_sw(Vectd,Vecta,a) sw12_3D_fn_VectorDivScalar_sw3D_sw(Vectd,Vecta,a)
|
|
/*------------------------------------------------------------*/
|
|
/* Square norm of a vector */
|
|
/*------------------------------------------------------------*/
|
|
__inline td_sl sw_3D_fn_sl_SqrVector(
|
|
sw_3D_tdstVector * _p_stswVectorA
|
|
)
|
|
{
|
|
return MTH3D_M_xSqrVector(_p_stswVectorA);
|
|
}
|
|
#define sw_3D_M_sl_SqrVector_sw(VectA) sw_3D_fn_sl_SqrVector(VectA)
|
|
/*--------------------------------*/
|
|
/* Vector Normalisation functions */
|
|
/*--------------------------------*/
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssl(VectDest, VectA) VEC_p_sw12_3DNormalize_sl3D(VectDest, VectA)
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssl12(VectDest, VectA) VEC_p_sw12_3DNormalize_sl123D(VectDest, VectA)
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssw(VectDest, VectA) VEC_p_sw12_3DNormalize_sw3D(VectDest, VectA)
|
|
#define sw12_3D_vNormalizeVector_Dsw12_Ssw12(VectDest, VectA) VEC_p_sw12_3DNormalize_sw3D(VectDest, VectA)
|
|
/*---------------------------------------------*/
|
|
/* sl <- sl_3D_M_slVectorGapSqr (sw_3D, sw_3D) */
|
|
/*---------------------------------------------*/
|
|
#define sl_3D_M_slVectorGapSqr_sw3D_sw3D(VectA, VectB) MTH3D_M_xVectorGapSqr(VectA, VectB)
|
|
|
|
/*-----------------------------------------------------*/
|
|
/* ul <- VEC_M_ulVectorGapSqr_sl3D_sl3D (sl_3D, sl_3D) */
|
|
/*-----------------------------------------------------*/
|
|
__inline unsigned long VEC_fn_ulVectorGapSqr_sl3D_sl3D(
|
|
sl_3D_tdstVector *_p_stsl3D_A,
|
|
sl_3D_tdstVector *_p_stsl3D_B
|
|
)
|
|
{
|
|
return MTH_M_xRealToLong(MTH3D_M_xVectorGapSqr(_p_stsl3D_A, _p_stsl3D_B));
|
|
}
|
|
|
|
#define VEC_M_ulVectorGapSqr_sl3D_sl3D(sl_3D_1, sl_3D_2) VEC_fn_ulVectorGapSqr_sl3D_sl3D(sl_3D_1, sl_3D_2)
|
|
|
|
/* Macro definitions */
|
|
#define sw12_3D_M_vMulMatrixSw12Vector_Dsw_Ssl( VectDest, MatA, VectA) sw12_3D_fn_vMulMatrixSw12Vector_Dsl_Ssl( VectDest, MatA, VectA)
|
|
#define sw12_3D_M_vMulMatrixVector_Dsl_SswWithoutBuffer( VectDest, MatA, VectA) sw12_3D_fn_vMulMatrixVector_Dsl_SswWithoutBuffer( VectDest, MatA, VectA)
|
|
#define Conv_sl3DTosw3D(_p_stsl3D,_p_stsw3D) VEC_p_sw3DConverse_sl3DTosw3D(_p_stsl3D,_p_stsw3D)
|
|
#define Conv_sw3DTosl3D(_p_stsw3D,_p_stsl3D) VEC_p_sw3DConverse_sw3DTosl3D(_p_stsw3D,_p_stsl3D)
|
|
|
|
#endif
|