void getTrackInfo() { // Get track length TVector3 fit_position(m_fit[m_track->iTrack].pars[0], m_fit[m_track->iTrack].pars[1], m_fit[m_track->iTrack].pars[2]); TVector3 unit_direction (TMath::Sin(m_fit[m_track->iTrack].pars[3])*TMath::Cos(m_fit[m_track->iTrack].pars[4]), TMath::Sin(m_fit[m_track->iTrack].pars[3])*TMath::Sin(m_fit[m_track->iTrack].pars[4]), TMath::Cos(m_fit[m_track->iTrack].pars[3])); float t_const = -1e-10; float x_point = fit_position.x() + t_const * unit_direction.x(); float y_point = fit_position.y() + t_const * unit_direction.y(); float z_point = fit_position.z() + t_const * unit_direction.z(); TVector3 initial_position(x_point, y_point, z_point); float min_distance = 1e+30; float max_distance = -1e+30; float distance = 0.0; for (unsigned int iPoint = 0; iPoint < m_fit[m_track->iTrack].npoints; iPoint++){ TVector3 position (m_track->x[iPoint], m_track->y[iPoint], m_track->z[iPoint]); TVector3 position_vect = position - initial_position; distance = unit_direction * position_vect; if (distance < min_distance) min_distance = distance; if (distance > max_distance) max_distance = distance; } m_fit[m_track->iTrack].length = max_distance - min_distance; // Get impact parameters // x=0 x=end y=0 y=end float end_positions[4] = {0.0, 250.*80., 0.0, 50.*336.}; for (int iPos = 0; iPos < 4; iPos++){ t_const = 0.0; if ( iPos < 2 ) t_const = (end_positions[iPos]-fit_position.X())/unit_direction.X(); else t_const = (end_positions[iPos]-fit_position.Y())/unit_direction.Y(); // it might need to change if ( iPos < 2 ) m_fit[m_track->iTrack].impact_pars[iPos] = y_point; else m_fit[m_track->iTrack].impact_pars[iPos] = x_point; } }
void Game::reset_playing() { playing = true; board = initial_position(); current_color = WHITE; }