Главная » Просмотр файлов » Задание4_График_функции

Задание4_График_функции (1076696), страница 2

Файл №1076696 Задание4_График_функции (Лабораторная работа №4) 2 страницаЗадание4_График_функции (1076696) страница 22018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Листинг 1. График функции (использование метода Polyline)

procedure TForm1.Button1Click(Sender: TObject);

var

gr: array[1..50] of TPoint; // графикломаная линия

x0,y0: integer; // координаты точки начала координат

dx,dy: integer; // шаг координатной сетки по осям X и Y

i: integer;

begin

х0 := 10; у0 := 200;

dx :=5; dy := 5;

// заполним массив gr

for i:=1 to 50 do

begin

gr[i].x := x0 + (i-1)*dx;

gr[i].y := y0 - Data[i]*dy;

end;

// строим график

with forml.Canvas do

begin

MoveTo{x0,y0); LineTo(x0,10); //ось Y

MoveTo(x0,yo); LineTo(200,y0); // ось X
Polyline(gr); // график

end;

end;

Метод Polyline можно использовать для вычерчивания замкнутых контуров. Для этого надо, чтобы первый и последний элементы массива содержали ко­ординаты одной и той же точки. В качестве примера использования метода PolyLine для вычерчивания замкнутого контура в листинге 2 приведена программа, которая на поверхности диалогового окна, в точке нажатия кнопки мыши, вычерчивает контур пятиконечной звезды (рис.5). Цвет, которым вычерчивается звезда, зависит от того, какая из кнопок мыши была нажата. Процедура обработки нажатия кнопки мыши (событие MouseDown) вызывает процедуру рисования звезды StarLine и передает ей в качестве параметра координаты точки, в которой была нажата кнопка. Звезду вычерчивает процедура StarLine, которая в качестве параметров получает координаты центра звезды и холст, на котором звезда должна быть выведена. Сначала вычисляются координаты концов и впадин звезды, которые записываются в массив р. Затем этот массив передается в качестве параметра методу Polyline. При вычислении координат лучей и впадин звезды используются функции sin и cos. Так как аргумент этих функций должен быть выражен в радианах, то значение угла в градусах домножается на величину pi/180, где pi — это стандартная именованная константа равная числу п.

Листинг 2. Вычерчивание замкнутого контура (звезды) в точке нажатия кнопки мыши

unit Stars_;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForml = class(TForm)

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Forml: TForml;

implementation

{$R *.dfm}

// вычерчивает звезду

procedure StarLine(x0,y0,r: integer; Canvas: TCanvas);

// x0,y0 координаты центра звезды r — радиус звезды

var

р : array[1..11] of TPoint; // массив координат лучей и впадин

a: integer; // угол между осью ОХ и прямой, соединяющей

// центр звезды и конец луча или впадину

i: integer;

begin

а := 18; // строим от правого гор. луча

for i:=l to 10 do

begin

if (i mod 2=0) then

begin // впадина

p[i].x := x0+Round(r/2*cos(a*pi/180));

p[i].y:=yO-Round(r/2*sin(a*pi/180));

end

else

begin // луч

p[i].x:=xO+Round(r*cos(a*pi/180) ) ;

p[i].y:=yO-Round(r*sin(a*pi/180));

end;

a := a+36;

end;

p[11].X := p[l].X; // чтобы замкнуть контур звезды

p[11].Y := р[1].Y;

Canvas.Polyline(p); // начертить звезду

end;

// нажатие кнопки мыши

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

begin

if Button = mbLeft // нажата левая кнопка?

then Form1.Canvas.Pen.Color := clRed

else Form1.Canvas.Pen.Color : = clGreen;

StarLine(x, y, 30,Forml.Canvas);

end;

end.

Рис..5. Звезда

Обратите внимание, что размер массива p на единицу больше, чем количество концов и впадин звезды, и что значения первого и последнего элементов массива совпадают.

Окружность и эллипс

Метод Ellipse вычерчивает эллипс или окружность, в зависимости от значений параметров. Инструкция вызова метода в общем виде выглядит следующим образом:

Объект.Canvas.Ellipse(x2,yl, x2,y2) где:

объект — имя объекта (компонента), на поверхности которого выполня­ется вычерчивание;

xl, yl, х2, у2 — координаты прямоугольника, внутри которого вычерчи­вается эллипс или, если прямоугольник является квадратом, окружность

Цвет, толщина и стиль линии эллипса определяются значениями свойства Pen, а цвет и стиль заливки области внутри эллипса — значениями свойства Brush поверхности (canvas), на которую выполняется вывод.

