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

Оцени полезность:

7   голосов , оценка 4.143 из 5