import java.awt.Graphics; import java.applet.Applet; import java.awt.Color; import java.awt.*; public class voroarcli extends java.applet.Applet{ Point[] p = new Point[100]; Color col1,col2,col3; int N,label,n; 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[51][51]; double vy[][]=new double[51][51]; double th1[][]=new double[51][51]; 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]=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); Point old,current; N=n; mind=9999.9; mink=9999; for(k=0;k1){ 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 && ys0){ x0=-ys/di;y0=0; } else{ x0=(taka-ys)/di; y0=taka; } } yy=di*haba+ys; if(yy>0 && yy0){ 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 || tt2){ 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(usx1[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