From af34bad8b39e95276b0d4e08ccdc26f89df2d2ec Mon Sep 17 00:00:00 2001 From: Ian C Date: Thu, 19 Aug 2010 13:24:37 +0000 Subject: Updates to maths and added the use of a 3D vector. --- mass.cpp | 79 +++++++++++++++++++--------------------------------------------- 1 file changed, 23 insertions(+), 56 deletions(-) (limited to 'mass.cpp') diff --git a/mass.cpp b/mass.cpp index 20f932c..95a76f9 100644 --- a/mass.cpp +++ b/mass.cpp @@ -41,10 +41,6 @@ Mass::Mass() m_y=0.0; m_z=0.0; - m_dx=0.0; - m_dy=0.0; - m_dz=0.0; - m_r=1.0; m_g=1.0; m_b=1.0; @@ -69,9 +65,10 @@ Mass::Mass() Mass::Mass(const string& name, double mass, double scale, - double posx, double posy, double posz, - double dx, double dy, double dz, - GLfloat r, GLfloat g, GLfloat b, double rot, int shield) + double posx, double posy, double posz, + double dx, double dy, double dz, + GLfloat r, GLfloat g, GLfloat b, double rot, int shield) + : m_delta(dx, dy, dz) { m_name=name; @@ -83,10 +80,6 @@ Mass::Mass(const string& name, double mass, double scale, m_y=posy; m_z=posz; - m_dx=dx; - m_dy=dy; - m_dz=dz; - m_r=r; m_g=g; m_b=b; @@ -128,8 +121,8 @@ Mass::~Mass() // ---------------------------------------- PUBLIC MEMBERS // void Mass::setRing(double from, double to, - GLfloat r, GLfloat g, GLfloat b, GLfloat alpha, - double rot, double ang) + GLfloat r, GLfloat g, GLfloat b, GLfloat alpha, + double rot, double ang) { m_ring=true; m_ring_from=from; @@ -217,9 +210,9 @@ void Mass::getPreviousPosition(double& x, double& y, double& z) const void Mass::getDelta(double& dx, double& dy, double& dz) const { - dx=m_dx; - dy=m_dy; - dz=m_dz; + dx = m_delta.dx(); + dy = m_delta.dy(); + dz = m_delta.dz(); } @@ -235,9 +228,8 @@ void Mass::reset(double mass, double dx, double dy, double dz) { m_mass=mass; calcSize(); - m_dx=dx; - m_dy=dy; - m_dz=dz; + + m_delta.Set(dx, dy, dz); if (m_mass<=0.0) { @@ -296,39 +288,13 @@ bool Mass::calcAttraction(Mass& m, double gr_const) collide=false; } - // ga=((gr_const*m.m_mass)*(gr_const*m_mass))/(dist*gr_const); + ga = gr_const * (m.m_mass / (dist * dist)); - ga=gr_const * (m_mass / dist); - - if (m_xm.m_x) - { - m_dx-=ga/(m_mass/dx); - } + force.SetLength(ga); - if (m_ym.m_y) - { - m_dy-=ga/(m_mass/dy); - } - - if (m_zm.m_z) - { - m_dz-=ga/(m_mass/dz); - } + m_delta.Add(force); return collide && !m_massless; } @@ -340,9 +306,9 @@ void Mass::move() m_prevy=m_y; m_prevz=m_z; - m_x+=m_dx; - m_y+=m_dy; - m_z+=m_dz; + m_x+=m_delta.dx(); + m_y+=m_delta.dy(); + m_z+=m_delta.dz(); m_ang+=m_rot; m_ring_ang+=m_ring_rot; @@ -462,9 +428,9 @@ void Mass::draw(bool solid, bool texture, Mass::DrawItem item) const // double Mass::calcDistance2(Mass& m, double& dx, double& dy, double& dz) { - dx=abs(m_x-m.m_x); - dy=abs(m_y-m.m_y); - dz=abs(m_z-m.m_z); + dx = m.m_x-m_x; + dy = m.m_y-m_y; + dz = m.m_z-m_z; return sqrt((dx*dx)+(dy*dy)+(dz*dz)); } @@ -489,7 +455,8 @@ ostream& operator<<(ostream& os, const Mass& m) os << "Name " << m.m_name << " (mass " << m.m_mass << ", size " << m.m_size << ", shield " << m.m_shield << ")" << endl << " P (" << m.m_x << ", " << m.m_y << ", " << m.m_z << ")" << endl - << " D (" << m.m_dx << ", " << m.m_dy << ", " << m.m_dz << ")" << endl + << " D (" << m.m_delta.dx() << ", " << m.m_delta.dy() + << ", " << m.m_delta.dz() << ")" << endl << " R (" << m.m_rot << ", " << m.m_ang << ")" << endl << " T (" << m.m_textured << ", " << m.m_texture_id << ")" << endl << " Ring (" << m.m_ring << ", " << m.m_ring_from -- cgit v1.2.3