Przejdź do zawartości

Plik:Backtang2.png

Treść strony nie jest dostępna w innych językach.
Ten plik jest umieszczony w Wikimedia Commons
Z Wikipedii, wolnej encyklopedii

Rozmiar pierwotny(1024 × 1024 pikseli, rozmiar pliku: 143 KB, typ MIME: image/png)

Opis

Opis
Italiano: Bak–Tang–Wiesenfeld sandpile, 28 million grains
Data
Źródło Praca własna
Autor Claudio Rocchini

Licencja

Ja, właściciel praw autorskich do tego dzieła, udostępniam je na poniższej licencji
w:pl:Licencje Creative Commons
uznanie autorstwa
Ten plik udostępniony jest na licencji Creative Commons Uznanie autorstwa 3.0.
Wolno:
  • dzielić się – kopiować, rozpowszechniać, odtwarzać i wykonywać utwór
  • modyfikować – tworzyć utwory zależne
Na następujących warunkach:
  • uznanie autorstwa – musisz określić autorstwo utworu, podać link do licencji, a także wskazać czy utwór został zmieniony. Możesz to zrobić w każdy rozsądny sposób, o ile nie będzie to sugerować, że licencjodawca popiera Ciebie lub Twoje użycie utworu.

Source Code

#include <stdio.h>
#include <stdlib.h>
#include <queue>

typedef unsigned char byte;
typedef std::pair<int,int> coord;
const int    N = 1024;
const size_t C = 4;
const size_t S = 28000000;

byte M[N][N];
const int dx[4] = {1,0,-1,0}; 
const int dy[4] = {0,1,0,-1};

int main() {
    memset(M,0,N*N);
	
    for(size_t steps=0;steps<S;++steps) {
        std::queue<coord> q;
        if( ++M[N/2][N/2]>=C ) q.push( coord(N/2,N/2) );
        while( !q.empty() ) {
            const int x = q.front().first;
            const int y = q.front().second;
            q.pop();
            if(M[x][y]<C) continue;
            M[x][y] -= 4;
            for(int d=0;d<4;++d) {
                const int lx = x+dx[d];
                const int ly = y+dy[d];
                if(lx<0 || lx>=N) continue;
                if(ly<0 || ly>=N) continue;
		if(++M[lx][ly]>=C) q.push( coord(lx,ly) );
            }
        }
    }

    const byte co[4][3] = { {255,255,255}, {255,0,0}, {0,255,0}, {0,0,255} };
    FILE * fo = fopen("backtang2.ppm","wb");
    fprintf(fo,"P6\n%d %d\n255\n",N,N);
    for(int x=0;x<N;++x) for(int y=0;y<N;++y)
        fwrite(co[M[x][y]],1,3,fo);
    fclose(fo);

    return 0;
}

Podpisy

Dodaj jednolinijkowe objaśnienie tego, co ten plik pokazuje

Obiekty przedstawione na tym zdjęciu

przedstawia

image/png

f5e634e4c4716f43272e8c88965e575c784c5278

145 948 bajt

1024 piksel

1024 piksel

Historia pliku

Kliknij na datę/czas, aby zobaczyć, jak plik wyglądał w tym czasie.

Data i czasMiniaturaWymiaryUżytkownikOpis
aktualny11:27, 7 sie 2012Miniatura wersji z 11:27, 7 sie 20121024 × 1024 (143 KB)Rocchini

Globalne wykorzystanie pliku

Ten plik jest wykorzystywany także w innych projektach wiki: