Цель: Освоить технологию построения графиков функций средствами визуального программирования.
Задачи:
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);