import java.awt.*; public class LevelSet{ final double PARAM=0.05; int error=0; double ww,hh; int numberofpoint=0; Polygon boundbox; Vertex Head; Vertex Tail; double scale=100.0; double height=400.0; public LevelSet() { this.listinitialize(); } public LevelSet(int ww,int hh) { this.listinitialize(); } public void listinitialize() { double nx,ny; System.gc(); numberofpoint=0; boundbox = new Polygon(); Head = new Vertex(); Tail = new Vertex(); Init(Head,Tail); } public int UpdateLevelSetDistance(int i,double Level){ Vertex now; now = Head; DoubleVector dumnow; double dx,dy,dummy; while(next(now)!=Tail){ now = next(now); now.time = new DoubleVector(now.x,now.y); dx = now.x -(Level*now.normal.x); dy = now.y -(Level*now.normal.y); dumnow = ChangeINTEGER(new DoubleVector(dx,dy)); if(boundbox.contains((int)(dumnow.x),(int)(dumnow.y))){ now.x = dx; now.y = dy; } } double ddist= 1000.0; now = Head; Vertex nnn = Head; while(next(now)!=Tail){ now = next(now); nnn = Head; while(next(nnn)!=Tail){ nnn = next(nnn); ddist = Math.sqrt(Math.pow(scale*(now.x - nnn.init.x),2.0) + Math.pow(scale*(now.y - nnn.init.y),2.0)); if(((int)(ddist))<((int)((((double)(i))*scale*Level))) && nnn != now ){ now.sw=100; break; } } } Vertex exback,exnext; now = Head; while(next(now)!=Tail){ now = next(now); if(now.sw==100){ if(now.extreme==1) if(next(now)!=Tail){ if(back(now)!=Head){ if(Math.abs(next(now).k)>Math.abs(back(now).k)){ next(now).extreme = 1; next(now).time = now.time; }else{ back(now).extreme = 1; back(now).time = now.time; } }else{ if(Math.abs(next(now).k)>Math.abs(back(Tail).k)){ next(now).extreme = 1; next(now).time = now.time; }else{ back(Tail).extreme = 1; back(Tail).time = now.time; } } }else{ if(back(now)!=Head){ if(Math.abs(next(Head).k)>Math.abs(back(now).k)){ next(Head).extreme = 1; next(Head).time = now.time; }else{ back(now).extreme = 1; back(now).time = now.time; } }else{ return 1; } } exback = back(now); exnext = next(now); exback.next = exnext; exnext.back = exback; now = exback; numberofpoint--; if(next(now)==Tail || numberofpoint < 4)break; } } return 0; } private void changeextreme(Vertex now){ if(next(next(now))==Tail){ if(now.k