Графика с примеры программ

Сразу предупрежу – материал очень сырой и некоторые моменты я пропущу. Но это скорее всего все я дополню позднее. Во всяком случае надеюсь, что все получится.

Итак. Я с этим не сталкивался, но наверное в Универах могут давать лабораторные построения графиков по разным формулам. По большому счету неважно как выглядит формула, все сводится к однообразному построению и у начинающих не такие уж сложные задачи.

Я выбрал простой график y=x*x Короткая формула, всем известная кривая (всем кто хоть чуть-чуть учился в школе)

Код C++ Рисование графика
============
#include // включить описание графических функций С/С++ Borland’a
#include // описание функций ввода-вывода с консоли (для getch())

int main ()
float x , y ;
/* Автоматическое определение графических параметров */
int gdriver = DETECT , gmode ;
initgraph ( gmode , “” ); // Инициализация графического режима

x =- 10 ; //Инициализируем x
moveto ( x , x * x ); //Устанавливаем курсор

примитивная графика с++. SetPixel C++. #programming #программирование #обучение #itnotes

do
y = x * x ; //Наша формула для построения графика
lineto ( x * 50 + getmaxx ()/ 2 , getmaxy ()/ 2 -( y * 20 )); // ..откуда рисуем график
x = x + 0.02 ;
> while( x < 10 );
getch (); // ожидание нажатия пользователем любой клавиши
closegraph (); // выход из графического режима
return 0 ;
>
============

Что ж. Сразу скажу – Я не знаю почему x увеличивается на дробное число. При моих попытках увеличивать его на единицу график получался очень даже не гладким и это было плохо, поэтому оставил так как отыскал в просторах интернета. Чтобы начать рисовать линию из какой-то точки имеет смысл определить первоначальную точку, для чего была использована функция moveto Сам график строится с помощью циклического вычисления, ведь для каждого значения x нужно получить соответствующий ему y, значит, чтобы не писать все эти выражения вручную нужно использовать цикл.

Внутри цикла вызывается функция lineto, внутри которой написаны такие параметры, которые могут сбить с толку бедного новичка, но пугаться не стоит. lineto чертит линию от текущей позиции до, но не включая в нее, указанной точки. Другими словами при вычислении значения y мы будем получать некоторые точки, а чтобы получить график, нужно эти точки соединять линиями.
x * 50 + getmaxx ()/ 2 Обозначает, что первоначальная точка x смещена к центру экрана по оси x. Цифра 50 здесь нужна только для того чтобы расширить рисуемый график. Нетрудно попробовать её изменить или убрать, чтобы увидеть эффект. Когда я пытался убрать эту 50 и прибавлять к x единицу вместо 0.02 график рисовался ужасно, хотя если подумать, то то что написано здесь или то что хотел написать я сводится к тому что x прибавляется на единицу, но что-то вот в этом есть чего я понять пока что увы не могу. Точнее понимаю, но понимаю как-то туманно, не полностью и сложно для разъяснений

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

Читайте также:
Как определить какие программы работают в фоновом режиме на компьютере

