Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



unit grfunc_;

Interface

uses 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 Form1: TForm1;

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: =Form1.ClientHeight-20; //У — координата левого верхнего угла

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

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

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

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

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

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

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

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

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

x: =x1;

Repeat

У: = f (х);

if у < y1 then y1: =y;

if у > у2 then y2: =y;

х: =x+dx;

until (x > = х2);

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

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

mx: =w/abs(x2-x1); // масштаб по оси 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(y1, ffGeneral, 6, 3));

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

x: =x1;

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

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

form1.Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight));

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

GrOfFunc;

end;

End.

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

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

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

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

Примечание

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

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

unit Unit1;

Interface

Uses

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

Type

TForm1 = class(TForm)

Image1: TImage;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N1Click(Sender: TObject);

private { Private declarations }

public { Public declarations }

end;

Var

Form1: TForm1;

Implementation

{$R *.dfm}

function www(x: real): real;

Begin

result: =x*x-3*x+2;

end;

procedure TForm1.Button1Click(Sender: TObject);

var x, y: real; i: integer;

Begin

if Edit1.Text< > '' then

Begin

Image1.Canvas.Brush.Color: =clWhite;

Image1.Canvas.Rectangle(0, 0, 501, 501);

Image1.Canvas.MoveTo(0, 251);

Image1.Canvas.LineTo(501, 251);

Image1.Canvas.MoveTo(251, 0);

Image1.Canvas.LineTo(251, 501);

Image1.Canvas.MoveTo(241, 20);

Image1.Canvas.LineTo(251, 0);

Image1.Canvas.LineTo(261, 20);

Image1.Canvas.MoveTo(481, 241);

Image1.Canvas.LineTo(501, 251);

Image1.Canvas.LineTo(481, 261);

for i: =1 to 21 do begin

Image1.Canvas.MoveTo(i*25+1, 246);

Image1.Canvas.LineTo(i*25+1, 254);

Image1.Canvas.TextOut(i*25+1, 255, FloatToStr(StrToInt(edit1.Text)/250*(i*25-250)));

Image1.Canvas.MoveTo(246, i*25+1);

Image1.Canvas.LineTo(254, i*25+1);

Image1.Canvas.TextOut(255, i*25+1, FloatToStr(- StrToInt(edit1.Text)/250*(i*25-250)));

end;

Image1.Canvas.TextOut(240, 10, 'y');

Image1.Canvas.TextOut(480, 230, 'x');

x: =StrToInt(edit1.Text)/250*(-250);

y: =www(x);

Image1.Canvas.MoveTo(round(X/Strtoint(Edit1.Text)*250+251),

round(-Y/StrToInt(Edit1.Text)*250+251));

for i: =2 to 501 do begin

x: =StrToInt(edit1.Text)/250*(i-251);

y: =www(x);

Image1.Canvas.LineTo(round(X/Strtoint(Edit1.Text)*250+251),

round(- Y/StrToInt(Edit1.Text)*250+251)); end

End

else ShowMessage('введите масштаб');

end;

procedure TForm1.FormCreate(Sender: TObject);

Begin

Image1.Canvas.Brush.Color: =clWhite;

Image1.Canvas.Rectangle(0, 0, 501, 501);

Image1.Canvas.MoveTo(0, 251);

Image1.Canvas.LineTo(501, 251);

Image1.Canvas.MoveTo(251, 0);

Image1.Canvas.LineTo(251, 501);

Image1.Canvas.MoveTo(241, 20);

Image1.Canvas.LineTo(251, 0);

Image1.Canvas.LineTo(261, 20);

Image1.Canvas.MoveTo(481, 241);

Image1.Canvas.LineTo(501, 251);

Image1.Canvas.LineTo(481, 261);

Image1.Canvas.TextOut(240, 10, 'y');

Image1.Canvas.TextOut(480, 230, 'x');

end;

procedure TForm1.N2Click(Sender: TObject);

begin close; end;

procedure TForm1.N1Click(Sender: TObject);

Begin

MessageDlg('программа рисует функцию, заданную в подпрограмме-функция. В окне масштаб вводится число отрезков на которые разбиваются координатные прямые', mtinformation, [mbok], 0)

End; end.

 

Вывод иллюстраций

Наиболее просто вывести иллюстрацию, которая находится в файле с расширением bmp, jpg или ico, можно при помощи компонента image, значок которого находится на вкладке Additional палитры (рис. 10.11).

Рис. 10.11. Значок компонента Image

В табл. 10.8 перечислены основные свойства компонента image.

Таблица 10.8. Свойства компонента image

       
  Свойство Определяет  
  Picture Width, Height   AutoSize   Strech   Visible Иллюстрацию, которая отображается в поле компонента Размер компонента. Если размер компонента меньше размера иллюстрации, и значение свойств AutoSize и strech равно False, то отображается часть иллюстрации Признак автоматического изменения размера компонента в соответствии с реальным размером иллюстрации Признак автоматического масштабирования иллюстрации в соответствии с реальным размером компонента. Чтобы было выполнено масштабирование, значение свойства AutoSize должно быть False Отображается ли компонент, и, соответственно, иллюстрация, на поверхности формы  
       

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

Во время разработки формы иллюстрация задается установкой значения свойства picture путем выбора файла иллюстрации в стандартном диалоговом окне, которое появляется в результате щелчка на командной кнопке Load окна Picture Editor (рис. 10.12). Чтобы запустить Image Editor, нужно в окне Object Inspector выбрать свойство Picture и щелкнуть на кнопке с тремя точками.

Если размер иллюстрации больше размера компонента, то свойству strech нужно присвоить значение True и установить значения свойств width и Height пропорционально реальным размерам иллюстрации.

Чтобы вывести иллюстрацию в поле компонента image во время работы программы, нужно применить метод LoadFromFile к свойству Picture, указав в качестве параметра имя файла иллюстрации. Например, инструкция

Form1.Image1.Picture.LoadFromFile('e: \temp\bart.bmp')

загружает иллюстрацию из файла bart.bmp и выводит ее в поле вывода иллюстрации (image1).

Метод LoadFromFile позволяет отображать иллюстрации различных графических форматов: BMP, WMF, JPEG (файлы с расширением jpg).

Следующая программа, ее текст приведен в листинге 10.6, использует компонент image для просмотра иллюстраций, которые находятся в указанном пользователем каталоге. Диалоговое окно программы приведено на рис. 10.13.

Рис. 10.12. Окно Picture Editor

Рис. 10.13. Слайд-проектор


Поделиться:



Популярное:

  1. III. Вегетативные функции НС.
  2. III. Предмет, метод и функции философии.
  3. Int mul (int x, int у); // Прототип функции mul().
  4. Агрегирующие функции языка SQL
  5. Алгоритмы записи произвольной функции, заданной в таблице в виде с помощью элементарных функций.
  6. Антикризисный менеджмент. Функции и факторы антикризисного управления
  7. Антонимы. Типы антонимов. Антонимия и полисемия. Стилистические функции антонимов (антитеза, антифразис, амфитеза, астеизм, оксюморон и т.д.). Энантиосемия. Словари антонимов.
  8. Б. Специфические функции нервных клеток ЦНС и периферического отдела нервной системы.
  9. Базальные ганглии. Морфофункциональная организация. Функции
  10. Биогеоценотические функции почвы.
  11. Биологические функции и пищевая ценность углеводов. Классификация углеводов, нормы потребления
  12. Биологический аспект изучения звуков речи. Устройство речевого аппарата и функции его частей.


Последнее изменение этой страницы: 2016-03-15; Просмотров: 1032; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.041 с.)
Главная | Случайная страница | Обратная связь