Алгоритм 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];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д