Иванов В.П., Батраков A.C. - Трехмерная компьютерная графика / Под ред. Г.М. Полищука. стр.109

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Т[Ц;


⇐ Предыдущая страница| |Следующая страница ⇒