
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);
}
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









