Author Topic: Vector Maths Library...  (Read 4520 times)

Offline bigsofty

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 2538
    • View Profile
Vector Maths Library...
« on: 2007-Mar-28 »
Could some kind soul add German language comments plz? :)

Code: GLBasic [Select]
// --------------------------------- //
// Project: VectorLIB
// Start: Wednesday, March 28, 2007
// IDE Version: 4.132


FUNCTION setup_veclib:
//used TO normalize vector
GLOBAL vector_tol = 0.0001
ENDFUNCTION

TYPE Tvector
        x
        y
        z
        magnitude
ENDTYPE

FUNCTION 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)
ENDFUNCTION

FUNCTION 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)<vector_tol THEN vec.x=0
        IF ABS(vec.y)<vector_tol THEN vec.y=0
        IF ABS(vec.z)<vector_tol THEN vec.z=0
ENDFUNCTION

FUNCTION vector_reverse: vec AS Tvector
        //reverse a vector
        vec.x=-vec.x
        vec.y=-vec.y
        vec.z=-vec.z
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION

FUNCTION 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 result
ENDFUNCTION
Cheers,

Ian.

“It is practically impossible to teach good programming style to students that have had prior exposure to BASIC.  As potential programmers, they are mentally mutilated beyond hope of regeneration.”
(E. W. Dijkstra)

Offline bigsofty

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 2538
    • View Profile
Vector Maths Library...
« Reply #1 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.
Cheers,

Ian.

“It is practically impossible to teach good programming style to students that have had prior exposure to BASIC.  As potential programmers, they are mentally mutilated beyond hope of regeneration.”
(E. W. Dijkstra)

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10661
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Vector Maths Library...
« Reply #2 on: 2007-Mar-29 »
Doh! Thank you.

Offline Hemlos

  • To boldy go where no pixel has gone before!
  • Global Moderator
  • Prof. Inline
  • *******
  • Posts: 1578
  • Particle Hawk
    • View Profile
Re: Vector Maths Library...
« Reply #3 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 :)
Volume_of_Earth(km^3) = 4/3*3.14*POW(6371.392896,3)