Biblioteca gráfica em C

Estava a pensar se havia alguma boa biblioteca gráfica gratuita para o C que fosse fácil de usar? É para desenhar gráficos 2d e 3d e, em seguida, economizar para um arquivo. Está num sistema Linux e não há gnuplot no sistema neste momento.

Ou seria mais simples mudar para outra língua e, em caso afirmativo, qual seria fácil de aprender?

 10
Author: Jonathan Leffler, 2009-11-09

8 answers

Para desenhar gráficos 2D e 3D em C Eu recomendaria a biblioteca DISLIN . Você pode ver exemplos aqui ou ali .

O código é muito fácil de usar e dá bons resultados.

 2
Author: Once, 2015-07-06 21:06:35
Gosto da biblioteca do Cairo. Ele tem uma interface agradável para C e pode sair em muitos formatos.
 5
Author: , 2009-11-10 01:24:56

Esta questão é um pouco vaga, "gráficos" é um Campo Largo. Você pode chegar muito longe usando apenas simples SDL , mas também pode ser considerado "nível muito baixo". Você precisa fornecer mais requisitos.

 2
Author: unwind, 2009-11-09 15:28:42

confusão . Aqui estão alguns trechos da página Acerca:

"Clutter é uma biblioteca de software livre para criar interfaces gráficas rápidas, visualmente ricas, Portáteis e animadas."

" Clutter tem por objectivo não ser específico-não implementa um estilo de Interface específico do utilizador, mas fornece uma base genérica rica que facilita a criação rápida e fácil de kits de ferramentas de nível superior adaptados a necessidades específicas."

"desenvolvido em C, com ligações de linguagem para Perl, Python, C#, C++, Vala e Ruby."

" Scene-graph of layered 2D interface elements manipulated in 3D space via position, grouping, transparency, scaling, clipping and rotation."

Ainda não o experimentei, mas parece bastante flexível Se procura algo para brincar.
 2
Author: waffleman, 2009-11-09 15:50:22
Usei o formato netpbm algumas vezes quando precisava de algo simples.

Foi assim que descobri que qsort() (na minha implementação e para os dados fornecidos) realiza um tipo de junção!

Qsort http://i37.tinypic.com/2rnwhnp.gif

Código-Fonte:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define ARRAY_SIZE 20
#define MAX_VALUE 10

unsigned char arr[ARRAY_SIZE];

void print_array(const void *left, const void *right) {
  static int imgs = 0;
  int k, j;
  FILE *img;
  char fname[100];
  char rgb[100];

  if (++imgs > 9999) return;
  sprintf(fname, "img/img%04d.ppm", imgs);
  /* create image in "img/" directory */
  img = fopen(fname, "w");
  if (img) {
    fprintf(img, "P3\n%d %d\n255\n", ARRAY_SIZE, MAX_VALUE);
    for (j=0; j<MAX_VALUE; j++) {
      for (k=0; k<ARRAY_SIZE; k++) {
        int colour = 0;
        if (left && left == arr+k) colour = 2;
        if (right && right == arr+k) colour = 2;
        if (arr[k] == MAX_VALUE - j - 1) colour = 1;
        switch (colour) {
          default: sprintf(rgb, "%d %d %d", 255, 255, 255); break;
          case 1: sprintf(rgb, "%d %d %d", 0, 0, 0); break;
          case 2: sprintf(rgb, "%d %d %d", 255, 0, 0); break;
        }
        }
        fprintf(img, "%s\n", rgb);
      }
    }
    fclose(img);
  } else {
    perror("img fopen");
  }
}

int cmp(const void *left, const void *right) {
  const unsigned char a = *(const unsigned char*)left;
  const unsigned char b = *(const unsigned char*)right;

  print_array(left, right);
  if (a < b) return -1;
  if (a == b) return 0;
  return 1;
}

int main(void) {
  int k;
  unsigned int seed = 0; /* or time(0) */

  srand(seed);
  for (k=0; k<ARRAY_SIZE; k++) {
    arr[k] = rand() % MAX_VALUE;
  }
  print_array(NULL, NULL);
  qsort(arr, (size_t)ARRAY_SIZE, sizeof *arr, cmp);
  print_array(NULL, NULL);
  /* use imagemagick to convert group of files to .gif */
  system("convert -delay 0"
         " img/img*.ppm"
         " -loop 1 img/libc-qsort2.gif");
  /* remove .ppm files */
  system("rm img/" "*ppm"); /* ... my editor does not like a
                                   slash and a star together,
                                   even inside quotes */

  return 0;
}
 2
Author: pmg, 2009-11-09 20:57:06

Eu recomendo o Qt GUI toolkit, juntamente com o open-source QwtPlot e QwtPlot3D . É implementado em C++, fácil de usar, extensível e livre...

 1
Author: JimDaniel, 2009-11-09 20:33:29
Olha para o PGPLOT. É velho, mas funciona muito bem e deve estar nos repos. PLPLOT é também uma opção, é semelhante e mais recente e também deve estar prontamente disponível nos repos. Ambos são extremamente poderosos e podem fazer o que você especificou.
 0
Author: stevenrjanssens, 2009-11-09 20:26:20

A maioria das pessoas usa a biblioteca gd para renderizar a partir de C, mas você deve implementar a parte "gráfico matemático".

 0
Author: Aaron Digulla, 2014-01-27 10:24:54