import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
public class le extends java.applet.Applet{
  Color col1,col2,col3,col4,col5,col6,col7;
  int N,taka,haba,taka2,haba2,orikaeshi,co2,co;
  int k,i,j,l;
  double di2,di,cp2,cpx,ys,t,r,th,pi,z1x,z2x,z1y,z2y,mind,dd,maxd;
  double x,ya,yb,yc,yd,y,xa,xb,xc,xd,sa0,sa1,y21,y20,maxx,maxy,minx,miny;
  double x0,y0,xx,yy,xa1=0,ya1=0,yy2,rr,lto,dw;
  double xmax,maxy2,maxx2,maxd2;
  double di4,di3,cp3,cpx3,ys3,t2,ds,us;
  int br,br2,u,k2,h;
  String NS,habaS,takaS;
  double Nd,takad,habad;
  Color cl[]=new Color[13];
  double kx[]=new double[100];
  double ky[]=new double[100];
  double kz[]=new double[100];

  double aa[]=new double[100];
  double bb[]=new double[100];
  double aa2[]=new double[100];
  double bb2[]=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.pink;
    col4=Color.blue;
    col5=Color.white;
    col6=Color.red;
    col7=Color.green;
    cl[0]=Color.white;
    cl[1]=Color.green;
    cl[2]=new Color(199,111,238);
    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[100];
  double y1[]=new double[100];
  double x2[]=new double[100];
  double y2[]=new double[100];
  double w1[]=new double[100];
  double w2[]=new double[100];
  double x4[]=new double[100];
  double y4[]=new double[100];