Как построить графики в Windows Forms. Компонент — Chart (Пример кода на C++/C#)

Источник: ciplusplussnachala.wordpress.com

2. Функции базовой графики языка C++

Для того чтобы студент мог свободно читать тексты программ на языке C++ желательно ознакомиться с тем положительным опытом программирования графики, накопленным с DOS средах. Все лучшее созданное там было перенесено в Windows программирование. Дадим сравнение программирования графики в DOS и Windows средах.

2.1 Базовая графика в среде Borland С++ 3.1

В настоящее время во всех современных компьютерах применяется графический режим вывода информации, а операционная система Windows не знает символьного режима. В языке программирования C++ с реализацией под операционную систему DOS графические функции хранятся в библиотеке graphics.lib , а прототипы (объявления) этих функций находятся в файле graphics.h . Мы будем рассматривать графические функции не в отрыве от практического применения, но наоборот обратим особое внимание на логику составления графических программ. Это понадобится вам при изучении технологии DirectDraw в C++ Builder под Windows, так как в технологии DirectDraw для обеспечения быстрого вывода изображения на дисплей переняты лучшие воплощения графических функций для операционной системы DOS.

2.1.1 Инициализация графического режима

> /* 2. Рисование линии из правого верхнего угла в левый нижний */ line(0, 0, getmaxx(), getmaxy()); /* 3. Закрытие графического режима */ getch(); closegraph(); return 0; > Если вы не внесли опечаток в текст программы, тогда файл proba1.exe начнет работать. По диагонали экрана должна рисоваться на черном фоне белая линия из правого верхнего угла в левый нижний угол.

2.1.2 Типовые ошибки инициализации

Возможны три причины, по которым программа proba1.exe с графикой будет работать не так, как мы предположили. Первая — отсутствие в рабочей папке с исполняемым файлом proba1.exe файла драйвера egavga.bgi . Результатом работы программы будет сообщение: Ошибка инициализации: Device driver file not found Нажми любую клавишу (Press any key to halt) Это как-то даже неуместно называть проблемой.

Из папки BGI среды программирования файл egavga.bgi переписывается в вашу рабочую папку и все. Другой вариант. Файл egavga.bgi «лежит» в папке рядом с файлом proba1.exe , но линия не рисуется.

Если программа proba1.exe начинает вытворять неизвестно что (или выдает другую ошибку или по экрану начинает «бегать» курсор), тогда смело сотрите старый драйвер egavga.bgi и поищите у знакомых или на дисках новую версию. «Ломаные» драйверы встречаются не так редко. Третья причина — это экзотический «баг». Она встречается в основном в компьютерных сетях. По неизвестной причине файл драйвера egavga.bgi отказывается работать до тех пор, пока с этого файла не снять атрибут «только для чтения». Надеюсь, что вы не работаете с удаленного компьютера в сети, поскольку там есть еще ряд особенностей работы среды программирования, связанных c загрузкой среды с другого компьютера и атрибутами «только для чтения».

2.1.3 Графические примитивы

Основу мы уже заложили: знаем, как переключиться в графический режим, где применить функции и как правильно завершить работу графической части. Теперь займемся непосредственно разбором примеров с рисованием графических функций. Самые простые функции называются графическими примитивами. Условно примитивы можно разделить на группы: примитивы рисования контуров и площадные фигуры. К примитивам контуров относятся: линии ( line ), прямоугольники ( rectangle ), дуги ( arc ), окружности ( circle ), эллипсы ( ellipse ), многоугольники ( drawpoly ) и прочие не закрашиваемые внутри фигуры. Площадными, закрашиваемыми внутри фигурами являются прямоугольники ( bar , bar3d ), круговые и эллиптические секторы ( pieslice, sector ). Если у вас фигура замкнута, но не залита, например, многоугольник ( drawpoly ), то его всегда можно закрасить внутри с помощью функций закраски ( floodfill , setfillstyle ). Для выбора цвета рисования применяется функция задания текущего (по умолчанию) цвета графических примитивов ( setcolor ). Для определения цвета точки по ее координатам на экране существует функция getpixel , а для

Читайте также:
Как установить на Айфон программу музыка

вывода точки заданным цветом на экран — setpixel . Вот и весь смысл работы с выводом графических примитивов. Данная логика интуитивно понятна обычному школьнику. Подробное описание и параметры графических функций можно найти в любом справочнике по C++.

Если у вас под рукой нет справочника, тогда наберите в редакторе среды программирования интересующее вас имя функции, наведите на него курсор и нажмите комбинацию клавиш Ctrl+F1 . На экране появится описание функции и внизу подсказки ссылка на пример программы с выбранной графической функцией. Например, если вы введете имя функции rectangle и нажмете нужные клавиши, появится подсказка по функции рисования прямоугольника с характерным примером применения. Но кое-что вы можете увидеть и в примере из листинга 2.2, в котором воедино собраны некоторые распространенные функции для работы с примитивами. Листинг 2.2. Демонстрация работы графических функций // rectangl.cpp #include #include #include #include void main(void)

// 2 Рисование
setcolor(WHITE);
outtextxy(xr,yr+100,
«rectangle ellipse circle arc»);

left = xr +0; top = yr +0; right = xr+100; bottom = yr+50; rectangle(left,top,right,bottom); ellipse(xr+150, yr+25, stangle, endangle, xradius, yradius); circle(xr+250, yr+25, radius); arc(xr+350, yr+25, stangle_arc, endangle_arc, radius); midx = xb; midy = yb;
outtextxy(xb+100, yb+60, «bar + setfillstyle»); outtextxy(xb+100, yb+200, «sector + setfillstyle»); for (int i=SOLID_FILL; i // 3 Закрытие графического режима getch(); closegraph(); > В этой простой программе обратите внимание на перечисление типов закраски площадных фигур в цикле for (int i=SOLID_FILL; i

I=0 ENUM_FILL Заливка цветом фона
I=1 SOLID_FILL Заливка текущим цветом
(установленным setcolor())
I=2 LINE_FILL Горизонтальная штриховка
I=3 LTSLASH_FILL Штриховка тонкими линиями под углом
45 ° влево
I=4 SLASH_FILL Штриховка толстыми линиями под
углом 45 ° влево
I=5 BKSLASH_FILL Штриховка толстыми линиями под
углом 45 ° вправо
I=6 LTBKSLASH_FILL Штриховка линиями под углом 45 °
вправо
I=7 HATCH_FILL Штриховка в клетку
I=8 XHATCH_FILL Штриховка в клетку под углом 45 °
I=9 INTERLEAVE_FILL Частая штриховка в клетку под 45 °
I=10 WIDEDOT_FILL Заполнение редкими точками
I=11 CLOSEDOT_FILL Заполнение частыми точками
I=12 USER_FILL По шаблону программиста

На рис. 2.2 показана экранная копия работы программы rectang1.cpp , иллюстрирующая перечисленные способы заполнения внутренних областей.

Читайте также:
Основные элементы окна программы и назначение excel

Источник: studfile.net

LiveCharts. Строим графики в WinForms

Вот готовый проект AnalitikProg, если лень читать.

Итак, поехали.
1) Создаем проект WinForm называем его AnalitikProg, платформа .Net Framework 4.7.2
2) Св-ву Name формы присваиваем значение «AnalitikProg».
3) Добавляем на форму элемент ToolStrip, делаем кнопке Display равным «Text».

