FUNCTION vector_difference
(* SCHEMA ship_structures_schema; *)
FUNCTION vector_difference(
arg1, arg2: vector_or_direction
): vector;
LOCAL
ndim : INTEGER;
mag2 : REAL;
mag1 : REAL;
mag : REAL;
res : direction;
vec1 : direction;
vec2 : direction;
result : vector;
END_LOCAL;
IF (NOT EXISTS(arg1)) OR (NOT EXISTS(arg2)) OR (arg1.dim <> arg2.dim)
THEN
RETURN(?);
ELSE
BEGIN
IF 'SHIP_STRUCTURES_SCHEMA.VECTOR' IN TYPEOF(arg1) THEN
mag1 := arg1.magnitude;
vec1 := arg1.orientation;
ELSE
mag1 := 1;
vec1 := arg1;
END_IF;
IF 'SHIP_STRUCTURES_SCHEMA.VECTOR' IN TYPEOF(arg2) THEN
mag2 := arg2.magnitude;
vec2 := arg2.orientation;
ELSE
mag2 := 1;
vec2 := arg2;
END_IF;
vec1 := normalise(vec1);
vec2 := normalise(vec2);
ndim := SIZEOF(vec1.direction_ratios);
mag := 0;
res := dummy_gri || direction(vec1.direction_ratios);
REPEAT i := 1 TO ndim BY 1;
res.direction_ratios[i] := (mag1 * vec1.direction_ratios[i]) + (
mag2 * vec2.direction_ratios[i]);
mag := mag + (res.direction_ratios[i] * res.direction_ratios[i]);
END_REPEAT;
IF mag > 0 THEN
result := dummy_gri || vector(res,SQRT(mag));
ELSE
result := dummy_gri || vector(vec1,0);
END_IF;
END;
END_IF;
RETURN(result);
END_FUNCTION; -- vector_difference
Referenced By
Defintion vector_difference is references by the following definitions:
[Top Level Definitions] [Exit]Generated by STEP Tools® EXPRESS to HTML Converter
2012-03-27T17:17:03-04:00