Некоторые преимущества LINQ по sprocs:
Некоторые недостатки LINQ по сравнению с sprocs:
безопасность и управляемость - что-то, о чем спорят люди также.
я раньше был крупным sproc парнем, но я начинаю склоняться к LINQ как к лучшей альтернативе в целом. Если будут некоторые области, где sprocs ясно лучше, то я, вероятно, все еще запишу sproc, но получу доступ к нему с помощью LINQ.:)
Для построения 2D и 3D графиков в CI я бы рекомендовал библиотеку DISLIN . Вы можете увидеть примеры здесь или там .
Код довольно прост в использовании и дает хорошие результаты.
Мне нравится Каирская библиотека . Он имеет приятный интерфейс с C и может выводить данные во многих форматах.
Этот вопрос немного расплывчатый, «графика» - это широкое поле. Вы можете довольно далеко продвинуться, используя простой SDL , но его также можно считать «слишком низкоуровневым». Вам необходимо предоставить дополнительные требования.
Есть Беспорядок . Вот несколько отрывков со страницы about:
«Clutter - это программная библиотека с открытым исходным кодом для создания быстрых, визуально насыщенных, переносимых и анимированных графических пользовательских интерфейсов».
«Clutter стремится быть неопределенным - он не реализует конкретный стиль пользовательского интерфейса, а скорее обеспечивает богатую общую основу, которая облегчает быстрое и легкое создание наборов инструментов более высокого уровня, адаптированных к конкретным потребностям ».
« Разработано на C, с языковыми привязками для Perl, Python, C #, C ++, Vala и Ruby ».
« Граф сцены из слоистых 2D-элементов интерфейса, управляемых в 3D-пространстве с помощью положения, группировки, прозрачности, масштабирования, отсечения и вращения ».
Я сам не пробовал,
Я использовал формат netpbm несколько раз, когда мне нужно было что-то простое.
Вот как я узнал, что 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;
}
Большинство людей используют библиотеку gd для рендеринга из C, но вы должны реализовать часть «математического построения».
Взгляните на PGPLOT. Он старый, но отлично работает и должен быть в репозиториях. PLPLOT также является вариантом, он похож и новее, а также должен быть легко доступен в репозиториях. Они оба чрезвычайно сильны и могут делать то, что вы указали.
Я рекомендую Qt набор инструментов GUI в сочетании с QwtPlot и QwtPlot3D с открытым исходным кодом. Он реализован на C ++, прост в использовании, расширяемый и бесплатный ...