2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 18:04 
Цитата:
Содержит бинарный и исходный пакет Qt 5.x и последнюю версию Qt Creator
И причём тут загадочная сущность под названием "Qt C++"?

 
 
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 18:32 
Кстати, сегодня воистину день déjà vu: раз, два.

 
 
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 20:30 
Хотя Qt и является фреймворком, для его использования нужен дополнительный препроцессор - moc, который расширяет С++ добавляя несколько ключевых слов. Вот это расширение обычно и называют "Qt C++", хоть это и не имеет большого смысла.

 
 
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 20:33 
arseniiv в сообщении #1151422 писал(а):
Кстати, сегодня воистину день déjà vu: раз, два.

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

 
 
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 21:04 
Progger в сообщении #1151438 писал(а):
Вот это расширение обычно и называют "Qt C++"
Это явно не то, что имел в виду petrov_ich.

 
 
 
 Re: Как нарисовать график?
Сообщение15.09.2016, 22:06 
 ! 
petrov_ich в сообщении #1151439 писал(а):
arseniiv в сообщении #1151422 писал(а):
Кстати, сегодня воистину день déjà vu: раз, два.

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

 
 
 
 Re: Как нарисовать график?
Сообщение17.09.2016, 23:25 
Хотя хороший совет уже получен, рискну задать еще вопрос.

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

Код:
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 
Аватара пользователя
vpb в сообщении #1152023 писал(а):
узнать поподробнее, что происходит внутри компьютера вообще
Советую: Чарльз Петцольд. «Код». Эта книга помогла мне по-настоящему понять, как функционирует ЭВМ.

 
 
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 00:33 
Аватара пользователя
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 
Странно, что никто до сих пор не насоветовал SVG. :mrgreen:

 
 
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 00:56 
Аватара пользователя
Как это не насоветовал?
Sphinx Pinastri в сообщении #1151055 писал(а):
А дальше Postscript можно преобразовать в PDF, SVG или любой растровый формат.

 
 
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 00:59 
Немудрено, что я упустил, ведь там речь о преобразовании из ps. Но почему бы не поизвращаться и не погенерировать сразу ужасныйъ XML SVG? (В принципе, это не такой уж плохой совет в общем случае — но здесь…)

 
 
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 01:01 
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 
Кроме SDL есть, кажется, ещё несколько кросс-платформенных (SDL же кросс-платформенная, не только для *nix годится) обёрток над OpenGL/другими подобными штуками. Разной степени низкоуровневости. Если нужны только виндовсы и притом с поставленным .net framework, есть WPF и (низкоуровнее и шире, насколько я понимаю — не пробовал) XNA. Правда, это просто на всякий случай для кого-нибудь ещё, потому что сомневаюсь, что с C легко сразу перемахнуть на .net-языки.

 
 
 
 Re: Как нарисовать график?
Сообщение18.09.2016, 02:27 
Аватара пользователя
arseniiv в сообщении #1152046 писал(а):
Но почему бы не поизвращаться и не погенерировать сразу ужасныйъ XML SVG?

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

 
 
 [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group