  public double jou(double a,double b){
    double jou1;
    jou1=Math.pow(a,b);
    return jou1;
  }

  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;
  }

  public double arcsinaw(double atasw){
    double artn1saw;
    artn1saw=Math.asin(atasw);
    return artn1saw;
  }
  public double artnaw(double ataw){
    double artn1aw;
    artn1aw=Math.atan(ataw);
    return artn1aw;
  }
  public double sainaw(double saiaw){
    double sain1aw;
    sain1aw=Math.sin(saiaw);
    return sain1aw;
  }
  public double kosaw(double kosainaw){
    double kos1aw;
    kos1aw=Math.cos(kosainaw);
    return kos1aw;
  }

  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.141592653589793;
    N=3+(int)(27*rand());
    taka=350;
    haba=500;
    haba2=haba;
    taka2=taka;
    rr=10.0;
    g.setColor(col1);
    g.fillRect(1,1,haba,taka);
    g.setColor(col2);
    for(k=0;k<N;k++){
      x1[k]=rand()*(haba-100)+85;
      y1[k]=rand()*(taka-30)+15;
      w1[k]=arcsinaw((y1[k]-yy)/d(x1[k],y1[k],xx,yy))+pi/2;
      g.fillOval((int)(x1[k]-7),(int)(y1[k]-7),14,14);
    }


    heapv(x1,y1,w1,N);

    for(k=0;k<N;k++){
      x2[k]=x1[k];
      y2[k]=y1[k];
//      g.fillOval((int)x2[k]-7,(int)y2[k]-7,14,14);
    }
    xmax=x1[N-1];
    th=pi/2;
    orikaeshi=0;
    co=0;
    co2=0;

    g.setColor(col6);

    while(lto!=x2[0]){
      xx=x1[0];
      yy=y1[0];
      for(i=1;i<N;i++){
          w1[i]=arcsinaw((y1[i]-yy)/d(x1[i],y1[i],xx,yy))+pi/2;
          if(x1[i]>xx){
              w1[i]=3*pi/2-arcsinaw((y1[i]-yy)/d(x1[i],y1[i],xx,yy));
          }
          w1[i]=w1[i]+pi;
          if(w1[i]>2*pi){
              w1[i]=w1[i]-2*pi;
          }
          if(orikaeshi==1){
              w1[i]=arcsinaw((y1[i]-yy)/d(x1[i],y1[i],xx,yy))+pi/2;
              if(x1[i]>xx){
                  w1[i]=3*pi/2-arcsinaw((y1[i]-yy)/d(x1[i],y1[i],xx,yy));
              }
              w1[i]=w1[i];//+pi/2;
              if(w1[i]>2*pi){
                  w1[i]=w1[i]-2*pi;
              }
          }
      }//next i
      x1[0]=xx;
      y1[0]=yy;
      w1[0]=100.0;
      heapv(w1,x1,y1,N);
      g.drawLine((int)xx,(int)yy,(int)x1[0],(int)y1[0]);
      lto=x1[0];
      if(orikaeshi==0){
          aa[co]=(y1[0]-yy)/(x1[0]-xx);
          bb[co]=y1[0]-aa[co]*x1[0];
          co++;
      }
      else{
          aa2[co2]=(y1[0]-yy)/(x1[0]-xx);
          bb2[co2]=y1[0]-aa2[co2]*x1[0];
          co2++;
      }
      if(x1[0]==xmax){
          orikaeshi=1;
      }
      //th=th+w1[0];
    }//wend



    r=1.0+rand()*2.5;
    th=rand()*2.0*pi;
    for(k=0;k<N;k++){
      x1[k]=x2[k]+haba2*rr;
      y1[k]=y2[k]+taka2*rr;
    }
    for(k=0;k<N;k++){
      x2[k]=x1[k];
      y2[k]=y1[k];
    }
    for(k=0;k<N;k++){
      x1[k]=(jou(Math.cos(th),2)/r+jou(Math.sin(th),2))*x2[k]+(1.0-r)*Math.cos(th)*Math.sin(th)*y2[k]/r;
      y1[k]=(1.0-r)*Math.cos(th)*Math.sin(th)*x2[k]/r+(jou(Math.sin(th),2)/r+jou(Math.cos(th),2))*y2[k];
    }

    haba=(int)(haba2*rr*2);
    taka=(int)(taka2*rr*2);
    maxd=0.0;
    maxx=0.0;
    maxy=0.0;
    maxd2=0.0;
    maxx2=0.0;
    maxy2=0.0;

    g.setColor(cl[2]);
    for(i=1;i<=N-1;i++){
      for(j=i+1;j<=N;j++){
        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.0){
            x0=-ys/di;y0=0.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;
        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;
            if(sa0*sa1<0){
              l++;
              kx[l-1]=(ys3-ys)/(di-di3);
              ky[l-1]=di*kx[l-1]+ys;
            }//if sa0*sa1<0
          }//if(k!=i && k!=j)
        }//next k
          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=br2+1;
                }
              }
            }//next u
            if(br2==0){
              z1x=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*kx[k-1]+(r-1.0)*Math.cos(th)*Math.sin(th)*ky[k-1];
              z1y=(r-1.0)*Math.cos(th)*Math.sin(th)*kx[k-1]+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*ky[k-1];
              z2x=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*kx[k2-1]+(r-1.0)*Math.cos(th)*Math.sin(th)*ky[k2-1];
              z2y=(r-1.0)*Math.cos(th)*Math.sin(th)*kx[k2-1]+(r*jou(Math.sin(th),2.0)+jou(Math.cos(th),2.0))*ky[k2-1];
              g.drawLine((int)(z1x-haba2*rr),(int)(z1y-taka2*rr),(int)(z2x-haba2*rr),(int)(z2y-taka2*rr));


              br2=0;
              for(h=0;h<co;h++){
                  if(z1y>aa[h]*(z1x-haba2*rr)+bb[h]+taka2*rr){
                      br2=1;
                  }
              }
              for(h=0;h<co2;h++){
                  if(z1y<aa2[h]*(z1x-haba2*rr)+bb2[h]+taka2*rr){
                      br2=1;
                  }
              }
              dd=jou(kx[k-1]-x1[i-1],2)+jou(ky[k-1]-y1[i-1],2);
              if(br2==0 && jou(kx[k-1],2)>.5 && jou(kx[k-1]-haba,2)>.5 && jou(ky[k-1],2)>.5 && jou(ky[k-1]-taka,2)>.5){
                  if(dd>maxd){
                      maxd=dd;
                      maxx=kx[k-1];
                      maxy=ky[k-1];
                  }
              }
              if(jou(kx[k-1],2)>.5 && jou(kx[k-1]-haba,2)>.5 && jou(ky[k-1],2)>.5 && jou(ky[k-1]-taka,2)>.5){
         //         g.drawOval((int)(kx[k-1]-jou(dd,0.5)-haba2*20),(int)(ky[k-1]-jou(dd,0.5)-taka2*20),(int)(2*jou(dd,0.5)),(int)(2*jou(dd,0.5)));
                  if(dd>maxd2){
                      maxd2=dd;
                      maxx2=kx[k-1];
                      maxy2=ky[k-1];
                  }
              }
              br2=0;
              for(h=0;h<co;h++){
                  if(z2y>aa[h]*(z2x-haba2*rr)+bb[h]+taka2*rr){
                      br2=1;
                  }
              }
              for(h=0;h<co2;h++){
                  if(z2y<aa2[h]*(z2x-haba2*rr)+bb2[h]+taka2*rr){
                      br2=1;
                  }
              }
              dd=jou(kx[k2-1]-x1[i-1],2)+jou(ky[k2-1]-y1[i-1],2);
              if(br2==0 && jou(kx[k2-1],2)>.5 && jou(kx[k2-1]-haba,2)>.5 && jou(ky[k2-1],2)>.5 && jou(ky[k2-1]-taka,2)>.5){
//                  dd=jou(kx[k2-1]-x1[i-1],2)+jou(ky[k2-1]-y1[i-1],2);
                  if(dd>maxd){
                      maxd=dd;
                      maxx=kx[k2-1];
                      maxy=ky[k2-1];
                  }
              }
              if(jou(kx[k2-1],2)>.5 && jou(kx[k2-1]-haba,2)>.5 && jou(ky[k2-1],2)>.5 && jou(ky[k2-1]-taka,2)>.5){
//                  dd=jou(kx[k2-1]-x1[i-1],2)+jou(ky[k2-1]-y1[i-1],2);
           //       g.drawOval((int)(kx[k2-1]-jou(dd,0.5)-haba2*20),(int)(ky[k2-1]-jou(dd,0.5)-taka2*20),(int)(2*jou(dd,0.5)),(int)(2*jou(dd,0.5)));
                  if(dd>maxd2){
                      maxd2=dd;
                      maxx2=kx[k2-1];
                      maxy2=ky[k2-1];
                  }
              }
            }//if br2<3
          }//next k
      }//next j
    }//next i

    double ex2,ey2,ex,ey;
    double eminx,eminy,emind,emaxx,emaxy,emaxd;
    g.setColor(col7);
    eminx=0.0;
    eminy=0.0;
    emaxx=0.0;
    emaxy=0.0;
    emaxd=0.0;
    emind=9999.9;
    ex=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*maxx2+(r-1.0)*Math.cos(th)*Math.sin(th)*maxy2;
    ey=(r-1.0)*Math.cos(th)*Math.sin(th)*maxx2+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*maxy2;
    g.drawRect((int)(ex-haba2*rr-5),(int)(ey-taka2*rr-5),10,10);
    for(x=-jou(maxd2,0.5);x<jou(maxd2,0.5);x=x+0.25){
        ya=Math.sqrt(maxd2-x*x);
        yb=-Math.sqrt(maxd2-x*x);
        xa=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*x+(r-1.0)*Math.cos(th)*Math.sin(th)*ya;
        yc=(r-1.0)*Math.cos(th)*Math.sin(th)*x+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*ya;
        xb=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*x+(r-1.0)*Math.cos(th)*Math.sin(th)*yb;
        yd=(r-1.0)*Math.cos(th)*Math.sin(th)*x+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*yb;
        g.drawLine((int)(ex+xa-.5-haba2*rr),(int)(ey+yc-taka2*rr),(int)(ex+xa+.5-haba2*rr),(int)(ey+yc-taka2*rr));
        g.drawLine((int)(ex+xb-.5-haba2*rr),(int)(ey+yd-taka2*rr),(int)(ex+xb+.5-haba2*rr),(int)(ey+yd-taka2*rr));
    }//x
    for(y=-jou(maxd2,0.5);y<jou(maxd2,0.5);y=y+0.25){
        xa=Math.sqrt(maxd2-y*y);
        xb=-Math.sqrt(maxd2-y*y);
        xc=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*xa+(r-1.0)*Math.cos(th)*Math.sin(th)*y;
        ya=(r-1.0)*Math.cos(th)*Math.sin(th)*xa+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*y;
        xd=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*xb+(r-1.0)*Math.cos(th)*Math.sin(th)*y;
        yb=(r-1.0)*Math.cos(th)*Math.sin(th)*xb+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*y;
        g.drawLine((int)(ex+xc-.5-haba2*rr),(int)(ey+ya-taka2*rr),(int)(ex+xc+.5-haba2*rr),(int)(ey+ya-taka2*rr));
        g.drawLine((int)(ex+xd-.5-haba2*rr),(int)(ey+yb-taka2*rr),(int)(ex+xd+.5-haba2*rr),(int)(ey+yb-taka2*rr));
        dd=jou(jou(xc,2.0)+jou(ya,2.0),0.5);
        if(dd<=emind){
            emind=dd;
            eminx=xc;
            eminy=ya;
        }
        if(dd>=emaxd){
            emaxd=dd;
            emaxx=xc;
            emaxy=ya;
        }
        dd=jou(jou(xd,2)+jou(yb,2),0.5);
        if(dd<=emind){
            emind=dd;
            eminx=xd;
            eminy=yb;
        }
        if(dd>=emaxd){
            emaxd=dd;
            emaxx=xd;
            emaxy=yb;
        }
    }//y
    g.setColor(new Color(255,155,0));
    if(th>pi){
        g.drawLine((int)(ex-haba2*rr),(int)(ey-taka2*rr),(int)(ex-emaxx-haba2*rr),(int)(ey-emaxy-taka2*rr));
    }
    else{
        g.drawLine((int)(ex-haba2*rr),(int)(ey-taka2*rr),(int)(ex+emaxx-haba2*rr),(int)(ey+emaxy-taka2*rr));
    }
    g.setColor(new Color(0,155,255));
    if(th>pi/2.0 && th<pi*1.5){
        g.drawLine((int)(ex-haba2*rr),(int)(ey-taka2*rr),(int)(ex+eminx-haba2*rr),(int)(ey+eminy+taka2*rr));
    }
    else{
        g.drawLine((int)(ex-haba2*rr),(int)(ey-taka2*rr),(int)(ex-eminx-haba2*rr),(int)(ey-eminy-taka2*rr));
    }


    double eminx2,eminy2,emind2,emaxx2,emaxy2,emaxd2;
    eminx2=0.0;
    eminy2=0.0;
    emaxx2=0.0;
    emaxy2=0.0;
    emaxd2=0.0;
    emind2=9999.9;
    ex2=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*maxx+(r-1.0)*Math.cos(th)*Math.sin(th)*maxy;
    ey2=(r-1.0)*Math.cos(th)*Math.sin(th)*maxx+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*maxy;
    if(maxx!=0.0){
        g.setColor(col5);
//        g.drawOval((int)(ex2-jou(maxd,0.5)-haba2*rr),(int)(ey2-jou(maxd,0.5)-taka2*rr),(int)(2*jou(maxd,0.5)),(int)(2*jou(maxd,0.5)));
        g.drawRect((int)(ex2-haba2*rr-5),(int)(ey2-taka2*rr-5),10,10);
        for(x=-jou(maxd,0.5);x<jou(maxd,0.5);x=x+0.25){
            ya=Math.sqrt(maxd-x*x);
            yb=-Math.sqrt(maxd-x*x);
            xa=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*x+(r-1.0)*Math.cos(th)*Math.sin(th)*ya;
            yc=(r-1.0)*Math.cos(th)*Math.sin(th)*x+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*ya;
            xb=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*x+(r-1.0)*Math.cos(th)*Math.sin(th)*yb;
            yd=(r-1.0)*Math.cos(th)*Math.sin(th)*x+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*yb;
            g.drawLine((int)(ex2+xa-.5-haba2*rr),(int)(ey2+yc-taka2*rr),(int)(ex2+xa+.5-haba2*rr),(int)(ey2+yc-taka2*rr));
            g.drawLine((int)(ex2+xb-.5-haba2*rr),(int)(ey2+yd-taka2*rr),(int)(ex2+xb+.5-haba2*rr),(int)(ey2+yd-taka2*rr));
        }//x
        for(y=-jou(maxd,0.5);y<jou(maxd,0.5);y=y+0.25){
            xa=Math.sqrt(maxd-y*y);
            xb=-Math.sqrt(maxd-y*y);
            xc=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*xa+(r-1.0)*Math.cos(th)*Math.sin(th)*y;
            ya=(r-1.0)*Math.cos(th)*Math.sin(th)*xa+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*y;
            xd=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*xb+(r-1.0)*Math.cos(th)*Math.sin(th)*y;
            yb=(r-1.0)*Math.cos(th)*Math.sin(th)*xb+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*y;
            g.drawLine((int)(ex2+xc-.5-haba2*rr),(int)(ey2+ya-taka2*rr),(int)(ex2+xc+.5-haba2*rr),(int)(ey2+ya-taka2*rr));
            g.drawLine((int)(ex2+xd-.5-haba2*rr),(int)(ey2+yb-taka2*rr),(int)(ex2+xd+.5-haba2*rr),(int)(ey2+yb-taka2*rr));
        }//y
        g.setColor(new Color(255,255,122));
        if(th<pi/2.0 || th>pi*1.5){
            g.drawLine((int)(ex2-haba2*rr),(int)(ey2-taka2*rr),(int)(ex2-emaxx2-haba2*rr),(int)(ey2-emaxy2-taka2*rr));
        }
        else{
            g.drawLine((int)(ex2-haba2*rr),(int)(ey2-taka2*rr),(int)(ex2+emaxx2-haba2*rr),(int)(ey2+emaxy2-taka2*rr));
        }
        g.setColor(new Color(122,155,255));
        if(th>pi/2.0 && th<pi*1.5){
            g.drawLine((int)(ex2-haba2*rr),(int)(ey2-taka2*rr),(int)(ex2+eminx2-haba2*rr),(int)(ey2+eminy2+taka2*rr));
        }
        else{
            g.drawLine((int)(ex2-haba2*rr),(int)(ey2-taka2*rr),(int)(ex2-eminx2-haba2*rr),(int)(ey2-eminy2-taka2*rr));
        }
    }

    g.setColor(cl[0]);
    g.drawRect(48,148,4,4);
    g.drawLine(50,150,70,150);
    g.setColor(new Color(255,255,0));
    for(x=-30.0;x<30.0;x=x+0.25){
        ya=Math.sqrt(900-x*x);
        yb=-Math.sqrt(900-x*x);
        xa=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*x+(r-1.0)*Math.cos(th)*Math.sin(th)*ya;
        yc=(r-1.0)*Math.cos(th)*Math.sin(th)*x+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*ya;
        xb=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*x+(r-1.0)*Math.cos(th)*Math.sin(th)*yb;
        yd=(r-1.0)*Math.cos(th)*Math.sin(th)*x+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*yb;
        g.drawLine(50+(int)(xa-.5),150+(int)yc,50+(int)(xa+.5),150+(int)yc);
        g.drawLine(50+(int)(xb-.5),150+(int)yd,50+(int)(xb+.5),150+(int)yd);
    }//x
    minx=0.0;
    miny=0.0;
    maxx=0.0;
    maxy=0.0;
    maxd=0.0;
    mind=9999.9;
    for(y=-30.0;y<30.0;y=y+0.25){
        xa=Math.sqrt(900-y*y);
        xb=-Math.sqrt(900-y*y);
        xc=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*xa+(r-1.0)*Math.cos(th)*Math.sin(th)*y;
        ya=(r-1.0)*Math.cos(th)*Math.sin(th)*xa+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*y;
        xd=(r*jou(Math.cos(th),2.0)+jou(Math.sin(th),2.0))*xb+(r-1.0)*Math.cos(th)*Math.sin(th)*y;
        yb=(r-1.0)*Math.cos(th)*Math.sin(th)*xb+(r*jou(Math.sin(th),2)+jou(Math.cos(th),2.0))*y;
        g.drawLine(50+(int)xc,150+(int)(ya-.5),50+(int)xc,150+(int)(ya+.5));
        g.drawLine(50+(int)xd,150+(int)(yb-.5),50+(int)xd,150+(int)(yb+.5));
        dd=jou(jou(xc,2.0)+jou(ya,2.0),0.5);
        if(dd<=mind){
            mind=dd;
            minx=xc;
            miny=ya;
        }
        if(dd>=maxd){
            maxd=dd;
            maxx=xc;
            maxy=ya;
        }
        dd=jou(jou(xd,2)+jou(yb,2),0.5);
        if(dd<=mind){
            mind=dd;
            minx=xd;
            miny=yb;
        }
        if(dd>=maxd){
            maxd=dd;
            maxx=xd;
            maxy=yb;
        }
    }//x
    g.setColor(new Color(255,155,0));
    if(th>pi){
        g.drawLine(50,150,50-(int)maxx,150-(int)maxy);
    }
    else{
        g.drawLine(50,150,50+(int)maxx,150+(int)maxy);
    }
    g.setColor(new Color(0,155,255));
    if(th>pi/2.0 && th<pi*1.5){
        g.drawLine(50,150,50+(int)minx,150+(int)miny);
    }
    else{
        g.drawLine(50,150,50-(int)minx,150-(int)miny);
    }

    g.setColor(col2);
    g.drawString("N="+N,15,15);
    g.setColor(col2);
    g.drawString("N="+N,15,15);
    g.drawString("r="+r,15,30);
    g.drawString("th="+(360-th*180/pi),15,45);

  }
}
