Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mause_canvas1.doc
Скачиваний:
1
Добавлен:
15.09.2019
Размер:
32.21 Mб
Скачать

Пробна програма визначеня кутів , (у градусах) і координат точки в1.

1.Створюють для проби нову форму, на якій розміщають чотири об’єкти класу TSpinEdit, кнопку Button1 і поле редагування класу TEdit.

2.Створюють процедуру Button1Click, з допомогою якої за координатами x1,y1 точки A і координатами x2,y2 точки B визначатимуть значення кута у градусах. Результат обчислення виводитиметься у поле Edit1.

procedure TForm3.Button1Click(Sender: TObject);

VAR x1,y1,x2,y2: integer;

begin

x1:=SpinEdit1.Value;

x2:=SpinEdit2.Value;

y1:=SpinEdit3.Value;

y2:=SpinEdit4.Value;

if ((y2<y1) and (x2>x1)) then // верхня ліва ілюстрація на рисунку 32

Edit1.Text:=IntToStr (round (abs(arctan((x2-x1)/(y1-y2)))*180/pi)); // з формули (4)

if ((y2>y1) and (x2>x1)) then // верхня права ілюстрація на рисунку 32

edit1.Text:=IntToStr (round(abs(arctan((y2-y1)/(x2-x1)))*180/pi)+90);

if ((y2>y1) and (x2<x1)) then // нижня ліва ілюстрація на рисунку 32

edit1.Text:=IntToStr (round(abs(arctan((x2-x1)/(y2-y1)))*180/pi)+180) ;

if ((y2<y1) and (x2<x1)) then // нижня права ілюстрація на рисунку 32

edit1.Text:= IntToStr (360 -round (abs(arctan((x2-x1)/(y2-y1)))*180/pi));

// оскільки ділення на 0 заборонене, то запропоновані додаткові умови

if ((x2>x1)and(y2=y1)) then edit1.Text:=’ 90’;

if ((x2<x1)and(y2=y1)) then edit1.Text:=’270’;

if ((x2=x1)and(y2>y1)) then edit1.Text:=’180’;

if ((x2=x1)and(y2<y1)) then edit1.Text:=’0’;

end;

Рисунок 32 – Визначення кута орієнтації точки В фігури відносно базової точки А цієї фігури.

3. Запускають дану прикладну програму (створену на основі Form3 ) і за допомогою координат внесених у поля компонент TSpinEdit отримують значення кута у градусах.

Рисунок 33 – Визначення кута орієнтації точки В фігури відносно базової точки А цієї фігури за допомогою вненсених координат точки А(X1,Y1) і точки В(X2,Y2).

4.. Для внесення у програму значень координат X3,Y3 точки В1 на вікні форми розміщають два додаткових обєкти класу TSpinEdit.

5. У розділ декларації глобальних змінних дописують оголошення x1,y1,x2,y2,x3,y3,alfa : integer, відповідно прибравши локальне оголошення VAR x1,y1,x2,y2: integer з процедури TForm3. Button1Click.

6. Додають на вікно форми дві радіокнопки і програмно узалежнюють доступність кожного з додаткових об’єктів класу TSpiEdit від стану включення відповідної радіокнопки. Для цього створюють процедуру опрацювання події OnPaint:

procedure TForm3.FormPaint(Sender: TObject);

begin

if radiobutton1.Checked =true then

begin SpinEdit5.Enabled:=true; SpinEdit6.Enabled :=false; end

else

begin SpinEdit6.Enabled:=true; SpinEdit5.Enabled :=false; end

end;

7. Запускають прикладну програму (рисунок 34) і переконуються у дієвості коду опрацювання події OnPaint .

Рисунок 34 – Прикладна програма доповнена можливістю внесення координат X3,Y3 точки В1.

8. Користуючись виразами (9),(10),(11),(12) встановлюють залежність координати X3 від координати Y3 і навпаки у вигляді коду подій:

procedure TForm2.SpinEdit5Change(Sender: TObject);

begin

X3:=SpinEdit5.Value;

if y3>y1 then

Y3:=y1+round(sqrt(abs(sqr(y1-y2)+sqr(x2-x1)-sqr(x3-x1)))) ;

if y3<y1 then

Y3:=y1-round(sqrt(abs(sqr(y1-y2)+sqr(x2-x1)-sqr(x3-x1)))) ;

if radiobutton1.Checked =true then SpinEdit6.Value:=y3;

end;

procedure TForm2.SpinEdit6Change(Sender: TObject);

begin

Y3:= SpinEdit6.Value;

if x3>x1 then

X3:=x1+trunc(sqrt(abs(sqr(y1-y2)+sqr(x2-x1)-sqr(y1-y3))));

if x3<x1 then

X3:=x1-trunc(sqrt(abs(sqr(y1-y2)+sqr(x2-x1)-sqr(y1-y3))));

if radiobutton2.Checked =true then SpinEdit5.Value:=x3 ;

