Программная инженерия Нижний Новгород 017 Лабораторный


Download 1.23 Mb.
Pdf ko'rish
bet72/87
Sana08.06.2023
Hajmi1.23 Mb.
#1463900
TuriУчебно-методическое пособие
1   ...   68   69   70   71   72   73   74   75   ...   87
Bog'liq
Pract ADS

AB 
CA 
B
C
BC 
D
DB 
F
B
FB 


 
84 
Пример плекса с подплексами для чертежа из рис. 9 
Для таких плексов указатель на конечную точку может также указывать на линию, то есть 
конечная точка линии верхнего узла плекса может являться конечной точкой линии правого 
подплекса. Для обхода плекса с подплексами можно предложить рекурсивный и 
нерекурсивный варианты. Общая схема рекурсивного алгоритма состоит в следующем: 
TChartPoint *Show ( TChart *pN ) { 
if ( pN != NULL ) pL = NULL; 
else if ( pN 

TChartPoint ) pL = pN; 
else { 
pF = Show(pN->GetFirstPoint()); 
pL = Show(pN->GetLastPoint()); 
// рисование линии 

return pN; 


Отрисовать подплекс, на который указывает указатель начальной точки; запомнить 
конечную точку подплекса; 

Отрисовать подплекс, на который указывает указатель конечной точки; запомнить 
конечную точку подплекса; 

Отрисовать корневую линию. 
Для нерекурсивного алгоритма определим класс TChartLine для представления линии, 
которая подлежит отрисовке. 
class TChartLine // класс для методов отрисовки рисунков 

TChart *pLine; // линия 
TChartPoint *pFp; // начальная точка 
TChartPoint *pLp; // конечная точка 
friend class TChart
}; 
Общая схема общего алгоритма обхода состоит в следующем: 
Линии, определяемые при обходе плекса, помещаются в стек, 

При линии, извлекаемой из стека, последовательно определяются начальная и 
конечная точки, 

Для определения начальной точки используется метод GetFirstPoint линии; если 
получаемый указатель указывает на линию, обработка текущей линии 
откладывается (линия помещается в стек) и начинается анализ новой линии; данная 
процедура выполняется итеративно до получения линии с известной начальной 
точкой, 

Для определения конечной точки используется метод GetLastPoint линии; если 
получаемый указатель указывает на линию, обработка текущей линии снова 
откладывается – текущая линия помещается в стек; после этого формируется 
описание новой линии, которая также помещается в стек и цикл алгоритма обхода 
повторяется, 

При получении линии с определенными граничными точками следует выполнить 
обработку линии (отрисовать); из стека извлекается новая линия, для которой 
конечная точка обработанной линии используется в качестве первой неизвестной 
граничной точки, 
Выполнение обхода завершается при опустошении стека линий. 


 
85 

Download 1.23 Mb.

Do'stlaringiz bilan baham:
1   ...   68   69   70   71   72   73   74   75   ...   87




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling