ГОСТ Р ИСО 13584-31—2010
Определения аргументов:
arg1. (вход) направление, задающее первое слагаемое векторной суммы.
arg2: (вход) направление, задающее второе слагаемое векторной суммы;
result: (выход) вектор, являющийся суммой векторов агд1 и агд2.
6.3.1.14 Функция vector_difference
Функция vector_difference вычисляет вектор, который является разностью векторов (агд1 — агд2).
Входные аргументы должны иметь одинаковую размерность, они могут быть либо направлениями, либо
векторами. Если оба входных аргумента — векторы, то они должны быть выражены в одинаковых еди
ницах. Если оба входных вектора равны нулю, то на выходе получается вектор нулевого модуля с на
правлением агд1. Если оба входных аргумента — направления, то результат получается безразмерным.
Спецификация на языке EXPRESS:
*>
FUNCTION vector difference(argl, atg2 :vector_or_direction) :vector;
LOCAL
result:vector;
res, vecl, vec
2
:direction;
ir.ag, magi, cr.ag2 :REAL;
nd-m:INTEGER;
END LOCAL;
i
1
IF ((NOT EXISTS (argl)> OR (NOT EXISTS (arg2>)> OR (argl.dim <> arg2.dim)
THEN
result ?;
(•When tunction 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 atgl.orientation;
ELSE
magi 1.0;
vecl argl;
END_IF;
IF ’AFI_ABSTRACT_SCHEMA.VECTOR’ IN TYPEOF(atg2) THEN
mag
2
atg2.magnitude;
vec2 arg2.orientation;
ELSE
mag2 1.0;
vec2 arg2;
END_IF;
vecl normalise (vecl);
vec2 normalise (vec2);
ndim SIZECF<vecl.directian_rat
ios
);
REPEAT i1 TO ndim;
res.directionratios[ ) magi*vecl.direction_ratios[ 1 -
mag2*vec2.direct.on_ratios[i);
magmag ♦- (res.direction_ratios[i]*res.direction_ratios[i]);
END_REPEAT;
IF (mag > 0.0 ) THEN
result.magnitude SQRT(mag);
result.orientationres;
ELSE
result.magnitude 0.0;
result.orientationvecl;
END IF;
END;"
END_IF;
RETURN (result);
END_FL’NCTION;
Г
100