UGOL1_MATR=ARRAY[1..300,1..2] OF INTEGER; {Тип для массива номеров плоскостей,между которыми измеряется угол}
UGOL2_MATR=ARRAY[1..300] OF REAL; {Тип для массива величин углов между плоскостями}
PAR_PL_MATR=ARRAY[1..MAX,1..2] OF INTEGER;{Тип для массива номеров паралл.плоскостей}
IDENT_MATR=ARRAY[1..150,1..2] OF INTEGER; {Тип для массива номеров пар плоскостей, между которыми равные углы}
var
inputFile:TEXT; {Входной файл}
outFile:TEXT; {Файл результатов}
i, j, N, PP: integer; {i,j–рабочие переменные,N-количество плоскостей,PP-кол-во паралл.плоскостей}
EQU:EQUATION_MATR; {Коэф. одной плоскости}
COEF:COEF_MATR; {Коэф. всех плоскостей}
PAR_PL:PAR_PL_MATR; {Номера параллельных плоскостей}
UGOL1:UGOL1_MATR; {Номера плоскостей,между которыми определяется угол}
UGOL2:UGOL2_MATR; {Величины углов между плоскостями}
A, B, C, X:REAL; {A,B,C-коэфф.,X-косинус угла}
E:REAL; {Погрешность оценки параллельных плоскостей}
IDENT:IDENT_MATR; {Номера пар плоскостей,углы между которыми равны }
UG:INTEGER; {Количество углов}
ID:INTEGER; {Кол-во равных углов}
CH : INTEGER; {Символ для ввода}
{-------УГОЛ МЕЖДУ ПЛОСКОСТЯМИ--------}
PROCEDURE UGOL_PL(COEF:COEF_MATR;N:INTEGER;VAR UGOL1:UGOL1_MATR;VAR UGOL2:UGOL2_MATR;VAR UG:INTEGER);
VAR
I,J,K:INTEGER; {Рабочие переменные}
ALFA:REAL; {Величина угла}
BEGIN
J:=0; {Установка начальных значений}
K:=0;
FOR I:=1 TO N-1 DO
BEGIN
FOR J:=I+1 TO N DO
BEGIN
K:=K+1;
A:=SQRT( SQR(COEF[I,1])+ SQR(COEF[I,2])+ SQR(COEF[I,3]) );
B:=SQRT( SQR(COEF[J,1])+ SQR(COEF[J,2])+ SQR(COEF[J,3]) );
C:=SQRT( SQR( COEF[I,1]-COEF[J,1] )+ SQR( COEF[I,2]-COEF[J,2])+
SQR(COEF[I,3]-COEF[J,3]) );
X:=( SQR(A)+ SQR(B)- SQR(C))/(2*A*B); {Вычисление косинуса угла}
IF X = 0 THEN {Проверка перпендикулярности плоскостей}
ALFA:=90
ELSE
BEGIN
ALFA:=ARCTAN( (SQRT (1-X*X))/X );
ALFA:=180*ALFA/PI; {Вычисление величины угла}
IF ALFA < 0 THEN
ALFA:=ALFA*(-1)
END;
UGOL1[K,1]:=I; {Запись номеров пары плоскостей,содержащих данный угол}
UGOL1[K,2]:=J;
UGOL2[K]:=ALFA;
END
END;
UG:=K
END;
{------Подпрограмма поиска параллельных плоскостей--------}
PROCEDURE PARAL_PL(COEF:COEF_MATR;N:INTEGER;E:REAL;VAR PAR_PL:PAR_PL_MATR;VAR PP:INTEGER);
VAR
CONDITION, CONDITION1, CONDITION2: BOOLEAN; {Условия паралл-ти плоскостей}
I,J : INTEGER;
BEGIN
PP:=0; {Установка начальных значений}
FOR I:=1 TO N-1 DO {Проверка параллельности плоскостей}
BEGIN
FOR J:=I+1 TO N DO
BEGIN
CONDITION1:=ABS(COEF[I,1]*COEF[J,2]-COEF[I,2]*COEF[J,1]) < E; CONDITION2:=ABS(COEF[I,1]*COEF[J,3]-COEF[I,3]*COEF[J,1]) < E;
CONDITION:=CONDITION1 AND CONDITION2;
IF CONDITION THEN {Плоскости параллельны}
BEGIN
PP:=PP+1;
PAR_PL[PP,1]:=I; {Запись номеров}
PAR_PL[PP,2]:=J; {параллельных плоскостей}
END
END
END
END;
{-----Подпрограмма поиска равных углов между плоскостями----}
PROCEDURE IDENTICAL_UGOL(UGOL2:UGOL2_MATR;E:REAL;UG:INTEGER;VAR IDENT:IDENT_MATR;VAR ID:INTEGER);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.