|
FUNCTION vector_sum (arg1 : vector_or_direction, arg2 : vector_or_direction) : vector; LOCAL result : vector ; res , vec1 , vec2 : direction ; mag , mag1 , mag2 : REAL ; ndim : INTEGER ; END_LOCAL ; IF ( ( NOT EXISTS ( arg1 ) ) OR ( NOT EXISTS ( arg2 ) ) ) OR ( arg1 . dim <> arg2 . dim ) THEN RETURN ( ? ) ; ELSE BEGIN IF 'geometry_schema.vector' IN TYPEOF ( arg1 ) THEN mag1 := arg1 . magnitude ; vec1 := arg1 \ vector . orientation ; ELSE mag1 := 1.0 ; vec1 := arg1 ; END_IF ; IF 'geometry_schema.vector' IN TYPEOF ( arg2 ) THEN mag2 := arg2 . magnitude ; vec2 := arg2 \ vector . orientation ; ELSE mag2 := 1.0 ; vec2 := arg2 ; END_IF ; vec1 := normalise ( vec1 ) ; vec2 := normalise ( vec2 ) ; ndim := SIZEOF ( vec1 . direction_ratios ) ; mag := 0.0 ; res := dummy_gri || direction ( vec1 . direction_ratios ) ; REPEAT i := 1 TO ndim ; 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.0 ) THEN result := dummy_gri || vector ( res , SQRT ( mag ) ) ; ELSE result := dummy_gri || vector ( vec1 , 0.0 ) ; END_IF ; END ; END_IF ; RETURN ( result ) ; END_FUNCTION; -- vector_sum |
|
public class FVector_sum public static Value run(SdaiContext _context, Value arg1, Value arg2) |