import java.awt.*;
import java.applet.*;
import java.lang.*;
import java.util.*;

public class Orbita{

      private protected Graphics pict;
      private protected Color color;
      private protected int sudd,j;
      private protected double ecc,a,f0,f1,angle;     
      private protected Vettore vi,Fversd,Rversd;  
      private protected Satellite sun;

      public Orbita(Graphics img, Color color, int suddivisioni, double ecc, double dist, double anglei, double Anglei, Vettore vi, double angle,Vettore Rversd, Vettore Fversd,Satellite sun){
         
          this.a     = dist;
          this.pict  = img;
          this.sudd  = suddivisioni;
          this.ecc   = ecc;
          this.color = color;
          this.f0    = anglei;
          this.f1    = Anglei;
          this.vi    = vi;
          this.angle = angle;
          this.Rversd= Rversd;
          this.Fversd= Fversd;
          this.sun   = sun;

      }

      public void Draw(){

          pict.setColor(color);

           if( ( angle <= Math.PI/2 ) || ( angle >= 3*Math.PI/2 ) ){

             if( (vi.getDx()*Fversd.getDx()+vi.getDy()*Fversd.getDy())*(vi.getDx()*Rversd.getDx()+vi.getDy()*Rversd.getDy()) < 0 ){

              for(j=0; j<=2*sudd; j++){
               pict.drawLine(sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f0))*Math.cos(Math.PI*j/sudd)), sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f0))*Math.sin(Math.PI*j/sudd)), sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f0))*Math.cos(Math.PI*(j+1)/sudd)),sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f0))*Math.sin(Math.PI*(j+1)/sudd)));
              }

             }
             else{
              for(j=0; j<=2*sudd; j++){
            pict.drawLine(sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f1))*Math.cos(Math.PI*j/sudd)), sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f1))*Math.sin(Math.PI*j/sudd)), sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f1))*Math.cos(Math.PI*(j+1)/sudd)),sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f1))*Math.sin(Math.PI*(j+1)/sudd)));
              }
             }

           }
           else{

             if( (vi.getDx()*Fversd.getDx()+vi.getDy()*Fversd.getDy())*(vi.getDx()*Rversd.getDx()+vi.getDy()*Rversd.getDy()) < 0 ){
              for(j=0; j<=2*sudd; j++){
             pict.drawLine(sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f0))*Math.cos(Math.PI*j/sudd)), sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f0))*Math.sin(Math.PI*j/sudd)), sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f0))*Math.cos(Math.PI*(j+1)/sudd)),sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f0))*Math.sin(Math.PI*(j+1)/sudd)));
              }
             }
             else{
              for(j=0; j<=2*sudd; j++){
            pict.drawLine(sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f1))*Math.cos(Math.PI*j/sudd)), sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f1))*Math.sin(Math.PI*j/sudd)), sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f1))*Math.cos(Math.PI*(j+1)/sudd)),sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f1))*Math.sin(Math.PI*(j+1)/sudd)));
              }
             }

         }

      } 

      public void Clear(){

          pict.setColor(Color.black);
          for(j=0; j<=2*sudd; j++){

            pict.drawLine(sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f0))*Math.cos(Math.PI*j/sudd)), sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f0))*Math.sin(Math.PI*j/sudd)), sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f0))*Math.cos(Math.PI*(j+1)/sudd)),sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f0))*Math.sin(Math.PI*(j+1)/sudd)));

            pict.drawLine(sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f1))*Math.cos(Math.PI*j/sudd)), sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*j/sudd-f1))*Math.sin(Math.PI*j/sudd)), sun.getX()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f1))*Math.cos(Math.PI*(j+1)/sudd)),sun.getY()+5 + (int)(a*(1-ecc*ecc)/(1-ecc*Math.cos(Math.PI*(j+1)/sudd-f1))*Math.sin(Math.PI*(j+1)/sudd)));

         }

      }

      public void setParam(Graphics img, Color color, int suddivisioni, double ecc, double dist, double anglei, double Anglei, Vettore vi,double angle, Vettore Rversd,Vettore Fversd,Satellite sun){
         
          this.a    = dist;
          this.pict = img;
          this.sudd = suddivisioni;
          this.ecc = ecc;
          this.color = color;
          this.f0    = anglei;
          this.f1    = Anglei;
          this.vi    = vi;
          this.angle = angle;
          this.Rversd= Rversd;
          this.Fversd= Fversd;
          this.sun   = sun;

      }

}
