Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menjana Pulau Realistik Menggunakan Algoritma Diamond-Square yang Diubahsuai?
Perlin Noise Islands with No Circles
Daripada menggunakan bulatan kecerunan, pertimbangkan untuk menggunakan algoritma Diamond & Square dengan beberapa pengubahsuaian untuk mencipta rupa semula jadi pulau dalam penjana peta anda.
Algoritma Berlian & Petak dengan Pengubahsuaian
Buat peta ketinggian rupa bumi (zed[][]):
Buat peta permukaan (taip[][]):
Contoh C Pelaksanaan
void map_random(int _xs, int _ys) { // Configuration and parameter initialization // Terrain generation ter=new int*[mys+1]; for (y=0;y<=mys;y++) ter[y]=new int[mxs+1]; typ=new int*[mys+1]; for (y=0;y<=mys;y++) typ[y]=new int[mxs+1]; ... // First pass t=-r2; ter[ 0][ 0]=t; ter[ 0][mxs]=t; ter[mys][ 0]=t; ter[mys][mxs]=t; ter[dy2][dx2]=r2; ... for (;dx2|dy2;dx=dx2,dx2>>=1,dy=dy2,dy2>>=1) // subdivide step until full image is filled { ... // diamond (skip first one for islands) if ((!_island)||(dx!=mxs)) for (y=dy2,yy=mys-dy2;y<=yy;y+=dy) for (x=dx2,xx=mxs-dx2;x<=xx;x+=dx) ter[y][x]=((ter[y-dy2][x-dx2]+ter[y-dy2][x+dx2]+ter[y+dy2][x-dx2]+ter[y+dy2][x+dx2])>>2)+Random(r)-r2; ... // adjust border if (_island) { for (y=0;y<=mys;y+=dy2) { ter[y][0]=t; ter[y][mxs]=t; } for (x=0;x<=mxs;x+=dx2) { ter[0][x]=t; ter[mys][x]=t; } } } // Additional steps and enhancements ... }
Output
Ini pendekatan menghasilkan lebih banyak pulau yang kelihatan semula jadi dengan berbilang bukit dan garis pantai yang realistik.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Pulau Realistik Menggunakan Algoritma Diamond-Square yang Diubahsuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!