Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
#1

Как нарисовать график функции? - C++

12.03.2014, 19:27. Просмотров 2157. Ответов 6
Метки нет (Все метки)

Привет всем. Учусь программированию всего пол года. И тут мне дают задание - написать программу для рисования графика функции y=x. Скажите, чтобы написать программу, нужны графические библиотеки? Я не хочу, чтоб вы писали программу за меня. Просто скажите, какую лучше библиотеку установить? И можно ли как-то обойтись без них? И последний вопрос. Библиотеку DirectX будет трудно освоить новичку? Извините за такое большое количество вопросов. Заранее спасибо за ответ.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 19:27     Как нарисовать график функции?
Посмотрите здесь:

Как нарисовать график функции? - C++
Edit1->Text == "x*x"; int x; Как нарисовать график функции int y = Edit1->Text;

Как нарисовать график функции ? - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include "graphics.h" #include <windows.h> #include <string> ...

Как в Visual C++ 2012 нарисовать линию или график функции - C++
Я новичок в MVisual c++, только запустил ее и не знаю как создать событие для рисования. В QT все просто - создается событие для рисования ...

Нарисовать график функции - C++
Написать программу, которая выводит на экран точечный график функции y= √x. Диапазон изменения аргумента – от 0 до 5, шаг аргумента – 0.5....

Нарисовать график функции в консоли - C++
Добрый день. Задание следующее: протабулировать функции y=sin|x|,y=cos|x|. Нарисовать графики этих функций. Возникли следующие вопросы:что...

Нарисовать график функции в отдельном окне - C++
Есть у меня две double функции, которые принимают на вход х, а возвращают координату по y. мне нужно нарисовать график функции по точкам....

Как нарисовать график? - C++
У меня заданы функции: y1=a0+a1*x/exp(1/x) y2=a0+a1*log(sqrt(x)) и массив известных значений У a0,a1 известны, x- заданный массив ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dogg12
62 / 28 / 6
Регистрация: 21.02.2011
Сообщений: 736
12.03.2014, 22:10     Как нарисовать график функции? #2
Sh@dow777,
C++
1
2
3
4
5
6
7
8
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
12.03.2014, 23:08  [ТС]     Как нарисовать график функции? #3
Извините, а можно поподробнее?=) Я повторюсь - учусь всего лишь полгода. Знаю пока немного. Где мне можно посмотреть команды для рисования?
dogg12
62 / 28 / 6
Регистрация: 21.02.2011
Сообщений: 736
13.03.2014, 10:39     Как нарисовать график функции? #4
Позволю себе немного копи-паста)

1) Библиотека graphcs.h
Кликните здесь для просмотра всего текста
Опираясь на знаниях, полученных давным давно в институте, я помнил что была, была в C++ либа graphics.h, которая что-то такое умела. Н-но!... (Ультразвуком, в подражание Радзинскому...) Н-но-о... Это было давно и неправда, библиотека устарела. Да и расчитана она была на рисование на VGA-экране, а не картинки в файл, многопоточно, под x64. Все течет все меняется... Как бы то ни было, мне эта либа не подходила.


2) ImageMagick
Кликните здесь для просмотра всего текста
ImageMagick - первое что предлагает Гугл начинающему погроммисту. Я тоже подумл, что это может быть клево - пром.стандарт, поддержка всего, всё такое... Но я ошибался. Несмотря на картинку милого дедушки в колпаке волшебника, обширные рекомендации дедушек с habrahabr и обширную документацию на оф.сайте, библиотека, скажу честно, поганая. То есть - как сказать... После того как сорцы библиотеки откомпилированны, получается в общем-то неплохой набор утилит для конвертации и прочих изощрений над картинками из командной строки (Linux-style). И откомпилированные бинарники уже есть, даже и с красивым виндовым инсталлятором. Но - главный и основной недостаток - API Magick++ никак не доступно в уже готовых скомпиллированных версиях. Чтобы получить нормальный набор подключаемых библиотек, ты должен скачать сорц и скомпиллировать его. И вот тут-то и начинаются проблемы.

В качестве IDE для разработки я использую CodeBlocks, в связке с компиллятором MinGW32 или -64. Мне нравится CodeBlocks, он удобный, работоспособный, MinGW - это хороший компиллер, всё работает просто, надежно, классно. НО! ImageMagick под ним не компиллится. Никак. И об этом даже написано на форуме разработчиков. А в ответ на прямой вопрос разрабы ответили столь же прямо: "Ну низнаю, мы юзаем Visual Studio C++ 2k8 и у нас всё работает!.."

После таких гордых заявок сразу стало понятно что это не мой выбор.


