LINUX.ORG.RU

Си. Рисование примитивной графики

 , , ,


2

5

Требуется графическая либа для рисования примитивной графики в linux. ЯП - си. Компилятор - gcc/

Получил задание по учёбе: требуется с помощью модуля GRAPH из TurboPascal нарисовать графики функций и тд. Но я делаю лабы на чистом Си. Винды нет. Можно же наверно создать элементарное окно и вывести в подобие canvas?
Гугл внятного ничего не даёт. #include <vga.h> уже попробовал. Ошибку уже посмотрел;-) Насчёт sdl толком не понял.

★★★

смотри книжки по турбоСи которая использовала те же граф библиотеки что и turboPascal

т.е если охото сишнутся перед преподователем.

сначала запусти у себя под линухом турбопаскаль(наверно через wine?) (не fp)

и компильни короткий код использованием модуля граф. как взлетит замени с паскаля на с.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

wine то зачем? 3D усторение тоже не думаю целесообразным запускать. Программирование по программе начального уровня. Так что и городить что-то своё не нужно. Подобный нужному функционал видел в питоне. Там запускается просто окошко (как раз canvas) и рисуются в нём по пронципу «рисование пером».

Ignatov ★★★
() автор топика
Ответ на: комментарий от Ignatov

Там запускается просто окошко (как раз canvas) и рисуются в нём по пронципу «рисование пером».

Во, кстати: можешь спереть мою хренотень для рисования по экрану (использует xlib). Понтанешься, рисуя графики прямо поверх всех окон =D

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от qulinxao

Зачем мне wine? неужели так сложно выполнить задачу штатными средствами linux?

Ignatov ★★★
() автор топика
Ответ на: комментарий от Eddy_Em

дак рисовать-то нужно кружки да параболы. В мануале процедуры MoveTo (X, Y), Line (X, Y, X1, Y1: integer) и тп. Понтоваться тоже не вижу смысла. Си и Linux итак понтыXD

Ignatov ★★★
() автор топика
Ответ на: комментарий от Ignatov

Вот xlib и пользуй. Это самая элементарщина. С другой стороны, в OpenGL сможешь рисовать кошерные двумерные графики (см. мою так и не допиленную до конца fitsviewhartmann на сосфорже).

А еще можешь подключить MathGL (разработчик — ЛОРовец, кстати) и еще кошерней будет (и проще).

Ну, а таки самый примитив (в плане напряжения мозгов) — взять гнуплот и генерить им графики.

Eddy_Em ☆☆☆☆☆
()

Не проще ли турбопаскаль под досбоксом запустить? Ну или фрипаскаль с его совместимой либой.

PolarFox ★★★★★
()
Ответ на: комментарий от nagibator

А потом, делая заказчику программу по принципу «что умею», сказать «запускать нужно от рута!» ?

Ignatov ★★★
() автор топика

SDL чистый си, очень стандартная либа, мультиплатформа, собственный велосипед для простой 2Д графики, совместимость с опенгл

next_time ★★★★★
()

Винды нет.

DOSBox + TurboPascal 7 спасут тебя.

Если принципиально на С то Turbo C/C++ в руки. Все есть в торрентах

robot12 ★★★★★
()
Ответ на: комментарий от nagibator

Получил задание по учёбе

=> ему именно что шашечки

next_time ★★★★★
()
Ответ на: комментарий от Ignatov
#include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <linux/fb.h>
 #include <sys/mman.h>
 #include <sys/ioctl.h>

 int main()
 {
     int fbfd = 0;
     struct fb_var_screeninfo vinfo;
     struct fb_fix_screeninfo finfo;
     long int screensize = 0;
     char *fbp = 0;
     int x = 0, y = 0;
     long int location = 0;

     // Open the file for reading and writing
     fbfd = open("/dev/fb0", O_RDWR);
     if (fbfd == -1) {
         perror("Error: cannot open framebuffer device");
         exit(1);
     }
     printf("The framebuffer device was opened successfully.\n");

     // Get fixed screen information
     if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) {
         perror("Error reading fixed information");
         exit(2);
     }

     // Get variable screen information
     if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
         perror("Error reading variable information");
         exit(3);
     }

     printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);

     // Figure out the size of the screen in bytes
     screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;

     // Map the device to memory
     fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,
                        fbfd, 0);
     if ((int)fbp == -1) {
         perror("Error: failed to map framebuffer device to memory");
         exit(4);
     }
     printf("The framebuffer device was mapped to memory successfully.\n");

     x = 300; y = 100;       // Where we are going to put the pixel

     // Figure out where in memory to put the pixel
     for (y = 100; y < 300; y++)
         for (x = 100; x < 300; x++) {

             location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) +
                        (y+vinfo.yoffset) * finfo.line_length;

             if (vinfo.bits_per_pixel == 32) {
                 *(fbp + location) = 100;        // Some blue
                 *(fbp + location + 1) = 15+(x-100)/2;     // A little green
                 *(fbp + location + 2) = 200-(y-100)/5;    // A lot of red
                 *(fbp + location + 3) = 0;      // No transparency
             } else  { //assume 16bpp
                 int b = 10;
                 int g = (x-100)/6;     // A little green
                 int r = 31-(y-100)/16;    // A lot of red
                 unsigned short int t = r<<11 | g << 5 | b;
                 *((unsigned short int*)(fbp + location)) = t;
             }

         }
     munmap(fbp, screensize);
     close(fbfd);
     return 0;
 }
