|
FUNCTION first_proj_axis (z_axis : direction, arg : direction) : direction; LOCAL x_axis : direction ; v : direction ; z : direction ; x_vec : vector ; END_LOCAL ; IF ( NOT EXISTS ( z_axis ) ) THEN RETURN ( ? ) ; ELSE z := normalise ( z_axis ) ; IF NOT EXISTS ( arg ) THEN IF ( ( z . direction_ratios <> [ 1.0 , 0.0 , 0.0 ] ) AND ( z . direction_ratios <> [ - 1.0 , 0.0 , 0.0 ] ) ) THEN v := dummy_gri || direction ( [ 1.0 , 0.0 , 0.0 ] ) ; ELSE v := dummy_gri || direction ( [ 0.0 , 1.0 , 0.0 ] ) ; END_IF ; ELSE IF ( arg . dim <> 3 ) THEN RETURN ( ? ) ; END_IF ; IF ( ( cross_product ( arg , z ) . magnitude ) = 0.0 ) THEN RETURN ( ? ) ; ELSE v := normalise ( arg ) ; END_IF ; END_IF ; x_vec := scalar_times_vector ( dot_product ( v , z ) , z ) ; x_axis := vector_difference ( v , x_vec ) . orientation ; x_axis := normalise ( x_axis ) ; END_IF ; RETURN ( x_axis ) ; END_FUNCTION; -- first_proj_axis |
|
public class FFirst_proj_axis public static Value run(SdaiContext _context, Value z_axis, Value arg) |