4) Выделяем кнопку и меняем св-во name на «toolStripButtonGenerate», а св-ву Text значение «Сформировать график».


5) Теперь необходимо добавить nuget-пакет, который называется LiveChart.

6) Обратим внимание, что в панели элементов появились новые элементы:

7) Перетаскиваем на форму элемент CartesianChart и его св-ву Dock выставим Fill.
8) Теперь дважды нажимаем кнопку «Сформировать график», переходим в код и за пределами метода обработчика нажатия по кнопке создаем класс Data, так сказать «заготовочка» для будущей коллекции со значения для графика.

< public int values < get; set; >public DateTime date < get; set; >>

9) Перед методом Form1 создаем переменную типа List , а в методе Form1 после компонента initializeComponent() инициализируем обобщенную коллекцию в которой будут содержаться элементы типа Data и заполним ее данными.
Значит легенда такая, программа нужна трейдеру, чтобы просматривать динамику изменения его заработка.

datas = new List() < new Data()< values=35000,date=new DateTime(2020,01,01) >, new Data()< values=30000,date=new DateTime(2020,01,02) >, new Data()< values=40000,date=new DateTime(2020,01,03) >, new Data()< values=55000,date=new DateTime(2020,01,04) >, new Data()< values=55000,date=new DateTime(2020,01,05) >, new Data()< values=30000,date=new DateTime(2020,01,06) >, new Data()< values=35000,date=new DateTime(2020,01,07) >, new Data()< values=42000,date=new DateTime(2020,01,08) >, new Data()< values=57000,date=new DateTime(2020,01,09) >, new Data()< values=88000,date=new DateTime(2020,01,10) >, new Data()< values=51000,date=new DateTime(2020,01,11) >, new Data()< values=65000,date=new DateTime(2020,01,12) >, new Data()< values=100000,date=new DateTime(2020,01,13) >, new Data()< values=75000,date=new DateTime(2020,01,14) >, new Data()< values=88000,date=new DateTime(2020,01,15) >, new Data()< values=92000,date=new DateTime(2020,01,16) >, new Data()< values=99000,date=new DateTime(2020,01,17) >, new Data()< values=87000,date=new DateTime(2020,01,18) >, new Data() < values=110000,date=new DateTime(2020,01,19) >>;

Сейчас код выглядит так:

10) Теперь переходим к кнопке, кликаем по ней 2 раза и забиваем в нее следующий код.

SeriesCollection series = new SeriesCollection(); //отображение данных на график. Линии и т.д. ChartValues zp = new ChartValues(); //Значения которые будут на линии, будет создания чуть позже. List date = new List(); //здесь будут храниться значения для оси X foreach (var item in datas) //Заполняем коллекции < zp.Add(item.values); date.Add(item.date.ToShortDateString()); >cartesianChart1.AxisX.Clear(); //Очищаем ось X от значений по умолчанию cartesianChart1.AxisX.Add(new Axis //Добавляем на ось X значения, через блок инициализатора. < Title = «Дата», Labels = date >); LineSeries line = new LineSeries(); //Создаем линию, задаем ей значения из коллекции line.Title = «»; line.Values = zp; series.Add(line); //Добавляем линию на график cartesianChart1.Series = series; //Отрисовываем график в интерфейсе

12) В общем то все, осталось запустить и проверить

Могу порекомендовать сходить на сайт поддержки библиотеки https://lvcharts.net там есть много интересной информации и раскрыты все возможности библиотеки.

Если понравилось — ставь лайк!

Опубликовано 01.07.2020 03.05.2021 Автор admin Рубрики Пример программ на C#

Один комментарий к “LiveCharts. Строим графики в WinForms”

а если надо динамически данные добавлять на график, а не в коде? ну например по нажатию кнопки добавить новые значения? м?

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru