<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
import java.awt.*;
public class hisuprcli extends java.applet.Applet{
  Point[] p = new Point[100];
  Color col1,col2,col3;
  int N,taka,haba,n;
  int k,i,j,l;
  double di,di2,di3,cp2,cpx;
  double x1max,x1min,y1max,y1min;
  double yen,yst,yst2,yen2,yst3,yen3;
  double xst,xen,xst2,xen2,xst3,xen3,ymin,ymax;
  double ds,us,xx,yy2,rx,ry,rx2,ry2;
  double a,b,ak,bk;

  double dik,di2k,di3k,cp2k,cpxk;
  double x1maxk,x1mink,y1maxk,y1mink,x1x1,y1y1;
  double yenk,ystk,yst2k,yen2k,yst3k,yen3k;
  double xstk,xenk,xst2k,xen2k,xst3k,xen3k,pi;
  int br,br2,u,k2;
  int xz,xz2,yz,yz2;
  String NS,habaS,takaS;
  double Nd,takad,habad;
  Color cl[]=new Color[13];
  double kx[]=new double[1000];
  double ky[]=new double[1000];
  double kz[]=new double[1000];
  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.blue;
    cl[0]=Color.white;
    cl[1]=Color.green;
    cl[2]=Color.blue;
    takaS=getParameter("takap");
    habaS=getParameter("habap");
    NS=getParameter("Np");
    habad=dou(habaS);
    takad=dou(takaS);
    Nd=dou(NS);
  //  if(Nd==8){
      Nd=4+16*rand();
  //  }
    haba=(int)habad;
    taka=(int)takad;
    N=(int)Nd;
  }
  double x1[]=new double[1000];
  double y1[]=new double[1000];
  double x2[]=new double[1000];
  double y2[]=new double[1000];
  int x[]=new int[1000];
  int y[]=new int[1000];
  double s[]=new double[1000];
  String sss[]=new String[1000];
  public double jou(double aj,double bj){
    double jou1;
    jou1=Math.pow(aj,bj);
    return jou1;
  }

  public double sinsin(double sin0){
    double sin1;
    sin1=Math.sin(sin0);
    return sin1;
  }

  public double coscos(double cos0){
    double cos1;
    cos1=Math.cos(cos0);
    return cos1;
  }

  public double abso(double ab1){
    double abab;
    if(ab1&gt;0){
      abab=ab1;
    }
    else{
      abab=-ab1;
    }
    return abab;
  }

  public double dis(double ad,double bd,double ad2,double bd2){
    double dis1;
    dis1=abso(bd-bd2)+abso(ad-ad2);
    return dis1;
  }

  public double koutenx(double as,double bs,double ask,double bsk){
    double aaa1;
    aaa1=(bsk-bs)/(as-ask);
    return aaa1;
  }

  public double kouteny(double as2,double bs2,double ask2,double bsk2){
    double aaa2;
    aaa2=(bs2/as2-bsk2/ask2)/(1.0/as2-1.0/ask2);
    return aaa2;
  }

  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&gt;=1;kk--){
      ii=kk;
      b1=te1[ii-1];b2=te2[ii-1];b3=te3[ii-1];
      while(2*ii&lt;=NN){
        jj=2*ii;
        if(jj+1&lt;=NN){
          if(te1[jj-1]&lt;te1[jj]){
            jj++;
          }
        }
        if(te1[jj-1]&lt;=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&gt;=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&lt;=mm){
        kk=2*ii;
        if(kk+1&lt;=mm){
          if(te1[kk-1]&lt;=te1[kk]){
            kk++;
          }
        }
        if(te1[kk-1]&lt;=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.141592653589793;
    g.setColor(col1);
    g.fillRect(1,1,haba,taka);
    g.setColor(col3);
    Point old,current;
    N=n;
    for(k=0;k&lt;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;
      x2[k]=x1[k];
      y2[k]=y1[k];
      x[k]=(int)(x1[k]);
      y[k]=(int)(y1[k]);
      s[k]=jou(x1[k]*x1[k]+y1[k]*y1[k],0.5);
    }
    g.setColor(col2);
    for(k=0;k&lt;N;k++){
      g.fillOval(x[k]-2,y[k]-2,4,4);
    }

    if(N&gt;1){
    for(k=0;k&lt;N;k++){
      x1[k]=coscos(pi/4.0)*x2[k]-sinsin(pi/4.0)*y2[k];
      y1[k]=sinsin(pi/4.0)*x2[k]+coscos(pi/4.0)*y2[k];
    }


    for(i=1;i&lt;=N-1;i++){
      for(j=i+1;j&lt;=N;j++){
        if(abso(x1[i-1]-x1[j-1])&lt;abso(y1[i-1]-y1[j-1])){//yの方が大きい

          x1max=x1[i-1];
          x1min=x1[j-1];
          if(x1[i-1]&lt;x1[j-1]){
            x1max=x1[j-1];
            x1min=x1[i-1];
          }
          y1max=y1[i-1];
          y1min=y1[j-1];
          if(y1[i-1]&lt;y1[j-1]){
            y1max=y1[j-1];
            y1min=y1[i-1];
          }
          cp2=(y1[i-1]+y1[j-1])/2;
          cpx=(x1[i-1]+x1[j-1])/2;
          if((x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0){//yの方が大きく、２つの母点は右上がり
            di=-1.0+rand()/1000.0;
            yst=di*(x1min-cpx)+cp2;
            yen=di*(x1max-cpx)+cp2;
            l=1;
            kx[l-1]=x1min;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            l++;
            kx[l-1]=x1max;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            a=di;
            b=-di*cpx+cp2;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=-rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1i-x1j)*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/800.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if(k!=i &amp;&amp; k!=j
            }//k
            di2=-rand()/800.0;
            yst2=di2*(0.0-x1min)+yst;
            yen2=di2*(x1min-x1min)+yst;
            l++;
            kx[l-1]=-haba;
            ky[l-1]=di2*(kx[l-1]-x1min)+yst;
            a=di2;
            b=-di2*x1min+yst;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk  
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=i &amp;&amp; k!=j
            }//k

            di3=-rand()/800.0;
            yst3=di3*(x1max-x1max)+yen;
            yen3=di3*(haba-x1max)+yen;
            l++;
            kx[l-1]=2.0*haba;
            ky[l-1]=di3*(kx[l-1]-x1max)+yen;
            a=di3;
            b=-di3*x1max+yen;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j
            }//k
          }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく、２つの母点は右上がり
          else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく、２つの母点は右下がり
            di=1.0+rand()/1000.0;
            yst=di*(x1min-cpx)+cp2;
            yen=di*(x1max-cpx)+cp2;
            l=1;
            kx[l-1]=x1min;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            l++;
            kx[l-1]=x1max;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            a=di;
            b=-di*cpx+cp2;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk 
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk  
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk  
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk  
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk  
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j 
            }//k
            di2=rand()/800.0;
            l++;
            kx[l-1]=-haba;
            ky[l-1]=di2*(kx[l-1]-x1min)+yst;
            a=di2;
            b=-di2*x1min+yst;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j
            }//k
            di3=rand()/800.0;
            l++;
            kx[l-1]=2.0*haba;
            ky[l-1]=di3*(kx[l-1]-x1max)+yen;
            a=di3;
            b=-di3*x1max+yen;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j
            }//k
          }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく、２つの母点は右下がり
          for(u=1;u&lt;=l;u++){
            kz[u-1]=0;
          }
          heapv(kx,ky,kz,l);
          for(k=1;k&lt;=l-1;k++){
            k2=k+1;
            xx=(kx[k-1]+kx[k2-1])/2.0;
            yy2=(ky[k-1]+ky[k2-1])/2.0;//di*(xx-xx)+cp2;
            ds=dis(xx,yy2,x1[i-1],y1[i-1]);
            br2=0;
            for(u=1;u&lt;=N;u++){
              if(u!=i &amp;&amp; u!=j){
                us=dis(xx,yy2,x1[u-1],y1[u-1]);
                if(us&lt;ds){
                  br2=br2+1;
                }
              }
            }//next u
            if(br2&lt;=2){
              g.setColor(cl[br2]);
              rx=coscos(-pi/4)*kx[k-1]-sinsin(-pi/4)*ky[k-1];
              ry=sinsin(-pi/4)*kx[k-1]+coscos(-pi/4)*ky[k-1];
              rx2=coscos(-pi/4)*kx[k2-1]-sinsin(-pi/4)*ky[k2-1];
              ry2=sinsin(-pi/4)*kx[k2-1]+coscos(-pi/4)*ky[k2-1];
              g.drawLine((int)rx,(int)ry,(int)rx2,(int)ry2);
            }//if br2&lt;3
          }//next k

        }//yの方が大きい



















        else{//xの方が大きい
          for(u=1;u&lt;=N;u++){
            s[u-1]=x1[u-1];
            x1[u-1]=y1[u-1];
            y1[u-1]=s[u-1];
          }
          x1max=x1[i-1];
          x1min=x1[j-1];
          if(x1[i-1]&lt;x1[j-1]){
            x1max=x1[j-1];
            x1min=x1[i-1];
          }
          y1max=y1[i-1];
          y1min=y1[j-1];
          if(y1[i-1]&lt;y1[j-1]){
            y1max=y1[j-1];
            y1min=y1[i-1];
          }
          cp2=(y1[i-1]+y1[j-1])/2;
          cpx=(x1[i-1]+x1[j-1])/2;
          if((x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0){//yの方が大きく、２つの母点は右上がり
            di=-1.0+rand()/1000.0;
            yst=di*(x1min-cpx)+cp2;
            yen=di*(x1max-cpx)+cp2;
            l=1;
            kx[l-1]=x1min;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            l++;
            kx[l-1]=x1max;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            a=di;
            b=-di*cpx+cp2;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=-rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1i-x1j)*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/800.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if(k!=i &amp;&amp; k!=j
            }//k
            di2=-rand()/800.0;
            yst2=di2*(0.0-x1min)+yst;
            yen2=di2*(x1min-x1min)+yst;
            l++;
            kx[l-1]=-haba;
            ky[l-1]=di2*(kx[l-1]-x1min)+yst;
            a=di2;
            b=-di2*x1min+yst;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk  
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=i &amp;&amp; k!=j
            }//k

            di3=-rand()/800.0;
            yst3=di3*(x1max-x1max)+yen;
            yen3=di3*(haba-x1max)+yen;
            l++;
            kx[l-1]=2.0*haba;
            ky[l-1]=di3*(kx[l-1]-x1max)+yen;
            a=di3;
            b=-di3*x1max+yen;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j
            }//k
          }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく、２つの母点は右上がり
          else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく、２つの母点は右下がり
            di=1.0+rand()/1000.0;
            yst=di*(x1min-cpx)+cp2;
            yen=di*(x1max-cpx)+cp2;
            l=1;
            kx[l-1]=x1min;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            l++;
            kx[l-1]=x1max;
            ky[l-1]=di*(kx[l-1]-cpx)+cp2;
            a=di;
            b=-di*cpx+cp2;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk 
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk  
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk  
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=rand()/800.0;
                    ak=di2k;
                    bk=-di2k*x1mink+ystk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=rand()/800.0;
                    ak=di3k;
                    bk=-di3k*x1maxk+yenk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk  
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk  
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1min &amp;&amp; koutenx(a,b,ak,bk)&lt;x1max){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j 
            }//k
            di2=rand()/800.0;
            l++;
            kx[l-1]=-haba;
            ky[l-1]=di2*(kx[l-1]-x1min)+yst;
            a=di2;
            b=-di2*x1min+yst;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;-haba &amp;&amp; koutenx(a,b,ak,bk)&lt;x1min){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j
            }//k
            di3=rand()/800.0;
            l++;
            kx[l-1]=2.0*haba;
            ky[l-1]=di3*(kx[l-1]-x1max)+yen;
            a=di3;
            b=-di3*x1max+yen;
            for(k=1;k&lt;=N;k++){
              if(k!=i &amp;&amp; k!=j){
                x1maxk=x1[i-1];
                x1mink=x1[k-1];
                if(x1[i-1]&lt;x1[k-1]){
                  x1maxk=x1[k-1];
                  x1mink=x1[i-1];
                }
                y1maxk=y1[i-1];
                y1mink=y1[k-1];
                if(y1[i-1]&lt;y1[k-1]){
                  y1maxk=y1[k-1];
                  y1mink=y1[i-1];
                }
                cp2k=(y1[i-1]+y1[k-1])/2.0;
                cpxk=(x1[i-1]+x1[k-1])/2.0;
                if(abso(x1[i-1]-x1[k-1])&lt;abso(y1[i-1]-y1[k-1])){//yの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//yの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 yの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 yの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    ystk=dik*(x1mink-cpxk)+cp2k;
                    yenk=dik*(x1maxk-cpxk)+cp2k;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく２つの母点は右下がりk
                }//yの方が大きいk
                else{//xの方が大きいk
                  if((x1[i-1]-x1[k-1])*(y1[i-1]-y1[k-1])&gt;0){//xの方が大きく２つの母点は右上がりk
                    dik=-1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=-800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=-800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右上がりk
                  else{//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&lt;0 xの方が大きく２つの母点は右下がりk
                    dik=1.0+rand()/1000.0;
                    xstk=(y1mink-cp2k)/dik+cpxk;
                    xenk=(y1maxk-cp2k)/dik+cpxk;
                    ak=dik;
                    bk=-dik*cpxk+cp2k;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di2k=800.0+rand()/800.0;
                    ak=di2k;
                    bk=-di2k*xstk+y1mink;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                    di3k=800.0+rand()/800.0;
                    ak=di3k;
                    bk=-di3k*xenk+y1maxk;
                    if(koutenx(a,b,ak,bk)&gt;x1max &amp;&amp; koutenx(a,b,ak,bk)&lt;2*haba){
                      l++;
                      kx[l-1]=koutenx(a,b,ak,bk);
                      ky[l-1]=kouteny(a,b,ak,bk);
                    }
                  }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0 xの方が大きく２つの母点は右下がりk
                }//xの方が大きいk
              }//if k!=j
            }//k
          }//(x1[i-1]-x1[j-1])*(y1[i-1]-y1[j-1])&gt;0　yの方が大きく、２つの母点は右下がり
          for(u=1;u&lt;=l;u++){
            kz[u-1]=0;
          }
          heapv(kx,ky,kz,l);

          for(k=1;k&lt;=l-1;k++){
            k2=k+1;
            xx=(kx[k-1]+kx[k2-1])/2.0;
            yy2=(ky[k-1]+ky[k2-1])/2.0;//di*(xx-xx)+cp2;
            ds=dis(xx,yy2,x1[i-1],y1[i-1]);
            br2=0;
            for(u=1;u&lt;=N;u++){
              if(u!=i &amp;&amp; u!=j){
                us=dis(xx,yy2,x1[u-1],y1[u-1]);
                if(us&lt;ds){
                  br2=br2+1;
                }
              }
            }//next u
            if(br2&lt;=2){
              g.setColor(cl[br2]);
              ry=coscos(-pi/4)*ky[k-1]-sinsin(-pi/4)*kx[k-1];
              rx=sinsin(-pi/4)*ky[k-1]+coscos(-pi/4)*kx[k-1];
              ry2=coscos(-pi/4)*ky[k2-1]-sinsin(-pi/4)*kx[k2-1];
              rx2=sinsin(-pi/4)*ky[k2-1]+coscos(-pi/4)*kx[k2-1];
              g.drawLine((int)ry,(int)rx,(int)ry2,(int)rx2);
            }//if br2&lt;3
          }//next k
          for(u=1;u&lt;=N;u++){
            s[u-1]=x1[u-1];
            x1[u-1]=y1[u-1];
            y1[u-1]=s[u-1];
          }

          for(u=1;u&lt;=l;u++){
            s[u-1]=kx[u-1];
            kx[u-1]=ky[u-1];
            ky[u-1]=s[u-1];
          }
        }//xの方が大きい





      }//next j
    }//next i
    }
    g.setColor(col2);
    g.drawString("N="+N,15,15);
  }
  public boolean mouseDown(Event evt, int x, int y) {
    if(n&lt;50){
      p[n] = new Point(x,y); n++;
    }
    else{
      n=0;
    }
    repaint();
    return true;
  }
}</pre></body></html>