git-svn-id: https://reactphysics3d.googlecode.com/svn/trunk@327 92aac97c-a6ce-11dd-a772-7fcde58d38e6
This commit is contained in:
parent
decc06037a
commit
903e543695
|
@ -29,6 +29,13 @@ using namespace reactphysics3d;
|
||||||
// Constructor
|
// Constructor
|
||||||
Contact::Contact(Body* const body1, Body* const body2, const Vector3D& normal, double penetrationDepth, const Vector3D& point)
|
Contact::Contact(Body* const body1, Body* const body2, const Vector3D& normal, double penetrationDepth, const Vector3D& point)
|
||||||
:Constraint(body1, body2, 2, true), normal(normal), penetrationDepth(penetrationDepth), point(point) {
|
:Constraint(body1, body2, 2, true), normal(normal), penetrationDepth(penetrationDepth), point(point) {
|
||||||
|
body1Jacobian.changeSize(1,6);
|
||||||
|
body2Jacobian.changeSize(1,6);
|
||||||
|
auxJacobian.changeSize(nbAuxConstraints, 12);
|
||||||
|
auxLowerBounds.changeSize(nbAuxConstraints);
|
||||||
|
auxUpperBounds.changeSize(nbAuxConstraints);
|
||||||
|
auxErrorValues.changeSize(nbAuxConstraints);
|
||||||
|
|
||||||
body1Jacobian = Matrix(1, 6);
|
body1Jacobian = Matrix(1, 6);
|
||||||
body2Jacobian = Matrix(1, 6);
|
body2Jacobian = Matrix(1, 6);
|
||||||
auxJacobian = Matrix(nbAuxConstraints, 12);
|
auxJacobian = Matrix(nbAuxConstraints, 12);
|
||||||
|
|
|
@ -86,10 +86,8 @@ void PhysicsEngine::updateCollision() {
|
||||||
|
|
||||||
// While the time accumulator is not empty
|
// While the time accumulator is not empty
|
||||||
while(timer.getAccumulator() >= timer.getTimeStep().getValue()) {
|
while(timer.getAccumulator() >= timer.getTimeStep().getValue()) {
|
||||||
|
|
||||||
// Compute the collision detection
|
// Compute the collision detection
|
||||||
if (collisionDetection.computeCollisionDetection()) {
|
if (collisionDetection.computeCollisionDetection()) {
|
||||||
|
|
||||||
// TODO : Delete this ----------------------------------------------------------
|
// TODO : Delete this ----------------------------------------------------------
|
||||||
for (std::vector<Constraint*>::iterator it = world->getConstraintsBeginIterator(); it != world->getConstraintsEndIterator(); ++it) {
|
for (std::vector<Constraint*>::iterator it = world->getConstraintsBeginIterator(); it != world->getConstraintsEndIterator(); ++it) {
|
||||||
RigidBody* rigidBody1 = dynamic_cast<RigidBody*>((*it)->getBody1());
|
RigidBody* rigidBody1 = dynamic_cast<RigidBody*>((*it)->getBody1());
|
||||||
|
|
|
@ -27,7 +27,7 @@ using namespace reactphysics3d;
|
||||||
// Constructor without argument
|
// Constructor without argument
|
||||||
Matrix::Matrix()
|
Matrix::Matrix()
|
||||||
:nbRow(0), nbColumn(0) {
|
:nbRow(0), nbColumn(0) {
|
||||||
|
array = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Constructor of the class Matrix
|
// Constructor of the class Matrix
|
||||||
|
@ -123,6 +123,28 @@ Matrix::~Matrix() {
|
||||||
delete this->array;
|
delete this->array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Matrix::changeSize(uint newNbRows, uint newNbColumns) {
|
||||||
|
if (array) {
|
||||||
|
// Destruction of the dynamic array
|
||||||
|
for(int i=0; i<nbRow; ++i) {
|
||||||
|
delete array[i];
|
||||||
|
}
|
||||||
|
delete this->array;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the two dimensional dynamic array
|
||||||
|
array = new double*[newNbRows];
|
||||||
|
|
||||||
|
assert(array != 0); // Array pointer musn't be null
|
||||||
|
|
||||||
|
for(int i=0; i<newNbRows; ++i) {
|
||||||
|
array[i] = new double[newNbColumns];
|
||||||
|
}
|
||||||
|
|
||||||
|
nbColumn = newNbColumns;
|
||||||
|
nbRow = newNbRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Function that return the cofactor matrix by removing row i and column j
|
// Function that return the cofactor matrix by removing row i and column j
|
||||||
Matrix Matrix::getCofactor(int i, int j) const throw(std::invalid_argument) {
|
Matrix Matrix::getCofactor(int i, int j) const throw(std::invalid_argument) {
|
||||||
|
|
|
@ -66,6 +66,7 @@ class Matrix {
|
||||||
void fillInSubMatrix(unsigned int i, unsigned int j, const Matrix& subMatrix); // Fill in a sub-matrix of the current matrix with another matrix
|
void fillInSubMatrix(unsigned int i, unsigned int j, const Matrix& subMatrix); // Fill in a sub-matrix of the current matrix with another matrix
|
||||||
void initWithValue(double value); // Initialize all the matrix with the given value
|
void initWithValue(double value); // Initialize all the matrix with the given value
|
||||||
void display() const; // TO DELETE
|
void display() const; // TO DELETE
|
||||||
|
void changeSize(uint nbRows, uint nbColumns);
|
||||||
|
|
||||||
// --- Overloaded operators --- //
|
// --- Overloaded operators --- //
|
||||||
Matrix operator+(const Matrix& matrix2) const throw(MathematicsException); // Overloaded operator for addition
|
Matrix operator+(const Matrix& matrix2) const throw(MathematicsException); // Overloaded operator for addition
|
||||||
|
|
|
@ -26,7 +26,7 @@ using namespace reactphysics3d;
|
||||||
// Constructor without argument
|
// Constructor without argument
|
||||||
Vector::Vector()
|
Vector::Vector()
|
||||||
:nbComponent(0) {
|
:nbComponent(0) {
|
||||||
|
tab = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Constructor of the class Vector
|
// Constructor of the class Vector
|
||||||
|
@ -148,6 +148,20 @@ Vector Vector::crossProduct(const Vector& vector) const throw(MathematicsExcepti
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Vector::changeSize(uint newSize) {
|
||||||
|
if (tab) {
|
||||||
|
delete[] tab;
|
||||||
|
}
|
||||||
|
|
||||||
|
nbComponent = newSize;
|
||||||
|
tab = new double[nbComponent];
|
||||||
|
|
||||||
|
// Fill the array with the value of the vector
|
||||||
|
for (int i=0; i<nbComponent; ++i) {
|
||||||
|
tab[i] = 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Overloaded operator for addition
|
// Overloaded operator for addition
|
||||||
Vector Vector::operator+(const Vector& vector) const throw(MathematicsException) {
|
Vector Vector::operator+(const Vector& vector) const throw(MathematicsException) {
|
||||||
// Check the size of the two vectors
|
// Check the size of the two vectors
|
||||||
|
|
|
@ -164,17 +164,6 @@ inline Vector operator*(double number, const Vector& vector) {
|
||||||
return vector * number;
|
return vector * number;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Vector::changeSize(uint newSize) {
|
|
||||||
delete[] tab;
|
|
||||||
nbComponent = newSize;
|
|
||||||
tab = new double[nbComponent];
|
|
||||||
|
|
||||||
// Fill the array with the value of the vector
|
|
||||||
for (int i=0; i<nbComponent; ++i) {
|
|
||||||
tab[i] = 0.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // End of the ReactPhysics3D namespace
|
} // End of the ReactPhysics3D namespace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -73,7 +73,7 @@ inline void LCPSolver::setLambdaInit(const Vector& lambdaInit) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the maximum number of iterations
|
// Set the maximum number of iterations
|
||||||
void LCPSolver::setMaxIterations(uint maxIterations) {
|
inline void LCPSolver::setMaxIterations(uint maxIterations) {
|
||||||
assert(maxIterations > 0);
|
assert(maxIterations > 0);
|
||||||
this->maxIterations = maxIterations;
|
this->maxIterations = maxIterations;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user