end;

9. Запускають підпрограму для того, щоб переконатись у її дієздатності. Для цього слід надати значення змінним X1,X2,Y1,Y2 ввівши їх у відповідні обєкти класу TSpiEdit. Після внесення цих даних слід здійснити підтвердження, тобто клацнути по кнопці Button1 (рисунок35).

Рисунок 35 – Прикладна програма доповнена можливістю внесення координат X3,Y3 точки В1 із визначеним значенням кута .

10. Шляхом перебору прокрутки (а не шляхом внесення з клавіатури) надають значення координати Y3, якщо активна відповідна їй радіокнопка. Пересвідчуються в тому, що автоматично отримується відповідне значення координати Х3 (рисунок 36).

Рисунок 36 – Внесення координати Y3 і автоматичне отримання значення координати Х3.

11. Переключають радіокнопку і вводять за допомогою прокрутки значення Х3, автоматично отримуючи значення Y3(рисунок 37).

Рисунок 37 – Внесення координати X3 і автоматичне отримання значення координати Y3.

12. Для визначення кутів і на форму додають ще два об’єкти класу TEdit (рисунок 38) .

Рисунок 38 – Внесення на форму додаткових полів редагування для отримання значень кутів , .

13. На вікно форми додають ще одну кнопку і створюють заготовку події OnClick. В тіло опрацьовувача цієї події, користуючись формулою (5) додають код для визначення кута g і відтак користуючись формулою (1) дописують код визначення кута a.

procedure TForm2.Button2Click(Sender: TObject);

begin

if ((y3<y1)and (x3>x1)) then

edit2.Text:=INTTOSTR (ROUND(abs(arctan((x3-x1)/(y1-y3)))*180/pi));

if ((y3>y1)and (x3>x1)) then

edit2.Text:=INTTOSTR (trunc(abs(arctan((y3-y1)/(x3-x1)))*180/pi)+90);

if ((y3>y1)and (x3<x1)) then

edit2.Text:=INTTOSTR (trunc(abs(arctan((x3-x1)/(y3-y1)))*180/pi)+180) ;

if ((y3<y1)and (x3<x1)) then

edit2.Text:=INTTOSTR (360-ROUND(abs(arctan((x3-x1)/(y3-y1)))*180/pi));

if ((x3>x1)and(y3=y1)) then edit2.Text:='90';

if ((x3<x1)and(y3=y1)) then edit2.Text:='270';

if ((x3=x1)and(y3>y1)) then edit2.Text:='180';

if ((x3=x1)and(y3<y1)) then edit2.Text:='0';

alfa:=strToInt(edit2.text)-StrToInt(edit1.Text) ;

edit3.Text:=InttoStr(alfa)

end;

14.Запускають програму, щоб переконатись у її дієздатності (рисунок 39).Для цього вводять координати X1,X2,Y1,Y2, далі клацають по кнопці Button1 і отримують значення кута b. Наступним кроком за допомогою прокрутки вводять значення координати Y3, якщо активною є радіокнопка поруч, в противному випадку за допомогою прокрутки вводять значення координати Х3.Після цього клацають по кнопці Button2 і отримують значення кутів a і g у відповідних полях редагування.

Рисунок 39 – Програма для встановлення координат точок А,В,і для визначення кутів a b,g, і координат точки В1.

Теоретичне підґрунтя

Визначивши у попередніх пунктах величину кута повороту фігури АВС -a , а також знаючи координати точки С даної фігури – xc,yc можна визначити спочатку величину кута – bc (рисунок 40):

(радіан), якщо yc<ya і xc>xa (13)

+90 (радіан), якщо yc>ya і xc<xa (14)

, а відтак і значення кута gc:

gc = a+ bc. (15)

Із трикутника АС1D отримують рівняння для визначення координат yc1, хс1 :

(yc1-ya)/ (| AC1|) = sin(18 0 -gc),(16)

а отже yc1= ya+ sin(gc)) ( | AC1|),(17)

за аналогією хс1=xa+ sin(180-gc))( | AC1|),( 18)

Рисунок 40 – Визначення кутів для точок С і С1.

У той же час величину | AC1| можна визначити із трикутника С1АС за теоремою Піфагора: (| AC1|) = (16)

Пробна програма визначення координат точки С1.

1.У вікні форми розміщають два додаткові об’єкти TSpinEdit, з допомогою яких можна вводити координати точки С і ще два об’єкти TSpinEdit для автоматичного визначення координат точки C1 (рисунок 40), виходячи з того, що кут повороту С1АС дорівнює куту .

2. Розміщають на вікні форми додаткову кнопку TButton і створюють процедуру опрацювання події клацання по ній (рисунок 41):

Рисунок 41 – Дизайн застосунка для встановлення координат точок А,В,С, для визначення кутів a b,g, і координат точки В1, для визначення кутів і координат для точкиі С1, а також довжини відрізка АС.

