Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / gil / doc / design / point.rst
1 Point
2 =====
3
4 .. contents::
5    :local:
6    :depth: 2
7
8 Overview
9 --------
10
11 A point defines the location of a pixel inside an image. It can also be used
12 to describe the dimensions of an image. In most general terms, points are
13 N-dimensional and model the following concept:
14
15 .. code-block:: cpp
16
17   concept PointNDConcept<typename T> : Regular<T>
18   {
19       // the type of a coordinate along each axis
20       template <size_t K> struct axis; where Metafunction<axis>;
21
22       const size_t num_dimensions;
23
24       // accessor/modifier of the value of each axis.
25       template <size_t K> const typename axis<K>::type& T::axis_value() const;
26       template <size_t K>       typename axis<K>::type& T::axis_value();
27   };
28
29 GIL uses a two-dimensional point, which is a refinement of ``PointNDConcept``
30 in which both dimensions are of the same type:
31
32 .. code-block:: cpp
33
34   concept Point2DConcept<typename T> : PointNDConcept<T>
35   {
36       where num_dimensions == 2;
37       where SameType<axis<0>::type, axis<1>::type>;
38
39       typename value_type = axis<0>::type;
40
41       const value_type& operator[](const T&, size_t i);
42           value_type& operator[](      T&, size_t i);
43
44       value_type x,y;
45   };
46
47 .. seealso::
48
49   - `PointNDConcept <reference/structboost_1_1gil_1_1_point_n_d_concept.html>`_
50   - `Point2DConcept <reference/structboost_1_1gil_1_1_point2_d_concept.html>`_
51
52 Models
53 ------
54
55 GIL provides a model of ``Point2DConcept``, ``point<T>`` where ``T`` is the
56 coordinate type.