ГОСТ Р ИСО 13584-31—2010
Спецификация на языке EXPRESS:
*>
FUNCTION orthogonal_complement(vec : direction) :direction;
LOCAL
result : direction;
£NU_LOCAL;
IF (vec.dim 02) OR NOT EXISTS (vec) THEN
RETURN(?);
ELSE
result.direction_ratios[l] -vec.directionratios[2];
result.direction_ratios[2]vec.direction_ratios(1];
RETURN(result);
END_IF;
ENO_FUNCTION;
(‘
"
Определения аргументов функции:
vec: (вход) направление в 20-пространстве;
result: (выход) направление, ортогональное аргументу vec.
6.3.1.7 Функция first_proj_axis
Функция first_proj_axis представляет направление в трехмерном пространстве. Если вход опреде
лен полностью, то результатом является проекция вектора агд на плоскость, нормальную оси z_axis.
Если вектор агд задан по умолчанию, то результатом является проекция ортогонального направления
(1,
0.0]
на данную плоскость. Исключением является ситуация, когда направление z_axis равно (1.
0.0]
и вектор агдпо умолчанию равен
(0.
1.0). Сбой возникает, если направлениеданного вектора совпадает с
исходным направлением оси z_axis.
Спецификация на языке EXPRESS:
*>
FUNCTION first_proj_axis(z_axis, arg :direction) : direction;
LOCAL
x_axis : direction;
v : direction;
z : direction;
x_vec : vector;
END_LOCAL;
IF NOT EXISTS<z_axis> OR (NOT EXISTS(arg)) OR (arg.dim <> 3) THEN
x_axis?;
ELSE
z_axis :■*normalise (zaxis);
IF NOT EXISTS(arg) THEN
IF (z_axis <> direction<[1.0,0.0,0.0))) THEN
v direction([1.0,0.0,0.0]);
ELSE
v direction([0.0,1.0,0.0]);
ENO IF;
ELSE
IF ((cross_product(arg,z).magnitude) » 0.0) THEN
RETURN (?);
ELSE
v normalise(arg);
EHO_IF;
END_IF;
xvecscalar_times_vector(dot_product(v, z), z_axis);
xaxis vector^difference(v, xvec).orientation;
xaxis normalise(x_axis);
ENU_IF;
RETURN(x_axis);
ENO_FUNCTION;
Г ~
94