Помимо метода Ellipse, в Delphi имеются аналогичные методы для вычерчивания дуги (метод Arc), прямоугольника (метод Rectangle), многоугольника (метод Poligon), сектора (метод Pie).

Точка

Поверхности, на которую программа может осуществлять вывод графики, соответствует объект Canvas. Свойство pixels, представляющее собой дву­мерный массив типа TColor, содержит информацию о цвете каждой точки графической поверхности. Используя свойство Pixels, можно задать требуемый цвет для любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция

Forml.Canvas.Pixels[10,10]:=clRed окрашивает точку поверхности формы в красный цвет.

Размерность массива Pixels определяется размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) задается значениями свойств ClientWidth и ClientHeight, а размер графической поверхности компонента Image — значениями свойств Width и Height. Левой верхней точке рабочей области формы соответствует элемент Pixels [0,0], а правой нижней —Pixels[ClientWidth - 1,ClientHeight - 1].

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

Например, если некоторая функция f{x) может принимать значения от нуля до 1000, и для вывода ее графика используется область формы высотой в 250 пикселов, то масштаб оси y вычисляется по формуле: т = 250/1000. Таким образом, значению f(x) = 70 будет соответствовать точка с координатой Y=233. Значение координаты Y вычислено по формуле Y= h -f(x) * т = 250 – Round(70* (250/1000)), где hвысота области построения графика.

Обратите внимание на то, что точное значение выражения 250 - 70*(250/1000) равно 232,5. Но т. к. индексом свойства Pixels, которое используется для вывода точки на поверхность Canvas, может быть только целое значение, то выражение 70*(250/1000) округляется к ближайшему целому, которым является число 17.

Задание

Используя свойство Pixels, разработать программу, которая выводит график функции

у = 2 sin(x) e x/5. Для построения графика использовать всю доступную область формы, причем если во время работы программы пользователь изменит размер окна, то график будет выведен заново с учетом реальных размеров окна.

Для вывода графика можно использовать следующий алгоритм.

Основную работу выполняет процедура GrOf Func, которая сначала вычисляет максимальное (у2) и минимальное (y1) значения функции на отрезке [xl,x2]. Затем, используя информацию о ширине (Forml. ClientWidth -10) и высоте (Forml.ClientHeight - 40) области вывода графика, вычисляет масштаб по осям X (mx) и Y (my).

Высота и ширина области вывода графика определяется размерами рабочей (клиентской) области формы, т. е. без учета области заголовка и границ. После вычисления масштаба процедура вычисляет координату y горизонтальной оси (y0) и вычерчивает координатные оси графика. Затем выполняется непосредственное построение графика

Вызов процедуры GrOfFunc выполняют процедуры обработки событий OnPaint и OnResize. Процедура TForm1.FormPaint обеспечивает вычерчивание графика после появления формы на экране в результате запуска программы, а также после появления формы во время работы программы, например, в результате удаления или перемещения других окон, полностью или частично перекрывающих окно программы.

Процедура TForm1.FormResize обеспечивает вычерчивание графика после изменения размера формы. Перед выводом нового графика следует очистить форму путем вызова метода Form1.Canvas.FillRect(0,0,ClientWidth,ClientHeight)).

Разработанная программа должна быть универсальной, то есть для вывода графика другой функции достаточно заменить инструкции в теле функции f (x). Причем независимо от вида функции ее график должен занимать всю область, предназначенную для вывода.

Рекомендуемое описание переменных, требуемых для реализации процедуры GrOfFunc:

xl,x2:real; // границы изменения аргумента функции

yl,y2:real; // границы изменения значения функции

х:real; // аргумент функции

у:real; // значение функции в точке х

dx:real; // приращение аргумента

l,b:integer; // левый нижний угол области вывода графика

w,h:integer; // ширина и высота области вывода графика

mx,my:real; // масштаб по осям X и Y

х0,у0:integer; // точка — начало координат

Рис. 6. График, построенный процедурой GrOfFunc

Характеристики

Тип файла
Документ
Размер
143 Kb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Лабораторная работа №4
4
Lab4.dcu
Lab4.dfm
Lab4.pas
LabPr4.bdsproj
LabPr4.bdsproj.local
LabPr4.cfg
LabPr4.dpr
LabPr4.dproj
LabPr4.dproj.local
LabPr4.exe
LabPr4.identcache
LabPr4.res
4 График
__history
Unit1.dfm.~1~
Unit1.dfm.~2~
Unit1.dfm.~3~
Unit1.pas.~1~
Unit1.pas.~2~
Unit1.pas.~3~
Project1.bdsproj
Project1.bdsproj.local
Project1.cfg
Project1.dof
Project1.dpr
Project1.exe
Project1.identcache
Project1.res
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6314
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее