import sk.uniba.fmph.pocprak.simplegraphics.*;
import java.awt.Color;
public class Ukazka {
  public static void main(String[] args) {
    GrGraphics gr = SimpleGraphics.CreateGrEnvironment();
    gr.setBasePoint(gr.CENTER);
    gr.setUserFrameSize(0.,0.,5.,3.);//definicia suradnic stredu a laveho horneho rohu
    OpticalSurface os[] = new OpticalSurface[5];//pole do ktoreho sa ulozia opticke plochy
    os[0] = new Infinity(Infinity.LEFT);//formalna rovina v lavom nekonecne
    os[1] = new OptSfera(0.,3.,1.,2.);//sfera s vrcholom v bode 0, polomerom
                                      //krivosti 3, index lomu pred nou je 1 za nou je 2
    os[2] = new OptSfera(0.8,-3,2.,1.);//sfera s rcholom v bode 0.8, polomerom -3
    //zaporne znamienko znamena ze sfera je duta, so stredom vlavo od vrcholu
    //index lomu pred nou je 2, za nou je 1
    os[3] = new Tienidlo(5.);//tienidlo v polohe 5
    os[4]=  new Infinity(Infinity.RIGHT);//formalna rovina v pravom nekonecne
    Tubus tbs = new Tubus(0.5,-0.3,3.);//tubus s polomerom otvoru 0.5, 
    //vstupny otvor  je v polohe -0.3, koniec tubusu v bode 3
    OpticalSystem o = new OpticalSystem(os,tbs);//definicia optickeho systemu pomocou 
    //preddeklarovanych optickych ploch a tubusu
    gr.setPaint(Color.green);
    o.draw(gr);
    gr.repaint();
    gr.setPaint(Color.black);
    point a = new point(-4.5,0);//bod z ktorehop budu vychadzat luce
    double dt =0.001;//dlzka kroku v parametri t pre vykreslovanie lucov

    for(int ib=0;ib<10;ib++){
      double yb =-1. +ib*0.2;
      Beam b= new Beam(a, new point(0,yb),1);//luc vychadzajuci z bodu a smerujuci do bodu
                            //(0,yb) taky ze mu na ceste lezi opticka plocha s indexom 1
      for(int i=0;i<10000;i++){
        point oldp = new point(b.p);//zapamata si bod, do ktoreho uz dorazil beam pre ucely buduceho kreslenia
        b.move(dt,o);//posunie luc o kusok
        b.draw(oldp,gr);//nakresli usek luca od bodu oldpoint po novy bod b.p
        gr.repaint();
      }
    }
    a = new point(-4.5,0.5);  //dalsi bod z ktoreho budu vychadzju luce
    gr.setPaint(Color.red);
    for(int ib=0;ib<10;ib++){
      double yb =-0.2 +ib*0.04;
      Beam b= new Beam(a, new point(0,yb),1);
      for(int i=0;i<10000;i++){
        point oldp= new point(b.p);  
        b.move(dt,o);
        b.draw(oldp,gr);
        gr.repaint();
      }
    }



  }
}