robot12 ★★★★★
()

ах да

требуется с помощью модуля GRAPH из TurboPascal

и

ЯП - си

== /0

поэтому, нужно подойти к преподавателю и выпросить разрешение выполнить лабу на удобном для вас инструменте. кстати, по моему опыту, это будет плюсом, в смысле дальнейшего отношения к вам преподавателя.

next_time ★★★★★
()
Ответ на: комментарий от qulinxao

для никсов

X, сам по себе, как никс :) нажива оно надо если есть fb ?

robot12 ★★★★★
()
Ответ на: комментарий от qulinxao

Все верно, graphics.h и примитивы, те же что и в Turbo Pascal

robot12 ★★★★★
()
Ответ на: комментарий от qulinxao

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

next_time ★★★★★
()
Ответ на: комментарий от ados

cairo

+1 , и примеров до е-матери, и более-менее идеалогически близка graph

ps/ за подход «задача - сделать заданными средствами на pascal под заданную ОС, но я дартаньян и сам знаю что делать» я бы вкатал 2 за профнепригодность. pascal кстати весьма уместен и есть под linux.

pps/ для расширения сознания могу посоветовать на С генерять PostScript который рисует график

ppps/ тех.термин «e-мать» надо срочно копирайтить и стричь бабло :-)

MKuznetsov ★★★★★
()
Ответ на: комментарий от next_time

Угу. Задал препод французского языка написать сочинение. А ТС ему припирает сочинение на смеси ниппонского и корейского.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

на смеси ниппонского и корейского.

А что уж тогда не «хангукского»?

i-rinat ★★★★★
()

Обязательно рисовать на экран? В файл какой-нибудь нельзя?

crutch_master ★★★★★
()

И почему ты делаешь лабы на сях? У вас же паскаль преподают? А если взять линуксовый Freepascal?

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от Ignatov

да. даже вебсерверы требуют рута, ты не знал?

anonymous
()
Ответ на: комментарий от anonymous

Тогда придется писать на американском.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от next_time

Те же яйца, только в профиль!

Он изучает не предмет "программирование

Eddy_Em ☆☆☆☆☆
()

будет намного полезней, если ты вместо ренегатсва устранишь бардак в своей голове. а потом уже сделаешь хоть на том же паскале под виндой, хоть на SDL.

и да «программирование» в расейских «ВУЗах» такое погромирование... убиватЪ.

anonymous
()
Ответ на: комментарий от next_time

поэтому, нужно подойти к преподавателю и выпросить разрешение выполнить лабу на удобном для вас инструменте. кстати, по моему опыту, это будет плюсом, в смысле дальнейшего отношения к вам преподавателя.

именно этого я прошу;-) выполнить лабу на удобном для вас инструменте! Вот и интересует какой инструмент удобный.

требуется с помощью модуля GRAPH из TurboPascal

это формулировка как есть дословно из текста! Но разрешение делать не в TurboPascal, а в си я получил

Ignatov ★★★
() автор топика
Ответ на: комментарий от next_time

Уведомил! сказали даже лучше. Преподаватель си даже больше нравится. Притом т.к. все пишут в паскеле - остальные точно у меня не сольют, а значит сделают сами! Мне же - практика программирования на си.

Ignatov ★★★
() автор топика
Последнее исправление: Ignatov (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.