3) GraphicsMagick
Кликните здесь для просмотра всего текста
GraphicsMagick - форк от предыдущего нашего подопытного, ImageMagick, перепиленный для вящей стабильности, поддержки многопоточности и т.п. На логотипе GM красуется жирная жаба.

Также как и предыдущий подопытный, не работает. Кроме того, я не нашел в бинарниках версии под Winx64. Короче - жаба она и есть жаба. Не наш выбор.


4) CImg
Кликните здесь для просмотра всего текста
CImg - творение одного немецкого программиста. Библиотечка призвана облегчить работу с перенаворочанной ImageMagick, и требует наличия на компьютере оной, пусть даже установленной из бинарников. По словам разработчика, задачей было обеспечить максимальное удобство и простоту в подключении, работе и действиях с либой. ИЧСХ, отчасти ему удалось этого добиться - подключение действительно простейшее. Библиотечка вся собственно состоит из одного массивненького заголовочного файла CImg.h, который просто подтыкаешь к проекту и юзаешь. Но вот когда дело доходит до программирования, становится грустно. Сразу начинает ощущаться ДОВЛЕНИЕ сумрачного тевтонского гения. Угрюмая документация угрюма, функции единственного класса CImg, отвечающего практически за всё, угрюмы еще более и перегружены по уши.

Тем не менее, если ваш гений не менее сумрачен и довлеющ, разобраться можно. И это действительно работает. Но мне, скажу честно, эта библиотека показалась неудобной, переусложненной для моих целей.


5) OpenCV
Кликните здесь для просмотра всего текста
О-о-о, это песня! Дедушки с хабры часто советуют салагам юзать этот пакет, дабы обрабатывать картинки как настоящие джыдаи. Но - черт побери, зачем?! Open CV даже в запакованном состоянии весит 250 метров, и страшно подумать сколько в распакованном, а главное - это же, черт побери, библиотека для обеспечения зрения роботам! Да, помимо прочего она таки работает под x64, и умеет обрабатывать картинки, да... Но - использовать её чтобы рисовать линии и сохранять jpg - это колоть орехи микроскопом! OpenCV - очень интересная для меня вещь, так как я хочу с её помощью реализовать несколько амбициозных проектов связанных с игровыми устройствами для ПК, но в данном случае использовать её смешно и нелепо.


6) FreeImage
Кликните здесь для просмотра всего текста
FreeImage - это небольшая и аккуратная библиотека для манипулирования картинками. Она позиционируется как универсальная библиотека для работы с изображениями, и, что характерно, это почти что так и есть. Первоначально библиотека написана на C, но есть врапперы, не только на C++, но и на Delphi, и на VB. Библиотека сделана скромненько и чистенько, классы и методы удобны и интуитивно понятны, но есть одно важное "но". Библиотека обрабатывает изображения, конвертирует их, поворачивает, и т.п., но не рисует. Использовать стоит, если хотите сделать просматривальщик картинок.


7) ImageStone
Кликните здесь для просмотра всего текста
ImageStone - тащемта, то же самое, что и описанный выше FreeImage. Отличия в том что представляет собой единый класс, и писано изначально на C++. В остальном примерно то же самое, разве что доступных эффектов побольше. В целом мило, но опять же, не рисует. На любителя.


8) Предложения от Micro$oft
Кликните здесь для просмотра всего текста
Перебрав 7 вариантов и не найдя ничего толкового, я задумался. Это выглядело уже как-то нездорово - неужели для С++ нет какой-то простой, примитивной библиотеки, которая способна нарисовать на картинке простую линию и простой квадратик, без каких-то безумных классов, корявых врапперов, кибернетического зрения, привязки к контрольным точкам и прочих афинных преобразований? То есть (исходя из своего опыта) я предполагал, что вполне возможно что и нет, но верить в это не хотелось. Я полез на сайт Micro$oft в MSDN и TechNet. Известно же, что редмондский софтверный джаггернаут за время своего бесконечного существования наклепал бесконечное количество кода для абсолютно любых случаев жизни...

Я вот выше заметил что, мол, нездорово. Так вот, дорогие кинослушатели, это еще - не нездорово, это еще очень даже ничего было!..

M$ предлагает несколько вариантов кода для работы с изображениями, и варианты эти один, кхм, эзотеричнее другого.

В качестве стандартизированного современного метода нам предлагается графика на базе Direct2D. Спору нет, это всё мило. Но посмотрите на объем кода! Это что, чтобы нарисовать один квадратик, я должен накопипастить всю эту, простите, копипасту?! Это как в старом еврейском анекдоте:
“Приходят два еврея к раввину, Изя и Моня.

Моня: Рабби, Изя меня обозвал дураком! Таки не годится так!

