-
Notifications
You must be signed in to change notification settings - Fork 0
/
BBS-Numerical-quaternion.ads
34 lines (30 loc) · 1.04 KB
/
BBS-Numerical-quaternion.ads
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--
-- This is a simple package that supports basic functions on quaternions.
--
-- i*i = j*j = k*k = i*j*k = -1
--
generic
type F is digits <>;
package BBS.Numerical.quaternion is
type quaternion is tagged record
r : f'Base; -- Scalar part
i : f'Base; -- i, j, and k are the vector part
j : f'Base;
k : f'Base;
end record;
--
-- Basic arithmatic operations
--
function "+" (Left, Right : quaternion) return quaternion;
function "-" (Left, Right : quaternion) return quaternion;
function "*" (Left : f; Right : quaternion) return quaternion;
function "*" (Left : quaternion; Right : f) return quaternion;
function "*" (Left : quaternion; Right : quaternion) return quaternion;
function "/" (Left : quaternion; Right : f) return quaternion;
function magnitude(self : in quaternion) return f'Base;
--
-- Scale value to have a magnitude of 1. This is effectively a
-- unit vector.
--
function normalize(self : in quaternion) return quaternion;
end BBS.Numerical.quaternion;