/*===========================================================================*/ kvs::Real32 TetrahedralCell::volume() const { const kvs::Vec3 v01( BaseClass::coord(1) - BaseClass::coord(0) ); const kvs::Vec3 v02( BaseClass::coord(2) - BaseClass::coord(0) ); const kvs::Vec3 v03( BaseClass::coord(3) - BaseClass::coord(0) ); return kvs::Math::Abs( ( v01.cross( v02 ) ).dot( v03 ) ) * 0.166666f; }
/*===========================================================================*/ const Quaternion Quaternion::RotationQuaternion( kvs::Vec3 v0, kvs::Vec3 v1 ) { Quaternion q; v0.normalize(); v1.normalize(); kvs::Vec3 c = v0.cross( v1 ); float d = v0.x() * v1.x() + v0.y() * v1.y() + v0.z() * v1.z(); double s = std::sqrt( double( ( 1 + d ) * 2.0 ) ); q.x() = float( c.x() / s ); q.y() = float( c.y() / s ); q.z() = float( c.z() / s ); q.w() = float( s / 2.0 ); return q; }