/************************************************************ * * * vector.h * * * * * LPGE 1997 * * * * Copyright (C) 1996 Sony Computer Entertainment Inc. * * All Rights Reserved * * * ***********************************************************/ #ifndef VECTOR_H_INCLUDED /**************************************************************************** includes ****************************************************************************/ #include "sys_libs.h" #include "asssert.h" #include "dump.h" /**************************************************************************** constants ****************************************************************************/ #define VECTOR_SIZE_ERROR_TOLERANCE 50 #define MAX_VECTOR_ELEMENT_SIZE 32766 /**************************************************************************** macros ****************************************************************************/ #define setVECTOR(v, x, y, z) (v)->vx = (x), (v)->vy = (y), (v)->vz = (z) #define applyVECTOR(v, a, b, c, op) \ (v)->vx = (v)->vx op a, \ (v)->vy = (v)->vy op b, \ (v)->vz = (v)->vz op c #define addVECTOR(v1, v2) \ (v1)->vx += (v2)->vx, \ (v1)->vy += (v2)->vy, \ (v1)->vz += (v2)->vz #define subVECTOR(v1, v2) \ (v1)->vx -= (v2)->vx, \ (v1)->vy -= (v2)->vy, \ (v1)->vz -= (v2)->vz /**************************************************************************** prototypes ****************************************************************************/ int VectorIsUnitVector (VECTOR* vector); int VectorIsGivenSize (VECTOR* vector, int size); int SizeOfVector (VECTOR* vector); void MakeRandomUnitVector (VECTOR* vector); void ScaleVectorToUnit (VECTOR* vector); // use this to SET size absolutely: NOT a multiply-vector function void ScaleVectorToSize (VECTOR* vector, int size); void ScaleVector (VECTOR* vector, int relativeScale); void MakeScaledVector (VECTOR* input, VECTOR* output, int relativeScale); // see a maths book for explanation // NOTE: as it stands, this gets LEFT_HANDED_SYSTEM normal // see two more functions below void GetCrossProduct (VECTOR* first, VECTOR* second, VECTOR* output); void GetLeftHandedNormal (VECTOR* first, VECTOR* second, VECTOR* output); void GetRightHandedNormal (VECTOR* first, VECTOR* second, VECTOR* output); int GetDotProduct (VECTOR* first, VECTOR* second); void SplitVectorInTwo (VECTOR* original, int firstPortion, VECTOR* firstPart, VECTOR* secondPart); void ResolveVector (VECTOR* original, VECTOR* resolver, VECTOR* parallelPart, VECTOR* orthogonalPart); int SizeOfVector2 (VECTOR *vector); void ScaleVectorToSize2 (VECTOR* vector, int size); long jbVectorMeasure(VECTOR *v0); #define VECTOR_H_INCLUDED 1 #endif