procedure TForm2.Button3Click(Sender: TObject);

VAR xc1,yc1,xc,yc:integer; dovgyna_ac,beta,gama:integer;

begin

// Надання значень координат точки С.

xc:=SpinEdit7.Value; yc:=SpinEdit8.Value;

// координати точки А у розділі глобальних оголошень – це y1,x1.

ya:=y1; xa:=x1;

// Визначення величини кута згідно з формулами (13 ) і (14)

if ((yc<ya)and (xc>xa)) then

beta:=trunc(abs(arctan((xc-xa)/(ya-yc)))*180/pi);

if ((yc>ya)and (xc>xa)) then

beta:=trunc(abs(arctan((yc-ya)/(xc-xa)))*180/pi)+90;

if ((yc>ya)and (xc<xa)) then

beta:=trunc(abs(arctan((xc-xa)/(yc-ya)))*180/pi)+180 ;

if ((yc<ya)and (xc<xa)) then

beta:=360-trunc(abs(arctan((xc-xa)/(yc-ya)))*180/pi);

// Додаткові умови для уникнення ділення на число 0

if ((xc>xa)and(yc=ya)) then beta:=90;

if ((xc<xa)and(yc=ya)) then beta:=270;

if ((xc=xa)and(yc>ya)) then beta:=180;

if ((xc=xa)and(yc<ya)) then beta:=0;

// Можна вивести значення

SpinEdit11.Value:=beta;

// Визначення довжини відрізка АС згідно з формулою (16)

dovgyna_ac :=trunc(sqrt(sqr(xc-xa)+sqr(yc-ya)));

// Можна вивести значення |АС|

SpinEdit12.Value:=dovgyna_ac;

// Визначення величини кута для точки С1 за формулою (15)

gama:=alfa+beta;

// Можна вивести значення кута точки С1

SpinEdit13.Value:= gama;

// Визначення величини координат точки С1 за формулами (16), (17) і (18)

If ( (yc1> ya) and (xa<xc1)) then

yc1:= trunc(ya + abs(sin(gama))* dovgyna_ac); // рисунок 40, або

// рисунок 42 верхній правий

xc1:= trunc(xa + abs(sin(180-gama))* dovgyna_ac) ;

If (( yc1< ya) and (xa<xc1)) then

yc1:= trunc(ya - abs(sin(gama+90))* dovgyna_ac); // рисунок 42 верхній лівий

// очевидно, що цей рядок можна переписати так:

yc1:= trunc(ya - abs(cos(gama))* dovgyna_ac) ;

xc1:= trunc(xa + abs(sin(gama))* dovgyna_ac) ;

If ( (yc1> ya) and (xa>xc1)) then

yc1:= trunc(ya + abs(cos(gama+180))* dovgyna_ac) ; // рисунок 42 нижній лівий

// очевидно, щ оцей рядок можна переписати так:

yc1:= trunc(ya + abs(cos(gama))* dovgyna_ac) ;

xc1:= trunc(xa - abs(sin(gama-180))* dovgyna_ac) ;

// очевидно, щ оцей рядок можна переписати так:

xc1:= trunc(xa - abs(sin(gama))* dovgyna_ac) ;

If ( (yc1< ya) and ( xa>xc1)) then

yc1:= trunc(ya - abs(sin(gama -270))* dovgyna_ac) ; // рисунок 42 нижній правий

// очевидно, що цей рядок можна переписати так:

yc1:= trunc(ya - abs(cos(gama))* dovgyna_ac) ;

xc1:= trunc(xa - abs(cos(gama-270))* dovgyna_ac) ;

// очевидно, що цей рядок можна переписати так:

xc1:= trunc(xa - abs(sin(gama))* dovgyna_ac) ;

// Виведення значень координат точки С1

SpinEdit9.Value:=xc1;

SpinEdit10.Value:=yc1;

end;

Рисунок 42 – Ілюстрація до пояснення, як визначити координати точки С1,.

3. Запускають прикладну програму і вводять дані X1,X2,Y1,Y2 .Виконують подію OnClick кнопки Button1 і отримують значення кута b для точки B1, Вводять використовуючи тільки прокрутки значення Y3, якщо активною є радіокнопка поруч (рисунок 43), або вводять використовуючи тільки прокрутки значення X3, якщо активною є інша відповідна їй радіокнопка поруч. Отримують значення X3. Виконують подію OnClick кнопки Button2Click. Отримують значення кута g для точки B1, значення кута a. Вводять дані для точки С – координати Xc,Yc. Виконують подію OnClick кнопки Button3 . Отримують координати Xc1,Yc1 точки С1, значення кута gc для точки C1, значення кута bc для точки C і довжину відрізка АС.

Рисунок 43 – Застосунок для встановлення координат точок А,В,С, для визначення кутів a b,g, і координат точки В1, для визначення кутів і координат для точки С1, а також довжини відрізка АС.

З Зразок створення застосунку

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]