2018-04-22 15:55:55 +00:00
|
|
|
//======== (C) Copyright 2002 Charles G. Cleveland All rights reserved. =========
|
|
|
|
//
|
|
|
|
// The copyright to the contents herein is the property of Charles G. Cleveland.
|
|
|
|
// The contents may be used and/or copied only with the written permission of
|
|
|
|
// Charles G. Cleveland, or in accordance with the terms and conditions stipulated in
|
|
|
|
// the agreement/contract under which the contents have been supplied.
|
|
|
|
//
|
|
|
|
// Purpose:
|
|
|
|
//
|
|
|
|
// $Workfile: MathUtil.h $
|
|
|
|
// $Date: 2002/07/23 16:53:46 $
|
|
|
|
//
|
|
|
|
//-------------------------------------------------------------------------------
|
|
|
|
// $Log: MathUtil.h,v $
|
|
|
|
// Revision 1.6 2002/07/23 16:53:46 Flayra
|
|
|
|
// - Added VectorDistance2D, added document headers
|
|
|
|
//
|
|
|
|
//===============================================================================
|
|
|
|
#ifndef MATH_UTIL_H
|
|
|
|
#define MATH_UTIL_H
|
|
|
|
|
|
|
|
#include "../types.h"
|
|
|
|
|
|
|
|
#ifndef M_PI
|
|
|
|
#define M_PI 3.14159265358979323846 // matches value in gcc v2 math.h
|
|
|
|
#endif
|
|
|
|
|
|
|
|
//void AngleMatrix(const float* angles, float matrix[3][4]);
|
|
|
|
double sqrt(double x);
|
|
|
|
float Length(const float *v);
|
|
|
|
void CreateOrthoNormalBasis(float inZAxis[3], float outXAxis[3], float outYAxis[3]);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Transforms a vector by an orthonormal basis.
|
|
|
|
*/
|
|
|
|
void TransformVector(const float v[3], const float xAxis[3], const float yAxis[3], const float zAxis[3], float result[3]);
|
|
|
|
int RoundIntToNearestIncrementOf(int inValue, int inIncrement);
|
|
|
|
void RotateValuesByVector(int32& ioX, int32& ioY, int32& ioZ, /*const float* inBaseVector,*/ const float* inVector);
|
|
|
|
void RotateFloatValuesByVector(float& ioX, float& ioY, float& ioZ, /*const float* inBaseVector,*/ const float* inVector);
|
|
|
|
float WrapFloat(float inValue, float inMin, float inMax);
|
|
|
|
void VectorAngles( const float *forward, float *angles );
|
|
|
|
float VectorNormalize (float *v);
|
|
|
|
void VectorInverse ( float *v );
|
|
|
|
void VectorScale (const float *in, float scale, float *out);
|
|
|
|
void VectorMA (const float *veca, float scale, const float *vecb, float *vecc);
|
|
|
|
bool IsVectorBetweenBoundingVectors(const float* inOrigin, const float* inRay, const float* inVecOne, const float* inVecTwo);
|
|
|
|
void VectorRotate (const float* in1, const float in2[3][4], float* out);
|
|
|
|
double VectorDistance(const float* in1, const float* in2);
|
|
|
|
double VectorDistance2D(const float* in1, const float* in2);
|
2023-09-04 14:23:27 +00:00
|
|
|
void VectorGetClosestPointOnLine(const float* inLineFrom, const float* inLineTo, const float* inTestPosition, float* outClosestPoint);
|
|
|
|
float VectorDistanceFromLine(const float* inLineFrom, const float* inLineTo, const float* inTestPosition);
|
|
|
|
void VectorGetMidPointOnLine(const float* inLineFrom, const float* inLineTo, float* outPosition);
|
2018-04-22 15:55:55 +00:00
|
|
|
|
|
|
|
// Added by mmcguire.
|
|
|
|
/**
|
|
|
|
* Compute the Euler angles which represent the orientation defined by the
|
|
|
|
* three basis vectors. This is the mathematical inverse of the AngleVectors
|
|
|
|
* function.
|
|
|
|
*/
|
|
|
|
void VectorsToAngles(const float forward[3], const float right[3], const float up[3], float angles[3]);
|
|
|
|
|
|
|
|
const float kFloatTolerance = 0.001f;
|
|
|
|
|
|
|
|
#endif
|