import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
public class hiell2 extends java.applet.Applet{
  Color col1,col2,col3,col4;
  int N,taka,haba;
  int cou,l,owari;
  String takaS,habaS,NS;
  double takad,habad,Nd;
  double eps=1,eps0,ff,ffbi,r,yr,x,y,xr;
  double xx1d,yy1d,fx,fy;
  double gkx,gky,gkn,ukx,uky;
  int xx1i,yy1i;
  int k;
  double x1d[]=new double[100];
  double y1d[]=new double[100];
  double dis[]=new double[100];
  int x1i[]=new int[100];
  int y1i[]=new int[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.yellow;
    col2=Color.white;
    col3=Color.pink;
    col4=Color.black;
    takaS=getParameter("takap");
    habaS=getParameter("habap");
    NS=getParameter("Np");
    habad=dou(habaS);
    takad=dou(takaS);
    Nd=dou(NS);
    if(Nd==999){
      Nd=3+rand()*7;
    }
    haba=(int)habad;
    taka=(int)takad;
    N=(int)Nd;
  }
  public double jou(double a,double b){
    double jou1;
    jou1=Math.pow(a,b);
    return jou1;
  }
  public double dp(double xz1,double yz1,double xz2,double yz2){
    double dpdp;
    dpdp=jou(jou(xz1-xz2,2)+jou(yz1-yz2,2),0.5);
    return dpdp;
  }
  public void paint(java.awt.Graphics g){
    eps0=0.1;
    g.setColor(col4);
    g.fillRect(0,0,haba,taka);
    g.setColor(col1);
    xx1d=0;yy1d=0;
    for(k=0;k<N;k++){
      x1d[k]=rand()*(haba-30)+15;
      y1d[k]=rand()*(taka-30)+15;
      x1i[k]=(int)(x1d[k]+0.5);
      y1i[k]=(int)(y1d[k]+0.5);
      g.fillOval(x1i[k]-6,y1i[k]-6,12,12);
    }
    g.setColor(col2);
    for(l=0;l<N;l++){
        r=0.0;
        for(k=0;k<N;k++){
            r=r+dp(x1d[l],y1d[l],x1d[k],y1d[k]);
        }
        for(x=1;x<haba;x=x+1.0){
            for(y=0.0;y<taka+1.0;y=y+taka){
                yr=y;
                ff=99999.0;
                owari=0;
                cou=0;
                while(owari==0){
                    ff=0.0;
                    for(k=0;k<N;k++){
                        if(k!=l){
                            dis[k]=dp(x,yr,x1d[k],y1d[k]);
                            ff=ff+dis[k];
                        }
                    }
                    ff=ff-r;
                    ffbi=0;
                    for(k=0;k<N;k++){
                        if(k!=l){
                            ffbi=ffbi+(yr-y1d[k])/dis[k];
                        }
                    }//next k
                    yr=yr-ff/ffbi;
                    cou++;
                    owari=1;
                    if(dp(ff,0,0,0)>eps0){
                        owari=0;
                        if(cou>100){
                            owari=1;
                        }
                    }
                    if(cou<10){
                        owari=0;
                    }
                }//wend
                if(yr>0 && yr<taka && dp(ff,0,0,0)<eps0){
                    g.drawLine((int)x,(int)(yr-.5),(int)x,(int)(yr+.5));
                }
            }//y
        }//x
        for(y=1;y<taka;y=y+1.0){
            for(x=0.0;x<haba+1.0;x=x+haba){
                xr=x;
                ff=99999.0;
                owari=0;
                cou=0;
                while(owari==0){
                    ff=0.0;
                    for(k=0;k<N;k++){
                        if(k!=l){
                            dis[k]=dp(xr,y,x1d[k],y1d[k]);
                            ff=ff+dis[k];
                        }
                    }
                    ff=ff-r;
                    ffbi=0;
                    for(k=0;k<N;k++){
                        if(k!=l){
                            ffbi=ffbi+(xr-x1d[k])/dis[k];
                        }
                    }//next k
                    xr=xr-ff/ffbi;
                    cou++;
                    owari=1;
                    if(dp(ff,0,0,0)>eps0){
                        owari=0;
                        if(cou>100){
                            owari=1;
                        }
                    }
                    if(cou<10){
                        owari=0;
                    }
                }//wend
                if(xr>0 && xr<taka && dp(ff,0,0,0)<eps0){
                    g.drawLine((int)(xr-.5),(int)y,(int)(xr+.5),(int)y);
                }
            }//y
        }//x
    }//l
    g.drawString("N="+N,15,15);
  }
}