10864

Рисование графиков в Delphi

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

Информатика, кибернетика и программирование

Лабораторная работа № 2 Рисование графиков в Delphi Точка Поверхности на которую программа может осуществлять вывод графики соответствует объект Canvas. Свойство pixels представляющее собой двумерный массив типа TColor содержит информацию о цвете каждой точки графической...

Русский

2013-04-02

107.5 KB

66 чел.

Лабораторная работа № 2

«Рисование графиков в Delphi»

Точка

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

буемый цвет для любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция

Form1.Canvas.Pixels[10,10]:=clRed

окрашивает точку поверхности формы в красный цвет.

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

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

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

Y= h -f(x) х т = 250 - 70х(250/1000),

где h - высота области построения графика.

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

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

Листинг 10.5. График функции

unit grfunc_;

interface

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormResize(Sender: TObject);

private

{ Private declarations }

public

{Public declarations }

end;

var

Forml: TForml;

implementation

{$R *.DFM}

// Функция, график которой надо построить

Function f(x:real):real;

begin

f:=2*Sin(x)*exp(x/5) ;

end;

// строит график функции

procedure GrOfFunc;

var

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

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

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

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

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

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

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

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

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

begin

// область вывода графика

l:=10; // X — координата левого верхнего угла

b:=Forml.ClientHeight-20;

//У — координата левого верхнего угла

h:=Forml.ClientHeight-40; // высота

w:=Forml.Width-40; // ширина

x1:=0; // нижняя граница диапазона аргумента

х2:=25; // верхняя граница диапазона аргумента

dx:=0.01; // шаг аргумента

// найдем максимальное и минимальное значения

// функции на отрезке [x1,x2]

y1:=f(xl); // минимум

y2:=f(xl); //максимум

x:=x1;

repeat

У := f (х);

if у < yl then yl:=y;

if у > у2 then y2:=y;

х:=x+dx; until (x >= х2);

// вычислим масштаб

my:=h/abs(y2-yl); // масштаб по оси Y

mx:=w/abs(x2-xl); // масштаб по оси X

х0:=1;

у0:=b-Abs(Round(y1*my)) ;

with form1.Canvas do

begin

// оси

MoveTo(l,b);LineTo(l,b-h);

MoveTo(x0,y0);LineTo(x0+w,y0);

TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));

TextOut(l+5,b,FloatToStrF(yl,ffGeneral,6,3));

// построение графика

x:=xl; repeat

y:=f(x);

Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;

x:=x+dx;

until (x >= x2);

end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

GrOfFunc; end;

// изменился размер окна программы

procedure TForm1.FormResize(Sender: TObject);

begin

// очистить форму

forml.Canvas.FillRect(Rect(0,0,ClientWidth,

ClientHeight));

// построить график

GrOfFunc;

end;

end.

Основную работу выполняет процедура GrOfFunc, которая сначала вычисляет максимальное (у2) и минимальное (yl) значения функции на отрезке [x1l,x2]. Затем, используя информацию о ширине (Forml.Clientwidth -40) и высоте (Form1.ClientHeight - 40) области вывода графика, вычисляет масштаб по осям X (mх) иY(mу).

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

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

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

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

Примечание

Рассмотренная программа работает корректно, если функция, график которой надо построить, принимает как положительные, так и отрицательные значения. Если функция во всем диапазоне только положительная или только отрицательная, то в программу следует внести изменения. Какие — пусть это будет упражнением для читателя.

Задания по вариантам:

Примечание. Созданные программы необходимо сохранить. Они Вам понадобятся в дальнейшем.

Задание 1. Составьте программу построения кусочно-заданной функции:

   

  

  

  

  

   

  

  

  

  

Задание 2.Составьте программу построение функции с учетом области определения y=F(x):

1. y=ln((1+x)/(1-sinx)).     6. y=lg((1-x)/(1+sinx)).

2. y=(x+2lnx)/(x*x-4).     7. y=(x-2ln(x-5))/(x*x-4).

3. y=(1+sinx)/cosx.      8. y=(1-cosx)/sinx.

4. y=arcsin(1/(2-x)).      9. y=arccos(1/(2+x)).

5. y=(x-lg(1-x))/(sinx-cosx).     10. y=(x-lg(1+x))/(sinx+cosx).

11. y=ln((1+x)/(1+sin2x)).     16. y=lg((1+x)/(1-sinx)).

12. y=(x+2lnx)/(x*x-4lnx).     17. y=(x+2ln(x+5))/(-x*x+4).

13. y=lnx-(1+sinx)/cosx.     18. y=(1-lncosx)/sinx.

14. y=arccos(2-1/x).      19. y=arcsin(cos(1/(2+x))).

15. y=(x+lg(-x))/(sinx+cosx).    20. y=lg(1+x)/(sin2x+cosx).


 

А также другие работы, которые могут Вас заинтересовать

21672. Высоковольтно-сигнальные линии авто блокировки 101 KB
  Плечи и пункты питания высоковольтной цепи автоблокировки её секционирование; 5.Секционирование высоковольтной цепи в пределах плеча. ВВ цепи автоблокировки как правило не имеют разветвлений. Устойчивость работы всех устройств автоматики и телемеханики должна обеспечиваться также ограничением допустимых пределов изменения напряжения в ВВ цепи по её длине и во времени а также пределов отклонения частоты тока от установленной.
21673. Кабельные линии 69 KB
  Общие сведения о кабелях и кабельных линиях; 2. Организация связи на железнодорожных узлах; Общие сведения о кабелях и кабельных линиях Кабелем называется совокупность нескольких проводников заключённых в общую защитную оболочку. Изолированные проводника называются жилами кабеля. Жилы кабеля используются для образования электрических цепей по которым передаются электрические сигналы и осуществляется питание устройств АТиС.
21674. Влияние внешних ЭМ полей на цепи АТС 557 KB
  На отдельных участках они могут иметь сближение с ЛЭП. ЭМ поля возникающие вокруг проводов ЛЭП индуцируют напряжения и токи в цепях ЛАТС которые могут нарушить нормальную работу АТС. Влияние ЛЭП на цепи АТС называется внешними влияниями. Высоковольтные ЛЭП служащие для передачи энергии на большие расстояния имеют U= 35 750 кВ тока f = 50 Гц или 800 1000 кВ постоянного тока.
21675. Особенности влияния на однопроводные и двухпроводные цепи 165.5 KB
  Особенности влияния на однопроводные и двухпроводные цепи Вопросы: 1. Поперечная асимметрия 2х проводные цепи относятся к симметричным системам. 1 Земляные волны проводов 2 и 3 могут сами оказывать индуктивное влияние на соседние цепи. В цепи 23 кроме земляной волны появится междуфазовая волна с напряжением U2 U3 и токами I2 I3.
21676. Определение индуктированных напряжений и токов опасного и мешающего влияний 334 KB
  Цепи будем считать однородными по длине и параллельными в пределах сближения. Когда во влияющей цепи 1 протекает переменный ток I1 то в результате магнитной индукции по всей длине цепи 2 будет индуцироваться э. Если ток во влияющей цепи I1 не изменяется в пределах всего сближения то продольная э. Практически это может быть если обе цепи электрически короткие.
21677. Взаимные влияния между цепями связи, телемеханики и меры защиты 307.5 KB
  Первичные параметры влияния на цепи связи в воздушных линиях связи; 3. Первичные параметры ЭМ влияния между цепями симметричных кабелей связи; 4. Причины взаимного влияния между цепями связей и основные параметрыпервичные и вторичные параметры влияния Качество и дальность связи обуславливаются не столько собственным затуханием цепей сколько мешающими взаимными влияниями между соседними цепями которые проявляются в виде переходного разговора или шума.
21678. Основное уравнение влияния между цепями 153.5 KB
  Токи электрического влияния ближнем и дальнем концах; 2. Токи магнитного влияния на ближнем и дальнем концах; Полный ток электромагнитного влияния на ближнем и даль нем концах. Токи электрического влияния ближнем и дальнем концах Рассмотрим общий случай когда две двухпроводные цепи с параллельными проводами имеют различные параметры и замкнуты на концах на согласованные нагрузки рис. Обозначим напряжения и токи во влияющей цепи U10 I10; на ближнем конце U20 I20 и U2l I2l на дальнем конце цепи подверженной влиянию.
21679. Переходное затухание между цепями в кабельных линиях 336.5 KB
  На ближнем конце ; дБ На дальнем конце . дБ Так как мощность в начале влияющей цепи; мощность в начале цепи подверженной влиянию мощность на дальнем конце цепи подверженной влиянию. 1 где уровни передачи в начале и в конце цепей. Согласно определению защищённости на ближнем конце: Откуда переходное затухание на ближнем конце.
21680. Общие понятия об организации связи на железнодорожном транспорте и видах НС 41 KB
  Организация связи на железнодорожном транспорте; 4. автоматики телемеханики и связи Изучение дисциплины будет проходить в 6ом семестре. Вы должны самостоятельно изучить следующие вопросы: Конструкции и свойства воздушных линий связи и высоковольтных линий автоблокировки; кабельных линий автоматики телемеханики и связи: кабелей связи ВЧ и НЧ; коаксиальных кабелей; кабелей автоматики телемеханики и силовых; волоконнооптических кабелей; волноводов; сверхпроводящих кабелей.