Читайте также:
|
|
Чтобы выяснить взаимное положение дуги и отрезка прямой, следует:
- из центра дуги опустить перпендикуляр на прямую;
- определить точку(XP,YP) пересечения перпендикуляра с прямой;
- измерить текущий угол перпендикуляра U;
- повернуть прямую вокругцентра дуги на угол (-U);
Координата Х точки А будет равна расстоянию от центра дуги до прямой, а координата Y будет найдена как катет прямоугольного треугольника при известных гипотенузе, равной радиусу дуги, и другому катету.
- вернуть точки в исходное положение.
Программное описание оператора:
begin
TekUgol(X1,Y1,X2,Y2,U0);
DwaOtr(X1,Y1,U0,X,Y,90+U0,XP,YP,P);
DlinaO(XС,YС,XР,YР,L);
DlinaO(XС,YС,XN,YN,R);
if L > R then P:=0; {не пересекаются}
else if (L - R) < 0.05 then begin
P:=1; XA:=R; XB:=R; YA:=0; YB:=0; {прямая касается дуги в точке(XP,YP)}
end
else begin
TekUgol(XC,YC,XP,YP,U);
XA = L; XB= -L; {координаты Х точек А и В после поворота на угол (- U)}
;YB = - YA; {координаты Y точек А и В после поворота на угол (- U)}
end;
XTS:=XT; YTS:=YT; UgS:=Ugol;
Ugol:=U; XT:=XC; YT:=YC;
PX[1]:=XA; PY[1]:=YA; PX[2]:=XB; PY[2]:=YB;
Preobr(2);
XA:=PX[1]; YA:=PY[1]; XB:=PX[2]; YB:=PY[2]; {координаты точек А и В после возврата в
исходное положение}
XT:=XTS; YT:=YTS; Ugol:=UgS;
end;
Оператор: OtrDug(X1,Y1,Ug,XC,YC,R,XP1,YP1,XP2,YP2,P).
Остается выяснить принадлежность точек А и В исходным прямой и дуге, используя известные операторы:
PikOtr(XA,YA,X1,Y1,X2,Y2,P) ® P=1
PikOtr(XB,YB,X1,Y1,X2,Y2,P) ® P=0
PikDug(XA,YA,XC,YC,XN,YN, XK,YK,напр.,P)® P=1
PikDug(XB,YB,XC,YC,XN,YN, XK,YK,напр.,P)® P=1.
Отсюда следует, что точка А является точкой пересечения отрезка и дуги, точка В нет, т.к. она не принадлежит отрезку (Р=0).
Дата добавления: 2015-08-09; просмотров: 334 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Взаимное положение отрезков. | | | Пересечение дуг. |