coll2d: added bounding spheres to all Shapes

This commit is contained in:
martin
2011-02-01 16:13:06 +01:00
parent dd9f2773f5
commit 95e709ce3f
2 changed files with 38 additions and 6 deletions
+33 -4
View File
@@ -76,6 +76,7 @@ protected:
vector3d mVelocity;
float mAngle;
float mAngleVelocity;
float mBoundingRadius;
virtual void dummy() {
}
@@ -84,13 +85,15 @@ public:
mPosition (0., 0., 0.),
mVelocity (0., 0., 0.),
mAngle (0.),
mAngleVelocity (0.) {
mAngleVelocity (0.),
mBoundingRadius (0.) {
}
Shape (const Shape &shape):
mPosition (shape.mPosition),
mVelocity (shape.mVelocity),
mAngle (shape.mAngle),
mAngleVelocity (shape.mAngleVelocity)
mAngleVelocity (shape.mAngleVelocity),
mBoundingRadius (shape.mBoundingRadius)
{ }
virtual ~Shape () {};
@@ -123,6 +126,12 @@ public:
float getAngleVelocity () {
return mAngleVelocity;
}
void setBoundingRadius (float bounding_radius) {
mBoundingRadius = bounding_radius;
}
float getBoundingRadius () {
return mBoundingRadius;
}
virtual void doPrintType() {
std::cout << "Shape" << std::endl;
@@ -160,6 +169,7 @@ public:
}
mVertices = vertices;
updateBoundingRadius();
}
Polygon (const Polygon &polygon) : Shape (polygon) {
mVerticeCount = polygon.mVerticeCount;
@@ -167,6 +177,8 @@ public:
mVertices = new vector3d[mVerticeCount];
memcpy (mVertices, polygon.mVertices, sizeof (vector3d) * mVerticeCount);
mBoundingRadius = polygon.mBoundingRadius;
}
virtual ~Polygon () {
if (mFreeVertices == true && mVertices)
@@ -205,6 +217,7 @@ public:
std::cout << "mAngle = " << mAngle << std::endl;
std::cout << "mAngleVelocity = " << mAngleVelocity << std::endl;
std::cout << "mBoundingRadius = " << mBoundingRadius << std::endl;
}
unsigned int getVerticeCount () {
@@ -219,6 +232,20 @@ public:
void setVertice (unsigned int i, const vector3d &vertice) {
assert (i >= 0 && i < mVerticeCount);
mVertices[i] = vertice;
updateBoundingRadius();
}
void updateBoundingRadius () {
unsigned int i;
float max_vertice_dist2 = 0.;
for (i = 0; i < mVerticeCount; i++) {
float vertice_dist2 = mVertices[i].length2();
if (vertice_dist2 > max_vertice_dist2)
max_vertice_dist2 = vertice_dist2;
}
mBoundingRadius = sqrt (max_vertice_dist2);
}
friend int check_collision_polygon_sphere(Shape *polygon_a,
@@ -231,17 +258,20 @@ private:
public:
Sphere (float radius) {
mRadius = radius;
mBoundingRadius = radius;
Shape::setPosition (vector3d (0., 0., 0.));
}
Sphere(float radius, const vector3d &position) {
mRadius = radius;
mBoundingRadius = radius;
Shape::setPosition(position);
}
Sphere (const Sphere &sphere):
Shape (sphere),
mRadius (sphere.mRadius) { }
mRadius (sphere.mRadius)
{ mBoundingRadius = mRadius; }
virtual Sphere* getCopy() {
Sphere* copy = new Sphere (*this);
@@ -269,7 +299,6 @@ public:
std::cout << "mAngleVelocity = " << mAngleVelocity << std::endl;
}
void setRadius (float radius) {
mRadius = radius;
}