ГОСТ Р ИСО 13584-31—2010
REPEAT i1 ТС ndim;
scalar scalar +
vecl.direction_ratios’i]*vec2.direction_ratiosfi;;
END_R£PEAT;
END;
RETURN (scalar);
END_IF;
END_1F;
ENU_1UNCTION;
(*
Определения аргументов функции:
arg1. (вход) направление, определяющее первый операнд точечного (скалярного) произведения;
arg2: (вход) направление, определяющее второй операнд точечного произведения;
result: (выход) скаляр, равный точечному произведению векторов агд1 и агд2.
6.3.1.11 Функция normalize
Функция normalize возвращает вектор, компоненты которого нормированы так, что сумма их ква
дратов равна 1.0. Тип результата функции (направление или вектор в тех же единицах) совпадает с ти
пом аргумента функции. Если аргумент функции не определен или имеет нулевой модуль, то выходной
вектор также не определен.
Спецификация на языке EXPRESS:
*>
FUNCTION normalise(arg : vector_or_direction) :vector_or_direction;
LOCAL
ndim : INTEGER;
v : direction;
result : vector_or_direction;
vec : vector;
mag : REAL;
END_LOCAL;
IF NOT EXISTS (arg) THEN
result?;
(* When function is called with invalid data
a NULL result is returned *)
ELSE
r.dim arg.dim;
IF ’API_ABSTRACT_SCHEMA.VECTOR’ IN TYPEOF(arg) THEN
BEGIN
vec arg;
varg.orientation;
IF arg.magnitude - 0.0 THEN
RETURN (?);
ELSE
vec.magnitude 1.0;
END_IF;
END;
ELSE
varg;
END_1F;
mag :- 0.0;
REPEAT i1 TO ndim;
mag :- mag f v.direction_ratiosfij“v.direction_ratios[i);
END_REPEAT;
IF mag >0.0 THEN
magSQRT(mag);
REPEAT i1 TO ndim;
v.direction_ratios(i]v.directionratios[i]/mag;
END__REPEAT;
IF ’AP1_ABSTRACT_SCHEMA.VECTOR* IN TYPEOF(arg) THEN
97