Como usar GNUPlot e c?

1. Como usar GNUPlot e c?

Ismael Felipe Ferreira dos santos
IsmaelSantos

(usa Ubuntu)

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.

A minha dúvida é a seguinte: como conseguir resultado similar mas usando GNUPlot no lugar do Grace?

A Utilidade disso seria para criar animação com gráficos 3D, sei que se não existir a biblioteca pronta então eu teria que usar pipe mas não sei nem por onde começar...

/* 
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);
}



  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts