Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Параметры выделенной области




Под выделенной областью следует понимать часть площади чертежа, ограниченную произвольной замкнутой линией. Как любой элемент область

 

 

имеет параметры, позволяющие работать внутри области: измерять длины и углы. К ним относятся: 1) файл линий, которые задают непрерывный контур;

2) обход – положительное направление перемещения внутри контура; 3) границы области – диагональ прямоугольника, в котором расположена область.

 

Прямоугольная область

Выделить прямоугольную область можно, например курсором, для чего потребуется указать одну из его вершин и полученный квадрат раздвинуть командами ­®¯ до необходимых размеров прямоугольника. В файл а будут записаны 4 линии:

Line(Xа1, Yа1, Xа1, Yа2);

Line(Xа1, Yа2, Xа2, Yа2);

Line(Xа2, Yа2, Xа2, Yа1);

Line(Xа2, Yа1, Xа1, Yа1).

 

Линии записаны в произвольном порядке, БТ линий находится в левом верхнем углу экрана. Чтобы записать линии в формате чертежа:

 

begin

Repeat

Читать файл а линий границы области, начиная с1-й строки:

SledLine(а,1,Naа,Xа1,Yа1,Xа2,Yа2,XCа,YCа);

Прорисовать и записать линии границы области, начиная с1-й строки в файл g

RisLineBox(g, 1, Nag, Xg1,Yg1,Xg2,Yg2, XCg,YCg)

Until E=4;

end;

 

 

Если границы области следует записать в виде ломаной линии, т.е. выполнить ‘обход’ по или против часовой стрелки (рис. 127), то необходим оператор ‘ОбходOбл’, который прочитает файл g, отсортирует строки по возрастанию (убыванию) текущего угла, перепишет файл g и заполнит значение переменной ‘Обход’ (1 - против часовой стрелки, 2 – по часовой).

Рис. 127

 

Procedure ОбходOбл; {записывает непрерывный контур, назначает ‘Обход’}

var Xg1,Yg1,Xg2,Yg2,TUgol:float;

var Bx, Pd:tekst;

var El, Napr, Обход:byte;

 

Procedure Взять;

begin

Repeat

Читать файл линий границы области, начиная с1-й строки:

SledLine(g,1,Nag,Xg1,Yg1,Xg2,Yg2,XCg,YCg);

 

Определить текущий угол:

TekUgol(Xg1,Yg1,Xg2,Yg2,TUgol);

 

Записать в файл параметры линий в порядке убывания TUgol:

StrokBox(m, Pd, TUgol<, Napr, El, Xg1, Yg1, Xg2, Yg2);

Until E=Nkg;

DelBox(g);

end;

 

Procedure Вернуть;

begin

Repeat

Читать файл m строку начиная с 1-й строки:

SledStrok(m, Pd, TUgol<, Napr, El, Xg1, Yg1, Xg2, Yg2);

 

Переписать файл g в порядке возрастания TUgol:

RisLineBox(g, 1, Nag, Xg1, Yg1, Xg2, Yg2, XCg, YCg),

Until E=Nkm;

end;

 

 

{ основная программа ОбходОбл }

begin

Взять; Вернуть; DelBox(m);

if TUgol = TUgol< then Обход:= 1 else Обход:= 2;

{на рис. 13 обход принят против часовой стрелки}

end;

 

Границы области (X1< X2, Y1< Y2; направление диагонали снизу вверх и вправо):

 

Procedure Gr_XY(X1,Y1,X2,Y2);

var Pd:byte;

begin

Pd:=0; {Pd=1 - прочитана горизонтальная линия;

Pd=2 - вертикальная}

Repeat

Читать и записать в строку параметров линию границы области, начиная с 1-й записи в файле g:

SledLine(g, 1, Nag, Xg1, Yg1, Xg2, Yg2, XCg, YCg);

Определить текущий угол:

TekUgol(Xg1, Yg1, Xg2, Yg2,U);

 

if U=0 or U=180 then begin

if Xg1<Xg2 then begin

X1:=Xg1; X2:=Xg2; Y:=Yg1;

end

else begin

X1:=Xg2; X2:=Xg1; Y:=Yg1;

end;

Pd:=Pd+1;

end;

f Pd=1{горизонтальная линия уже определена} and (U=90 or U=270)

then begin

if Yg1=Y tnen begin

if Yg2>Y then begin

Y1:=Y; Y2:=Yg2;

end

else begin

Y1:=Yg2; Y2:=Y;

end;

end;

 

if Yg2=Y tnen begin

if Yg1>Y then begin

Y1:=Y; Y2:=Yg1;

end

else begin

Y1:=Yg1; Y2:=Y;

end;

end;

Pd:=Pd+1;

end;

 

Until Pd=2; {прочитаны горизонтальная и вертикальная линии}

end;

 





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


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


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

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

Победа - это еще не все, все - это постоянное желание побеждать. © Винс Ломбарди
==> читать все изречения...

2280 - | 2114 -


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

Ген: 0.011 с.