Графическая библиотека в C

Некоторые преимущества LINQ по sprocs:

  1. Безопасность с точки зрения типов : Я думаю, что все мы понимаем это.
  2. Абстракция : Это особенно верно с LINQ-to-Entities. Эта абстракция также позволяет платформе добавлять дополнительные улучшения, которые можно легко использовать в своих интересах. PLINQ является примером добавляющей поддержки многопоточности LINQ. Изменения кода минимальны для добавления этой поддержки. Было бы НАМНОГО более трудно сделать этот код доступа к данным, который просто называет sprocs.
  3. поддержка Отладки : Я могу использовать любой отладчик.NET для отладки запросов. С sprocs Вы не можете легко отладить SQL, и тот опыт в основном связывается с Вашим поставщиком базы данных (SQL Server MS предоставляет запросу анализатор, но часто который не является достаточно).
  4. агностик Поставщика : работы LINQ с большим количеством баз данных и количеством поддерживаемых баз данных только увеличатся. Sprocs являются не всегда портативными между базами данных, или из-за переменного синтаксиса или из-за поддержки функции (если поддержка БД sprocs вообще).
  5. Развертывание : Другие уже упомянули это, но легче развернуть единственный блок, чем развернуть ряд sprocs. Это также соединяется с № 4.
  6. , Легче : Вы не должны изучать T-SQL, чтобы сделать доступ к данным, и при этом Вы не должны изучать API доступа к данным (например, ADO.NET) необходимый для вызова sprocs. Это связано с № 3 и № 4.

Некоторые недостатки LINQ по сравнению с sprocs:

  1. Сетевой трафик : sprocs должны только сериализировать sproc-имя и данные аргумента по проводу, в то время как LINQ отправляет весь запрос. Это может стать действительно плохим, если запросы очень сложны. Однако абстракция LINQ позволяет Microsoft улучшать это со временем.
  2. менее гибкий : Sprocs может в полной мере воспользоваться featureset базы данных. LINQ имеет тенденцию быть более универсальным в, он - поддержка. Это распространено в любом виде абстракции языка (например, C# по сравнению с ассемблером).
  3. Перекомпиляция : Если необходимо внести изменения в способ, которым Вы делаете доступ к данным, необходимо перекомпилировать, присвоить версию и повторно развернуть блок. Sprocs может иногда , позволяют DBA настраивать стандартную программу доступа к данным без потребности повторно развернуть что-либо.

безопасность и управляемость - что-то, о чем спорят люди также.

  1. безопасность : Например, можно защитить уязвимые данные путем ограничения доступа к таблицам непосредственно и поместить ACLs на sprocs. С LINQ, однако, можно все еще ограничить прямой доступ к таблицам и вместо этого поместить ACLs на обновляемые представления таблицы для достигания подобной цели (принимающий поддержку БД обновляемые представления).
  2. Управляемость : Используя представления также дает Вам преимущество защиты Вашего приложения, неразрывного от изменений схемы (как нормализация таблицы). Можно обновить представление, не требуя, чтобы код доступа к данным изменился.

я раньше был крупным sproc парнем, но я начинаю склоняться к LINQ как к лучшей альтернативе в целом. Если будут некоторые области, где sprocs ясно лучше, то я, вероятно, все еще запишу sproc, но получу доступ к нему с помощью LINQ.:)

14
задан Jonathan Leffler 9 November 2009 в 15:49
поделиться

8 ответов

Для построения 2D и 3D графиков в CI я бы рекомендовал библиотеку DISLIN . Вы можете увидеть примеры здесь или там .

Код довольно прост в использовании и дает хорошие результаты.

3
ответ дан 1 December 2019 в 14:11
поделиться

Мне нравится Каирская библиотека . Он имеет приятный интерфейс с C и может выводить данные во многих форматах.

5
ответ дан 1 December 2019 в 14:11
поделиться

Этот вопрос немного расплывчатый, «графика» - это широкое поле. Вы можете довольно далеко продвинуться, используя простой SDL , но его также можно считать «слишком низкоуровневым». Вам необходимо предоставить дополнительные требования.

2
ответ дан 1 December 2019 в 14:11
поделиться

Есть Беспорядок . Вот несколько отрывков со страницы about:

«Clutter - это программная библиотека с открытым исходным кодом для создания быстрых, визуально насыщенных, переносимых и анимированных графических пользовательских интерфейсов».

«Clutter стремится быть неопределенным - он не реализует конкретный стиль пользовательского интерфейса, а скорее обеспечивает богатую общую основу, которая облегчает быстрое и легкое создание наборов инструментов более высокого уровня, адаптированных к конкретным потребностям ».

« Разработано на C, с языковыми привязками для Perl, Python, C #, C ++, Vala и Ruby ».

« Граф сцены из слоистых 2D-элементов интерфейса, управляемых в 3D-пространстве с помощью положения, группировки, прозрачности, масштабирования, отсечения и вращения ».

Я сам не пробовал,

2
ответ дан 1 December 2019 в 14:11
поделиться

Я использовал формат netpbm несколько раз, когда мне нужно было что-то простое.

Вот как я узнал, что qsort () (в моей реализации и для предоставленных данных) выполняет сортировку слиянием!

qsort

Исходный код:

#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
ответ дан 1 December 2019 в 14:11
поделиться

Большинство людей используют библиотеку gd для рендеринга из C, но вы должны реализовать часть «математического построения».

0
ответ дан 1 December 2019 в 14:11
поделиться

Взгляните на PGPLOT. Он старый, но отлично работает и должен быть в репозиториях. PLPLOT также является вариантом, он похож и новее, а также должен быть легко доступен в репозиториях. Они оба чрезвычайно сильны и могут делать то, что вы указали.

0
ответ дан 1 December 2019 в 14:11
поделиться

Я рекомендую Qt набор инструментов GUI в сочетании с QwtPlot и QwtPlot3D с открытым исходным кодом. Он реализован на C ++, прост в использовании, расширяемый и бесплатный ...

1
ответ дан 1 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: