mirror of https://github.com/CGAL/cgal
Add more explanations about the non orientable case.
This commit is contained in:
parent
7e3cb2094e
commit
e268b9082b
|
|
@ -12,7 +12,11 @@ namespace CGAL {
|
|||
|
||||
A <I>d</I>-dimensional generalized map is a data structure representing an \tred{orientable or non orientable} subdivided <I>d</I>-dimensional object obtained by taking <I>d</I>D cells, and allowing to glue <I>d</I>D cells along <I>(d-1)</I>D cells. It provides a description of all the cells of the subdivision (for example vertices and edges), together with incidence and adjacency relationships.
|
||||
|
||||
\tred{This package is an extension of the \ref ChapterCombinatorialMap "combinatorial maps" data structure which allows to describe only orientable objects.}
|
||||
\tred{This package is an extension of the \ref ChapterCombinatorialMap "combinatorial maps" data structure which allows to describe only orientable objects such as a Möbius strip (\cgalFigureRef{fig_gmap_non_orientable_objects} Left) or a Klein bottle (\cgalFigureRef{fig_gmap_non_orientable_objects} Right).}
|
||||
|
||||
\cgalFigureBegin{fig_gmap_non_orientable_objects,gmap_non_orientable_objects.png}
|
||||
Example of two non-orientable objects. Left: A Möbius strip. Right: A Klein bottle.
|
||||
\cgalFigureEnd
|
||||
|
||||
We denote <I>i</I>-cell for an <I>i</I>-dimensional cell (for example in 3D, 0-cells are <I>vertices</I>, 1-cells are <I>edges</I>, 2-cells are <I>facets</I>, and 3-cells are <I>volumes</I>). A <I>boundary relation</I> is defined on these cells, giving for each <I>i</I>-cell <I>c</I> the set of <I>(i-1)</I>-cells contained in the boundary of <I>c</I>. Two cells <I>c1</I> and <I>c2</I> are <I>incident</I> if there is a path of cells, starting from the cell of biggest dimension to the other cell, such that each cell of the path (except the first one) belongs to the boundary of the previous cell in the path. Two <I>i</I>-cells <I>c3</I> and <I>c4</I> are <I>adjacent</I> if there is an <I>(i-1)</I>-cell incident to both <I>c3</I> and <I>c4</I>. You can see an example of a 2D object and a 3D object in \cgalFigureRef{fig_gmap_example_subdivisions} showing some cells of the subdivision and some adjacency and incidence relations.
|
||||
|
||||
|
|
@ -345,6 +349,15 @@ Let us consider the generalized map given in \cgalFigureRef{fig_gmap_example_3d_
|
|||
If one wants to modify a generalized map <I>manually</I>, it is possible to switch off the updating between darts and attributes by calling \link GeneralizedMap::set_automatic_attributes_management `set_automatic_attributes_management(false)`\endlink before to call \link GeneralizedMap::sew `sew<i>(dh1,dh2)`\endlink and \link GeneralizedMap::unsew `unsew<i>(dh0)`\endlink. In these cases, the generalized map obtained may be no longer valid due to incorrect associations between darts and attributes. In \cgalFigureRef{fig_gmap_example_3d_sew} (Left), if we call \link GeneralizedMap::sew `sew<3>(1,5)`\endlink, the resulting generalized map is similar to the generalized map of \cgalFigureRef{fig_gmap_example_3d_sew} (Right) (we have linked by \f$ \alpha_3\f$ the pairs of darts (1,5), (2,8), (3,7) and (4,6)), but associations between darts and attributes are not valid. Indeed, we have kept the four initial attributes and all the associations between darts and attributes, thus two darts belonging to the same 2-cell (for example darts 1 and 5) are associated with two different attributes. We can also use the \link GeneralizedMap::link_alpha `link_alpha<i>(dh1,dh2)`\endlink which links `d1` and `d2` by \f$ \alpha_i\f$ without modifying the other links. Association between darts and attributes are only modified for darts `d1` and `d2`, and similarly as for \link GeneralizedMap::sew `sew<i>`\endlink, this updating can be avoided by calling \link GeneralizedMap::set_automatic_attributes_management `set_automatic_attributes_management(false)`\endlink before to call \link GeneralizedMap::link_alpha `link_alpha<i>(dh1,dh2)`\endlink. Lastly, we can use \link GeneralizedMap::unlink_alpha `unlink_alpha<i>(dh0)`\endlink to unlink `d0` for \f$ \alpha_i\f$. In this last case, there is no modification of association between darts and attributes. In \cgalFigureRef{fig_gmap_example_3d_sew} (Left), if we call \link GeneralizedMap::link_alpha `link_alpha<3>(1,5)`\endlink, in the resulting generalized map we have now \f$ \alpha_3\f$(1)=5 and \f$ \alpha_3\f$(5)=1. This generalized map is no longer valid (for example dart 2 is 3-free and we should have \f$ \alpha_3\f$(2)=8). A call latter to \link GeneralizedMap::set_automatic_attributes_management `set_automatic_attributes_management(true)`\endlink will correct the invalid non void attributes.
|
||||
\cgalAdvancedEnd
|
||||
|
||||
\cgalModifBegin
|
||||
Sewing operations can be used in order to build a non-orientable generalized map. Let us consider the 2D generalized map representing a square given in \cgalFigureRef{fig_gmap_sew_non_orientable} (Left). Two opposite edges of the square can be identified by using the \link GeneralizedMap::sew `sew<2>`\endlink operation. But there are two possibilities to make this identification. The first one, shown in \cgalFigureRef{fig_gmap_sew_non_orientable} (Middle), creates an annulus which is thus orientable. The second one, shown in \cgalFigureRef{fig_gmap_sew_non_orientable} (Right), creates a Möbius strip which is thus non-orientable. The choice of the two darts for the sew operation is thus crucial.
|
||||
|
||||
\cgalFigureBegin{fig_gmap_sew_non_orientable,gmap_sew_non_orientable.svg}
|
||||
Illustration of the use of the 2-sew operation to construct a non-orientable generalized map. Left: A 2D generalized map <I>M</I> representing a square. Middle: the generalized map obtained from <I>M</I> after \link GeneralizedMap::sew `sew<2>(1,3)`\endlink. This map is orientable and corresponds to an annulus. Right: the generalized map obtained from <I>M</I> after \link GeneralizedMap::sew `sew<2>(1,4)`\endlink. This map is non-orientable and corresponds to a Möbius strip.
|
||||
\cgalFigureEnd
|
||||
|
||||
\cgalModifEnd
|
||||
|
||||
\subsection ssecoperationsgmap Removal and Insertion Operations
|
||||
|
||||
The following high level operations are defined. All these methods ensure that given a valid generalized map and a possible operation, the modified generalized map is also valid.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,111 @@
|
|||
#FIG 3.2 Produced by xfig version 3.2.5c
|
||||
Portrait
|
||||
Center
|
||||
Metric
|
||||
A4
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
0 32 #000000
|
||||
0 33 #808080
|
||||
0 34 #ffffff
|
||||
0 35 #008000
|
||||
0 36 #0000ff
|
||||
0 37 #000000
|
||||
0 38 #000000
|
||||
0 39 #000000
|
||||
0 40 #000000
|
||||
0 41 #000000
|
||||
0 42 #000000
|
||||
0 43 #000000
|
||||
0 44 #000000
|
||||
0 45 #000000
|
||||
0 46 #000000
|
||||
0 47 #000000
|
||||
0 48 #000000
|
||||
0 49 #dddddd
|
||||
0 50 #000000
|
||||
0 51 #000000
|
||||
0 52 #a0a0a0
|
||||
0 53 #5a5a5a
|
||||
0 54 #dfdfdf
|
||||
0 55 #868686
|
||||
0 56 #b1b1b1
|
||||
0 57 #2a2a2a
|
||||
0 58 #ff0000
|
||||
0 59 #9f9f9f
|
||||
0 60 #00ff00
|
||||
0 61 #343434
|
||||
0 62 #5d5d5d
|
||||
0 63 #393939
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -6300 5130 64 64 -6300 5130 -6259 5179
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -8100 5130 64 64 -8100 5130 -8059 5179
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -8100 6930 64 64 -8100 6930 -8059 6979
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -6300 6930 64 64 -6300 6930 -6259 6979
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -2925 5400 64 64 -2925 5400 -2884 5449
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -2925 7200 64 64 -2925 7200 -2884 7249
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -3285 5400 64 64 -3285 5400 -3244 5449
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 -3285 7200 64 64 -3285 7200 -3244 7249
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 1935 7020 64 64 1935 7020 1976 7069
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 1575 7020 64 64 1575 7020 1616 7069
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 1575 5310 64 64 1575 5310 1616 5359
|
||||
1 3 0 0 62 62 25 -1 20 0.000 1 0.0000 1935 5310 64 64 1935 5310 1976 5359
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-7965 6030 -8235 6030
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-6165 6030 -6435 6030
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-7200 5265 -7200 4995
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-7200 7065 -7200 6795
|
||||
2 2 0 3 32 7 400 -1 -1 0.000 0 0 -1 0 0 5
|
||||
-6300 6930 -8100 6930 -8100 5130 -6300 5130 -6300 6930
|
||||
2 1 0 3 32 7 400 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-2925 5400 -2925 7200
|
||||
2 1 0 3 32 7 400 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-3285 5400 -3285 7200
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-3105 4680 -3105 4410
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-3105 6480 -3105 6210
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
-2835 6075 -3375 6075
|
||||
2 1 0 3 32 7 400 -1 -1 0.000 0 0 -1 0 0 2
|
||||
1935 5310 1935 7020
|
||||
2 1 0 3 32 7 400 -1 -1 0.000 0 0 -1 0 0 2
|
||||
1575 5310 1575 7020
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
1895 5214 1895 4944
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
1567 5233 1567 4963
|
||||
2 1 0 2 33 7 410 -1 -1 0.000 0 0 -1 0 0 2
|
||||
2025 6120 1485 6120
|
||||
3 0 0 3 32 7 400 -1 -1 0.000 0 0 0 6
|
||||
-3285 5400 -4815 5040 -4815 4500 -1395 4500 -1395 5040 -2925 5400
|
||||
0.000 1.000 1.000 1.000 1.000 0.000
|
||||
3 0 0 3 32 7 400 -1 -1 0.000 0 0 0 6
|
||||
-3285 7200 -4815 6840 -4815 6300 -1395 6300 -1395 6840 -2925 7200
|
||||
0.000 1.000 1.000 1.000 1.000 0.000
|
||||
3 0 0 3 32 7 400 -1 -1 0.000 0 0 0 9
|
||||
1935 5310 2970 5085 3465 4635 2745 4320 1935 4815 630 5895
|
||||
270 6390 765 6930 1575 7020
|
||||
0.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
|
||||
0.000
|
||||
3 0 0 3 32 7 400 -1 -1 0.000 0 0 0 9
|
||||
1575 5310 540 5085 45 4635 765 4320 1575 4815 2880 5895
|
||||
3240 6390 2745 6930 1935 7020
|
||||
0.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
|
||||
0.000
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -3465 5850 1\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -3510 6795 2\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -2880 5850 3\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -2880 6795 4\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 1395 5850 1\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 1395 6570 2\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 1980 6570 3\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 1980 5850 4\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -8280 5715 1\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -8280 6570 2\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -6255 5670 3\001
|
||||
4 0 32 300 -1 0 17 0.0000 4 195 150 -6210 6525 4\001
|
||||
Loading…
Reference in New Issue