Читайте также:
|
|
Если отрезок не имеет точек пересечения с линиями границы области, но одна его точка находится внутри области, то он расположен внутри области. Такой отрезок следует записать в файл отрезков внутри области.
Если отрезок имеет точки пересечения с линиями границы области, то часть его расположена внутри области. Чтобы выделить эту часть отрезка, определим в любой последовательности точки пересечения S1, S2 и запишем вместе с линиями области в файл с сортировкой строк файла по возрастанию L, где L- расстояние от начальной точки отрезка до точки пересечения.
Далее следует выяснить принадлежность области каждого отрезка, расположенного между точками пересечения.
Procedure Box_Otr; {оператор записи отрезка прямой в текущий файл}
var P, Ps:byte;
begin
Ps:=0; {счетчик записей точек пересечения}
Repeat
Читаем файл линий границ выделенной области с 1-ой строки:
SledLine(g, 1, Nag, Xg1, Yg1, Xg2, Yg2, XCg, YCg),
TekUgol(Xg1, Yg1, Xg2, Yg2,Ug);
Определяем точку пересечения отрезка прямой чертежа (Xm1,Ym1,Xm2,Ym2) с линией области:
DwaOtr(Xm1, Ym1,Um, Xg1, Yg1,Ug,XP,YP,P);
Проверка на принадлежность точки пересечения XP,YP отрезку линии чертежа:
if P=1 then PikOtr(XP,YP,Xm1,Ym1,Xm2,Ym2,P);
Проверка на принадлежность точки пересечения XP,YP отрезку линии выделенной области:
if P=1 then PikOtr(XP,YP,Xg1,Yg1,Xg2,Yg2,P);
if P=1 then begin
Ps:=Ps+1; {наличие точки пересечения}
Xs:=XP; Ys:=YP; {координаты точки пересечения}
DlinaL(Xm1,Ym1,Xs,Ys,L); {расстояние от начала отрезка до точки пересечения}
if L>0 then
Запись в текущий файл e с сортировкой строк по возрастанию L:
StrokBox(e, Ps, L>, Xg1, Yg1, Xg2, Yg2, Xs, Ys);
end;
Until E=Nkg; {номер последней строки в файле}
if Ps=0 then begin
Проверка на принадлежность начальной точки отрезка Xm1,Ym1 выделенной области:
Tch_Obl(Xm1,Ym1,X1,Y1,X2,Y2,P);
if P=1 then
Отрезок расположен внутри области и его следует записать в файл o:
RisLineBox(o, 1, Nao, Xm1, Ym1, Xm2, Ym2, XCm, YCm);
end;
Если есть точки пересечения, то необходимо выделить те участки, которые расположены внутри области (Procedure FiltrOtr)
if Ps>0 then FiltrOtr;
end;
Дата добавления: 2015-08-09; просмотров: 65 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Взаимное положение линий чертежа. | | | Определение дуг, расположенных в области |