import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
public class color4v2 extends java.applet.Applet{
  Color col1,col2,col3;
  double piaw=3.14159265358979;
  int Naw;
  int takaaw,habaaw,orikaeshi;
  int kaw,iaw,jaw,i;
  String NS,habaS,takaS;
  double Nd,takad,habad,xx,yy,lto,th,xmax;
  public double dou(String dous){
    double dou1;
    dou1 = (Double.valueOf(dous)).doubleValue();
    return dou1;
  }
  public double randaw(){
    double rand1aw;
    rand1aw=Math.random();
    return rand1aw;
  }
  public void init(){
    col1=Color.black;
    col2=Color.yellow;
    col3=Color.white;
    takaS=getParameter("takap");
    habaS=getParameter("habap");
    NS=getParameter("Np");
    habad=dou(habaS);
    takad=dou(takaS);
    Nd=dou(NS);
    if(Nd==20){
      Nd=4+46*randaw();
    }
    habaaw=(int)habad;
    takaaw=(int)takad;
    Naw=(int)Nd;
  }
  double yStart[]=new double[500];
  double yEnd[]=new double[500];
  
  double x1aw[]=new double[100];
  double y1aw[]=new double[100];

  double xpois[]=new double[100];
  double ypois[]=new double[100];
  double xpoie[]=new double[100];
  double ypoie[]=new double[100];
  int poinum;

