Цель: Освоить технологию построения графиков функций средствами визуального программирования.

Задачи:

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

2. Построение графика функции, заданной в явном виде

3. Построение графика функции, заданной в параметрическом виде

4. Построение графика функции, заданной в полярных координатах

5. Спирограф

6. Задание к лабораторной работе

 

 

Построение графика функции, заданной в явном виде

 

Построим график функции f(x)=xCos(x).

1. Пусть x меняется от MinX, до MaxX, а y от MaxY до MinY. Построение ведется в прямоугольнике (Ax, Bx) и (Ay, By). Определим масштабные коэффициенты для каждой из осей.

kx=(Bx-Ax)/(MaxX-MinX)

ky=(By-Ay)/(MaxY-MinY)

2. Откроем наш проект kmodel и добавим новую форму, построенную на основе fmAll. Выполните команду File\New\Other\kmodel\fmAll и нажмите ОК. Сохраним модуль новой формы под именем Ulab01_1.

3. Переустановите свойства новой формы как указано ниже

name=fmlab01_1

Caption = 'Построение графика функции в явном виде'

4. Добавьте на панель, ниже панели инструментов следующие компоненты и установите их свойства:

Label1: Tlabel

Caption = 'Начальное значение Х'

 

edMinX: Tedit

text='-10'

Label2: TLabel

Caption = 'Конечное значение Х'

edMaxX: TEdit

Text = '10'

Label3: Tlabel

Caption = 'Число делящих точек'

edD: TEdit

Text = '1000'

 

Button1: TButton

Caption = 'Построить'

 

Примерный вид формы

5. Создайте двойным щелчком обработчик события для кнопки и поместите в него следующий программный код.

var kx,ky:real;

x,y,minX,maxX:real;

d,dx,dy:real;

function f(x:real):real;

var temp:real;

begin

temp:=x*cos(x);

f:=temp;

end;

begin

tbClearClick(sender);

GetCxCy(cx,cy);

CoordLines(cx,cy);

maxX:=strtofloat(edMaxX.text);

minX:=strtofloat(edMinX.text);

dx:=MaxX-MinX;

dy:=dx;

kx:=(2*cx)/dx;

ky:=(2*cy)/dy;

d:=dx/strtoint(edD.text);

x:=MinX;

y:=f(x);

while x<=maxX do

begin

myline(kx*x,ky*y,kx*(x+d),ky*f(x+d));

x:=x+d;

y:=f(x);

Application.ProcessMessages;

end;

end;

6. Перейдите в главную форму и создайте следующий обработчик события для пункта меню Построение графика функции в явном виде

application.CreateForm(Tfmlab01_1,fmlab01_1);

fmlab01_1.show;

Добавьте модуль Ulab01_1 в список подключенных модулей главной формы и переместите форму fmLab01_1 в список доступных

7. Скомпилируйте, сохраните и выполните проект

 

Построение графика функции, заданной в параметрическом виде

 

Построим график функции эпициклоида.

x(t)=(a+b)*cos(t)-a*cos((a+b)*t/a);

y(t)=(a+b)*sin(t)-a*sin((a+b)*t/a);

2. Откроем наш проект kmodel и добавим новую форму, построенную на основе fmAll. Выполните команду file\New\kmodel\fmAll и нажмите ОК. Сохраним модуль новой формы под именем Ulab01_2.

3. Переустановите свойства новой формы как указано ниже

name=fmlab01_2

Caption = 'Построение графика функции в параметрическом виде'

4. Добавьте на панель, ниже панели инструментов следующие компоненты и установите их свойства:

Label1: TLabel

Caption = 'a='

edA: TEdit

Text = '30'

Label2: TLabel

Caption = 'b='

edB: TEdit

Text = '20'

object Label3: TLabel

Caption = 'Шаг изменения угла'

edD: TEdit

Text = '0,01'

Button1: TButton

Caption = 'Построить'

5. Создайте двойным щелчком обработчик события для кнопки и поместите в него следующий программный код.

procedure Tfmlab01_2.Button1Click(Sender: TObject);

