ГОСТ Р ИСО 13584-31—2010
vec: (вход) умножаемый вектор (направление):
result: (выход) вектор, являющийся результатом умножения scalarна vec.
6.3.1.13 Функция vector_sum
Функция vector_sum возвращает сумму векторов к входным аргументам. При этом направление
рассматривается как единичный вектор. Входные аргументы должны иметь одинаковую размерность,
они могут быть либо направлениями, либо векторами. Если оба входных аргумента — векторы, то они
должны быть выражены в одинаковых единицах. Если оба входных вектора равны нулю, то на выходе
получается вектор нулевого модуля с направлением агд1. Если оба входных аргумента — направления, то
результат получается безразмерным.
Спецификация на языке EXPRESS:
*)
FUNCTION vector_sum(argl, arg2 : vector_or_direction) :vector;
LOCAL
result; vector;
res, vecl, vec2 :direction;
mag, magi, mag2 : REAL;
ndim: INTEGER;
END LOCAL;
IF {(NOT EXISTS(argl)} OR (NOT EXISTS(arg2))) OR (argl.dim <> arg2.dim)
THEN
result ?;
(* When function is called with invalid data
a NULL result is returned
‘ >
ELSE
BEGIN
IF ’API_ABSTRACT_SCHEMA.VECTOR’ IN TYPEOF(argl) THEN
magi argl.magnitude;
vecl argl.orientation;
ELSE
magi 1.0;
vecl argl;
END_IF;
IF ’API_ABSTRACT_SCHEMA.VECTOR’ IN TYPEOF(arg2) THEN
mag2arg2.magnitude;
vec2 arg2.orientation;
ELSE
mag2 ;- 1.0;
vec2 arg2;
END_1F;
vecl normalise (vecl);
vec2 normalise (vec2);
ndim SIZEOF(vecl.direction_ratios);
mag0.0;
REPEAT i1 TO ndim;
res.direction_ratios[i) magi*vecl.direction_ratios(i] *
mag2*vec2.direction_ratiosfi];
magmag <res.direction_ratiosГi.)*res.direction_ratios[i));
END_REPEAT;
IF (mag > 0.0 ) THEN
result.magnitudeSORT(mag);
result.orientation res;
ELSE
result.magnitude0.0;
result.orientation vecl;
END_1F;
END;
£NL)_1F;
RETURN (result);
END_FUNCTION;
(*
"
99