diff options
Diffstat (limited to 'hammer/hammer_mathlib.h')
| -rw-r--r-- | hammer/hammer_mathlib.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/hammer/hammer_mathlib.h b/hammer/hammer_mathlib.h new file mode 100644 index 0000000..c42c008 --- /dev/null +++ b/hammer/hammer_mathlib.h @@ -0,0 +1,78 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Math functions specific to the editor. +// +//===========================================================================// + +#ifndef HAMMER_MATHLIB_H +#define HAMMER_MATHLIB_H + +#ifdef _WIN32 +#pragma once +#endif + +typedef unsigned char byte; + +#include "mathlib/mathlib.h" +#include "mathlib/vmatrix.h" +#include <math.h> + + +typedef vec_t vec5_t[5]; + +enum +{ + AXIS_X = 0, + AXIS_Y, + AXIS_Z +}; + +// +// Matrix functions: +// + +void RotateAroundAxis(VMatrix& Matrix, float fDegrees, int nAxis); +void AxisAngleMatrix(VMatrix& Matrix, const Vector &Axis, float fAngle); + +float fixang(float a); +float lineangle(float x1, float y1, float x2, float y2); +void polyMake( float x1, float y1, float x2, float y2, int npoints, float start_ang, Vector *pmPoints ); +float V_rint(float); + +inline int fsign( float x) { if(x==0) return 0; else if (x>0) return 1; else return -1; } +inline bool fequal( float value, float target, float delta) { return ( (value<(target+delta))&&(value>(target-delta)) ); } + +void RoundVector( Vector2D &v ); +bool IsLineInside(const Vector2D &pt1, const Vector2D &pt2, int x1, int y1, int x2, int y2); +bool IsPointInside(const Vector2D &pt, const Vector2D &mins, const Vector2D &maxs ); + +bool IsValidBox( Vector &mins, Vector &maxs ); +bool IsValidBox( const Vector2D &mins, const Vector2D &maxs ); +void NormalizeBox( Vector &mins, Vector &maxs ); +void NormalizeBox( Vector2D &mins, Vector2D &maxs ); +void PointsFromBox( const Vector &mins, const Vector &maxs, Vector *points ); +void LimitBox( Vector &mins, Vector &maxs, float limit ); +void PointsRevertOrder( Vector *pPoints, int nPoints); +// Is box 1 inside box 2? +bool IsBoxInside( const Vector2D &min1, const Vector2D &max1, const Vector2D &min2, const Vector2D &max2 ); +bool IsBoxIntersecting( const Vector2D &min1, const Vector2D &max1, const Vector2D &min2, const Vector2D &max2 ); + +const Vector &GetNormalFromPoints( const Vector &p1, const Vector &p2, const Vector &p3 ); +const Vector &GetNormalFromFace( int nFace ); + +inline void TransformPoint( const VMatrix& matrix, Vector &point ) +{ + Vector orgVector = point; + matrix.V3Mul( orgVector, point ); + +} + +// solve equation v0 = x*v1 + y*v2 + z*v3 +void GetAxisFromFace( int nFace, Vector& vHorz, Vector &vVert, Vector &vThrd ); +bool SolveLinearEquation( const Vector& v0, const Vector& v1, const Vector& v2, const Vector& v3, Vector& vOut); +// test intersection line & AABB, returns -1 if no intersection occurs +float IntersectionLineAABBox( const Vector& mins, const Vector& maxs, const Vector& vStart, const Vector& vEnd, int &nFace ); + +bool BuildAxesFromNormal( const Vector &vNormal, Vector &vHorz, Vector &vVert ); + +#endif // HAMMER_MATHLIB_H |