# GLBasic forum

## Codesnippets => Math => Topic started by: bigsofty on 2007-Mar-28

Title: Vector Maths Library...
Post by: bigsofty on 2007-Mar-28

Code: (glbasic) [Select]
`// --------------------------------- //// Project: VectorLIB// Start: Wednesday, March 28, 2007// IDE Version: 4.132FUNCTION setup_veclib: //used TO normalize vectorGLOBAL vector_tol = 0.0001ENDFUNCTIONTYPE Tvector x y z magnitudeENDTYPEFUNCTION vector_calcMagnitude: vec AS Tvector //calc the magnitude of a vector AND stor in vector vec.magnitude=SQR(vec.x*vec.x + vec.y*vec.y + vec.z*vec.z)ENDFUNCTIONFUNCTION vector_normalize: vec AS Tvector    LOCAL m //normalize a vector so it's length = 1 AND apply tolerance based on our constant tolerance value m=SQR(SQR(vec.x*vec.x + vec.y*vec.y + vec.z*vec.z) ) IF m<= vector_tol THEN m=1 vec.x=vec.x/m vec.y=vec.y/m vec.z=vec.z/m IF ABS(vec.x) IF ABS(vec.y) IF ABS(vec.z)ENDFUNCTIONFUNCTION vector_reverse: vec AS Tvector //reverse a vector vec.x=-vec.x vec.y=-vec.y vec.z=-vec.zENDFUNCTIONFUNCTION vector_add AS Tvector: vec1 AS Tvector, vec2 AS Tvector //add two vectors together AND RETURN the resulting vector LOCAL result AS Tvector result.x=vec1.x+vec2.x result.y=vec1.y+vec2.y result.z=vec1.z+vec2.z RETURN resultENDFUNCTIONFUNCTION vector_subtract AS Tvector: vec1 AS Tvector, vec2 AS Tvector //subtract vec1 from vec2 AND RETURN the resulting vector LOCAL result AS Tvector result.x=vec1.x-vec2.x result.y=vec1.y-vec2.y result.z=vec1.z-vec2.z RETURN resultENDFUNCTIONFUNCTION vector_scalarMultiply AS Tvector: vec1 AS Tvector, scale //scalar multiplication of a vector with result returned AS new vector //used TO scale a vector by 'scale' LOCAL result AS Tvector result.x=vec1.x*scale result.y=vec1.y*scale result.z=vec1.z*scale RETURN resultENDFUNCTIONFUNCTION vector_scalarDivision AS Tvector: vec1 AS Tvector, scale //scalar division of a vector with result returned AS new vector //used TO scale a vector LOCAL result AS Tvector result.x=vec1.x/scale result.y=vec1.y/scale result.z=vec1.z/scale RETURN resultENDFUNCTIONFUNCTION vector_conjugate AS Tvector: vec1 AS Tvector //conjugate operator takes the negative of each vector component //can be used when subtracting one vector from another OR FOR //reversing the direction of a vector. //applying conjugate is the same AS reversing a vector //returns a new vector LOCAL result AS Tvector result.x=-vec1.x result.y=-vec1.y result.z=-vec1.z RETURN resultENDFUNCTIONFUNCTION vector_crossProduct AS Tvector: vec1 AS Tvector, vec2 AS Tvector //takes vec1 AND vec2 AND returns the cross product vec1 X vec2 //the cross product is a vector perpendicular TO both vec1 AND vec2 //this is the normal of 2 vectors LOCAL result AS Tvector result.x=(vec1.y*vec2.z) - (vec1.z*vec2.y) result.y=(vec1.z*vec2.x) - (vec1.x*vec2.z) result.z=(vec1.x*vec2.y) - (vec1.y*vec2.x) RETURN resultENDFUNCTIONFUNCTION vector_dotProduct: vec1 AS Tvector, vec2 AS Tvector //calculate AND RETURN the dot product of 2 vectors (distance) LOCAL result result=(vec1.x*vec2.x)+(vec1.y*vec2.y)+(vec1.z*vec2.z) RETURN resultENDFUNCTIONFUNCTION vector_tripleScalarProduct: vec1 AS Tvector, vec2 AS Tvector, vec3 AS Tvector //calculate the triple scalar FUNCTION AND RETURN it LOCAL result result=           vec1.x * ( (vec2.y*vec3.z ) - (vec2.z * vec3.y) ) result=result + ( vec1.y * ( (-vec2.x*vec3.z) + (vec2.z * vec3.x) ) ) result=result + ( vec1.z * ( ( vec2.x*vec3.y) + (vec2.y * vec3.x) ) ) RETURN resultENDFUNCTION`
Title: Vector Maths Library...
Post by: bigsofty on 2007-Mar-29
This library shows a bug in the 'jumps' window of the IDE.

When a return type is defined in the function name "FUNCTION vector_add AS Tvector:" the jump window shows the function name as "Tvector"... so in the case of this library there are six jumps all called "Tvector"... the actual jump works fine though.
Title: Vector Maths Library...
Post by: Kitty Hello on 2007-Mar-29
Doh! Thank you.
Title: Re: Vector Maths Library...
Post by: Hemlos on 2009-Jul-06
Code: (glbasic) [Select]
`IF ABS(vec.x) IF ABS(vec.y) IF ABS(vec.z)ENDFUNCTION`
This is in the first  normalize function, i dont think its right

Other than that, this library will be useful in making my flight simulator, possibly, later this year :)