Blender V2.61 - r43446

btGImpactMassUtil.h

Go to the documentation of this file.
00001 
00004 /*
00005 This source file is part of GIMPACT Library.
00006 
00007 For the latest info, see http://gimpact.sourceforge.net/
00008 
00009 Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
00010 email: projectileman@yahoo.com
00011 
00012 
00013 This software is provided 'as-is', without any express or implied warranty.
00014 In no event will the authors be held liable for any damages arising from the use of this software.
00015 Permission is granted to anyone to use this software for any purpose,
00016 including commercial applications, and to alter it and redistribute it freely,
00017 subject to the following restrictions:
00018 
00019 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
00020 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
00021 3. This notice may not be removed or altered from any source distribution.
00022 */
00023 
00024 
00025 #ifndef GIMPACT_MASS_UTIL_H
00026 #define GIMPACT_MASS_UTIL_H
00027 
00028 #include "LinearMath/btTransform.h"
00029 
00030 
00031 
00032 SIMD_FORCE_INLINE btVector3 gim_inertia_add_transformed(
00033     const btVector3 & source_inertia, const btVector3 & added_inertia, const btTransform & transform)
00034 {
00035     btMatrix3x3  rotatedTensor = transform.getBasis().scaled(added_inertia) * transform.getBasis().transpose();
00036 
00037     btScalar x2 = transform.getOrigin()[0];
00038     x2*= x2;
00039     btScalar y2 = transform.getOrigin()[1];
00040     y2*= y2;
00041     btScalar z2 = transform.getOrigin()[2];
00042     z2*= z2;
00043 
00044     btScalar ix = rotatedTensor[0][0]*(y2+z2);
00045     btScalar iy = rotatedTensor[1][1]*(x2+z2);
00046     btScalar iz = rotatedTensor[2][2]*(x2+y2);
00047 
00048     return btVector3(source_inertia[0]+ix,source_inertia[1]+iy,source_inertia[2] + iz);
00049 }
00050 
00051 SIMD_FORCE_INLINE btVector3 gim_get_point_inertia(const btVector3 & point, btScalar mass)
00052 {
00053     btScalar x2 = point[0]*point[0];
00054     btScalar y2 = point[1]*point[1];
00055     btScalar z2 = point[2]*point[2];
00056     return btVector3(mass*(y2+z2),mass*(x2+z2),mass*(x2+y2));
00057 }
00058 
00059 
00060 #endif //GIMPACT_MESH_SHAPE_H