Fractal Estocástico
Publicado por Roberto Júnior 30/10/2006
[ Hits: 9.029 ]
Homepage: http://sites.google.com/site/dibetao
Este programa gera um fractal dito ser aleatório, pois é gerado por um processo estocástico. Uma matriz é usada para armazenar os valores. As dimensões da matriz poderão ser alteradas no fonte do programa.
PS: É necessário o GNUPLOT para gerar o gráfico.
/**
FRACTAL 1
Autor: Roberto Lima
Data: 06/08/2006
Email: dibetao@gmail.com
- Este programa gera um fractal simples.
- Ajuste o numero de linha e colunas da
matriz em LIN e COL respectivamente.
- Ajuste as dimensoes de A[][], para valores
maiores que LIN e COL.
- O programa finaliza assim que ocorre a
percolacao.
- Um arquivo 'pontos.txt' eh gerado, e o grafico
poderá ser visualizado com o GNUPLOT, com o comando
--> plot 'pontos.txt'.
*/
#include <stdio.h>
#include <stdlib.h>
#define LIN 211
#define COL 211
int A[251][251],pp[5],i,j;
//---------------------------------------------------------------------
int vv(int ii,int jj) //verifica vizinhanca
{
int val;
val=0;
if (A[ii+1][jj]==1) val=1;
if (A[ii-1][jj]==1) val=1;
if (A[ii][jj+1]==1) val=1;
if (A[ii][jj-1]==1) val=1;
return(val);
}
//---------------------------------------------------------------------
np()//nova particula
{
int c1=0,pos;
do
{
pos=rand() % 4;
switch (pos)
{
case 0: {
if(pp[2]==1) continue;
i=1; j= (rand() % COL) +1;
break;
}
case 1: {
if (pp[4]==1) continue;
j=1; i= (rand() % LIN) +1;
break;
}
case 2: {
if (pp[1]==1) continue;
i=LIN; j= (rand() % COL) +1;
break;
}
case 3: {
if (pp[3]==1) continue;
j=COL; i= (rand() % LIN) +1;
break;
}
}
if (A[i][j]==0) {
A[i][j]=1;
c1=1;
}
}while (c1!=1);
}
//---------------------------------------------------------------------
mov() //prob movimento
{
int p,ii,jj;
A[i][j]=0;
p=(rand() % 4)+1;
switch (p)
{
case 1: j=j+1; break;
case 2: j=j-1; break;
case 3: i=i+1; break;
case 4: i=i-1; break;
}
if (i>LIN || i<1 || j>COL || j<1) np();
else{
A[i][j]=1;
if (vv(i,j)==1){
if (i==LIN || i==1 || j==COL || j==1)
{
if(i==LIN) pp[1]=1;
if(i==1) pp[2]=1;
if(j==COL) pp[3]=1;
if(j==1) pp[4]=1;
i=0; j=0;
}else np();
}
}
}
//---------------------------------------------------------------------
salva()
{
int ii,jj;
FILE *arq;
arq=fopen("pontos.txt","w+");
for (ii=1; ii<=LIN; ii++)
for (jj=1; jj<=COL; jj++)
if (A[ii][jj]!=0)
fprintf(arq,"%d %d %d\n",ii,jj,A[ii][jj]);
fclose(arq);
}
//---------------------------------------------------------------------
int main()
{
int ii,jj,parar;
float step=0;
srand(time(NULL));
step=0;
parar=0;
for(ii=1;ii<=4;ii++) pp[ii]=0;
for (ii=1; ii<=LIN; ii++) for (jj=1; jj<=COL; jj++) A[ii][jj]=0;
A[LIN/2+1][COL/2+1]=1; //particula no meio da matriz
np();
while (parar!=1)
{
//if(step%10000==0)printf("%f\n",step);//Se necessario verificar loop infinito
if(pp[1]==1 && pp[2]==1 && pp[3]==1 && pp[4]==1)//Quando percolar
{
parar=1;
printf("ACABOU - TOTAL= %f steps\n",step);
salva();
}
else
{
step=step+0.001;
mov();
}
}
}
//FIM
Conio.h para Linux (Nova versão)
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
ERRO: LAZARUS 4.2 64 no Linux MINT não entra mais apos ajustar desktop... (0)
Pergunta: Meu teclado não está respondendo direito como e consertar? (2)
Secure boot, artigo interessante, nada técnico. (6)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (0)









