ГОСТ Р ИСО 13584-31—2010
Определения аргументов:
arg: входная кривая или поверхность, для которых необходимо определение ассоциированной
первичной поверхности;
surf: выходная первичная поверхность, ассоциированная с атрибутом агд.
6.3.1.3 Функция base_axis
Функция base_axis отображает три нормированных ортогональных направления: и[1], и[2] и и[3].
В трехмерном пространстве при полных исходных данных ортогональное направление и[3]ориентиро
вано в направлении оси axis3, ортогональное направление и[1)— в направлении проекции оси axisl
на плоскость, перпендикулярную к и[3), ортогональное направление и[2] перпендикулярно обоим
ортого нальным направлениям и[1] и и[3], при этом данное направление совпадает с положительным
направ лением оси axis2. В двумерном пространстве: ортогональное направление и[1]
ориентировано вдоль оси axisl, ортогональное направление и[2] перпендикулярно ортогональному
направлению и[1]. При этом данное направление совпадает с направлением оси axis2. Для неполных
исходных данных недо стающие значения определяются по умолчанию по некоторым формулам.
Спецификация на языке EXPRESS:
•)
FUNCTION base_axis(dim
: INTEGER; axisl, axis2, axis3 : direction) :
LIST (2:3’ OF direction;
LOCAL
vec : direction;
u : LIST (2:3] OF direction;
factor : REAL;
END_LOCAL;
IF (dim - 3} THEN
u[3] :- NVL(axis3, direction([0.0,0.0,1.0]>);
u[1] :- first_proj_axis(u(3],axisl);
u(2] :- second_proj_axis<u(3],u■1],axis2);
ELSE
u(3] :- ?;
IF EXISTS(axisl) THEN
u[l] :- normalise(axisl>;
u(2] :- orthogonal_complement(u[l’>);
IF EXISTS(axis2> THEN
factor :- dot_product(axis2,u(2]);
IF (factor < 0.0) THEN
u(2].directionratios{1] :- -u(2].direction_ratios(1];
u(2].directior._ratios(2] :- -u (2].direction_ratios(2*;
£ND_1F;
END_
1
F>
ELSE
IF EXISTS(axis2> THEN
u(2] :- normalise(axis2);
u[11 :- orthogonal_complement(u(2]);
:- -u(1’.direction_ratiosI1];
:- -u (1’•.direction_ratios{2];
:- 1.0;
:- 0.0;
:- 0.0;
:- 1.0;
u(1].direction_ratios(1]
u [1].direction_ratios(2]
ELSE
u(1].direction_ratios(1]
u(l].direction_ratios(2]
u(2].direction_ratios(1]
u(2].direction_ratios(2]
END_1F;
END_IF;
END_IF;
RETURN(u);
END FUNCTION;
(*
92