|
FUNCTION cross_product (arg1 : direction, arg2 : direction) : vector; LOCAL mag : REAL ; res : direction ; v1 , v2 : LIST [ 3 : 3 ] OF REAL ; result : vector ; END_LOCAL ; IF ( NOT EXISTS ( arg1 ) OR ( arg1 . dim = 2 ) ) OR ( NOT EXISTS ( arg2 ) OR ( arg2 . dim = 2 ) ) THEN RETURN ( ? ) ; ELSE BEGIN v1 := normalise ( arg1 ) . direction_ratios ; v2 := normalise ( arg2 ) . direction_ratios ; res := dummy_gri || direction ( [ ( v1 [ 2 ] * v2 [ 3 ] - v1 [ 3 ] * v2 [ 2 ] ) , ( v1 [ 3 ] * v2 [ 1 ] - v1 [ 1 ] * v2 [ 3 ] ) , ( v1 [ 1 ] * v2 [ 2 ] - v1 [ 2 ] * v2 [ 1 ] ) ] ) ; mag := 0.0 ; REPEAT i := 1 TO 3 ; 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 ( arg1 , 0.0 ) ; END_IF ; RETURN ( result ) ; END ; END_IF ; END_FUNCTION; -- cross_product |
|
public class FCross_product public static Value run(SdaiContext _context, Value arg1, Value arg2) |