|
Sujet : [C/C++] Boules? Collisions? Vecteurs? |
| tgrx |
BENB> pas de pb, c'etait juste une remarque comme ca. Mais c'est vrai que moi aussi des fois je cede a la tentation et j'ecris des fonctions/classes hyper generales avec des templates a profusion, la STL a tout bout de champ... c sympa aussi :D |
| tgrx |
Cadeau : c le fichier que j'utilise tout le temps.
class Vector3d
{
public:
float x,y,z;
Vector3d(){}
Vector3d(float vx, float vy=0, float vz=0)
{
x=vx;y=vy;z=vz;
}
float operator * (const Vector3d & v1) const
{
return (x*v1.x+y*v1.y+z*v1.z);
}
friend Vector3d operator * (const float scalaire, const Vector3d & v);
friend Vector3d Modulate(const Vector3d & a, const Vector3d & b);
Vector3d normalized() const;
float xp () const {return x;}
float yp () const {return y;}
float zp () const {return z;}
Vector3d & operator *= (const float scalaire)
{
x*=scalaire;
y*=scalaire;
z*=scalaire;
return *this;
}
Vector3d & operator += (const Vector3d &v)
{
x+=v.x;
y+=v.y;
z+=v.z;
return *this; }
Vector3d & mult(const float scalaire)
{
x*=scalaire;
y*=scalaire;
z*=scalaire;
}
Vector3d operator + (Vector3d v) const
{
return v+=(*this);
}
Vector3d operator ^ (const Vector3d &v) const
{
return Vector3d(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x);
}
bool operator == (const Vector3d & v) const
{
return (x==v.x)&&(y==v.y)&&(z==v.z);
}
Vector3d & operator -= (const Vector3d &v)
{
x-=v.x;
y-=v.y;
z-=v.z;
return *this;
}
Vector3d operator - (const Vector3d &v) const
{
return Vector3d(x-v.x, y-v.y, z-v.z);
}
Vector3d & operator /= (float fact)
{
float oof=1.0/fact;
return (*this)*=oof;
}
Vector3d operator / (float fact)
{
float oof=1.0/fact;
return Vector3d(*this)*=oof;
}
float abs() const {return sqrtf(x*x+y*y+z*z);}
float absq() const {return x*x+y*y+z*z;}
/*C est pas joli comme nom, mais ça va plaire à certaines classes dérivées*/
void Translate(const Vector3d &v){(*this)+=v;}
Vector3d & Normalize()
{
return *this/=abs();
}
float MaxDist(const Vector3d & o) const
{
return max(max(fabsf(x-o.x), fabsf(y-o.y)),fabsf(z-o.z));
}
friend istream& operator >> (istream& in, Vector3d& v);
friend ostream& operator << (ostream& out, const Vector3d& v);
}; |