2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 18:04 
Заслуженный участник


02/08/11
7013
Цитата:
Содержит бинарный и исходный пакет Qt 5.x и последнюю версию Qt Creator
И причём тут загадочная сущность под названием "Qt C++"?

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 18:32 
Заслуженный участник


27/04/09
28128
Кстати, сегодня воистину день déjà vu: раз, два.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 20:30 


27/08/14
207
Хотя Qt и является фреймворком, для его использования нужен дополнительный препроцессор - moc, который расширяет С++ добавляя несколько ключевых слов. Вот это расширение обычно и называют "Qt C++", хоть это и не имеет большого смысла.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 20:33 


28/04/16

57
arseniiv в сообщении #1151422 писал(а):
Кстати, сегодня воистину день déjà vu: раз, два.

Да, это я. Можете банить.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 21:04 
Заслуженный участник


02/08/11
7013
Progger в сообщении #1151438 писал(а):
Вот это расширение обычно и называют "Qt C++"
Это явно не то, что имел в виду petrov_ich.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 22:06 
Заслуженный участник


09/05/12
25179
 ! 
petrov_ich в сообщении #1151439 писал(а):
arseniiv в сообщении #1151422 писал(а):
Кстати, сегодня воистину день déjà vu: раз, два.

Да, это я. Можете банить.
Хорошо. petrov_ich забанен как клон ранее заблокированного пользователя Alexu007

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение17.09.2016, 23:25 
Заслуженный участник


18/01/15
3237
Хотя хороший совет уже получен, рискну задать еще вопрос.

Я когда-то, очень давно, купил книжку "Язык Си для профессионалов", как было написано в подзаголовке, "по материалам
книги Г.Шилдта". Там описывалось программирование на Си на довольно низком уровне, в том числе графики. Графические
функции реализовывались через прямую запись в видеопамять. Например, там есть такая функция:

Код:
void mempoint(x,y,color_code)
int x,y,color_code;
{
  union mask {char c[2]; int i;} bit_mask;
  int i, index, bit_position;
  unsigned char t;
  char xor;
  char far *ptr=(char far *)0xB8000000;
  bit_mask.i=0xFF3f;

  if(x<0 || x>199 || y<0 || y>319) return;
  xor=color_code & 128;
  color_code=color_code & 127;

  bit_position=y%4;
  color_code<<=3*(3-bit_position);
  bit_mask.i>>=2*bit_position;

  index=x*40+(y%4);
  if(x%2) index+=8152;

  if(!xor) {
    t=*(ptr+index) & bit_mask.c[0];
    *(ptr+index)=t|color_code;
  }
  else {
    t=*(ptr+index)|(char)0;
    *(ptr+index)=t & color_code;
  }

}


(в тексте есть еще многочисленные комментарии к различным строкам функции (как наверное и должно быть в учебнике),
которые я опустил). Далее в упомянутой книге объясняется алгоритм Брезенхама и т.д. Я мог бы написать то, что было мне надо,
с помощью Шилдта. Но то, что написано в Шилдте, ориентировано на CGA/EGA, DOS и 8088/8086, что сейчас не используется.
Поэтому у меня такой вопрос: знаете ли вы какое-нибудь пособие, желательно потолще (в смысле попонятнее), где
объясняется программирование графики на Си на низком уровне, применительно к современному оборудованию и ПО? Т.е. что-то
аналогичное книге Шилдта, но для сегодняшнего дня?

(Правда, сейчас я, видимо, для решения первоначальной проблемы воспользуюсь способом с PostScript. Однако должен сказать,
что у меня периодически появляется желание узнать поподробнее, что происходит внутри компьютера вообще. Я даже скачал
несколько книжек, по косвенным признакам неплохих, об ассемблере и системном программировании).

Заранее спасибо. vpb.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение17.09.2016, 23:30 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
vpb в сообщении #1152023 писал(а):
узнать поподробнее, что происходит внутри компьютера вообще
Советую: Чарльз Петцольд. «Код». Эта книга помогла мне по-настоящему понять, как функционирует ЭВМ.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 00:33 
Аватара пользователя


31/10/08
1244
vpb
Даю самый простой и краткий ответ взять компонент Chart (QtCharts, TChart, Chart) найти пример в интернете и вот вам готовый график. Никто всё сам, уже давно не рисует. Все берут готовые работы, готовые компоненты.
http://www.labfor.ru/articles/leso4_qtcharts

Нету такой книге, которая бы вам дала ответ на ваш вопрос. Хотя вопрос с одной стороны очень прост с другой очень сложен.
Си вам не подходит. В стандарте Си не предусмотрена графическая библиотека.

Это не значит, что на Си нельзя сделать.
1) К примеру если вы умете читать и писать в файлы. То вы можете сформировать файл формата *.BMP.
2) Использовать WinAPI создать форму и нарисовать на ней всё что нужно. Долгий путь.
3) Напрямую нарисовать в видео памяти как в книге "Язык Си для профессионалов". Одна беда нужен ДОС, а сейчас его можно найти только в эмуляторе. Встроенный в виндоус эмулятор доса NTVDM не годится. На первых порах сгодится DosBox. Но тут есть ряд проблем: мало цветов и маленькое разрешение и тд.

Путь по проще, во всяком случае по современнее. Взять C++ Builder или QT или VS++. Рекомендую QT.
Под каждую среду делается это по своему. Да и вариантов там много.

Набрал в поисковике Builder Canvas вот что получил
http://wladm.narod.ru/Borland/graphicksborland.html

