source - project with opengl




مكتبة الرسومات في C (6)

كنت أتساءل عما إذا كان هناك أي مكتبات رسومات حرة جيدة ل C التي هي سهلة الاستخدام؟ انها للتآمر الرسوم البيانية 2D و 3D ثم حفظ إلى ملف. انها على نظام لينكس وليس هناك غنوبلوت على النظام الآن.

أم أنه سيكون من الأسهل للتبديل إلى لغة أخرى، وإذا كان الأمر كذلك أي واحد سيكون من السهل على التعلم؟


أحب مكتبة القاهرة . أنه يحتوي على واجهة جميلة ل C وأنه يمكن إخراج في العديد من الأشكال.


أوصي مجموعة أدوات واجهة المستخدم الرسومية كيو تي ، إلى جانب المصدر المفتوح كوتبلوت و QwtPlot3D . انها تنفذ في C ++، سهلة الاستخدام، قابلة للتوسيع، ومجانا ...


لقد استخدمت تنسيق نيتبم عدد قليل من الوقت عندما كنت في حاجة الى شيء بسيط.

هذه هي الطريقة التي اكتشفت أن qsort() (في تنفيذه والبيانات المقدمة) ينفذ نوع الدمج!

كسورت http://i37.tinypic.com/2rnwhnp.gif

مصدر الرمز:

#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;
}

معظم الناس استخدام مكتبة غ لتقديم من C ولكن يجب تنفيذ "الرياضيات بالتآمر" جزء.


هذا السؤال غامض بعض الشيء، "الرسومات" هو مجال واسع. يمكنك الحصول على بعيدا جدا باستخدام سدل عادي فقط، ولكن يمكن أيضا أن تعتبر "منخفضة جدا على مستوى". تحتاج إلى توفير المزيد من المتطلبات.


هناك فوضى . في ما يلي بعض المقتطفات من الصفحة حول:

"فوضى هي مكتبة البرمجيات مفتوحة المصدر لخلق سريعة، بصريا غنية، المحمولة والرسوم المتحركة واجهات المستخدم الرسومية."

"فوضى تهدف إلى أن تكون غير محددة - فإنه لا يطبق أسلوب واجهة المستخدم معين، وإنما يوفر الأساس العام الغني الذي يسهل إنشاء سريعة وسهلة للمجموعات أدوات مستوى أعلى مصممة خصيصا لتلبية الاحتياجات المحددة."

"وضعت في C، مع ربط اللغة بيرل، بايثون، C #، C ++، فالا وروبي."

"المشهد الرسم البياني من عناصر واجهة 2D الطبقات التلاعب في الفضاء 3D عبر الموقف، والتجمع، والشفافية، والتحجيم، لقطة والتناوب."

أنا لم أحاول نفسي، ولكن يبدو مرنا جدا إذا كنت تبحث عن شيء فقط للعب حولها.





graphics