Exemplo n.º 1
0
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; 
  } 
}
Exemplo n.º 2
0
void Game::reset_playing()
{
    playing = true;
    board = initial_position();
    current_color = WHITE;
}