Алгоритм 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];