Если наберёте в интернете Алгоритм Брезенхема + Builder вместо Builder можно QT или VS++ то найдёте массу примеров.
http://code-shock.blogspot.ru/2014/04/l ... nhams.html

Цитата:
где
объясняется программирование графики на Си на низком уровне, применительно к современному оборудованию и ПО? Т.е. что-то
аналогичное книге Шилдта, но для сегодняшнего дня?

Современные реалии таковы, что напрямую поработать с железом как в ДОС вам не дадут. Да и изменилось и усложнилось оно.
А по поводу книги, так надо искать. Книг сейчас много, а статей ещё больше.

Есть сайты по алгоритмам. Есть книги по созданию компонентов. Да и много всего другого.
https://habrahabr.ru/post/248153/
http://algolist.manual.ru/graphics/index.php
http://algolist.manual.ru/graphics/3dfaq/
http://www.antigrain.com/
Так как вопрос поставлен очень широко, то ограничусь этими ссылками.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 00:49 
Заслуженный участник


27/04/09
28128
Странно, что никто до сих пор не насоветовал SVG. :mrgreen:

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 00:56 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Как это не насоветовал?
Sphinx Pinastri в сообщении #1151055 писал(а):
А дальше Postscript можно преобразовать в PDF, SVG или любой растровый формат.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 00:59 
Заслуженный участник


27/04/09
28128
Немудрено, что я упустил, ведь там речь о преобразовании из ps. Но почему бы не поизвращаться и не погенерировать сразу ужасныйъ XML SVG? (В принципе, это не такой уж плохой совет в общем случае — но здесь…)

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 01:01 
Заслуженный участник


02/08/11
7013
vpb в сообщении #1152023 писал(а):
Т.е. что-то
аналогичное книге Шилдта, но для сегодняшнего дня?
Вы и сегодня можете работать с оборудованием на низком уровне, но в этом слечае ваша программа должна быть запущена без прослойки в виде операционной системы. Это не так уж сложно, но зачем? Гораздо удобнее, когда можно на одном и том же компьютере запустить вашу программу совместно с множеством других (браузером, проигрывателем музыки и т. д.) — а для этого она должна работать под управлением операционной системы и работать с оборудованием с её помощью. И тут повляется несколько альтернатив.

Во-первых, если вы пользуетесь Windows и не заинтересованы в кросплатформенности (то есть в том, чтобы вашу программу можно было запустить в других ОС), то вы можете писать программы, используя WinAPI — это весьма низкоуровневый интерфейс. Я не думаю, что вы найдёте сильно толстую книжку для этого случая (я такой не знаю, во всяком случае), но кое-что найти можно (я постараюсь подкинуть пару ссылок чуть позже — надо будет найти свои старые записи).

Во-вторых можно удариться в OpenGL. Это универсальный кросплатформенный интерфейс для высокопроизводительной работы с графикой — трёхмерной и двухмерной. Когда в своё время я столкнулся с той же проблемой, что и вы, я выбрал этот вариант и не пожелел: здесь есть и хардкор (низкоуровневость) и результат можно получить отличный. Я очень рекомендую вот эти уроки: http://pmg.org.ru/nehe/. Вообще, перед этими уроками всё-таки желательно освоить WinAPI хотя бы на базовом уровне: уметь создавать простые программы с парой кнопок и т. п., так как прежде чем воспользоваться функциями OpenGL вам нужно будет как минимум создать окно, в котором вы будете дальше рисовать — это делается с помощью WinAPI, и работа с клавиатурой и мышью также производится с помощью WinAPI, но в общем можно попробовать и с наскоку — минимум необходимой информации в этих уроках есть.

Наконец, можно просто научиться писать графические приложения, используя библиотеку GTK+. Такие приложения будут работать и на Windows, хотя они могут выглядеть несколько чужеродно. А вот для Linux/BSD это наинативнейший вариант. В общем, в вашем случае я рекомендую этот вариант только если вы используете unix-подобную ОС.

Ещё один вариант, также ориентированный в основном на unix-подобные ОС — библиотека SDL, причём её можно сочетать с OpenGL. Когда я делал кроссплатформенные OpenGL-приложения, то для Linux я как раз использовал подобную связку (SDL+OpenGL). То есть отрисовка производится с помощью OpenGL, а создание окна приложения, вывод звука, работа с клавитурой и мышью — это всё делается с помощью SDL (а в Windows, как я уже говорил выше, с помощью WinAPI).

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 01:07 
Заслуженный участник


27/04/09
28128
Кроме SDL есть, кажется, ещё несколько кросс-платформенных (SDL же кросс-платформенная, не только для *nix годится) обёрток над OpenGL/другими подобными штуками. Разной степени низкоуровневости. Если нужны только виндовсы и притом с поставленным .net framework, есть WPF и (низкоуровнее и шире, насколько я понимаю — не пробовал) XNA. Правда, это просто на всякий случай для кого-нибудь ещё, потому что сомневаюсь, что с C легко сразу перемахнуть на .net-языки.

 Профиль  
                  
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 02:27 
Заслуженный участник
Аватара пользователя


16/07/14
9207
Цюрих
arseniiv в сообщении #1152046 писал(а):
Но почему бы не поизвращаться и не погенерировать сразу ужасныйъ XML SVG?

mihaild в сообщении #1151260 писал(а):
Гораздо проще взять любой стандартный формат картинок (тот же PNM тоже тут подойдет), и сгенерировать файл в нем.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group