1. -- 
  2. -- Jan & Uwe R. Zimmer, Australia, September 2019 
  3. -- 
  4.  
  5. with Real_Type; use Real_Type; 
  6. with Vectors_xD;                 pragma Elaborate_All (Vectors_xD); 
  7.  
  8. package Vectors_3D is 
  9.  
  10.    type Coordinates is (x, y, z); 
  11.  
  12.    package Vectors_3Di is new Vectors_xD (Real, Coordinates); 
  13.  
  14.    subtype Vector_3D is Vectors_3Di.Vector_xD; 
  15.  
  16.    Zero_Vector_3D : constant Vector_3D := Vectors_3Di.Zero_Vector_xD; 
  17.  
  18.    function Image (V : Vector_3D) return String renames Vectors_3Di.Image; 
  19.  
  20.    function Norm (V : Vector_3D) return Vector_3D renames Vectors_3Di.Norm; 
  21.  
  22.    function "*" (Scalar : Real; V : Vector_3D) return Vector_3D renames Vectors_3Di."*"; 
  23.    function "*" (V : Vector_3D; Scalar : Real) return Vector_3D renames Vectors_3Di."*"; 
  24.    function "/" (V : Vector_3D; Scalar : Real) return Vector_3D renames Vectors_3Di."/"; 
  25.  
  26.    function "*" (V_Left, V_Right : Vector_3D) return Real renames Vectors_3Di."*"; 
  27.    function "*" (V_Left, V_Right : Vector_3D) return Vector_3D; 
  28.  
  29.    function Angle_Between (V_Left, V_Right : Vector_3D) return Real renames Vectors_3Di.Angle_Between; 
  30.  
  31.    function "+" (V_Left, V_Right : Vector_3D) return Vector_3D renames Vectors_3Di."+"; 
  32.    function "-" (V_Left, V_Right : Vector_3D) return Vector_3D renames Vectors_3Di."-"; 
  33.    function "-" (V : Vector_3D)               return Vector_3D renames Vectors_3Di."-"; 
  34.  
  35.    function "abs" (V : Vector_3D) return Real renames Vectors_3Di."abs"; 
  36.  
  37. end Vectors_3D;