Files
2025-09-18 17:55:52 -04:00

52 lines
1.0 KiB
C++

#include "stdafx.h"
#include "V8World/ParallelRampPoly.h"
#include "V8World/Mesh.h"
#include "V8World/GeometryPool.h"
#include "V8World/ParallelRampMesh.h"
#include "Util/Math.h"
namespace RBX {
void ParallelRampPoly::buildMesh()
{
Vector3 key = getSize();
aParallelRampMesh = ParallelRampMeshPool::getToken(key);
mesh = aParallelRampMesh->getMesh();
}
Matrix3 ParallelRampPoly::getMoment(float mass) const
{
Vector3 size = getSize();
float area = 2 * (size.x * size.y + size.y * size.z + size.z * size.x);
Vector3 I;
for (int i = 0; i < 3; i++) {
int j = (i + 1) % 3;
int k = (i + 2) % 3;
float x = size[i]; // main axis;
float y = size[j];
float z = size[k];
float Ix = (mass / (2.0f * area)) * ( (y*y*y*z/3.0f)
+ (y*z*z*z/3.0f)
+ (x*y*z*z)
+ (x*y*y*y/3.0f)
+ (x*y*y*z)
+ (x*z*z*z/3.0f) );
I[i] = Ix;
}
return Math::fromDiagonal(I);
}
Vector3 ParallelRampPoly::getCofmOffset( void ) const
{
return aParallelRampMesh->GetLocalCofMFromMesh();
}
} // namespace RBX