var t,x,y,d,maxT:real;

a,b:integer;

 

function fx(t:real):real;

var temp:real;

begin

temp:=(a+b)*cos(t)-a*cos((a+b)*t/a);

fx:=temp;

end;

 

function fy(t:real):real;

var temp:real;

begin

temp:=(a+b)*sin(t)-a*sin((a+b)*t/a);

fy:=temp;

end;

 

function nod(a,b:integer):integer;

begin

if (a=0)or(b=0) then nod:=a+b

else

begin

if a>b then nod:=nod(b,a mod b)

else nod:=nod(a,b mod a);

end;

end;

 

begin

tbClearClick(sender);

GetCxCy(cx,cy);

coordlines(cx,cy);

a:=strtoint(edA.text);

b:=strtoint(edB.text);

d:=strtofloat(edD.text);

t:=0;

x:=fx(t);

y:=fy(t);

if (b mod a)=0 then maxT:=2*pi

else maxT:=2*pi*(a/nod(a,b));

while t<=maxT do

begin

myline(x,y,fx(t+d),fy(t+d));

x:=fx(t+d);

y:=fy(t+d);

t:=t+d;

application.processMessages;

end;

end;

6. Перейдите в главную форму и создайте следующий обработчик события для пункта меню Построение графика функции в параметрическом виде

application.CreateForm(Tfmlab01_2,fmlab01_2);

fmlab01_2.show;

Добавьте модуль Ulab01_2 в список подключенных модулей главной формы и переместите форму fmLab01_2 в список доступных

7. Скомпилируйте, сохраните и выполните проект

 

Построение графика функции, заданной в полярных координатах

 

1. Построим график функции "роза".

r(f)=a*sin(k*f)

2. Откроем наш проект kmodel и добавим новую форму, построенную на основе fmAll. Выполните команду file\New\kmodel\fmAll и нажмите ОК. Сохраним модуль новой формы под именем Ulab01_3.

3. Переустановите свойства новой формы как указано ниже

name=fmlab01_3

Caption = 'Построение графика функции в полярных координатах'

4. Добавьте на панель, ниже панели инструментов следующие компоненты и установите их свойства:

Label1: TLabel

Caption = 'a='

edA: TEdit

Text = '120'

Label2: TLabel

Caption = 'k='

edK: TEdit

Text = '2'

Label3: TLabel

Caption = 'Шаг изменения угла'

edD: TEdit

Text = '0,01'

Button1: TButton

Caption = 'Построить'

 

5. Создайте двойным щелчком обработчик события для кнопки и поместите в него следующий программный код.

procedure Tfmlab01_3.Button1Click(Sender: TObject);

var t,x,y,d,k,maxT:real;

a:integer;

 

function fx(t:real):real;

var temp:real;

begin

temp:=a*sin(k*t)*cos(t);

fx:=temp;

end;

 

function fy(t:real):real;

var temp:real;

begin

temp:=a*sin(k*t)*sin(t);

fy:=temp;

end;

 

begin

tbClearClick(sender);

GetCxCy(cx,cy);

a:=strtoint(edA.text);

k:=strtofloat(edK.text);

d:=strtofloat(edD.text);

t:=0;

x:=fx(t);

y:=fy(t);

if frac(k)=0 then maxT:=2*pi

else if k>1 then maxT:=4*pi*k

else maxT:=4*pi/k;

while t<=maxT do

begin

myline(x,y,fx(t+d),fy(t+d));

x:=fx(t+d);

y:=fy(t+d);

t:=t+d;

application.processMessages;

end;

end;

6. Перейдите в главную форму и создайте следующий обработчик события для пункта меню Построение графика функции в полярных координатах

application.CreateForm(Tfmlab01_3,fmlab01_3);

fmlab01_3.show;

Добавьте модуль Ulab01_3 в список подключенных модулей главной формы и переместите форму fmLab01_3 в список доступных

7. Скомпилируйте, сохраните и выполните проект

 

Спирограф

 

