2D and 3D geometry is quite fundamental to the model based approach to computer vision and even when algorithms are not specifically model based they are still often a compact way to construct and implement an algorithm. In Tina vectors are represented as structures, for example a 3-vector is defined as:

typedef struct vec3 { Ts_id ts_id; /* Tina structure identifier */ float el[3]; } Vec3;

The internal structure should not be used. The x-component of a 3-vector should be got and set using statements like:

vx = vec3_x(v);

and

vec3_x(v) = vx;

(this is allowed since vec3_x() is a macro).

A 3-vector with given components can be constructed using the function vec3(), e.g.

v = vec3(1.0, 2.0, 3.0);

A fairly complete set of vector algebra and geometry functions is provided, look before you write your own. Most of these functions pass arguments by value and return a structure. Though there is a slight overhead in passing a structure rather than a pointer the advantage is that translating vector algebra into code can be almost transparent. For example a function to find the component of a vector u perpendicular to a unit vector v

p = u-(u.v)v

can be defined by

Vec3 vec3_projperp(Vec3 u, Vec3 v) /**component of u perpendicular to unit v**/ { return (vec3_diff(u, vec3_times(vec3_dot(u, v), v))); }

Occasionally 2-vectors with integer components are needed (e.g. to represent positions on a graphics window). A structure Ipos (integer position) is provided to deal with this, together with a limited set of functions to manipulate them.

- 3D Vector Algebra Functions
- 3D Vector Geometry
- 3D Matrix Algebra Functions
- 2D Vector Algebra Functions
- 2D Vector Geometry Functions
- 2D Matrix Algebra Functions
- 3D Rotation Functions
- 3D Transformation Functions