00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _VECTOR_HXX
00028 #define _VECTOR_HXX
00029
00030
00031 #ifndef __cplusplus
00032 # error This library requires C++
00033 #endif
00034
00035 #include <simgear/compiler.h>
00036
00037 #include <plib/sg.h>
00038
00039
00046 void sgProjection(sgVec3 p, const sgVec3 u, const sgVec3 d);
00047 void sgProjection(sgdVec3 p, const sgdVec3 u, const sgdVec3 d);
00048
00049
00057 inline void sgmap_vec_onto_cur_surface_plane( sgVec3 normal,
00058 sgVec3 v0,
00059 sgVec3 vec,
00060 sgVec3 result )
00061 {
00062 sgVec3 u1, v, tmp;
00063
00064
00065
00066
00067
00068
00069
00070
00071 sgScaleVec3( u1,
00072 normal,
00073 ( sgScalarProductVec3(normal, vec) /
00074 sgScalarProductVec3(normal, normal)
00075 )
00076 );
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 sgAddVec3(tmp, v0, vec);
00088 sgSubVec3(v, tmp, u1);
00089
00090
00091
00092
00093
00094
00095
00096 sgSubVec3(result, v, v0);
00097
00098
00099 }
00100
00101
00107 inline void sgCopyNegateVec4( sgVec4 dst, sgVec4 src )
00108 {
00109 dst [ 0 ] = -src [ 0 ] ;
00110 dst [ 1 ] = -src [ 1 ] ;
00111 dst [ 2 ] = -src [ 2 ] ;
00112 dst [ 3 ] = -src [ 3 ] ;
00113 }
00114
00123 void sgClosestPointToLine( sgVec3 p1, const sgVec3 p, const sgVec3 p0,
00124 const sgVec3 d );
00125
00134 void sgdClosestPointToLine( sgdVec3 p1, const sgdVec3 p, const sgdVec3 p0,
00135 const sgdVec3 d );
00136
00146 double sgClosestPointToLineDistSquared( const sgVec3 p, const sgVec3 p0,
00147 const sgVec3 d );
00148
00158 double sgdClosestPointToLineDistSquared( const sgdVec3 p, const sgdVec3 p0,
00159 const sgdVec3 d );
00160
00170 void sgPostMultMat4ByTransMat4( sgMat4 src, const sgVec3 trans );
00171
00172
00173 #endif // _VECTOR_HXX
00174
00175