Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Рисование в канве. Построение графиков функций




Лабораторная работа 16

 

Цель работы – познакомиться с основными принципами рисования по пикселям и пером, научиться отображать на форме графики функций.

 

Теория

Довольно часто появляется необходимость разместить в приложении графики, чертежи, рисунки. Для этой цели используются компоненты, имеющие свойство Canvas (канва, холст): Image, PaintBox, Bitmap и другие. Канва представляет собой область компонента, на которой можно рисовать или отображать готовые изображения. Каждая точка канвы имеет свои координаты x и y, которые измеряются в пикселях, отсчет ведется от левого верхнего угла канвы.

Рисование по пикселям осуществляется с помощью оператора:

 

Image1->Canvas->Pixels[x][y]=clBlack;

 

где x и y – координаты пикселя, задающиеся переменными типа int, которые до этого в программе должны быть описаны и инициализированы, или целыми числами; clBlack – описание цвета, которым будет рисоваться точка, в данном случае цвет - черный.

 

Пример

Для того чтобы нарисовать точку синего цвета с координатами (20,30) можно использовать следующие операторы:

int x = 20, y = 30;

Image1->Canvas->Pixels[x][y]=clBlue;

или:

Image1->Canvas->Pixels[20][30]=clBlue;

 

Для того чтобы нарисовать график функции f(x), которая имеет диапазон изменения значений от ymin до ymax, а ее аргумент изменяется от xmin до xmax, можно использовать следующий код:

 

float x,y, px, py;

for (int px=0; px<=Image1->Width; px++)

{

x = xmin+px*(xmax-xmin)/Image1->Width;

y=f(x);

py=Image1->Height-(y-ymin)*Image1->Height/(ymax-ymin);

Image1->Canvas->Pixels[px][py]=clBlue;

}

 

Здесь ввелись переменные x и y, соответствующие аргументу и значению функции и переменные px и py, являющиеся координатами пикселов, соответствующих x и y. Цикл проходит по всем горизонтальным координатам px компонента Image. В цикле px пересчитывается в соответствующее значение x, затем вызывается функция и вычисляется y, после этого у пересчитывается в вертикальную координату пикселя py.

Например, возьмем функцию у = sin(x), пусть нам нужно нарисовать график функции на промежутке от 0 до 4π, тогда xmin = 0, xmax = 4 π, ymin = -1, ymax = 1.

Рисовать можно не только попиксельно, но и с помощью пера. Перо (Pen) – свойство канвы. Перо в свою очередь тоже имеет ряд свойств – цвет (Color), ширину (Width), стиль (Style). Перо проводит линию, соединяющую соседние точки. Для рисования пером используется оператор:

 

Image2->Canvas->LineTo(x,y);

 

Перо можно переместить в точку с координатами (x,y) без прорисовывания линии с помощью оператора:

 

Image2->Canvas->MoveTo(x,y);

 

Цвет пера можно задать следующим образом (в нашем случае он будет красным):

 

Image2->Canvas->Pen->Color = clRed;

 

Чтобы нарисовать график функции пером зеленого цвета, необходимо использовать следующий код:

Image2->Canvas->MoveTo(xbegin,ybegin);

Image2->Canvas->Pen->Color = clGreen;

float x,y, px, py;

for (int px=0; px<=Image2->Width; px++)

{

x = xmin+px*(xmax-xmin)/Image2->Width;

y=f(x);

py=Image2->Height-(y-ymin)*Image2->Height/(ymax-ymin);

Image2->Canvas->LineTo(px,py);

}

 

где xbegin, ybegin – координаты пикселя, с которого начинается рисование графика.

 

Задание

1. Поместите в форму компонент Image, он будет иметь Name = Image1. Поместите в форму кнопку. В обработчике события для кнопки onClick введите код, позволяющий нарисовать график функции попиксельно. В результате ваш исходный файл должен выглядеть так:

 

#include <vcl.h>

#pragma hdrstop

# define Pi 3.14

#include "Unit1.h"

#include <math.h>

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

float x,y, xy, xmin = 0, xmax = 4*Pi, ymin = -1, ymax = 1;

for (int i=0; i<=Image1->Width; i++)

{

x = xmin+px*(xmax-xmin)/Image1->Width;

y=f(x);

py=Image1->Height-(y-ymin)*Image1->Height/(ymax-ymin);

Image1->Canvas->Pixels[px][py]=clBlue;

}

}

 

Откомпилируйте и запустите программу, посмотрите, что у вас получилось.

2. Поместите в форму еще один компонент Image, он будет иметь Name = Image2. Добавьте в функцию обработчика события onClick для кнопки код, позволяющий нарисовать график функции с помощью пера. После добавления кода ваш исходный файл должен выглядеть так:

 

#include <vcl.h>

#pragma hdrstop

# define Pi 3.14

#include "Unit1.h"

#include <math.h>

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

float x,y, xy, xmin = 0, xmax = 4*Pi, ymin = -1, ymax = 1;

for (int i=0; i<=Image1->Width; i++)

{

x = xmin+px*(xmax-xmin)/Image1->Width;

y=sin(x);

py=Image1->Height-(y-ymin)*Image1->Height/(ymax-ymin);

Image1->Canvas->Pixels[px][py]=clBlue;

}

Image2->Canvas->MoveTo(0,Image2->Height/2);

Image2->Canvas->Pen->Color = clGreen;

for (int px=0; px<=Image2->Width; px++)

{

x = xmin+px*(xmax-xmin)/Image2->Width;

y = sin(x);

py = Image2->Height-(y-ymin)*Image2->Height/(ymax-ymin);

Image2->Canvas->LineTo(px,py);

}

}

 

Откомпилируйте и запустите программу, посмотрите, что у вас получилось.

3. Составьте программу, рисующую график функции для вашего варианта (таблица) попиксельно и пером при трёх различных значениях , выделив их разным цветом.

 

Варианты

Функция
 
 
 
 
 
 
 

Продолжение табл.

Функция
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 624; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.027 сек.