Алгоритм midpoint-displacement - Java
Формулировка задачи:
Пытаюсь реализовать алгоритм midpoint-displacement в Java
Вот код:
Но выходит явно не то, что надо (см. вложения)
Может где-то есть ошибка?
Заранее спасибо.
Graphics g = getGraphics(); Random rand =new Random(); int arrln=512;//длина массива double R=0.1;//шероховатость int[] narr=new int[arrln]; for ( int i=0; i<512;i++) narr[i]=-1;//изнач. значение -1 narr[0]=rand.nextInt(300); narr[arrln-1]=rand.nextInt(300); for ( int dv=1; dv<=512;) { dv=dv*2;//на сколько делить int dvrs=arrln/dv;//результат деления for(int stp=0;stp<dv/2;stp++){ int plpi=arrln/(dv/2)*stp;//лев. столбец int prpi=arrln/(dv/2)*(stp+1);//прав. столбец int linlen=(int) Math.sqrt(Math.pow(prpi-plpi,2)+Math.pow(Math.max(narr[prpi-1],narr[plpi])-Math.min(narr[prpi-1],narr[plpi]),2));//длина рассекаемого отрезка int otl=narr[plpi];//знач. лев. столбца int otr=narr[prpi-1];//знач. прав. столбца int res=(int) ((otl+otr)/2+rand.nextInt((int) (R*linlen*2+1))-R*linlen);//результат narr[plpi+dvrs]=res; System.out.println("dv:"+dv+"\ndvrs:"+dvrs+"\nplpi:"+plpi+"\nprpi:"+prpi+"\nlinlen:"+linlen+"\notl:"+otl+"\notr:"+otr+"\nres:"+res+"\n----------\n"); } } // for(int n=0;n<narr.length;n++){ // if(narr[n]==-1) narr[n]=narr[n-1]; // } //отрисовка for(int narn=1; narn<500;narn++){ g.drawLine(narn,300-narr[narn-1],narn,300-narr[narn]); }
Решение задачи: «Алгоритм midpoint-displacement»
textual
Листинг программы
int[] narr = new int[arrln + 1]; //... for ( int dv=1; dv<512;) { //... int otr = narr[prpi];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д