Enviado em 10/11/2019 - 19:29h
Tenho este programinha simples em C para plotar o Mandelbrot, o diferencial é que ele abre o XMGrace e mostra o gráfico sendo feito em tempo real./*
Autor: Ismael Felipe Ferreira dos Santos
Instituto de Fisica,
Universidade Federal de Alagoas
E-mail: ismaellxd@gmail.com
Copyright © 2019 MIT LICENCE
GIT: https://ismaeldamiao.blogspot.com/fisicacomputacional
Objetivo: Gerar os pontos no plano complexo que pertencem ao congunto de
Mandelbrot.
Escrito em: 14 de agosto de 2019
Compilar: g++ Mandelbrot_grace.c -lgrace_np -o Mandelbrot && ./Mandelbrot
*/
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<grace_np.h>
#include<complex.h>
#define TRUE 1
#define FALSE 0
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif
#ifndef EXIT_FAILURE
#define EXIT_FAILURE -1
#endif
void my_error_function(const char *msg)
{
fprintf(stderr, "library message: \"%s\"\n", msg);
}
int main(){
double _Complex PontoC = -2.0 + -1.0 * I,
sequencia = 0.0 + 0.0 * I;
double Inclemento = 1.0e-3, i, j;
int k, pertence = TRUE, interacoes = 500;
if (GraceOpen(2048) == -1) {
fprintf(stderr, "Can't run Grace. \n");
exit(EXIT_FAILURE);
}
GracePrintf("world xmax 0.5");
GracePrintf("world xmin -2");
GracePrintf("world ymax 1");
GracePrintf("world ymin -1");
GracePrintf("s0 on");
GracePrintf("s0 symbol 1");
GracePrintf("s0 symbol size 0.01");
GracePrintf("s0 symbol fill pattern 0");
for(i = -2.0; i <= 1.0; i += Inclemento){
for(j = -1.0; j <= 1.0; j += Inclemento){
/* Testar se nos primeiros interacoes termos da sequencia ela indica se
ira divergir*/
for(k = 1; k <= interacoes; ++k){
sequencia = cpow(sequencia, 2.0) + PontoC;
if(cabs(sequencia) > 2.0){
pertence = FALSE;/*A sequencia divergiu*/
break;
}
}
/*Caso nao tenha divergido, escreva o ponto no arquivo*/
if(pertence){
GracePrintf("g0.s0 point %f, %f", creal(PontoC), cimag(PontoC));
GracePrintf("redraw");
sleep(1);
}
PontoC += Inclemento * I; /* Teste com outro ponto*/
sequencia = 0.0 + 0.0 * I; /* Zere a sequencia*/
pertence = TRUE; /* A sequencia ainda nao divergiu*/
}
PontoC += Inclemento - 2.0 * cimag(PontoC) * I;/* Teste com outro
ponto*/
}
GracePrintf("saveall \"Mandelbrot.agr\"");
GraceClose();
exit(EXIT_SUCCESS);
}
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Software livre - será que eu estou tão errado assim? (9)
Boot do PosRog so funciona em notebook (1)