import sk.uniba.fmph.pocprak.simplegraphics.GrGraphics;
/**
 * Trieda reprezentujuca opticky tubus, teda valec okolo optickej osi vnutri ktoreho su vsetky
 * relevantne opticke povrchy
 */
public class Tubus {
  /**
   * polomer tubusu
   */
  double r;
  /**
   * suradnica zaciatku tubusu na optickej osi
   */
  public double xin;
  /**
   * suradnica konca tubusu na optickej osi
   */
  double xout;

  public Tubus(double r, double xin, double xout){
    this.r = r;
    this.xin = xin;
    this.xout = xout;
  }

  /**
   * skontroluje, ci aktualny bod b.p beamu sa nachadza v intervale optickej osi,
   * kde je tubus a ak ano, skontroluje ci bod b.p lezi vnutri tubusu.
   * Ak lezi, neurobi nic, ak nelezi, zmeni vektor sirenia beamu beam.dir na nulovy
   * cim efektivne beam pohlti
   * @param b Beam testovany beam
   */
  public void tubusEffect(Beam b){
    if((b.p.x<xin)||(b.p.x>xout)) return;
    if(Math.abs(b.p.y)<r) return;
    //beam sa nachadza von s tubusu, ma byt pohlteny
    b.dir.x=0; b.dir.y=0;
    return;
  }
  /**
   * Vykresli tubus v rovine s grafikou gr
   * @param gr GrGraphics
   */
  public void draw(GrGraphics gr){
    gr.drawLine2D(xin,r,xout,r);
    gr.drawLine2D(xin,-r,xout,-r);
    gr.drawLine2D(xin, r, xin, 100);
    gr.drawLine2D(xin, -r, xin, -100);
    gr.drawLine2D(xout, -r, xout, -100);
    gr.drawLine2D(xout, r, xout, 100);
  }
}