  double w1aw[]=new double[100];
  double x2aw[]=new double[100];
  double y2aw[]=new double[100];
  double w2aw[]=new double[100];
  int xaw[]=new int[100];
  int yaw[]=new int[100];
  int waw[]=new int[100];
  double saw[]=new double[100];
  String sssaw[]=new String[100];
  public double jouaw(double aaw,double baw){
    double jou1aw;
    jou1aw=Math.pow(aaw,baw);
    return jou1aw;
  }
  public double arcsinaw(double atasw){
    double artn1saw;
    artn1saw=Math.asin(atasw);
    return artn1saw;
  }
  public double artnaw(double ataw){
    double artn1aw;
    artn1aw=Math.atan(ataw);
    return artn1aw;
  }
  public double sainaw(double saiaw){
    double sain1aw;
    sain1aw=Math.sin(saiaw);
    return sain1aw;
  }
  public double kosaw(double kosainaw){
    double kos1aw;
    kos1aw=Math.cos(kosainaw);
    return kos1aw;
  }
  public double d(double d1,double d2,double d3,double d4){
    double dw;
    dw=jouaw(jouaw(d3-d1,2.0)+jouaw(d4-d2,2.0),0.5);
    return dw;
  }
  void heapaw(double he1aw[],double he2aw[],double he3aw[],int NNaw){
    int kkaw,kksaw,iiaw,jjaw,mmaw;
    double b1aw,b2aw,b3aw,c1aw,c2aw,c3aw;
    kksaw=(int)(NNaw/2);
    for(kkaw=kksaw;kkaw>=1;kkaw--){
      iiaw=kkaw;
      b1aw=he1aw[iiaw-1];b2aw=he2aw[iiaw-1];b3aw=he3aw[iiaw-1];
      while(2*iiaw<=NNaw){
        jjaw=2*iiaw;
        if(jjaw+1<=NNaw){
          if(he1aw[jjaw-1]<he1aw[jjaw]){
            jjaw++;
          }
        }
        if(he1aw[jjaw-1]<=b1aw){
          break;
        }
        he1aw[iiaw-1]=he1aw[jjaw-1];he2aw[iiaw-1]=he2aw[jjaw-1];he3aw[iiaw-1]=he3aw[jjaw-1];
        iiaw=jjaw;
      }//wend
      he1aw[iiaw-1]=b1aw;he2aw[iiaw-1]=b2aw;he3aw[iiaw-1]=b3aw;
    }//next kk
    for(mmaw=NNaw-1;mmaw>=1;mmaw--){
      c1aw=he1aw[mmaw];c2aw=he2aw[mmaw];c3aw=he3aw[mmaw];
      he1aw[mmaw]=he1aw[0];he2aw[mmaw]=he2aw[0];he3aw[mmaw]=he3aw[0];
      iiaw=1;
      while(2*iiaw<=mmaw){
        kkaw=2*iiaw;
        if(kkaw+1<=mmaw){
          if(he1aw[kkaw-1]<=he1aw[kkaw]){
            kkaw++;
          }
        }
        if(he1aw[kkaw-1]<=c1aw){
          break;
        }
        he1aw[iiaw-1]=he1aw[kkaw-1];he2aw[iiaw-1]=he2aw[kkaw-1];he3aw[iiaw-1]=he3aw[kkaw-1];
        iiaw=kkaw;
      }//wend
      he1aw[iiaw-1]=c1aw;he2aw[iiaw-1]=c2aw;he3aw[iiaw-1]=c3aw;
    }//next mm
  }
  public void paint(java.awt.Graphics g){
    int xI;
    double slope;
    double intercept;
    double r;
    double theta;
    double lR;
    int br;
    int brLine;
    brLine=(int)(2.0*randaw());


    g.setColor(col1);
    g.fillRect(1,1,habaaw,takaaw);

    int lN;
    int lll;

    lN=(int)(24+246*randaw());
    for(lll=0;lll<lN;lll++){
    Naw=(int)(4+46*randaw());

    xx=0.0;
    yy=0.0;
    g.setColor(col2);
    if(lll<10){
    for(kaw=1;kaw<=Naw;kaw++){
      x1aw[kaw-1]=randaw()*(habaaw-30)+15;
      y1aw[kaw-1]=randaw()*(takaaw-30)+15;

      xaw[kaw-1]=(int)(x1aw[kaw-1]+0.5);
      yaw[kaw-1]=(int)(y1aw[kaw-1]+0.5);
      w1aw[kaw-1]=arcsinaw((y1aw[kaw-1]-yy)/d(x1aw[kaw-1],y1aw[kaw-1],xx,yy))+piaw/2;
    }//kaw
    }else{//lll<10
    x1aw[0]=randaw()*(habaaw-30)+15;
    y1aw[0]=randaw()*(takaaw-30)+15;
    lR=100.0*randaw();
    for(kaw=2;kaw<=Naw;kaw++){

      br=0;
      while(br==0){
          r=lR*randaw();
          theta=piaw*randaw();
          x1aw[kaw-1]=x1aw[0]+Math.cos(theta)*r;
          y1aw[kaw-1]=y1aw[0]+Math.sin(theta)*r;
          if(x1aw[kaw-1]>0 && x1aw[kaw-1]<habaaw && y1aw[kaw-1]>0 && y1aw[kaw-1]<takaaw){
              br=1;
          }
      }
      xaw[kaw-1]=(int)(x1aw[kaw-1]+0.5);
      yaw[kaw-1]=(int)(y1aw[kaw-1]+0.5);
      w1aw[kaw-1]=arcsinaw((y1aw[kaw-1]-yy)/d(x1aw[kaw-1],y1aw[kaw-1],xx,yy))+piaw/2;
    }//kaw
    }//lll<10

    g.setColor(col3);
    heapaw(x1aw,y1aw,w1aw,Naw);
    for(kaw=1;kaw<=Naw;kaw++){
      x2aw[kaw-1]=x1aw[kaw-1];
      y2aw[kaw-1]=y1aw[kaw-1];
    }
    poinum=0;
    xmax=x1aw[Naw-1];
    th=piaw/2;
    orikaeshi=0;
    while(lto!=x2aw[0]){
      xx=x1aw[0];
      yy=y1aw[0];
      for(i=1;i<Naw;i++){
          w1aw[i]=arcsinaw((y1aw[i]-yy)/d(x1aw[i],y1aw[i],xx,yy))+piaw/2;
          if(x1aw[i]>xx){
              w1aw[i]=3*piaw/2-arcsinaw((y1aw[i]-yy)/d(x1aw[i],y1aw[i],xx,yy));
          }
          w1aw[i]=w1aw[i]+piaw;
          if(w1aw[i]>2*piaw){
              w1aw[i]=w1aw[i]-2*piaw;
          }
          if(orikaeshi==1){
              w1aw[i]=arcsinaw((y1aw[i]-yy)/d(x1aw[i],y1aw[i],xx,yy))+piaw/2;
              if(x1aw[i]>xx){
                  w1aw[i]=3*piaw/2-arcsinaw((y1aw[i]-yy)/d(x1aw[i],y1aw[i],xx,yy));
              }
              w1aw[i]=w1aw[i];//+piaw/2;
              if(w1aw[i]>2*piaw){
                  w1aw[i]=w1aw[i]-2*piaw;
              }
          }
      }//next i
      x1aw[0]=xx;
      y1aw[0]=yy;
      w1aw[0]=100.0;
      heapaw(w1aw,x1aw,y1aw,Naw);
      if(orikaeshi==0){
          if(brLine==0){
//              g.setColor(Color.white);
//              g.drawLine((int)xx,(int)yy,(int)x1aw[0],(int)y1aw[0]);
                xpois[poinum]=xx;
                ypois[poinum]=yy;
                xpoie[poinum]=x1aw[0];
                ypoie[poinum]=y1aw[0];
                poinum=poinum+1;
          }
          slope=(y1aw[0]-yy)/(x1aw[0]-xx);
          intercept=yy-slope*xx;
          for(xI=(int)xx;xI<=(int)x1aw[0];xI++){
              yStart[xI]=xI*slope+intercept;
          }
      }
      if(orikaeshi==1){
          if(brLine==0){
//              g.setColor(Color.white);
//              g.drawLine((int)xx,(int)yy,(int)x1aw[0],(int)y1aw[0]);
                xpois[poinum]=xx;
                ypois[poinum]=yy;
                xpoie[poinum]=x1aw[0];
                ypoie[poinum]=y1aw[0];
                poinum=poinum+1;
          }
          slope=(y1aw[0]-yy)/(x1aw[0]-xx);
          intercept=yy-slope*xx;
          for(xI=(int)x1aw[0];xI<=(int)xx;xI++){
              yEnd[xI]=xI*slope+intercept;
              if(lll%4==0){
                  g.setColor(Color.red);
              }
              if(lll%4==1){
                  g.setColor(Color.green);
              }
              if(lll%4==2){
                  g.setColor(Color.blue);
              }
              if(lll%4==3){
                  g.setColor(Color.black);
              }
              g.drawLine(xI,(int)yStart[xI],xI,(int)yEnd[xI]);
          }//xI
          if(brLine==0){
              g.setColor(Color.white);
              for(i=0;i<poinum;i++){
                  g.drawLine((int)xpois[i],(int)ypois[i],(int)xpoie[i],(int)ypoie[i]);
              }//i
          }
      }
      lto=x1aw[0];
      if(x1aw[0]==xmax){
          orikaeshi=1;
      }
      //th=th+w1aw[0];
    }//wend
    }//lll
    g.setColor(col2);
    g.drawString("N="+lN,15,15);
    if(brLine==0){
        g.drawString("With white lines",50,15);
    }else{
        g.drawString("With no lines",50,15);
    }
  }
}