1. Спирограф - это зубчатый диск радиуса В, расположенный внутри колеса радиуса А. Диск вращается против часовой стрелки. В диске имеется отверстие на расстоянии R от центра диска, в которое помещается карандаш. Грифель карандаша в процессе вращения вычерчивает рисунок; вычерчивание заканчивается, когда карандаш возвращается в исходное положение. Уравнение кривой, вычерчиваемой грифелем:

x=(A-B)cos(t)+Rcos(s)

y=(A-B)sin(t)-Rsin(s)

s=(A/B)t, R<B<A

t меняется от 0 до 2pin,

n=B/NOD(B,A)

 

2. Откроем наш проект kmodel и добавим новую форму, построенную на основе fmAll. Выполните команду file\New\kmodel\fmAll и нажмите ОК. Сохраним модуль новой формы под именем Ulab01_4.

3. Переустановите свойства новой формы как указано ниже

name=fmlab01_4

Caption = 'Спирограф'

4. Добавьте на панель, ниже панели инструментов следующие компоненты и установите их свойства:

Label1: TLabel

Caption = 'Радиус внешнего диска'

edA: TEdit

Text = '200'

Label2: TLabel

Caption = 'Радиус внутреннего диска'

edB: TEdit

Text = '140'

Label3: TLabel

Caption = 'Расстояние от центра диска'

edR: TEdit

Text = '80'

Label4: TLabel

Caption = 'Шаг изменения угла'

edD: TEdit

Text = '0,01'

Button1: TButton

Caption = 'Построить'

5. Создайте двойным щелчком обработчик события для кнопки и поместите в него следующий программный код.

procedure Tfmlab01_4.Button1Click(Sender: TObject);

var t,x,y,d,maxT:real;

a,b,r:integer;

 

function fx(t:real):real;

var temp:real;

begin

temp:=(a-b)*cos(t)+R*cos(a*t/b);

fx:=temp;

end;

 

function fy(t:real):real;

var temp:real;

begin

temp:=(a-b)*sin(t)-R*sin(a*t/b);

fy:=temp;

end;

 

function nod(a,b:integer):integer;

begin

if (a=0)or(b=0) then nod:=a+b

else

begin

if a>b then nod:=nod(b,a mod b)

else nod:=nod(a,b mod a);

end;

end;

 

begin

tbClearClick(sender);

GetCxCy(cx,cy);

a:=strtoint(edA.text);

b:=strtoint(edB.text);

r:=strtoint(edR.text);

d:=strtofloat(edD.text);

t:=0;

x:=fx(t);

y:=fy(t);

maxT:=2*pi*(B/NOD(B,A));

while t<=maxT do

begin

myline(x,y,fx(t+d),fy(t+d));

x:=fx(t+d);

y:=fy(t+d);

t:=t+d;

application.processMessages;

end;

end;

6. Перейдите в главную форму и создайте следующий обработчик события для пункта меню Спирограф

application.CreateForm(Tfmlab01_4,fmlab01_4);

fmlab01_4.show;

Добавьте модуль Ulab01_4 в список подключенных модулей главной формы и переместите форму fmLab01_4 в список доступных

7. Скомпилируйте, сохраните и выполните проект

 

Задание к лабораторной работе

1. Определите назначение вспомогательных функций

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

3. Построить график функций y=2*x3+cos(x);

4. Построить график функций y=5*x4+sin(x)+|x-1|;

5. Построить график функций y=-4*x2+arccos(x);

6. Построить график функций y=2*x3+Tg(x);

7. Построить график функций r(f)=a*cos(k*f);

8. Построить график функций r(f)=a*Tg(k*f);

 

 

Контрольные вопросы:

1. Как построить график явной функции, что означает понятие «явная» функция;

2. Как меняется график Спирографа при изменении отрезка [a,b];

3. Можно ли внутри двух функций использовать одну и ту же переменную (temp внутри function fx, и function fy).

4. Какую вы еще знаете функцию заданную параметрически?

5.Разъясните каждую переменную функции заданной в полярных координатах r(f)=a*sin(k*f);