import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
public class voroar extends java.applet.Applet{
  Color col1,col2,col3;
  int N,label;
  int taka,haba;
  int k,i,j,l,mink,k00,k10,k01,k11;
  double kou1,kou2,kou3,kou4,kou5,kou6;
  double di2,di,cp2,cpx,ys,t,mind,pi,hs;
  double x0,y0,xx,yy,xa1=0,ya1=0,yy2;
  double di4,di3,cp3,cpx3,ys3,t2,ds,us;
  double y20,y21,sa0,sa1,sa2,sa3,sa4,sa5;
  int sa6,br,br2,u,k2;
  int xz,xz2,yz,yz2;
  String NS,habaS,takaS;
  double Nd,takad,habad;
  double kx[]=new double[100];
  double ky[]=new double[100];
  double kz[]=new double[100];
  public double dou(String dous){
    double dou1;
    dou1 = (Double.valueOf(dous)).doubleValue();
    return dou1;
  }
  public double rand(){
    double rand1;
    rand1=Math.random();
    return rand1;
  }
  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);
    haba=(int)habad;
    taka=(int)takad;
    N=(int)Nd;
    if(N==20){
      N=4+(int)(16*rand());
    }
  }
  public double arcsinaw(double atasw){
    double artn1saw;
    artn1saw=Math.asin(atasw);
    return artn1saw;
  }

  double w1[]=new double[100];
  double w2[]=new double[100];
  double w3[]=new double[100];

  double x1[]=new double[100];
  double y1[]=new double[100];


  double vx[][]=new double[100][100];
  double vy[][]=new double[100][100];
  double th1[][]=new double[100][100];
  double vmen[]=new double[100];

  int vi[]=new int[100];

  int x[]=new int[100];
  int y[]=new int[100];
  double s[]=new double[100];
  String sss[]=new String[100];
  public double jou(double a,double b){
    double jou1;
    jou1=Math.pow(a,b);
    return jou1;
  }
  void heapv(double te1[],double te2[],double te3[],int NN){
    int kk,kks,ii,jj,mm;
    double b1,b2,b3,c1,c2,c3;
    kks=(int)(NN/2);
    for(kk=kks;kk>=1;kk--){
      ii=kk;
      b1=te1[ii-1];b2=te2[ii-1];b3=te3[ii-1];
      while(2*ii<=NN){
        jj=2*ii;
        if(jj+1<=NN){
          if(te1[jj-1]<te1[jj]){
            jj++;
          }
        }
        if(te1[jj-1]<=b1){
          break;
        }
        te1[ii-1]=te1[jj-1];te2[ii-1]=te2[jj-1];te3[ii-1]=te3[jj-1];
        ii=jj;
      }//wend
      te1[ii-1]=b1;te2[ii-1]=b2;te3[ii-1]=b3;
    }//next kk
    for(mm=NN-1;mm>=1;mm--){
      c1=te1[mm];c2=te2[mm];c3=te3[mm];
      te1[mm]=te1[0];te2[mm]=te2[0];te3[mm]=te3[0];
      ii=1;
      while(2*ii<=mm){
        kk=2*ii;
        if(kk+1<=mm){
          if(te1[kk-1]<=te1[kk]){
            kk++;
          }
        }
        if(te1[kk-1]<=c1){
          break;
        }
        te1[ii-1]=te1[kk-1];te2[ii-1]=te2[kk-1];te3[ii-1]=te3[kk-1];
        ii=kk;
      }//wend
      te1[ii-1]=c1;te2[ii-1]=c2;te3[ii-1]=c3;
    }//next mm
  }
  public void paint(java.awt.Graphics g){
    pi=3.14159265358979323846263;
    g.setColor(col1);
    g.fillRect(1,1,haba,taka);
    g.setColor(col2);
    mind=9999.9;
    mink=9999;
    for(k=0;k<N;k++){
      x1[k]=rand()*(haba-30)+15;
      y1[k]=rand()*(taka-30)+15;
      x[k]=(int)(x1[k]+0.5);
      y[k]=(int)(y1[k]+0.5);
      s[k]=jou(x1[k]*x1[k]+y1[k]*y1[k],0.5);
      if(s[k]<mind){
          mind=s[k];
          mink=k;
      }
      g.fillOval(x[k]-2,y[k]-2,4,4);
    }
    k00=mink;

    mind=99999.9;
    mink=9999;
    for(k=0;k<N;k++){
      s[k]=jou((habad-x1[k])*(habad-x1[k])+y1[k]*y1[k],0.5);
      if(s[k]<mind){
          mind=s[k];
          mink=k;
      }
    }
    k10=mink;

    mind=99999.9;
    mink=9999;
    for(k=0;k<N;k++){
      s[k]=jou(x1[k]*x1[k]+(takad-y1[k])*(takad-y1[k]),0.5);
      if(s[k]<mind){
          mind=s[k];
          mink=k;
      }
    }
    k01=mink;

    mind=99999.9;
    mink=9999;
    for(k=0;k<N;k++){
      s[k]=jou((habad-x1[k])*(habad-x1[k])+(takad-y1[k])*(takad-y1[k]),0.5);
      if(s[k]<mind){
          mind=s[k];
          mink=k;
      }
    }
    k11=mink;

    g.drawLine(haba-150,10,haba-50,10);
    g.drawLine(haba-150,5,haba-150,15);
    g.drawLine(haba-100,5,haba-100,10);
    g.drawLine(haba-50,5,haba-50,15);
    g.drawString("0",haba-158,13);
    g.drawString("100",haba-48,13);
    g.setColor(col3);
    for(i=1;i<=N;i++){
      vi[i-1]=0;
      for(j=1;j<=N;j++){
       if(j!=i){
        br=0;
        di2=(y1[i-1]-y1[j-1])/(x1[i-1]-x1[j-1]);
        di=-1/di2;
        cp2=(y1[i-1]+y1[j-1])/2;
        cpx=(x1[i-1]+x1[j-1])/2;
        ys=cp2-cpx*di;
        t=jou(x1[i-1]-x1[j-1],2)+jou(y1[i-1]-y1[j-1],2);
        if(ys>0 && ys<taka){
          x0=0;y0=ys;
        }
        else{
          if(di>0){
            x0=-ys/di;y0=0;
          }
          else{
            x0=(taka-ys)/di;
            y0=taka;
          }
        }
        yy=di*haba+ys;
        if(yy>0 && yy<taka){
          xa1=haba;ya1=yy;
        }
        else{
          if(di>0){
            xa1=(taka-ys)/di;ya1=taka;
          }
          else{
            xa1=-ys/di;
            ya1=0;
          }
        }
        l=1;
        kx[l-1]=x0;ky[l-1]=y0;
        sa2=x1[j-1]-x1[i-1];
        sa4=y1[j-1]-y1[i-1];
        for(k=1;k<=N;k++){
          if(k!=i && k!=j){
            di4=(y1[i-1]-y1[k-1])/(x1[i-1]-x1[k-1]);
            di3=-1/di4;
            cp3=(y1[i-1]+y1[k-1])/2;
            cpx3=(x1[i-1]+x1[k-1])/2;
            ys3=cp3-cpx3*di3;
            t2=jou(x1[i-1]-x1[k-1],2)+jou(y1[i-1]-y1[k-1],2);
            y20=di3*x0+ys3;
            y21=di3*xa1+ys3;
            sa0=y0-y20;
            sa1=ya1-y21;
            sa3=x1[k-1]-x1[i-1];
            sa5=y1[k-1]-y1[i-1];
            if(sa2*sa3>0 && sa4*sa5>0){
              sa6=1;
            }
            else{
              sa6=0;
            }
            if(sa0*sa1>0 && t>t2 && sa6==1){
              br=1;
              break;
            }
            if(sa0*sa1<0 || t<t2 || sa6!=0){
              if(sa0*sa1<0 || t>t2){
                l++;
                kx[l-1]=(ys3-ys)/(di-di3);
                ky[l-1]=di*kx[l-1]+ys;
              }
            }
          }//if(k!=i && k!=j)
        }//next k
        if(br==0){
          l++;
          kx[l-1]=xa1;
          ky[l-1]=ya1;
          for(u=1;u<=l;u++){
            kz[u-1]=0;
          }
          heapv(kx,ky,kz,l);
          for(k=1;k<=l-1;k++){
            k2=k+1;
            xx=(kx[k-1]+kx[k2-1])/2;
            yy2=di*xx+ys;
            ds=jou(xx-x1[i-1],2)+jou(yy2-y1[i-1],2);
            br2=0;
            for(u=1;u<=N;u++){
              if(u!=i && u!=j){
                us=jou(xx-x1[u-1],2)+jou(yy2-y1[u-1],2);
                if(us<ds){
                  br2=1;
                  break;
                }
              }
            }//next u
            if(br2==0){
              xz=(int)(kx[k-1]+0.5);
              xz2=(int)(kx[k2-1]+0.5);
              yz=(int)(ky[k-1]+0.5);
              yz2=(int)(ky[k2-1]+0.5);
              label=0;
              for(u=1;u<=vi[i-1];u++){
                  if((vx[i-1][u-1]-kx[k-1])*(vx[i-1][u-1]-kx[k-1])+(vy[i-1][u-1]-ky[k-1])*(vy[i-1][u-1]-ky[k-1])<0.1){
                      label=1;
                  }
              }
              if(label==0){
                  vi[i-1]++;
                  vx[i-1][vi[i-1]-1]=kx[k-1];
                  vy[i-1][vi[i-1]-1]=ky[k-1];
                  th1[i-1][vi[i-1]-1]=arcsinaw((ky[k-1]-y1[i-1])/jou((kx[k-1]-x1[i-1])*(kx[k-1]-x1[i-1])+(ky[k-1]-y1[i-1])*(ky[k-1]-y1[i-1]),0.5))+pi/2;
                  if(kx[k-1]>x1[i-1]){
                      th1[i-1][vi[i-1]-1]=3*pi/2-arcsinaw((ky[k-1]-y1[i-1])/jou((kx[k-1]-x1[i-1])*(kx[k-1]-x1[i-1])+(ky[k-1]-y1[i-1])*(ky[k-1]-y1[i-1]),0.5));
                  }
              }
              label=0;
              for(u=1;u<=vi[i-1];u++){
                  if((vx[i-1][u-1]-kx[k2-1])*(vx[i-1][u-1]-kx[k2-1])+(vy[i-1][u-1]-ky[k2-1])*(vy[i-1][u-1]-ky[k2-1])<0.1){
                      label=1;
                  }
              }
              if(label==0){
                  vi[i-1]++;
                  vx[i-1][vi[i-1]-1]=kx[k2-1];
                  vy[i-1][vi[i-1]-1]=ky[k2-1];
                  th1[i-1][vi[i-1]-1]=arcsinaw((ky[k2-1]-y1[i-1])/jou((kx[k2-1]-x1[i-1])*(kx[k2-1]-x1[i-1])+(ky[k2-1]-y1[i-1])*(ky[k2-1]-y1[i-1]),0.5))+pi/2;
                  if(kx[k-1]>x1[i-1]){
                      th1[i-1][vi[i-1]-1]=3*pi/2-arcsinaw((ky[k2-1]-y1[i-1])/jou((kx[k2-1]-x1[i-1])*(kx[k2-1]-x1[i-1])+(ky[k2-1]-y1[i-1])*(ky[k2-1]-y1[i-1]),0.5));
                  }
              }
              g.setColor(col3);
              g.drawLine(xz,yz,xz2,yz2);
              break;
            }//if br2==0
          }//next k
        }//if br==0
       }//j!=i
      }//next j
      g.setColor(col2);
      if(i==k00+1){
          vi[i-1]++;
          vx[i-1][vi[i-1]-1]=0.0;
          vy[i-1][vi[i-1]-1]=0.0;
          th1[i-1][vi[i-1]-1]=arcsinaw((0.0-y1[i-1])/jou((0.0-x1[i-1])*(0.0-x1[i-1])+(0.0-y1[i-1])*(0.0-y1[i-1]),0.5))+pi/2;
          if(0.0>x1[i-1]){
              th1[i-1][vi[i-1]-1]=3*pi/2-arcsinaw((0.0-y1[i-1])/jou((0.0-x1[i-1])*(0.0-x1[i-1])+(0.0-y1[i-1])*(0.0-y1[i-1]),0.5));
          }
      }
      if(i==k10+1){
          vi[i-1]++;
          vx[i-1][vi[i-1]-1]=habad;
          vy[i-1][vi[i-1]-1]=0.0;
          th1[i-1][vi[i-1]-1]=arcsinaw((0.0-y1[i-1])/jou((habad-x1[i-1])*(habad-x1[i-1])+(0.0-y1[i-1])*(0.0-y1[i-1]),0.5))+pi/2;
          if(habad>x1[i-1]){
              th1[i-1][vi[i-1]-1]=3*pi/2-arcsinaw((0.0-y1[i-1])/jou((habad-x1[i-1])*(habad-x1[i-1])+(0.0-y1[i-1])*(0.0-y1[i-1]),0.5));
          }
      }
      if(i==k01+1){
          vi[i-1]++;
          vx[i-1][vi[i-1]-1]=0.0;
          vy[i-1][vi[i-1]-1]=takad;
          th1[i-1][vi[i-1]-1]=arcsinaw((takad-y1[i-1])/jou((0.0-x1[i-1])*(0.0-x1[i-1])+(takad-y1[i-1])*(takad-y1[i-1]),0.5))+pi/2;
          if(0.0>x1[i-1]){
              th1[i-1][vi[i-1]-1]=3*pi/2-arcsinaw((takad-y1[i-1])/jou((0.0-x1[i-1])*(0.0-x1[i-1])+(takad-y1[i-1])*(takad-y1[i-1]),0.5));
          }
      }
      if(i==k11+1){
          vi[i-1]++;
          vx[i-1][vi[i-1]-1]=habad;
          vy[i-1][vi[i-1]-1]=takad;
          th1[i-1][vi[i-1]-1]=arcsinaw((takad-y1[i-1])/jou((habad-x1[i-1])*(habad-x1[i-1])+(takad-y1[i-1])*(takad-y1[i-1]),0.5))+pi/2;
          if(habad>x1[i-1]){
              th1[i-1][vi[i-1]-1]=3*pi/2-arcsinaw((takad-y1[i-1])/jou((habad-x1[i-1])*(habad-x1[i-1])+(takad-y1[i-1])*(takad-y1[i-1]),0.5));
          }
      }
      for(j=0;j<vi[i-1];j++){
          w1[j]=th1[i-1][j];
          w2[j]=vx[i-1][j];
          w3[j]=vy[i-1][j];
      }
      heapv(w1,w2,w3,vi[i-1]);
      for(j=0;j<vi[i-1];j++){
          th1[i-1][j]=w1[j];
          vx[i-1][j]=w2[j];
          vy[i-1][j]=w3[j];
//          g.drawLine(x[i-1],y[i-1],(int)vx[i-1][j],(int)vy[i-1][j]);
      }
      vmen[i-1]=0;
      for(j=0;j<vi[i-1]-1;j++){
          kou1=jou((x1[i-1]-vx[i-1][j])*(x1[i-1]-vx[i-1][j])+(y1[i-1]-vy[i-1][j])*(y1[i-1]-vy[i-1][j]),0.5);
          kou2=jou((x1[i-1]-vx[i-1][j+1])*(x1[i-1]-vx[i-1][j+1])+(y1[i-1]-vy[i-1][j+1])*(y1[i-1]-vy[i-1][j+1]),0.5);
          kou3=jou((vx[i-1][j+1]-vx[i-1][j])*(vx[i-1][j+1]-vx[i-1][j])+(vy[i-1][j+1]-vy[i-1][j])*(vy[i-1][j+1]-vy[i-1][j]),0.5);
          hs=(kou1+kou2+kou3)/2.0;
          kou4=hs-jou((x1[i-1]-vx[i-1][j])*(x1[i-1]-vx[i-1][j])+(y1[i-1]-vy[i-1][j])*(y1[i-1]-vy[i-1][j]),0.5);
          kou5=hs-jou((x1[i-1]-vx[i-1][j+1])*(x1[i-1]-vx[i-1][j+1])+(y1[i-1]-vy[i-1][j+1])*(y1[i-1]-vy[i-1][j+1]),0.5);
          kou6=hs-jou((vx[i-1][j+1]-vx[i-1][j])*(vx[i-1][j+1]-vx[i-1][j])+(vy[i-1][j+1]-vy[i-1][j])*(vy[i-1][j+1]-vy[i-1][j]),0.5);
          vmen[i-1]=vmen[i-1]+jou((hs*kou4*kou5*kou6),0.5);
      }//j
      kou1=jou((x1[i-1]-vx[i-1][0])*(x1[i-1]-vx[i-1][0])+(y1[i-1]-vy[i-1][0])*(y1[i-1]-vy[i-1][0]),0.5);
      kou2=jou((x1[i-1]-vx[i-1][vi[i-1]-1])*(x1[i-1]-vx[i-1][vi[i-1]-1])+(y1[i-1]-vy[i-1][vi[i-1]-1])*(y1[i-1]-vy[i-1][vi[i-1]-1]),0.5);
      kou3=jou((vx[i-1][0]-vx[i-1][vi[i-1]-1])*(vx[i-1][0]-vx[i-1][vi[i-1]-1])+(vy[i-1][0]-vy[i-1][vi[i-1]-1])*(vy[i-1][0]-vy[i-1][vi[i-1]-1]),0.5);
      hs=(kou1+kou2+kou3)/2.0;
      kou4=hs-jou((x1[i-1]-vx[i-1][0])*(x1[i-1]-vx[i-1][0])+(y1[i-1]-vy[i-1][0])*(y1[i-1]-vy[i-1][0]),0.5);
      kou5=hs-jou((x1[i-1]-vx[i-1][vi[i-1]-1])*(x1[i-1]-vx[i-1][vi[i-1]-1])+(y1[i-1]-vy[i-1][vi[i-1]-1])*(y1[i-1]-vy[i-1][vi[i-1]-1]),0.5);
      kou6=hs-jou((vx[i-1][0]-vx[i-1][vi[i-1]-1])*(vx[i-1][0]-vx[i-1][vi[i-1]-1])+(vy[i-1][0]-vy[i-1][vi[i-1]-1])*(vy[i-1][0]-vy[i-1][vi[i-1]-1]),0.5);
      vmen[i-1]=vmen[i-1]+jou((hs*kou4*kou5*kou6),0.5);
      g.drawString(""+(int)vmen[i-1],x[i-1],y[i-1]);
    }//next i
    g.drawString("N="+N,15,15);
  }
}