ГОСТ Р ИСО 13584-31—2010
Определения аргументов:
z_axis: (вход) направление, определяющее локальную ось 2;
arg: (вход) направление, не параллельное оси z_axis.
x_axis: (выход) направление, совпадающее с направлением проекции вектора агд на плоскость,
перпендикулярную оси z_axis.
6.3.1.8 Функция second_proj_axis
Функция second_proj_axis возвращает значение нормированного вектора, который одновременно
является проекцией вектора агд на плоскость, перпендикулярную оси z_axis, и на плоскость, перпен
дикулярную оси x_axis. Если вектор агд равен «null», то функция возвращает проекцию вектора (0.1.0)
на ось z_axis.
Спецификация на языке EXPRESS.
*>
FUNCTION second_proj_axis(zaxis, xaxis, arg: direction) : direction;
LOCAL
y_axis : vector;
v :direction;
temp : vector;
END_LOCAL;
If NOT EXISTS(arg) THEN
v direction<[0.0,1.0,0.0;);
ELSE
v arg;
END_IF;
zaxis), z_axis);
x_axis), xaxis);
temp :- scalar_tiraes_vector(dot_product(v,
y_axis :- vectordifference<v, temp);
temp :- scalar_tiraes_vector(dot_product(v,
y_axis :- vectordifference<y_axis, temp);
y_axisnormalise(y_axis);
RETURN <y_axis.orientation) ;
END_bUNCTION;
(*
Определения аргументов:
z_axis: (вход) направление, задающее локальную ось Z.
x_axis: (вход) направление, не параллельное оси z_axis,
arg: (вход) направление, используемое как первая аппроксимация направления оси y_axis.
y_axis.orientation: (выход) направление, определяемое сначала путем проецирования вектора агд
на плоскость, перпендикулярную оси z_axis, а затем проецирования полученного результата на пло
скость. перпендикулярную оси x_axis.
6.3.1.9 Функция cross_product
Функция cross_product возвращает векторное произведение двух входных направлений. Входные
направления должны быть трехмерными и нормированными перед вычислением произведения. Ре
зультатом всегда является безразмерный вектор. Если входные направления параллельны или непа
раллельны. то функция возвращает вектор с модулем, равным «null», и атрибутом orientation, равным
argl.
Спецификация на языке EXPRESS:
*>
FUNCTION cross_product(argl, arg2 : direction) : vector;
LOCAL
mag : REAL;
res :direction;
vl,v2 : LIST[3:3) OF REAL;
result : vector;
END_LOCAL;
IF {NOT EXISTS (argl) OR (argl.dim - 2)) OR
95