Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Плоскопараллельное перемещение




 

Предназначен для изменения положения точки на плоскости. При этом точка перемещается вместе с некоторой текущей базой - точкой(XT, YT) и может вращаться вокруг этой точки.

Procedure PP(var PX,PY: RealWektor; N: byte);

var XX: Float;

begin

if Ugol <> 0 then begin

while N>0 do begin

XX:=PX[N];

PX[N]:=XT + XX´Cos(Ugol) + PY[N]´Sin(Ugol);

PY[N]:=YT - XX´Sin(Ugol) + PY[N]´Cos(Ugol);

 

Dec(N);

end;

end

else begin

while N>0 do begin

PX[N]:=XT + PX[N];

PY[N]:=YT + PY[N];

Dec(N);

end;

end;

end;

 

Если составить оператор

Procedure Preobr(N:byte);

begin

PP(PX,PY,N)

end;

то для изменения положения 4-х вершин прямоугольника следует (рис. 121):

- сохранить исходные значения координат текущей базы и текущий угол

Рис. 121 XTS:=XT; YTS:=YT; Ugs:= Ugol;

- ввести новые их значения XT:=XT1; YT:=YT1; Ugol:= U;

- присвоить PX[1]:=X1; PY[1]:=Y1; PX[2]:=X2; PY[2]:=Y2; PX[3]:=X3;

PY[3]:=Y3; PX[4]:=X4; PY[4]:=Y4; {Заполнен массив точек}

- выполнить поворот четырех точек Preobr(4);

- выполнить обратные присвоения после поворота

X1:=PX[1]; Y1:=PY[1]; X2:=PX[2]; Y2:=PY[2]; X3:=PX[3]; Y3:=PY[3];

X4:=PX[4]; Y4:=PY[4];

- возвратить исходные значения

XT:=XTS, YT:=YTS, Ugol:= Ugs.

 

3.3.6. Угловая длина дуги

 

Дуга задана координатами центра(XC,YC), начальной точки (X1,Y1), конечной точки (X2,Y2) и направлением (направление = 1 - против часовой стрелки, направление = 2 - по часовой) (рис. 122).

Если измерить текущий угол Ug начальной точки дуги и повернуть конечную точку вокруг точки(ХС,YC) на угол (- Ug), то угловая длина дуги UD будет равна текущему углу конечной точки.

 

 

Программное описание оператора:

 

begin

DlinaO(XC,YC,X1,Y1,R); {радиус дуги}

DlinaO(X1,Y1,X2,Y2,LТ); {расстояние между начальной и конечной точками}

if R>0 then begin

if (LT<=0.01) or ((X1=X2) and (Y1=Y2))

Рис. 122 then begin

if напр.=1 then UD=360

else UD=0;

end

else begin

TekUgol(XC,YC,X1,Y1,Ug);

 

XTS:=XT; YTS:=YT; UgS:=Ugol;

XT:=0; YT:=0; Ugol:= - Ug;

PX[1]:=X2-XC; PY[1]:=Y2-YC;

{заполнен массив точек}

Preobr[1];

TekUgol(XC,YC,PX[1]+X2,PY[1]+Y2,UD);

if (UD>Ug) and (напр.=1) then UD:=UD

else UD:=360 - UD;

if (напр.=1) and ((UD<=0.01) or (UD>=359.99)

then UD:=360

else UD:=0;

XT:=XTS; YT:=YTS; Ugol:= UgS;

end;

end;

Значение угла следует округлить до 0,0001°.

Оператор: DlinaD(XC,YC,X1,Y1, X2,Y2,напр.,UD).

 

Принадлежность точки дуге

 

Программное описание оператора:

begin

DlinaO(XC,YC,X1,Y1,R); {радиус дуги}

DlinaO(XС,YС,X,Y,LТ); {расстояние от центра до точки (рис. 123)}

DlinaO(X1,Y1,X,Y,L1); {расстояния от точки до начала дуги}

 

DlinaO(X2,Y2,X,Y,L2); {расстояния от точки до конца дуги}

DlinaD(XC,YC,X1,Y1, X2,Y2,1,UD);

{длина дуги}

DlinaD(XC,YC,X1,Y1, X,Y,1,U); {длина дуги от начальной точки до точки(X,Y)}

if (abc(LT-R)<0.05 and (R>0) then begin

if (L1 < 0.05) or (L2 < 0.05) then P:=1

else if UD > U then P:=1

Рис. 123 else P:=0;

end

else P:=0;

end;

Р = 1 - точка принадлежит дуге, Р = 0 - точка не принадлежит дуге. В операторах длины дуги в данном случае напр.=1, т.е. дуга направлена против часовой стрелки.

Оператор: PikDug(X,Y,XC,YC,X1,Y1, X2,Y2,напр.,P).

 





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 467 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Бутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Неизвестно
==> читать все изречения...

2474 - | 2397 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.