00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "fob/vector.h"
00027
00029 const math::vector3 math::vector3::ZERO( 0.0, 0.0, 0.0 );
00030 const math::vector3 math::vector3::X_AXIS( 1.0, 0.0, 0.0 );
00031 const math::vector3 math::vector3::Y_AXIS( 0.0, 1.0, 0.0 );
00032 const math::vector3 math::vector3::Z_AXIS( 0.0, 0.0, 1.0 );
00033
00035 math::vector3
00036 math::operator* ( real_t lhs, const math::vector3& rhs )
00037 {
00038 return math::vector3( (rhs.m_data[ 0 ] * lhs),
00039 (rhs.m_data[ 1 ] * lhs),
00040 (rhs.m_data[ 2 ] * lhs)
00041 );
00042 }
00043
00045 std::ostream&
00046 math::operator<< ( std::ostream& o, const math::vector3& vec )
00047 {
00048 return o << vec.m_data[ 0 ] << " " << vec.m_data[ 1 ]
00049 << " " << vec.m_data[ 2 ];
00050 }
00051
00052
00054 math::vector3
00055 math::cross( const math::vector3& u, const math::vector3& v )
00056 {
00057 return math::vector3(
00058 u.m_data[ 1 ] * v.m_data[ 2 ] - u.m_data[ 2 ] * v.m_data[ 1 ],
00059 u.m_data[ 2 ] * v.m_data[ 0 ] - u.m_data[ 0 ] * v.m_data[ 2 ],
00060 u.m_data[ 0 ] * v.m_data[ 1 ] - u.m_data[ 1 ] * v.m_data[ 0 ]
00061 );
00062 }
00063
00065 void
00066 math::add( math::vector3& dest, const math::vector3& lhs,
00067 const math::vector3& rhs )
00068 {
00069 dest.m_data[ 0 ] = lhs.m_data[ 0 ] + rhs.m_data[ 0 ];
00070 dest.m_data[ 1 ] = lhs.m_data[ 1 ] + rhs.m_data[ 1 ];
00071 dest.m_data[ 2 ] = lhs.m_data[ 2 ] + rhs.m_data[ 2 ];
00072 }
00073
00075 void
00076 math::subtract( math::vector3& dest, const math::vector3& lhs,
00077 const math::vector3& rhs )
00078 {
00079 dest.m_data[ 0 ] = lhs.m_data[ 0 ] - rhs.m_data[ 0 ];
00080 dest.m_data[ 1 ] = lhs.m_data[ 1 ] - rhs.m_data[ 1 ];
00081 dest.m_data[ 2 ] = lhs.m_data[ 2 ] - rhs.m_data[ 2 ];
00082 }
00083
00085 void
00086 math::multiply( math::vector3& dest, const math::vector3& lhs,
00087 const math::vector3& rhs )
00088 {
00089 dest.m_data[ 0 ] = lhs.m_data[ 0 ] * rhs.m_data[ 0 ];
00090 dest.m_data[ 1 ] = lhs.m_data[ 1 ] * rhs.m_data[ 1 ];
00091 dest.m_data[ 2 ] = lhs.m_data[ 2 ] * rhs.m_data[ 2 ];
00092 }
00093
00095 void
00096 math::divide( math::vector3& dest, const math::vector3& lhs,
00097 const math::vector3& rhs )
00098 {
00099 dest.m_data[ 0 ] = lhs.m_data[ 0 ] / rhs.m_data[ 0 ];
00100 dest.m_data[ 1 ] = lhs.m_data[ 1 ] / rhs.m_data[ 1 ];
00101 dest.m_data[ 2 ] = lhs.m_data[ 2 ] / rhs.m_data[ 2 ];
00102 }
00103
00105 void
00106 math::multiply( math::vector3& dest, const math::vector3& lhs, real_t rhs )
00107 {
00108 dest.m_data[ 0 ] = lhs.m_data[ 0 ] * rhs;
00109 dest.m_data[ 1 ] = lhs.m_data[ 1 ] * rhs;
00110 dest.m_data[ 2 ] = lhs.m_data[ 2 ] * rhs;
00111 }
00112
00114 void
00115 math::multiply( math::vector3& dest, real_t lhs, const math::vector3& rhs )
00116 {
00117 dest.m_data[ 0 ] = rhs.m_data[ 0 ] * lhs;
00118 dest.m_data[ 1 ] = rhs.m_data[ 1 ] * lhs;
00119 dest.m_data[ 2 ] = rhs.m_data[ 2 ] * lhs;
00120 }
00121
00123 real_t
00124 math::dot( const math::vector3& lhs, const math::vector3& rhs )
00125 {
00126 return (
00127 (lhs.m_data[ 0 ] * rhs.m_data[ 0 ]) +
00128 (lhs.m_data[ 1 ] * rhs.m_data[ 1 ]) +
00129 (lhs.m_data[ 2 ] * rhs.m_data[ 2 ])
00130 );
00131 }
00132
00134 math::vector3
00135 math::vector3::lerp( real_t percent, const math::vector3& a,
00136 const math::vector3& b )
00137 {
00138 return a + percent * (b - a);
00139 }