Sqrt((Sqr(rl)+Sqr(r2)+Sqr(r3))*
(Sqr(2.0*nrq-sl)+Sqr(2.0*n2*q-s2)+Sqr(2.0*n3*q-s3))); end;{ - ВЕТТА - }
Подпрограмма CILIND
(обращается к PLOS, KVADR, NA8FIR, SOME, PRESS)
1. Подпрограмма вычисляет координаты точки пересечения прямой с поверхностью тела, ограниченного круговым цилиндром и торцевыми плоскими кругами. Из всех возможных пересечений выбирается ближайшая точка к некоторой критериальной ( Xf, Yf, Zf), лежащей на прямой. Вычисляются параметры ненормированного нормального вектора, ориентированного внутрь тела. Положение цилиндра - произвольное и задается двумя осевыми точками на торцах.
2. Обращение к подпрограмме:
CILIND(F, S, R, Til, TF, GOT, WHAT, NORA);
3. Описание параметров, пояснения:
F — array [1..3] of real. F - матрица координат X, Y, Z осевой точки цилиндра на его первом торце;
S - array [1..3] of real. F - матрица координат X, Y, Z осевой точки цилиндра на его втором торце;
R ~ real. R - радиус цилиндра;
Til — array [1..3] of real. Til - матрица координат XI1, Yll, Z11 первой точки, через которую проходит прямая;
TF - array [1..3] of real. TF - матрица координат XI1, Yll, Z11 второй (критериальной) точки, через которую проходит прямая;
GOT ~ array [1..3] of real. GOT - матрица искомых координат точки, решения X, Y, Z; WHAT — integer, индикатор. WHAT = 1, если решение единственно, WHAT = 0, если решений нет или их бесконечно много;
NORA - array [1..3] of real. В этой матрице записаны проекции ненормированной нормали к поверхности тела в точке решения ( GOT) соответственно вдоль осей ОХ, OY, OZ. Нормаль направлена внутрь тела.
4. Ограничения и области допустимых значений. Состояние Zll>= Zf ( Tll[3]>= TF[3] ) недопустимо.
5. Тело подпрограммы:
procedure CILIND(F,S : mr_3 ;R : Re; T11,TF: mr_3;
var GOT : mr_3; var WHAT : Int; var NORA : mr__3);
var
ABC : mr_3;
XZ,YZ,XX,YY,Lola,Stom,A,B,C : Re; PI : mr_SM_3;
WHO,KAK,FIR,SEK : mr_4_l;
N,I,J,Jop : Int;
{Прим.: mr_3 — array[1..3] of real,
mr_SM_3 —array[l..4,1..3] of real, mr_4__l - array[1..4,l] of real, Re- real, Int — integer.}
begin N:=4;
WHO[1,1]:=0;WHO[2,1]:=0;WHO[3,1]:=1;WHO[4,1]:=1;
Гог к-1 Ю 3 сю ДВСр].—вЩ-РШ; Ьо1а:=0;
Гог го 3 с1о Ша:=1л1аН^г(АВС[Ц); Ьо1а:в8дП(Ьо1а);
Гог Ю 3 сю АВСЩ:=АВС[1]/Ьо1а;
ХХ:«Т11[1]-Р[1]; УУ:=Т11[2]-Р[2];
Х2:«(Т11[1]-ТР[1])/(Т11[3]-ТР[3]);
У2:=(Т11 [2]-ТР[2])/(Т11 [3]-ТР[3]);
Ьо1а:»АВС[1]*Х2+АВС[2]*У2+АВС[3];
81от:*-Т11[3]*(АВС[1]*Х2+АВС[2]*У2)-АВС[3]*Р[3]+
АВС[1]*ХХ+АВС[2]*УУ; А:«8а1да)+$дг(У2)+1.8яг(Ьо1а); и~ А=0 Шеп Ьеяш
\УНАТ:=0;
Ехй;
епс1;
В:=2*(-8дпОС2)*Т11[3]+Х2*ХХ-8аг(¥2)<,Т11[3]+
У2*УУ-Р[3]-Ьо1а*8гот); С:»8аг(Х2*Т11[3]-ХХ)+8дг(У2*Т11 [3]-УУ)+
5аг(Р13])-8аг(81от)-8дг(К); KVADR(A,B,C,WHAT,P1[1,3],P1[2,3]); X ^НАТ«2 Шеп Ьеядп
\УНАТ:*0; Ехи.;
епс1; Гог кв1 то 3 сю ИКр,1]:=АВС[Ц;
Р1К[4,1]:=-АВС[1]*Р[1]-АВС[2]*Р[2]-АВС[3]*Р[3]; Гог то 4 (1о 8ЕКр,1]:«-ИК[1,1];
8ЕК[4,1]:»АВС[1]*8[1]+АВС[2]*8[2]+АВС[3]*8[3];
РЬ08(Т11,ТР,ИК,С0ТЛ^НАТ); И'ТОНАТМ) Шеп ЕХИ; Гог ь—1 1о 3 сю Р1[3,Ц:-С0Т[Ц;