Figuras de Lichtenberg

Neste arquivo iremos colocar os problemas já resolvidos (não são problemas "mortos" porque a discussão pode continuar a qualquer altura!)

Mensagempor jap em Quarta Jan 09, 2008 11:53 pm

Ah, um picket fence! :lol:

Bom :zzz: !
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor hexphreak em Quinta Jan 10, 2008 8:30 pm

jap Escreveu:Ah, um picket fence! :lol:

Exactamente :D Aqui vai a versão (espero) final.

Código: Seleccionar Todos
#include <stdio>
#include <time>

#define ROW 1000
#define X   pos[1]
#define Y   pos[0]
#define NEIGHBOURS(y,x)  \
    (grid[y][x+1] | grid[y][x-1] | grid[y+1][x] | grid[y-1][x])

int main(void)
{
    int grid[ROW + 2][ROW + 2], pos[2], go[2] = {1, -1}, i, j = 0;

    srand(time(NULL));

    memset((void *)grid[0], 1, (ROW + 2) * sizeof(int));
    for(i = 1; i <= ROW; i++)
    {
        memset((void *)grid[i], 0, (ROW + 2) * sizeof(int));
        grid[i][0] = 1;  grid[i][ROW + 1] = 1;
    }
    memset((void *)grid[ROW + 1], 1, (ROW + 2) * sizeof(int));

    grid[ROW/2 + 1][ROW/2 + 1] = 1;
   
    for(i = 0; i <50000>= 75);
            pos[rand() % 2] += go[rand() % 2];
        }
    }

    for(i = 1; i <= ROW; i++)
    {
        for(j = 1; j <= ROW; j++)
            putchar(grid[i][j] ? '*' : ' ');
        putchar('\n');
    }

    return 0;
}



Já arranjei os bugs e troquei três LOC por mais eficiência: o out-of-bounds coincide com o teste para a partícula agarrada :)
última vez editado por hexphreak s Sexta Jan 11, 2008 10:13 pm, editado 1 vez no total
Avatar do utilizador
hexphreak
top-Quark!
top-Quark!
 
Mensagens: 1959
Registado: Segunda Nov 05, 2007 8:52 pm
Localização: Maia/Porto

Mensagempor jap em Quinta Jan 10, 2008 9:57 pm

Está a correr num Pentium II (uma Linux box que tenho cá em casa) e está a demorar, hem! :roll:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor hexphreak em Quinta Jan 10, 2008 10:01 pm

jap Escreveu:Está a correr num Pentium II (uma Linux box que tenho cá em casa) e está a demorar, hem! :roll:

Ao menos está a correr :lol: Num PII é natural que demore mais, mas há quanto tempo está a correr? É difícil fazer comparações entre processadores e compiladores...

Edit: Aqui a nova versão demorou 10 minutos quase certos, menos 3 que a anterior! :shock: É certo que fiz um bocadinho de batota (as "paredes" também fazem agarrar as partículas), mas assim até ficou mais giro :P Se incomodar alguém é bastante fácil de modificar, basta explicitar os testes e usar outro valor qualquer para os limites.
Avatar do utilizador
hexphreak
top-Quark!
top-Quark!
 
Mensagens: 1959
Registado: Segunda Nov 05, 2007 8:52 pm
Localização: Maia/Porto

Mensagempor jap em Quinta Jan 10, 2008 10:50 pm

Já terminou!

Que tipo de figura é que te deu? :roll:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor hexphreak em Quinta Jan 10, 2008 10:54 pm

No meio (gerada a partir daquela partícula central), uma espécie de árvore, mas com ramificações nas quatro direcções cardeais. Bastante bonita por sinal, para geeks de programação ou Física :wink:
Avatar do utilizador
hexphreak
top-Quark!
top-Quark!
 
Mensagens: 1959
Registado: Segunda Nov 05, 2007 8:52 pm
Localização: Maia/Porto

Mensagempor jap em Quinta Jan 10, 2008 11:03 pm

hexphreak Escreveu:No meio (gerada a partir daquela partícula central), uma espécie de árvore, mas com ramificações nas quatro direcções cardeais. Bastante bonita por sinal, para geeks de programação ou Física :wink:


Então deve estar bem! :D É isso mesmo que deve dar.

Como fazes para visualizar a imagem? É que cada linha é tão grande - só convertendo cada * num pequeno pixel é que isto cabe numa imagem decente. Como fizeste?
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor hexphreak em Quinta Jan 10, 2008 11:06 pm

Realmente são enormes, já estava aqui a pensar em fazer outro programa para gerar um bitmap :lol: Abro os ficheiros no Notepad2 e faço scroll contínuo, moderadamente rápido, e dá uma ideia bastante boa do aspecto. É pena não dar para tirar screenshots pelo tamanho :? Amanhã talvez tire alguns e componha numa imagem maior, para toda a gente poder ver :)
Avatar do utilizador
hexphreak
top-Quark!
top-Quark!
 
Mensagens: 1959
Registado: Segunda Nov 05, 2007 8:52 pm
Localização: Maia/Porto

Mensagempor hexphreak em Quinta Jan 10, 2008 11:48 pm

Imagem

Utilizando a magnífica capacidade de zoom do Notepad2, posso disponibilizar-vos em primeira mão a minha figura de Lichtenberg! 8) Peço desculpa pelo tamanho diminuto, mas foi o melhor que se arranjou com os limites de tempo impostos pelas aulas...
Avatar do utilizador
hexphreak
top-Quark!
top-Quark!
 
Mensagens: 1959
Registado: Segunda Nov 05, 2007 8:52 pm
Localização: Maia/Porto

Mensagempor jap em Sexta Jan 11, 2008 12:22 am

Está muito bonito! É isso mesmo! :D

:hands:

Parabéns! :wink:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor jap em Sexta Jan 11, 2008 12:50 am

E o rendering dos dados do Henrique, num pequeno programa Python Q&D para desenrascar uma imagem que fizesse justiça à beleza da simulação:


Imagem

Bonito, não? :D

Notem o crescimento dendrítico também nas paredes... :lol:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor hexphreak em Sexta Jan 11, 2008 5:16 pm

jap Escreveu:Notem o crescimento dendrítico também nas paredes... :lol:

Tudo intencional! :whistle: Obrigado pela imagem, está muito bonita :D

Já agora, o modelo DLA também se aplica a fenómenos como, por exemplo, a difusão de uma gota de óleo em água? :roll:
Avatar do utilizador
hexphreak
top-Quark!
top-Quark!
 
Mensagens: 1959
Registado: Segunda Nov 05, 2007 8:52 pm
Localização: Maia/Porto

Mensagempor hexphreak em Sábado Jan 12, 2008 9:23 pm

Nem a propósito, vejam este artigo no physicsworld.com: The enigmatic snowflake. É interessantíssimo, e incluí uma secção sobre a modelação/simulação numérica deste problema fascinante :D


P.S.: Outro aqui.
Avatar do utilizador
hexphreak
top-Quark!
top-Quark!
 
Mensagens: 1959
Registado: Segunda Nov 05, 2007 8:52 pm
Localização: Maia/Porto

Mensagempor miranda_henrique em Terça Jan 15, 2008 11:25 pm

Ora boas a todos,
Estou como o Henrique (e sim também me chamo Henrique), e não resisti a implementar este belo algoritmo. Comecei por tentar implementar em Scilab um primo gratuido do Matlab, mas ficou tão lento que decidi tentar em C.

Basei-me nesta applet para o algoritmo. A grande vantagem deste algoritmo é dar uma pequena ajuda aos pontos a encontrarem a semente no início, já que sem esta ajuda, pode demorar muito mas mesmo muito tempo a encontrar a semente.
Como no problema do caminhante aleatório (Random walker), em que o desvio da posição inicial é com maior probabilidade igual á raiz do numero de lançamentos.

Como é dada esta ajudinha? Simples, os pontos são gerados sobre uma circunferência com o centro no ponto inicial, e o raio dessa circunferência vai sendo aumentado com o a distância do último ponto á "origem"

Com esta optimização consegue-se obter um resultado para 7000 pontos em cerca de 10 segundos num Core 2 Duo 2 GHZ numa matrix 1000x1000 com uma pequena batota que é nao sortear as 75% de hipotesses de agarrar.

O resultado foi este:

http://pastebin.com/ma499583

Este código tem um pequeno problema que ainda não consegui resolver, que é a imagem crescer sempre para o mesmo lado. Se alguém puder testar o programa e ver se teem o mesmo problema agradecia imenso. É que já passei um bom tempo a tentar descobrir o que era sem resultado. :roll:

Os outputs que consegui são todos dentro deste género (ás vezes cresce para baixo, ás vezes para o lado:

Imagem

Nota: Este é o meu primeiro programa em C, aprendi um pouco (muito pouco) o essencial para este programa com o meu irmão durante o fim-de semana.[/url]
última vez editado por miranda_henrique s Quarta Jan 16, 2008 7:27 pm, editado 2 vezes no total
Avatar do utilizador
miranda_henrique
bottom-Quark!
bottom-Quark!
 
Mensagens: 34
Registado: Sábado Dez 22, 2007 2:51 am
Localização: Barcelos

Mensagempor jap em Terça Jan 15, 2008 11:28 pm

Caros Henriques,

Obrigado pelas vossas contribuições! :wink:

Experts do C toca a encontrar o gato no programa do miranda_henrique! (Peço desculpa, hoje tenho umas tarefas urgentes e não me posso debruçar sobre o código...) :cry:

PS: para primeiro programa em C não está nada mal! Em geral, o que se consegue nestas primeiras incursões é apenas um core dump ou segmentation violation. :P
última vez editado por jap s Terça Jan 15, 2008 11:42 pm, editado 1 vez no total
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

AnteriorPróximo

Voltar para Problemas resolvidos

Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante

cron