import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
import java.awt.*;
public class fnearcli extends java.applet.Applet{
  Point[] p = new Point[100];
  Color col1,col2;
  int N,taka,haba,ni,nj,n;
  int k,i,j,l,co,minj,minj2,minj3;
  double di2,di,cp2,cpx,ys,t,dd,mind,mind2,mind3;
  double x0,y0,xx,yy,xa1=0,ya1=0,yy2,pi;
  double di4,di3,cp3,cpx3,ys3,t2,ds,us;
  double y20,y21,sa0,sa1;
  int br,br2,u,k2;
  int xz,xz2,yz,yz2,label;
  String NS,habaS,takaS;
  double Nd,takad,habad,th;
  Color cl[]=new Color[13];
  double kx[]=new double[100];
  double ky[]=new double[100];
  double kz[]=new double[100];

  int ncv[]=new int[100];
  int cv[][]=new int[100][100];

  double ei[]=new double[100];
  double ej[]=new double[100];
  double ed[]=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.pink;
    cl[0]=Color.yellow;
    cl[1]=Color.cyan;
    cl[2]=Color.green;
    takaS=getParameter("takap");
    habaS=getParameter("habap");
    NS=getParameter("Np");
    habad=dou(habaS);
    takad=dou(takaS);
    Nd=dou(NS);
    if(Nd==20){
      Nd=4+26*rand();
    }
    haba=(int)habad;
    taka=(int)takad;
    N=(int)Nd;
  }
  double x1[]=new double[100];
  double y1[]=new double[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;
  }
  public double arcsinaw(double atasw){
    double artn1saw;
    artn1saw=Math.asin(atasw);
    return artn1saw;
  }
  public double d(double d1,double d2,double d3,double d4){
    double dw;
    dw=jou(jou(d3-d1,2.0)+jou(d4-d2,2.0),0.5);
    return dw;
  }
  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.14159265358979;
    g.setColor(col1);
    g.fillRect(1,1,haba,taka);
    g.setColor(col2);
    Point old,current;
    N=n;
    for(k=0;k<N;k++){
      x1[k]=p[k].x+Math.cos(k*1.1)+k*0.0001;
      y1[k]=p[k].y+Math.sin(k*1.1)+k*0.001;
      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);
      g.fillOval(x[k]-5,y[k]-5,10,10);
    }
    heapv(s,x1,y1,N);
    for(i=0;i<N;i++){
        mind=0.0;
        minj=9999;
        for(j=0;j<N;j++){
            if(j!=i){
                dd=jou(jou(x1[i]-x1[j],2.0)+jou(y1[i]-y1[j],2.0),0.5);
                if(dd>mind){
                    mind=dd;
                    minj=j;
                }
            }//j!=i
        }//j
        g.setColor(cl[0]);
        g.drawLine((int)x1[i],(int)y1[i],(int)x1[minj],(int)y1[minj]);
        th=arcsinaw((y1[minj]-y1[i])/d(x1[minj],y1[minj],x1[i],y1[i]))+pi/2.0;
        if(x1[minj]>x1[i]){
            th=3.0*pi/2.0-arcsinaw((y1[minj]-y1[i])/d(x1[i],y1[i],x1[minj],y1[minj]));
        }
        xx=x1[minj]+10.0*Math.cos((th)-pi/2.0+pi/6.0);
        yy=y1[minj]-10.0*Math.sin((th)-pi/2.0+pi/6.0);
        g.drawLine((int)xx,(int)yy,(int)x1[minj],(int)y1[minj]);
        xx=x1[minj]+10.0*Math.cos((th)-pi/2.0-pi/6.0);
        yy=y1[minj]-10.0*Math.sin((th)-pi/2.0-pi/6.0);
        g.drawLine((int)xx,(int)yy,(int)x1[minj],(int)y1[minj]);

    }//i
    g.setColor(cl[0]);
    g.drawString("N="+N,15,15);
  }
  public boolean mouseDown(Event evt, int x, int y) {
    if(n<30){
      p[n] = new Point(x,y); n++;
    }
    else{
      n=0;
    }
    repaint();
    return true;
  }
}