Раввин: Таки да. Изя, такь нельзя! Сейчас же скажи что Моня не дурак, и извинись.

Изя: Моня? Не дурак?! Ну извините!..


Так и здесь - ну извините!..

Помимо совсем уж эзотерического современного метода есть и более традиционные, старые методы, такие как GDI, GDI+ и т.п. Почитать о них можете здесь. Вообще нельзя сказать, что они намного уж менее эзотерические, но таково любое программирование под продукцию Micro$oft.

А вообще говоря, прямо насмехаться над таким кодом не очень корректно. Несмотря на сложность и громоздкость, код от M$ обычно весьма универсальный, предназначен для максимальной функциональности и опирается на всю мощь окружающей его винды. Да, это сделано в ущерб простоте. Но с другой стороны, позволяет в нескольких командах использовать всю мощь современного железа и результаты объединенного труда тысяч микрософтовских кодеров.

Другое дело, что для моих задач разбирать наскальную живопись M$ было неинтересно.


9) EasyBMP.
Кликните здесь для просмотра всего текста
Я уже было приуныл, думая что придется либо возиться с D2D от M$ (если уж писать, то на основе клевой технологии, использующей мощь видяхи!), или писать что-то своё (по традиции, изобретая очередной атомный велосипед с восемью додекаэдрическими колесами и фисташковым охлаждением), но тут мне попалась ссылка на EasyBMP.

Что это такое? Это маленькая библиотека на C++, предназначенная для создания файлов .BMP и рисования в них. Добавляется к проекту легко, работает быстро. Несколько огрочало отсутствие инструментов для рисования линий и заливки всей картинки, но дополнительный класс быстро сыскался в расширениях к библиотеке, правда, для моих задач методы рисования линий пришлось слегка поправить чтоб работали быстрее (профиксить использование алгоритмов Брезенхема для вертикальных линий), а метод для заливки я сварганил сам за 3 минуты.

Обращаю ваше внимание, что библиотека написана достаточно примитивно, на уровне новичка. но тем не менее, главное её достоинство - она работает быстро, а методы интуитивно понятны.

Библиотечка написана человеком и пароходом Paul Macklin, ныне директором Объединения по Компьютерному Исследованию Онкологических Заболеваний при университете Южной Калифорнии. Что ж, я кажу - нэплохо. Для такого проекта как простой визуализатор звуковой волны, EasyBMP - наш выбор.

Если исследования рака ведутся так же хорошо, как сделана EasyBMP, то онкологические заболевания абсолютно точно будут побеждены.
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
13.03.2014, 10:51     Как нарисовать график функции? #5
А я могу посоветовать OpenGL. Мне кажется, что движок не такой уж и сложный. Во всяком случае для рисования примитивов долго учиться ну нужно. Я сам довольно быстро освоил 2D-графику, что в принципе и нужно для построения графиков. Есть конечно свои минусы, но в целом мне нравится. Вот как вариант.
SatanaXIII
Супер-модератор
Эксперт С++
5593 / 2627 / 240
Регистрация: 01.11.2011
Сообщений: 6,461
Завершенные тесты: 1
13.03.2014, 10:58     Как нарисовать график функции? #6
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
написать программу для рисования графика функции
Тут самый первый вопрос это рисование в чем? Прям в консоли, в любой области на экране, на каком-нибудь элементе в визуальной среде?

Цитата Сообщение от Sh@dow777 Посмотреть сообщение
DirectX будет трудно освоить новичку?
Да.

Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Где мне можно посмотреть команды для рисования?
Например:
Рисование в с++ :)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 17:52     Как нарисовать график функции?
Еще ссылки по теме:

Как нарисовать график в Excel через Visual Studio? - C++
Здравствуйте! Помогите, пожалуйста, закончить задачу! Есть множество точек с координатами x и y. Как мне передать их в Excel и...

Как построить график функции x=5 - C++
Как построить график функции x=5; то есть это прямая паралельная оси y? Функции должна быть в предела (2;10) по оси у.

Как построить график функции - C++
Помогите пожалуйста построить график данной функции,функция будет указана в фото,дельта х,это шаг)

Как с помощью функции setpixel нарисовать прямую - C++
1. Допустим, у нас есть есть одна команда setPixel(x, y);, с помощью неё надо нарисовать линию от одной точки до другой. Если вы знаете...

Как можно создать график функции - C++
Всем привет! У меня такая проблема, что я не могу найти как можно создать график функции с помощью . У меня есть функция. Дайте совет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
13.03.2014, 17:52  [ТС]     Как нарисовать график функции? #7
А что вы можете сказать про библиотеку GTK+? Плюсы, минусы?
Yandex
Объявления
13.03.2014, 17:52     Как нарисовать график функции?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru