Initial revision

This commit is contained in:
Laurent Rineau 2002-07-15 14:23:19 +00:00
parent b2cc1d95d6
commit 8c9a2b8900
132 changed files with 22506 additions and 0 deletions

38
.gitattributes vendored
View File

@ -1805,6 +1805,44 @@ Packages/Viewer_3/doc_tex/Viewer_3/viewer.eps -text
Packages/Viewer_3/doc_tex/Viewer_3/viewer.gif -text svneol=unset#unset
Packages/Viewer_3/doc_tex/support/Viewer_3/viewer.eps -text
Packages/Viewer_3/doc_tex/support/Viewer_3/viewer.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/Visibility_complex/fig/halfedge.ips -text
Packages/Visibility_complex/doc_tex/Visibility_complex/fig/hds_design.ips -text
Packages/Visibility_complex/doc_tex/Visibility_complex/fig/loop.ips -text
Packages/Visibility_complex/doc_tex/Visibility_complex/halfedge.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/Visibility_complex/halfedge_small.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/Visibility_complex/hds_design_col.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/Visibility_complex/loop.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/bitangent.eps -text
Packages/Visibility_complex/doc_tex/fig/bitangent.fig -text
Packages/Visibility_complex/doc_tex/fig/bitangent.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/configuration.eps -text
Packages/Visibility_complex/doc_tex/fig/configuration.fig -text
Packages/Visibility_complex/doc_tex/fig/configuration.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/constraint-edge.eps -text
Packages/Visibility_complex/doc_tex/fig/constraint-edge.fig -text
Packages/Visibility_complex/doc_tex/fig/constraint-edge.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/design.eps -text
Packages/Visibility_complex/doc_tex/fig/design.fig -text
Packages/Visibility_complex/doc_tex/fig/design.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/edge-face.eps -text
Packages/Visibility_complex/doc_tex/fig/edge-face.fig -text
Packages/Visibility_complex/doc_tex/fig/edge-face.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/edge-vertex.eps -text
Packages/Visibility_complex/doc_tex/fig/edge-vertex.fig -text
Packages/Visibility_complex/doc_tex/fig/edge-vertex.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/order.eps -text
Packages/Visibility_complex/doc_tex/fig/order.fig -text
Packages/Visibility_complex/doc_tex/fig/order.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/perturbation.eps -text
Packages/Visibility_complex/doc_tex/fig/perturbation.fig -text
Packages/Visibility_complex/doc_tex/fig/perturbation.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/points.eps -text
Packages/Visibility_complex/doc_tex/fig/points.fig -text
Packages/Visibility_complex/doc_tex/fig/points.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/fig/vis-complex.eps -text
Packages/Visibility_complex/doc_tex/fig/vis-complex.fig -text
Packages/Visibility_complex/doc_tex/fig/vis-complex.gif -text svneol=unset#unset
Packages/Visibility_complex/doc_tex/manual.ps.gz svneol=native#unset
Packages/cgal_window/include/CGAL/LEDA/bitmaps/button21/a_annulus_21.xbm -text
Packages/cgal_window/include/CGAL/LEDA/bitmaps/button21/circle_21.xbm -text
Packages/cgal_window/include/CGAL/LEDA/bitmaps/button21/dice_21.xbm -text

View File

@ -0,0 +1,69 @@
Package Name: Visibility_complex
Author: Angelier Pierre <Pierre.Angelier@ens.fr>
Maintainer: Angelier Pierre <Pierre.Angelier@ens.fr>
Rineau Laurent <Laurent.Rineau@ens.fr>
Address: Département d'Informatique de l'Ecole Normale Supérieure
45 rue d'Ulm 75230 Paris Cedex 05 France
URL: http://www.di.ens.fr/users/angelier/visibility_complex.tar.gz
Version: 1.0 (10 July 2002)
CGAL Versions: 2.2 and greater
Supported Compilers & Platforms:
sparc_SunOS-5.8_g++-2.95
sparc_SunOS-5.7_g++-2.95.2_LEDA
i686_Linux-2.2.18_g++-2.95
i686_Linux-2.2.18_g++-2.95_LEDA
i686_Linux-2.2.18_g++-3.0.4
i686_Linux-2.2.18_g++-3.1.
Purpose:
This package implements the visibility complex data structure for planar
scenes.
Description:
Distributed with this package are the following things:
README -- this file
INSTALLATION -- file describing more details about package installation
doc_tex/ -- directory containing the package documentation in
LaTeX format
doc_ps/ -- directory containing the package documentation in
postscript format
doc_html/ -- directory containing the package documentation in
Html format
demo/ -- two small graphical (LEDA) demos illustrating the package.
see demo/README for more details.
cep_test -- shell script for running the test suite
include/ -- directory containing the Visibility_complex header files
test_suite/ -- directory containing the test suite source code,
input and output files
This package can be used to compute the visibility graph or visibility
complex of planar scenes. These scenes can consist in pairwise
non-intersecting points, segments, circles or polygons.
The package can also be used to compute the shortest path between two
points in such scenes.
Changes:
1.0 initial release
1.0.1 fix for gcc-3.x compilers
Installation:
Documentation:
Package documentation is provided in postscript and HTML format in
the subdirectory doc.
Tested items:
Testing process:
Hardware & Software requirements:
Constraints:

View File

@ -0,0 +1,57 @@
#! /bin/sh
# This is a script for running the Visibility_complex test suite.
#
# This script assumes that the CGAL_MAKEFILE environment variable is set
#---------------------------------------------------------------------#
# compile_and_run <target>
#---------------------------------------------------------------------#
compile_and_run()
{
echo "Compiling $1 ... "
if eval 'make CGAL_MAKEFILE=$CGAL_MAKEFILE $1'; then
echo " compilation of $1 succeeded"
else
echo " ERROR: compilation of $1 failed"
exit 1
fi
if [ -f $1 ] ; then
OUTPUTFILE=$1.out
rm -f $OUTPUTFILE
COMMAND="./$1"
#
echo "Executing $1 ... "
echo
if eval 2>&1 $COMMAND > $OUTPUTFILE ; then
echo " execution of $1 succeeded"
else
echo " ERROR: execution of $1 failed"
exit 1
fi
else
echo " ERROR: could not execute $1"
exit 1
fi
eval "2>&1 make CGAL_MAKEFILE=$CGAL_MAKEFILE clean > /dev/null "
}
#---------------------------------------------------------------------#
# compile and run the tests
#---------------------------------------------------------------------#
cd test_suite
if [ $# -ne 0 ] ; then
for file in $* ; do
compile_and_run $file
done
else
compile_and_run visibility_complex_polygon
compile_and_run visibility_complex_segment
compile_and_run shortest_path
fi

View File

@ -0,0 +1,11 @@
Two demos illustrating the Visibility_complex package.
*** visibility_graph
Reads the 50 pairwise disjoint segments from the file "segments"
and outputs the bitangents of the visibility graph.
The bitangents are in red and the segments in black.
*** shortest_path
Reads the 50 pairwise disjoint segments from the file "segments"
and outputs the shortest path between two corners of the window.
The shortest path is in red and the segments in black.

View File

@ -0,0 +1,56 @@
# Created by the script create_makefile
# This is the makefile for compiling a CGAL application.
#---------------------------------------------------------------------#
# include platform specific settings
#---------------------------------------------------------------------#
# Choose the right include file from the <cgalroot>/make directory.
# CGAL_MAKEFILE = ENTER_YOUR_INCLUDE_MAKEFILE_HERE
include $(CGAL_MAKEFILE)
#---------------------------------------------------------------------#
# compiler flags
#---------------------------------------------------------------------#
CXXFLAGS = -I../include \
$(CGAL_CXXFLAGS) \
$(LONG_NAME_PROBLEM_CXXFLAGS) \
$(DEBUG_OPT)
#---------------------------------------------------------------------#
# linker flags
#---------------------------------------------------------------------#
LIBPATH = \
$(CGAL_WINDOW_LIBPATH)
LDFLAGS = \
$(LONG_NAME_PROBLEM_LDFLAGS) \
$(CGAL_WINDOW_LDFLAGS)
#---------------------------------------------------------------------#
# target entries
#---------------------------------------------------------------------#
all: \
shortest_path$(EXE_EXT) \
visibility_graph$(EXE_EXT)
shortest_path$(EXE_EXT): shortest_path$(OBJ_EXT)
$(CGAL_CXX) $(LIBPATH) $(EXE_OPT)shortest_path shortest_path$(OBJ_EXT) $(LDFLAGS)
visibility_graph$(EXE_EXT): visibility_graph$(OBJ_EXT)
$(CGAL_CXX) $(LIBPATH) $(EXE_OPT)visibility_graph visibility_graph$(OBJ_EXT) $(LDFLAGS)
clean: \
shortest_path.clean \
visibility_graph.clean
#---------------------------------------------------------------------#
# suffix rules
#---------------------------------------------------------------------#
.C$(OBJ_EXT):
$(CGAL_CXX) $(CXXFLAGS) $(OBJ_OPT) $<

View File

@ -0,0 +1,50 @@
668 560 662 61
338 18 276 85
566 375 613 44
722 309 741 527
156 348 454 345
372 558 290 534
193 407 524 358
182 576 565 384
188 228 109 519
329 164 480 311
162 546 194 537
185 194 433 128
381 12 721 14
472 303 556 153
641 495 656 556
760 297 741 99
176 130 81 365
402 85 18 99
133 486 436 445
573 555 352 581
781 394 688 128
61 276 108 197
280 548 253 553
452 93 469 33
284 35 222 79
605 340 578 298
108 422 53 343
336 161 433 157
425 64 490 135
574 482 365 529
585 254 641 400
146 425 480 426
574 155 562 314
201 281 280 249
530 331 168 210
73 146 148 154
604 589 453 585
108 501 13 338
48 469 92 580
672 60 713 385
518 474 634 466
784 495 794 237
308 115 397 94
408 406 549 349
229 559 222 590
513 195 489 146
765 24 78 14
316 539 417 513
676 217 706 367
345 106 60 109

View File

@ -0,0 +1,67 @@
#include <CGAL/basic.h>
#include <iostream>
#include <fstream>
#include <list>
#include <CGAL/Simple_cartesian.h>
#include <CEP/Visibility_complex/Shortest_path_segment_traits.h>
#include <CEP/Visibility_complex/Shortest_path_2.h>
#include <CGAL/IO/Window_stream.h>
#include <CGAL/IO/Ostream_iterator.h>
//
// Number type used for input
typedef int NT;
// Number type used when computing distances
typedef double SNT;
typedef CGAL::Simple_cartesian<NT> SC;
struct Rep : public SC {};
typedef CGAL::Shortest_path_segment_traits<Rep,SNT> Gt;
typedef Gt::Disk Segment;
typedef Gt::Point_2 Point;
typedef CGAL::Visibility_complex_2<Gt> VC;
typedef VC::Vertex Vertex;
typedef CGAL::Window_stream Window_stream;
int main()
{
// Reading segments from file
std::list<Segment> O;
std::ifstream ifs("segments");
std::istream_iterator<Segment> ifs_it(ifs),ifs_end;
std::copy(ifs_it,ifs_end,std::back_inserter(O));
// Open a LEDA window
Window_stream W(500,400); // physical window size
W.init(0, 800., 0.); // logical window size
CGAL::cgalize(W);
W.display();
// Two corners of the window
Point p(0,0);
Point q(1000,800);
// Otput the segments of the shortest path from p to q in reverse order.
W << CGAL::RED;
W.set_line_width(3);
shortest_path_2(O.begin(),O.end(),
p,q,
CGAL::Ostream_iterator<Segment,Window_stream>(W),
Gt());
// Output the segments in BLACK
W << CGAL::BLACK;
W.set_line_width(1);
std::copy(O.begin(),O.end(),
CGAL::Ostream_iterator<Segment,Window_stream>(W));
// Show window
std::cout << "Click in window to quit" << std::endl;
W.read_mouse();
return 0;
}

View File

@ -0,0 +1,55 @@
#include <CGAL/basic.h>
#include <iostream>
#include <fstream>
#include <list>
#include <CGAL/Simple_cartesian.h>
#include <CEP/Visibility_complex/Visibility_complex_segment_traits.h>
#include <CEP/Visibility_complex/Visibility_complex_2.h>
#include <CGAL/IO/Window_stream.h>
#include <CGAL/IO/Ostream_iterator.h>
typedef int FT;
typedef CGAL::Simple_cartesian <FT> Rep;
typedef CGAL::Visibility_complex_segment_traits<Rep> Gt;
typedef CGAL::Visibility_complex_2<Gt> Visibility_complex;
typedef Visibility_complex::Vertex Vertex;
typedef Gt::Disk Segment;
typedef CGAL::Window_stream Window_stream;
int main()
{
// Reading segments from file
std::list<Segment> O;
std::ifstream ifs("segments");
std::istream_iterator<Segment> ifs_it(ifs),ifs_end;
std::copy(ifs_it,ifs_end,std::back_inserter(O));
// Computing visibility graph
Visibility_complex V(O.begin(),O.end());
// Open a LEDA window
Window_stream W(500,400); // physical window size
W.init(0, 800., 0.); // logical window size
CGAL::cgalize(W);
W.display();
// Output the bitangents in RED
W << CGAL::RED;
std::copy(V.vertices_begin(),V.vertices_end(),
CGAL::Ostream_iterator<Vertex,Window_stream>(W));
// Output the segments in BLACK
W << CGAL::BLACK;
std::copy(O.begin(),O.end(),
CGAL::Ostream_iterator<Segment,Window_stream>(W));
// Show window
std::cout << "Click in window to quit" << std::endl;
W.read_mouse();
return 0;
}

View File

@ -0,0 +1,16 @@
all: to_ps to_html
to_html:
cc_manual_to_html -o html manual.tex
to_ps:
latex manual.tex
makeindex manual
index_fix manual.ind
latex manual.tex
dvips -o manual.ps manual.dvi
gzip -f manual.ps
clean:
\rm -f *.aux *.log *.dvi *.idx *.ilg *.ind *.ind.unfixed

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
#include <list>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Visibility_complex_2.h>
#include <CGAL/Visibility_complex_segment_traits.h>
typedef CGAL::Simple_cartesian<int> Rep;
typedef CGAL::Visibility_complex_segment_traits<Rep> Gt;
typedef Gt::Disk Segment;
typedef CGAL::Visibility_complex_2<Gt> Visibility_complex;
typedef Visibility_complex::Antichain Antichain;
typedef Visibility_complex::Linear_sweep_iterator Linear_sweep_iterator;
int main()
{
// Reading circles from file
std::list<Segment> D;
std::ifstream ifs("input");
std::istream_iterator<Segment> ifs_it(ifs),ifs_end;
std::copy(ifs_it,ifs_end,back_inserter(D));
// Computing the antichain
Antichain A(D.begin(),D.end());
// Sweep of the visibility complex using an iterator
Linear_sweep_iterator v(&A), vend(&A,0);
for ( ; v != vend ; ++v)
std::cout << *v << std::endl;
return 0;
}

View File

@ -0,0 +1,12 @@
int main()
{
// Reading non necessarily convex polygons from file
list<Polygon> D;
// Creating a scene and inserting the polygons in D
Scene S;
copy( D.begin() , D.end() , back_inserter(S) );
// Computing the Visibility Complex
Visibility_complex V(S);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,685 @@
%!PS-Adobe-2.0 EPSF-1.2
%%Creator: idraw
%%DocumentFonts: Times-Roman Times-Bold
%%Pages: 1
%%BoundingBox: 156 539 374 699
%%EndComments
%%BeginIdrawPrologue
/arrowhead {
0 begin
transform originalCTM itransform
/taily exch def
/tailx exch def
transform originalCTM itransform
/tipy exch def
/tipx exch def
/dy tipy taily sub def
/dx tipx tailx sub def
/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
gsave
originalCTM setmatrix
tipx tipy translate
angle rotate
newpath
arrowHeight neg arrowWidth 2 div moveto
0 0 lineto
arrowHeight neg arrowWidth 2 div neg lineto
patternNone not {
originalCTM setmatrix
/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
arrowWidth div def
/padtail brushWidth 2 div def
tipx tipy translate
angle rotate
padtip 0 translate
arrowHeight padtip add padtail add arrowHeight div dup scale
arrowheadpath
ifill
} if
brushNone not {
originalCTM setmatrix
tipx tipy translate
angle rotate
arrowheadpath
istroke
} if
grestore
end
} dup 0 9 dict put def
/arrowheadpath {
newpath
arrowHeight neg arrowWidth 2 div moveto
0 0 lineto
arrowHeight neg arrowWidth 2 div neg lineto
} def
/leftarrow {
0 begin
y exch get /taily exch def
x exch get /tailx exch def
y exch get /tipy exch def
x exch get /tipx exch def
brushLeftArrow { tipx tipy tailx taily arrowhead } if
end
} dup 0 4 dict put def
/rightarrow {
0 begin
y exch get /tipy exch def
x exch get /tipx exch def
y exch get /taily exch def
x exch get /tailx exch def
brushRightArrow { tipx tipy tailx taily arrowhead } if
end
} dup 0 4 dict put def
%%EndIdrawPrologue
/arrowHeight 8 def
/arrowWidth 4 def
/IdrawDict 52 dict def
IdrawDict begin
/reencodeISO {
dup dup findfont dup length dict begin
{ 1 index /FID ne { def }{ pop pop } ifelse } forall
/Encoding ISOLatin1Encoding def
currentdict end definefont
} def
/ISOLatin1Encoding [
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/minus/period/slash
/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar
/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine
/guillemotright/onequarter/onehalf/threequarters/questiondown
/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute
/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis
/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
/yacute/thorn/ydieresis
] def
/Times-Roman reencodeISO def
/Times-Bold reencodeISO def
/none null def
/numGraphicParameters 17 def
/stringLimit 65535 def
/Begin {
save
numGraphicParameters dict begin
} def
/End {
end
restore
} def
/SetB {
dup type /nulltype eq {
pop
false /brushRightArrow idef
false /brushLeftArrow idef
true /brushNone idef
} {
/brushDashOffset idef
/brushDashArray idef
0 ne /brushRightArrow idef
0 ne /brushLeftArrow idef
/brushWidth idef
false /brushNone idef
} ifelse
} def
/SetCFg {
/fgblue idef
/fggreen idef
/fgred idef
} def
/SetCBg {
/bgblue idef
/bggreen idef
/bgred idef
} def
/SetF {
/printSize idef
/printFont idef
} def
/SetP {
dup type /nulltype eq {
pop true /patternNone idef
} {
dup -1 eq {
/patternGrayLevel idef
/patternString idef
} {
/patternGrayLevel idef
} ifelse
false /patternNone idef
} ifelse
} def
/BSpl {
0 begin
storexyn
newpath
n 1 gt {
0 0 0 0 0 0 1 1 true subspline
n 2 gt {
0 0 0 0 1 1 2 2 false subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
} if
n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def
/Circ {
newpath
0 360 arc
closepath
patternNone not { ifill } if
brushNone not { istroke } if
} def
/CBSpl {
0 begin
dup 2 gt {
storexyn
newpath
n 1 sub dup 0 0 1 1 2 2 true subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
patternNone not { ifill } if
brushNone not { istroke } if
} {
Poly
} ifelse
end
} dup 0 4 dict put def
/Elli {
0 begin
newpath
4 2 roll
translate
scale
0 0 1 0 360 arc
closepath
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 1 dict put def
/Line {
0 begin
2 storexyn
newpath
x 0 get y 0 get moveto
x 1 get y 1 get lineto
brushNone not { istroke } if
0 0 1 1 leftarrow
0 0 1 1 rightarrow
end
} dup 0 4 dict put def
/MLine {
0 begin
storexyn
newpath
n 1 gt {
x 0 get y 0 get moveto
1 1 n 1 sub {
/i exch def
x i get y i get lineto
} for
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def
/Poly {
3 1 roll
newpath
moveto
-1 add
{ lineto } repeat
closepath
patternNone not { ifill } if
brushNone not { istroke } if
} def
/Rect {
0 begin
/t exch def
/r exch def
/b exch def
/l exch def
newpath
l b moveto
l t lineto
r t lineto
r b lineto
closepath
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 4 dict put def
/Text {
ishow
} def
/idef {
dup where { pop pop pop } { exch def } ifelse
} def
/ifill {
0 begin
gsave
patternGrayLevel -1 ne {
fgred bgred fgred sub patternGrayLevel mul add
fggreen bggreen fggreen sub patternGrayLevel mul add
fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
eofill
} {
eoclip
originalCTM setmatrix
pathbbox /t exch def /r exch def /b exch def /l exch def
/w r l sub ceiling cvi def
/h t b sub ceiling cvi def
/imageByteWidth w 8 div ceiling cvi def
/imageHeight h def
bgred bggreen bgblue setrgbcolor
eofill
fgred fggreen fgblue setrgbcolor
w 0 gt h 0 gt and {
l w add b translate w neg h scale
w h true [w 0 0 h neg 0 h] { patternproc } imagemask
} if
} ifelse
grestore
end
} dup 0 8 dict put def
/istroke {
gsave
brushDashOffset -1 eq {
[] 0 setdash
1 setgray
} {
brushDashArray brushDashOffset setdash
fgred fggreen fgblue setrgbcolor
} ifelse
brushWidth setlinewidth
originalCTM setmatrix
stroke
grestore
} def
/ishow {
0 begin
gsave
fgred fggreen fgblue setrgbcolor
/fontDict printFont printSize scalefont dup setfont def
/descender fontDict begin 0 [FontBBox] 1 get FontMatrix end
transform exch pop def
/vertoffset 1 printSize sub descender sub def {
0 vertoffset moveto show
/vertoffset vertoffset printSize sub def
} forall
grestore
end
} dup 0 3 dict put def
/patternproc {
0 begin
/patternByteLength patternString length def
/patternHeight patternByteLength 8 mul sqrt cvi def
/patternWidth patternHeight def
/patternByteWidth patternWidth 8 idiv def
/imageByteMaxLength imageByteWidth imageHeight mul
stringLimit patternByteWidth sub min def
/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
patternHeight mul patternHeight max def
/imageHeight imageHeight imageMaxHeight sub store
/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
0 1 imageMaxHeight 1 sub {
/y exch def
/patternRow y patternByteWidth mul patternByteLength mod def
/patternRowString patternString patternRow patternByteWidth getinterval def
/imageRow y imageByteWidth mul def
0 patternByteWidth imageByteWidth 1 sub {
/x exch def
imageString imageRow x add patternRowString putinterval
} for
} for
imageString
end
} dup 0 12 dict put def
/min {
dup 3 2 roll dup 4 3 roll lt { exch } if pop
} def
/max {
dup 3 2 roll dup 4 3 roll gt { exch } if pop
} def
/midpoint {
0 begin
/y1 exch def
/x1 exch def
/y0 exch def
/x0 exch def
x0 x1 add 2 div
y0 y1 add 2 div
end
} dup 0 4 dict put def
/thirdpoint {
0 begin
/y1 exch def
/x1 exch def
/y0 exch def
/x0 exch def
x0 2 mul x1 add 3 div
y0 2 mul y1 add 3 div
end
} dup 0 4 dict put def
/subspline {
0 begin
/movetoNeeded exch def
y exch get /y3 exch def
x exch get /x3 exch def
y exch get /y2 exch def
x exch get /x2 exch def
y exch get /y1 exch def
x exch get /x1 exch def
y exch get /y0 exch def
x exch get /x0 exch def
x1 y1 x2 y2 thirdpoint
/p1y exch def
/p1x exch def
x2 y2 x1 y1 thirdpoint
/p2y exch def
/p2x exch def
x1 y1 x0 y0 thirdpoint
p1x p1y midpoint
/p0y exch def
/p0x exch def
x2 y2 x3 y3 thirdpoint
p2x p2y midpoint
/p3y exch def
/p3x exch def
movetoNeeded { p0x p0y moveto } if
p1x p1y p2x p2y p3x p3y curveto
end
} dup 0 17 dict put def
/storexyn {
/n exch def
/y n array def
/x n array def
n 1 sub -1 0 {
/i exch def
y i 3 2 roll put
x i 3 2 roll put
} for
} def
/SSten {
fgred fggreen fgblue setrgbcolor
dup true exch 1 0 0 -1 0 6 -1 roll matrix astore
} def
/FSten {
dup 3 -1 roll dup 4 1 roll exch
newpath
0 0 moveto
dup 0 exch lineto
exch dup 3 1 roll exch lineto
0 lineto
closepath
bgred bggreen bgblue setrgbcolor
eofill
SSten
} def
/Rast {
exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore
} def
%%EndProlog
%I Idraw 12 Grid 8 8
%%Page: 1 1
Begin
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 0.796717 0 0 0.796717 0 0 ] concat
/originalCTM matrix currentmatrix def
Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 1.88151 0 0 1.88151 47.1871 -868.373 ] concat
Begin %I Poly
%I b 65535
0 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg gr625
0.953689 0.953689 0.953689 SetCBg
%I p
0 SetP
%I t
[ -0.168764 -0.340969 0.340969 -0.168764 124.263 936.335 ] concat
%I 3
216 190
200 150
216 150
3 Poly
End
Begin %I Poly
%I b 65535
0 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg gr625
0.953689 0.953689 0.953689 SetCBg
%I p
0 SetP
%I t
[ -0.165559 0.342537 -0.342537 -0.165559 262.506 785.105 ] concat
%I 3
216 190
200 150
216 150
3 Poly
End
Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-medium-r-*-18-*
Times-Roman 18 SetF
%I t
[ 0.514446 -0.00196524 0.00196524 0.514446 164.846 874.684 ] concat
%I
[
(face1)
] Text
End
Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-medium-r-*-18-*
Times-Roman 18 SetF
%I t
[ 0.514446 -0.00196524 0.00196524 0.514446 204.676 874.684 ] concat
%I
[
(face2)
] Text
End
Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-medium-r-*-18-*
Times-Roman 18 SetF
%I t
[ 0.514442 0.00297151 -0.00297151 0.514442 146.095 848.116 ] concat
%I
[
(vertex)
] Text
End
Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-medium-r-*-18-*
Times-Roman 18 SetF
%I t
[ 0.514442 0.00297151 -0.00297151 0.514442 139.682 913.771 ] concat
%I
[
(halfedge)
] Text
End
Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-18-*
Times-Bold 18 SetF
%I t
[ 0.514442 0.00297151 -0.00297151 0.514442 80.2245 913.771 ] concat
%I
[
(loop:)
] Text
End
Begin %I BSpl
%I b 65535
0 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
none SetP %I p n
%I t
[ 0.300288 -5.24371e-10 9.74523e-10 0.300288 -0.900848 774.144 ] concat
%I 6
506 192
387 243
365 485
682 486
638 248
536 194
6 BSpl
%I 4
End
Begin %I BSpl
%I b 65535
0 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
none SetP %I p n
%I t
[ 0.300288 -0 -0 0.300288 -0.900865 774.144 ] concat
%I 6
511 173
367 226
344 510
710 503
650 224
536 176
6 BSpl
%I 4
End
Begin %I Elli
%I b 65535
0 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t
[ 0.25 0 0 0.25 110.199 754.637 ] concat
%I
183 297 23 23 Elli
End
End %I eop
End %I eop
showpage
%%Trailer
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -0,0 +1,4 @@
halfedge.gif
halfedge_small.gif
hds_design_col.gif
loop.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,524 @@
% +---------------------------------------------------------------------------+
% | CGAL Reference Manual: visibility_complex.tex
% +---------------------------------------------------------------------------+
% | Visibility complex. Implemented by topological sweep using the
% | Greedy Flip Algorithm
% |
% | 21.01.2001 Pierre Angelier and Michel Pocchiola
% |
% |
\RCSdef{\vcomplexRev}{$Revision$}
\RCSdefDate{\vcomplexDate}{$Date$}
% +---------------------------------------------------------------------------+
\ccParDims
\chapter{Visibility Complexes}
\label{chapterVisibilityComplex}
\ccChapterRelease{\vcomplexRev. \ \vcomplexDate}\\
\ccChapterAuthor{Pierre Angelier and Michel Pocchiola}
\minitoc
% +----------------------------------------------------------------------------+
\section{Introduction}
\label{sectionVComplexIntroduction}
This package implements the visibility complex structure introduced by Pocchiola
and Vegter in~\cite{pv-vc-96} (see also~\cite{pv-tsvcpt-96}
and~\cite{G-ap-sstvc-01} for a more recent presentation). Although a
generalization to three dimensional environments has been proposed
in~\cite{ddp-fahrgv-99} we deal here only with planar scenes.
The visibility complex is a 2D cell complex whose 1-skeleton is isomorphic to
the visibility graph. The visibility graph can be used to compute the shortest
path between two points in a planar scene. A survey on visibility graphs and
shortest paths can be found in~\cite{m-gspno-00}.
Our implementation of the visibility complex structure follows closely the
design of the \ccc{Halfedge Data Structure} (see the introduction in
Chapter~\ref{chapterHalfedgeDS} and~\cite{k-ugpdd-99}) however this chapter can
be understood without reading the corresponding chapter.
We use the so-called Greedy Flip Algorithm (again see~\cite{pv-tsvcpt-96}) to
compute the visibility complex in optimal time complexity $O(k + n\log n)$ where
$n$ is the size of the input and $k$ the size of the output (i.e. the visibility
complex).
% +----------------------------------------------------------------------------+
\section{Definitions}
In this section we review the basic concepts defined in~\cite{G-ap-sstvc-01}
which are useful to understand the basic functionality of the package.
\paragraph{Basic definitions. }
A \emph{disk} is a bounded closed convex subset of the plane and a \emph{scene}
is a collection of pairwise disjoint disks. For the ease of the exposition we
will assume that the disks have non-empty interior and that the tangent line at
a point on the boundary of a disk is well defined. We will also suppose that our
disks are in general position that is, that there is no line tangent to three
disks. Although these definitions rule out points, segment and polygons our
implementation can handle these types of disks through a symbolic perturbation
scheme which is invisible to the user. The general position assumption is also
lifted through perturbation. More details are given in the degeneracies section
below. Note also that non convex polygons are also supported via the use of
\emph{constraints} which are defined further on.
A \emph{bitangent} is a directed line segment tangent to two disks and
intersecting these disks only at its endpoints. The disk containing the source
and target point of the bitangent are called respectively the source and target
disk. Two disks share four bitangents directed from the first towards the
second.
\begin{ccTexOnly}
%\vspace{-7mm}
\begin{center}
\parbox{0.4\textwidth}{%
\includegraphics[width=0.4\textwidth]{fig/bitangent.eps}%
}
\end{center}
%\vspace{-5mm}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/bitangent.gif" alt="Bitangent"><P>
</CENTER>
\end{ccHtmlOnly}
The \emph{type} of a bitangent $t$ directed from a disk $A$ to a disk $B$ codes
the positions of $A$ and $B$ with respect to the supporting line of $t$. As
illustrated in the Figure above there are four possible types called \texttt{LL,
RR, LR} and \texttt{RL}. A \texttt{LR} bitangent $t$ for example, is such that
$A$ and $B$ lie respectively on the left and on the right of the supporting line
of $t$.
Consider a scene $S$. A bitangent between two disks of $S$ is \emph{free} if its
interior does not intersect a disk of $S$. A \emph{constrained scene} $S_H$ is
a scene $S$ and a subset $H$ of pairwise non crossing free bitangents. The
bitangents of $H$ are called \emph{constraints}. A bitangent is \emph{free} in
$S_H$ if it is free in $S$ and does not intersect a bitangent of $H$.
Constraints are still called free bitangents of $S_H$.
The set of free bitangents tangent to a given disk partition its boundary into
what we call \emph{arcs}. In other words an arc is a portion of the boundary of
a disk defined by two consecutively tangent bitangents.
A \emph{positive arc} belonging to a disk $d$ is an arc whose tangent lines leave
$d$ on its left. The definition of a \emph{negative arc} is obtained by
replacing the word "left" with "right". Thus for each arc we consider two
copies of it: a positive and a negative one. A \emph{signed arc} is a positive
or a negative arc.
\paragraph{Visibility graphs. }
Given a constraint scene $S_H$, the \emph{visibility graph} of $S_H$ is the
directed graph where there is:
\begin{itemize}
\item one vertex per free bitangent of $S_H$.
\item one edge per signed arc. The edge connects the two vertices
corresponding to the bitangents defining the arc. A counter-clockwise
orientation of the boundary of the disks induce an orientation of the edges
of the visibility graph.
\end{itemize}
Let $e$ be an edge. The two vertices connected by $e$ are denoted $\inf(e)$ and
$\sup(e)$ and are called the source and sink of $e$. These vertices are such
that $e$ is directed from $\inf(e)$ towards $\sup(e)$.
Each vertex of the visibility graph is incident to four edges (two on the source
disk and two on the target disk). The names of these edges are given in the
Figure below.
\begin{ccTexOnly}
\begin{center}
\psfrag{v}{$v$}
\psfrag{ccw_target_edge(v)}{\texttt{ccw\_target\_edge}($v$)}
\psfrag{cw_target_edge(v)}{\texttt{cw\_target\_edge}($v$)}
\psfrag{ccw_source_edge(v)}{\texttt{ccw\_source\_edge}($v$)}
\psfrag{cw_source_edge(v)}{\texttt{cw\_source\_edge}($v$)}
\psfrag{e}{$e$}
\psfrag{sup(e)}{$\sup(e)$}
\psfrag{inf(e)}{$\inf(e)$}
\includegraphics[height=8cm]{fig/edge-vertex.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/edge-vertex.gif" alt="Edge-Vertex adjacencies"><P>
</CENTER>
\end{ccHtmlOnly}
\paragraph{Visibility complexes. }
For more sophisticated visibility queries, the visibility complex is more
appropriate than the visibility graph. It has a richer two-dimensional cell
structure whose 1-skeleton (i.e. the graph obtained by keeping only the
vertex/edges incidences) is exactly the visibility graph. The definition of the
visibility complex is more tricky and requires the reader to be familiar with
the concepts of \emph{equivalence classes}, \emph{quotient space} and the
\emph{cutting} of a surface along a curve. The rest of the definitions of this
section can be skipped if one plans to use only the functionality of the
visibility graph (shortest paths for example).
Consider a constrained scene $S_H$. The \emph{free space} of $S_H$ is the
space obtained by cutting the complement of the interior of the disks of $S$
along the constraints of $H$.
A \emph{ray} is a pair $(p,\alpha)$ consisting of a point $p$ in free space and
a direction $\alpha \in \mathbb{S}^1$ (the 1-sphere). The \emph{visibility
complex} of a constrained scene $S_H$ is the quotient space of the set of rays
with respect to the following equivalence relation $\sim$:
\begin{equation}
(p,\alpha) \sim (q,\beta) \textrm{ iff. } \alpha = \beta \textrm{ is the
direction of the line $(p,q)$ and the segment } [p,q] \textrm{ lies in the free
space of } S_H.
\end{equation}
The origins of the rays belonging to a same equivalence class define a maximal
length segment in free space or \emph{maximal segment} for short. The
visibility complex is a two dimensional cell complex. We describe its elements
in the case where the set of constraints is empty. The adjunction of constraints
is discussed later on. The 0,1 and 2-dimensional cells of the visibility complex
are respectively:
\begin{itemize}
\item \emph{Vertices}: a vertex corresponds to a maximal segment tangent to
two disks. Each vertex has its associated geometric bitangent.
\item \emph{Edges}: an edge corresponds to maximal segments tangent to one
disk and touching the same pair of disks at their extremities. \\
Let $e$ be an edge corresponding to maximal segments tangent to a disk $o$.
If $o$ lies on the left of the supporting line of these segments then $e$ is
said to be \emph{positive}. Otherwise $e$ is \emph{negative}.
\item \emph{Faces}: a face is the set of maximal segments that touch the
same pair of disks. The disk containing the source (resp. the target) of
these maximal segments is called the backward view (resp. forward view) of
the face.
\end{itemize}
\begin{ccTexOnly}
\begin{center}
\psfrag{Vertices}{Vertices}
\psfrag{Edge}{Edge}
\psfrag{Face}{Face}
\psfrag{forward view}{forward view}
\psfrag{backward view}{backward view}
\includegraphics[height=5cm,width=\linewidth]{fig/vis-complex.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/vis-complex.gif" width="90%"
alt="The cells of the Visibility Complex"><P>
</CENTER>
\end{ccHtmlOnly}
The 1-skeleton of the visibility complex is isomorphic to the visibility graph.
The additional information brought by the visibility complex resides in the
faces. Each maximal segment defines an unique face.
We now describe the different incidences between vertices, edges and faces in
the visibility complex. The discussion below is valid for scene that do not
contain constraints. The adjunction of these involves a small change concerning
edges which is discussed later on.
\begin{itemize}
\item \emph{Face - Vertex incidences. } The number of vertices adjacent to a
given face $\sigma$ is at least $2$ and at most linear. We offer an access
to two vertices of particular interest denoted by $\sup(\sigma)$ and
$\inf(\sigma)$ which are intuitively the segments in the face with maximal
and minimal angle. More precisely the set of maximal segments of a face is
ordered by the following relation:
\begin{equation}
a < b \textrm{ iff. } \det(a,b) > 0.
\end{equation}
The vertices $\inf(\sigma)$ and $\sup(\sigma)$ are respectively the minimum
and maximum for this order. \emph{Warning: convex-hull vertices...}\\
Each vertex $v$ is incident to six faces.
\item \emph{Edge - Face incidences. } An edge $e$ is adjacent to three
faces. These are obtained by taking a maximal segment of the edge and moving
it slightly. See the figure below for the names of these faces.
\begin{ccTexOnly}
\begin{center}
\psfrag{dl(e)}{dl($e$)}
\psfrag{dr(e)}{dr($e$)}
\psfrag{ul(e)}{ul($e$)}
\psfrag{ur(e)}{ur($e$)}
\psfrag{e}{$e$}
\psfrag{Positive edge}{Positive edge}
\psfrag{Negative edge}{Negative edge}
\includegraphics[height=5cm,width=\linewidth]{fig/edge-face.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/edge-face.gif" width="90%"
alt="Edge-Face adjacencies"><P>
</CENTER>
\end{ccHtmlOnly}
For a positive edge $e$ we set dr$(e) = $dl$(e)$ and for a negative edge
ur$(e) = $ul$(e)$.
\item \emph{Edge - Vertex incidences. } These incidences were described in
the Visibility Graph section above.
\end{itemize}
We now describe the two main differences brought by the adjunction of
constraints (a more detailed and complete discussion can be found
in~\cite{G-ap-sstvc-01}). First, the vertices corresponding to constraints are
adjacent to $8$ faces rather than $6$ before. The other difference is that the
visibility complex also contains special types of edges arousing from rays
emanating from the extremity of a constraint. Such an edge $e$ is called a
\emph{constraint edge} and is adjacent to only one face denoted by face$(e)$.
See the Figure below for an illustration.
\begin{ccTexOnly}
\begin{center}
\psfrag{face(e)}{face($e$)}
\psfrag{e}{$e$}
\psfrag{constraint}{constraint}
\includegraphics[height=5cm]{fig/constraint-edge.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/constraint-edge.gif" alt="Constraint Edges"><P>
</CENTER>
\end{ccHtmlOnly}
\paragraph{Visibility complex antichains. } The antichain is an advanced feature
for users wishing to take advantage of the linear storage of the Greedy Flip
Algorithm which we have implemented to compute the visibility complex. In this
section we will only give an intuitive definition of the antichain. More details
can be found in~\cite{pv-tsvcpt-96}.
The Greedy Flip Algorithm, or \textsc{Gfa} for short, is a topological sweep
algorithm. To keep the description on the intuitive side imagine the visibility
complex embedded in $\mathbb{R}^3$. The \textsc{Gfa} sweeps the complex using a
plane. The set of faces and edges intersected by this plane is what we call the
antichain.
We have added an iterator interface to greatly ease the use of the antichain.
The small piece of code below reads a list of segments from a file and outputs
the vertices of the visibility complex in optimal time and $O(n)$ storage.
\ccIncludeExampleCode{Visibility_complex/example1.C}
The antichain is closely connected to so-called greedy pseudo-triangulations.
This is illustrated in an example below but bare in mind that this package does
not aim to provide a convivial interface to pseudo-triangulations. An extension
package concerning pseudo-triangulations should appear in the future. The
interested user is invited to contact the authors.
\paragraph{Degenerate cases.} The above discussion holds for disks which have
non empty interior and a smooth boundary. However, our implementation can handle
points, segments and convex polygons which are what we call degenerate cases.
This is achieved via a symbolic perturbation obtained by taking the Minkowski sum
of a degenerate disk with a small circle having an infinitesimal radius.
\begin{ccTexOnly}
\begin{center}
\includegraphics[height=4cm]{fig/perturbation.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/perturbation.gif" alt="Perturbation"><P>
</CENTER>
\end{ccHtmlOnly}
This perturbation implies no numerical computations and is completely
invisible to the user. Each time a scene contains a degenerate disk, the user
is invited to mentally replace it by its perturbated version in order to
visualize the visibility complex or graph.
\begin{ccTexOnly}
\begin{center}
\psfrag{Perturbation}{Perturbation}
\includegraphics[height=4cm]{fig/points.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/points.gif" alt="Points"><P>
</CENTER>
\end{ccHtmlOnly}
As an example, consider two points as in the figure above. They share four
bitangents which are geometrically equal. These four bitangent are nevertheless
represented by four different vertices in the visibility graph. The order of the
tangent points of these bitangents on the "boundary" of the point is determined
by the order of these tangent points if the points were replaced by small
circles. Considering the crossing predicate, the \texttt{LR} and \texttt{RL}
bitangents is the only crossing pair in the figure above. Also bear in mind
that the presence of degenerate cases may imply arcs with zero length.
Finally we explain how the general position assumption is dealt with.
\emph{A finir ...}
\paragraph{General polygonal configurations. } Recall that disks, as they are defined
above, are convex. We now describe how to treat not only non convex polygons but
also more general polygonal configurations. Consider the general setting consisting in a
family $S$ of pairwise non crossing segments which are allowed to share an
extremity. The set $S$ can for example be the edges of a non-convex polygon.
We use the following recipe to build a scene $T$ respecting our requirements:
\begin{itemize}
\item Each extremity of a segment in $S$ is inserted as a point in $T$.
Recall that points are treated symbolically as if they were small circles
(see the paragraph above concerning degenerate cases).
\item Each segment $s \in S$ directed from point $p$ to point $q$, with $p,q
\in T$ is inserted in $T$ as a constraint directed from $p$ to $q$. The type
chosen for the constraint (recall that four types are possible) is
\texttt{RL}. The reason for this choice is to avoid two crossing constraints.
\end{itemize}
The Figure below shows a polygonal configuration $S$ and the scene $T$ which
has to be given as an input to our algorithms.
\begin{ccTexOnly}
\begin{center}
\psfrag{S}{$S$}
\includegraphics[height=8cm]{fig/configuration.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/configuration.gif" alt="Polygonal configurations"><P>
</CENTER>
\end{ccHtmlOnly}
The aim of the \ccc{Visibility_complex_scene} class is to make the above recipe
more transparent. In fact, one can blindly use this class to compute visibility
complexes of polygonal configurations without understanding the above
discussion. The code below illustrates the use of this class.
\ccIncludeExampleCode{Visibility_complex/example2.C}
\paragraph{Output / Partial order. }
\label{sectionVComplexInputOutput}
The vertices of the visibility complex are
accessed in our implementation via an iterator pair \texttt{vertices\_begin(),
vertices\_end()}. We now describe how these vertices are ordered. A natural idea
would be an order based on the angle of the bitangent with respect to a
horizontal direction. Unfortunately obtaining such an order would require at
least $O(k \log n)$ in time complexity, where $k$ is the size of the output and
$n$ the size of the input. Since we achieve an optimal bound of $O(k + n\log
n)$, our order is slightly more subtle than an angle-based order. It is a linear
extension of a partial order $\prec$. In other words if $a \prec b$ then $a$
appears before $b$. Moreover the partial order is compatible with angle-order:
if $a \prec b$ then the angle of $a$ with respect to a horizontal direction is
smaller than the angle of $b$. The converse is \emph{not} necessarily true.
Let $S_H$ be a constrained scene containing $n$ disks; we define the partial
order $\prec$ as the transitive closure of $2n$ total orders (two per disk). \\
Let $B_o$ be the set of free bitangents tangent to $o$ and such that $o$ lies
on the half-plane to the left of their supporting lines. The angle of a
bitangent with respect to a horizontal direction (it is a real number in
$[0,2\pi)$) defines a total order on $B_o$. See the left part of the figure below.
\begin{ccTexOnly}
\begin{center}
\psfrag{a}{\textcolor{red}{$a$}}
\psfrag{b}{\textcolor{red}{$b$}}
\psfrag{o}{$o$}
\psfrag{angle}{\textcolor{green}{angle}}
\includegraphics[width=\textwidth]{fig/order.eps}%
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img src="fig/order.gif" alt="Partial order"><P>
</CENTER>
\end{ccHtmlOnly}
Changing the word "left" with "right" in the above paragraph defines the set
$B'_o$ and a total order on $B'_o$. We have thus defined two total orders per
disk in $S_H$. Since each bitangent is defined by two disks, it appears exactly
in two total orders. This allows us to mix the total orders on each disk to
define the partial order $\prec$. More formally $\prec$ is the transitive
closure of the $2n$ total orders defined on $B_o, B'_o$ for each $o \in S_H$.
The right part of the figure above shows an example where $a \prec b$.
% +============================================================================+
\section{Software Design}
% +============================================================================+
\begin{ccTexOnly}
\begin{figure}
\begin{center}
\parbox{0.7\textwidth}{%
\includegraphics[width=0.7\textwidth]{fig/design.eps}%
}
\end{center}
\caption{Three layer design of the visibility complex.}
\label{figureVisibilityComplexDesign}
\end{figure}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<A NAME="figureVisibilityComplexDesign">
<img src="fig/design.gif"
alt="Visibility Complex Design"><BR>
Figure: Three layer design of the visibility complex.
<P>
</CENTER>
\end{ccHtmlOnly}
Figure~\ccTexHtml{\ref{figureVisibilityComplexDesign}}{}
\begin{ccHtmlOnly}
<A HREF="Chapter_main.html#figureVisibilityComplexDesign"><IMG
SRC="cc_ref_up_arrow.gif" ALT="reference arrow" WIDTH="10" HEIGHT="10"></A>
\end{ccHtmlOnly}
illustrates the responsibilities of the three layers of the software design.
The bottom layer is the geometric traits class \ccc{Traits} which defines the
geometric types (bitangents disks and arcs) and the predicates used to compute
the visibility complex. Currently four different traits classes are provided:
\begin{itemize}
\item \ccc{Visibility_complex_point_traits<R>} for use with
\ccc{CGAL::Point_2}.
\item \ccc{Visibility_complex_circle_traits<R>} for use with
\ccc{CGAL::Circle_by_radius_2}. The class \ccc{CGAL::Circle_by_radius_2}
inherits from \ccc{CGAL::Circle_2} and is implemented in the file:
\begin{quote}
\ccInclude{CGAL/Circle_by_radius_2.h}
\end{quote}
This class adds functionality to manipulate circles with their \emph{radius}
instead of their \emph{squared radius}.
\item \ccc{Visibility_complex_segment_traits<R>} for use with
\ccc{CGAL::Segment_2}.
\item \ccc{Visibility_complex_polygon_traits<R>} for use with
\ccc{CGAL::Polygon_2}.
\end{itemize}
The next layer is the \ccc{Items} class who defines, as local types, the
elements of the visibility complex. The user can enrich those classes by adding
his own data and member functions. The design used here is the same one used by
the \ccc{HalfedgeDS} in chapter~\ref{chapterHalfedgeDS}.
The two classes \ccc{Traits} and \ccc{Items} are passed as template parameters
to the class \ccc{Visibility_complex<Traits,Items>} who implements the
visibility complex structure. This former class defines the handle types which
are used to code the incidences between vertices, edges and faces.
The visibility complex structure provides three pairs of iterators to traverse
its set of vertices, edges and faces. These are ordered as a linear extension of
a certain partial order $\prec$. See the last paragraph in
section~\ref{sectionVComplexInputOutput}.
% +============================================================================+
\section{Example Programs}
% +============================================================================+
\label{sectionVComplexExamples}
\subsection{Visibility complex of circles}
The following program reads a family of pairwise disjoint circles from the file
"input" and outputs the number of vertices in the visibility complex.
\ccIncludeExampleCode{Visibility_complex/vc_circle.C}
\subsection{Extending Faces}
The following example adds a \ccc{size} member variable to count the size of the
face. We use the \ccc{Antichain} to sweep the visibility complex while using
only $O(n)$ storage. The disks are of type \ccc{CGAL::Segment\_2} and $n$ is the
number of them.
\ccIncludeExampleCode{Visibility_complex/vc_face_extension.C}
% +----------------------------------------------------------------------------+
% EOF

View File

@ -0,0 +1,28 @@
#include <CGAL/Cartesian.h>
#include <CGAL/Visibility_complex_2.h>
#include <CGAL/Visibility_complex_circle_traits.h>
typedef CGAL::Cartesian<double> Rep;
typedef CGAL::Visibility_complex_circle_traits<Rep> Traits;
typedef Traits::Disk Circle;
typedef CGAL::Visibility_complex<Traits> VComplex;
int main()
{
std::list<Circle> D;
// Reading circles from file
std::ifstream ifs("input");
std::istream_iterator<Circle> ifs_it(ifs),ifs_end;
std::copy(ifs_it,ifs_end,back_inserter(D));
// Computing Visibibility Complex
VComplex V(D.begin(),D.end());
// Sice of V
int size = 0;
distance(V.vertices_begin(),V.vertices_end(),size);
std::cout << size << std::endl;
return 0;
}

View File

@ -0,0 +1,82 @@
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Visibility_complex_segment_traits.h>
#include <CGAL/Visibility_complex_items.h>
#include <CGAL/Visibility_complex_2.h>
typedef CGAL::Gmpz FT;
typedef CGAL::Simple_cartesian<FT> Rep;
typedef CGAL::Visibility_complex_segment_traits<Rep> Gt;
typedef Gt::Disk Segment;
// ---------------------------------------------------------------------
template <class V>
struct My_face : public CGAL::Visibility_complex_face_base<V>
{
int size;
My_face() : size(0) { }
};
struct My_items : public CGAL::Visibility_complex_items
{
template <class V>
struct Face_wrapper {
typedef My_face<V> Face;
};
};
// ---------------------------------------------------------------------
typedef CGAL::Visibility_complex_2<Gt,My_Items> Visibility_complex;
typedef Visibility_complex::Antichain Antichain;
typedef Visibility_complex::Linear_sweep_iterator Linear_sweep_iterator;
typedef Visibility_complex::Edge_handle Edge_handle;
// ---------------------------------------------------------------------
// For a positive edge the three adjacent faces of e are
// dl(e) , ur(e) , ul(e)
// Otherwise the three adjacent faces are
// dl(e) , dr(e) , ul(e)
void increment(Edge_handle e)
{
if (e->sign()) {
++e->dl()->size;
++e->ul()->size;
++e->ur()->size;
}
else {
++e->dl()->size;
++e->dr()->size;
++e->ul()->size;
}
}
// ---------------------------------------------------------------------
int main()
{
std::list<Segment> D;
// Reading segments from file
std::ifstream ifs("input");
std::istream_iterator<Segment> ifs_it(ifs),ifs_end;
std::copy(ifs_it,ifs_end,back_inserter(D));
// Computing the initia; antichain to sweep the complex
Antichain A(D.begin(),D.end());
Linear_sweep_iterator v(&A) , vend(&A,0);
for ( ; v != vend ; ++v)
{
// The two edges cw_source_edge(v) and cw_target(v) are being
// swept. We increment their three adjacent faces.
increment(v->cw_source_edge());
increment(v->cw_target_edge());
// The face inf(v) has been completely swept. We print its size
std::cout << v->inf()->size << std::endl;
}
return 0;
}

View File

@ -0,0 +1,91 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Arc.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{Arc}
\label{pageVCArcRef}
% ------------------------------------------------------------------------------
\ccDefinition
The \ccRefName\ concept defines the minimal requirement for the
\ccc{Arc_2} type of the \ccc{VisibilityComplexTraits} concept. It
models an \emph{arc} (see the Introduction), i.e. a connected portion of a disk.
The \ccRefName\ concept is introduced for efficiency reasons. When the disks
have constant complexity, the implementation of \ccRefName\ is trivial. The
\ccc{Arc} type is used as a base type for the concept VisibilityComplexEdge
\ccIndexMainItem[c]{VisibilityComplexEdge}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{Disk_handle}{Disk_handle}{}
\ccThreeToTwo
\ccNestedType{Arc_handle}{handle to an arc. }
\ccGlue
\ccNestedType{Disk}{type of disks defining the arc. }
\ccGlue
\ccNestedType{Disk_handle}{handle to a disk.}
\ccGlue
\ccNestedType{Point_2}{the type of a point belonging to a \ccc{Disk}.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccThree{Disk_handle}{ a.object(); }{}
\ccThreeToTwo
\ccCreation
\ccCreationVariable{a}
\ccConstructor{Arc();}{default constructor.}
\ccGlue
\ccConstructor{Arc(Disk_handle d);}
{ Creates an arc representing the complete boundary of the disk \ccc{d}. }
% ------------------------------------------------------------------------------
\ccOperations
\ccThree{Disk_handle}{ a.split (Arc_handle tmp, Point_2 p); }{}
\ccTagFullDeclarations
\ccMethod{Disk_handle object(); const}
{returns a handle to the disk containing \ccVar\ .}
\ccGlue
\ccMethod{void set_object(Disk_handle d); }
{sets \ccc{d} as the disk containing \ccVar\ .}
\ccGlue
\ccMethod{void split (Arc_handle tmp, Point_2 p);}
{splits the arc \ccVar\ at point \ccc{p}. In other words, the target (resp. source)
of \ccVar\ (resp. \ccc{tmp}) becomes \ccc{p} and the target of \ccc{tmp} becomes
the previous target of \ccVar.}
\ccGlue
\ccMethod{void join (Arc_handle y);}
{joins the two arcs \ccVar\ and \ccc{y}. That is, the target of \ccVar\ becomes
the target of \ccc{y} and the arc \ccc{y} is destroyed.}
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Arc_2<Disk>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexVertex}\\
\ccRefConceptPage{VisibilityComplexTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTagDefaults
\end{ccRefConcept}
\ccRefPageEnd
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,44 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Arc_2.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Arc_2<Disk>}
\label{pageArc_2}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is a model for the \ccc{Arc} concept. \ccc{Disk} is
the disk type.
Partial specializations of \ccRefName\ are given for the types
\ccc{CGAL::Point_2<R>}, \ccc{CGAL::Segment_2<R>}, \ccc{CGAL::Circle_2<R>} and
\ccc{CGAL::Polygon_2<R>}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Arc_2.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{Arc}
% ------------------------------------------------------------------------------
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,97 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Bitangent.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{Bitangent}
\label{pageBitangentRef}
% ------------------------------------------------------------------------------
\ccDefinition
The \ccRefName\ concept defines the minimal requirement for the local
\ccc{Bitangent} type of the \ccc{VisibilityComplexTraits} concept. The
\ccc{Bitangent} type is used as a base class for the concept
VisibilityComplexVertex \ccIndexMainItem[c]{VisibilityComplexVertex}.
A bitangent is a directed line segment tangent to two disks. The relative
positions of these two disks with respect to the supporting line of the
bitangents are coded in the \ccc{Type} information. There are four possible
types: \ccc{RR, LL, RL} and \ccc{LR}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
%\ccThree{aaaaaaaaBitangent_2}{aaaaaaaaDisk_handle}{}
%\ccThreeToTwo
\ccNestedType{Disk}{type of disks defining the bitangent. }
\ccGlue
\ccNestedType{Disk_handle}{handle to a \ccc{Disk}. }
\ccGlue
\ccNestedType{Arc}{type following the requirements of the \ccc{Arc} concept
\ccIndexMainItem[c]{Arc}].}
\ccGlue
\ccNestedType{Arc_handle}{handle to an \ccc{Arc}. }
\ccGlue
\ccNestedType{Type}{enumerated type to specify the type of the bitangent. The
possible values are \ccc{LL,RR,RL} or \ccc{LR} respectively
for left-left,right-right,right-left and left-right
bitangents.}{}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccThree{Disk_handle}{ b.source_object(); }{}
\ccThreeToTwo
\ccCreation
\ccCreationVariable{b}
\ccConstructor{Bitangent();}{default constructor.}
\ccGlue
\ccConstructor{Bitangent(Type t, Disk_handle source, Disk_handle target);}
{ Creates the bitangent with type t directed from source to target. }
\ccGlue
\ccConstructor{Bitangent(Type t, Arc_handle source, Arc_handle target);}
{ Creates the bitangent with type t directed from the arc source to the arc
target. If the two arcs do not have a common bitangent, the constructor is equal
to the default constructor. }
% ------------------------------------------------------------------------------
\ccOperations
\ccTagFullDeclarations
\ccMethod{Type type();}{returns the type of \ccVar.}
\ccGlue
\ccMethod{Disk_handle source_object();}{returns a handle to the source disk.}
\ccGlue
\ccMethod{Disk_handle target_object();}{returns a handle to the target disk.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Bitangent_2<Disk>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexVertex}\\
\ccRefConceptPage{VisibilityComplexTraits}
% ------------------------------------------------------------------------------
% +------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefConcept}
\ccRefPageEnd
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,81 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Bitangent_2.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Bitangent_2<Disk>}
\label{pageBitangent_2}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is a model for the \ccc{Bitangent} concept. \ccc{Disk} is
the disk type.
Partial specializations of \ccRefName\ are given for the types
\ccc{CGAL::Point_2<R>}, \ccc{CGAL::Segment_2<R>}, \ccc{CGAL::Circle_2<R>} and
\ccc{CGAL::Polygon_2<R>}.
Adding a partial specialization is done by inheriting from the class
\ccc{CGAL::Bitangent_base<Disk>} and implementing the constructors described in
the \ccc{Bitangent} concept.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Bitangent_2.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInheritsFrom
\ccRefIdfierPage{CGAL::Bitangent_base<Disk>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{Bitangent}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{const Point&;;}{source() const;MMMMMMMMMMMM}{}
\ccThreeToTwo
\ccNestedType{Point_2}{point type.}
% No longer required.
%\ccTypedef{typedef Traits::Plane_3 Plane_3;}
% {plane equation type for three argument version.}
%\ccGlue
%\ccTypedef{typedef Traits::Vector_3 Vector_3;}
% {normal vector of plane equation.}
\ccCreation
\ccCreationVariable{b}
\ccOperations
\ccTagFullDeclarations
\ccMethod{Point_2 source();}{returns the source of the bitangent.}
\ccGlue
\ccMethod{Point_2 target();}{returns the target of the bitangent.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Bitangent_base<Disk>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,47 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Bitangent_base.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Bitangent_base<Disk>}
\label{pageBitangentBaseRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ defines the combinatorial layer of a bitangent. This class
is meant to simplify the implementation of new partial specializations of the
\ccc{Bitangent\_2<Disk>} class.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Bitangent_2.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{Bitangent}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Bitangent_2<Disk>}
% ------------------------------------------------------------------------------
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,87 @@
% +------------------------------------------------------------------------+
% | Reference manual page: ShortestPathTraits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefConcept}{ShortestPathTraits}
\label{pageShortestPathTraitsRef}
% +----------------------------------------------------------------------------+
\ccDefinition
The concept \ccRefName\ describes the set of requirements to be fulfilled by
any class used to instantiate the last parameter in the shortest\_path\_2
\ccIndexMainItem[c]{shortest_path_2} function. This function computes the shortest path between
two points in a scene.
This concept inherits all the types and requirement from the
\ccc{VisibilityComplexTraits} concept and adds a few additional primitives used
specifically for shortest path computations.
We distinguish two different number types: the one used for the input data and
the one used for the distance computations during our algorithm. The latter type
has to support the square root operation whereas the first type doesn't (i.e. it
can be of integer type).
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccTypes
\ccThree{ShortestPathTraits::Exact_NT }{}{}
\ccThreeToTwo
\ccNestedType{Exact_NT}{the number type used to compute distances. It must
support the square root operation.}
\ccGlue
\ccNestedType{Disk}{the disk type.}
\ccGlue
\ccNestedType{Arc_2}{the arc type. Model of the \ccc{Arc} concept.}
\ccGlue
\ccNestedType{Bitangent_2}{the bitangent type. Model of the \ccc{Bitangent}
concept.}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccCreation
\ccCreationVariable{traits}
\ccConstructor{ShortestPathTraits();} {default constructor.}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccOperations
\ccTagFullDeclarations
\ccMethod{Disk make_disk(Point_2 p);}{method to create a disk from a point.}
\ccGlue
\ccMethod{bool is_vertex(Disk d);}{returns true if \ccc{d} is a point. }
\ccGlue
\ccMethod{Exact_NT length(Arc_2 a, Bitangent_2 b, Bitangent_2 c);}
{returns the length of the arc \ccc{a} defined by the two bitangents \ccc{b} and
\ccc{c}.}
\ccGlue
\ccMethod{Exact_NT length(Bitangent_2 b);}{return the length of the bitangent
\ccc{b}.}
\ccTagDefaults
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccHasModels
\ccRefIdfierPage{CGAL::Shortest_path_point_traits<R,E>} \\
\ccRefIdfierPage{CGAL::Shortest_path_segment_traits<R,E>} \\
\ccRefIdfierPage{CGAL::Shortest_path_polygon_traits<R,E>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\end{ccRefConcept}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,112 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Shortest_path_2.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefFunction}{shortest_path_2}
\label{pageShortest_path_2Ref}
% ------------------------------------------------------------------------------
\ccDefinition
Function that computes the shortest path between two points $p,q$ in a planar
scene (see the basic definitions paragraph in the introduction for what we
understand by a scene). The scene is given as two pairs of iterators describing
the set of disks and constraints of the scene.
The output iterator returned by the function is an iterator on the vertices of
the shortest path. Here a vertex is a vertex of the visibility complex of the
scene plus the two points $p,q$. Recall that vertices correspond to free
bitangents.
Currently only scene containing points, segments or polygons are supported. In
other words circles are not.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Shortest_path_2.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccFunction{
template < class DiskIterator , class ConstraintIterator ,
class OutputIterator , class Traits >
OutputIterator shortest_path_2(DiskIterator first ,
DiskIterator last ,
ConstraintIterator firstc,
ConstraintIterator lastc ,
Traits::Point_2 p , Traits::Point_2 q ,
OutputIterator result ,
Traits t);
}
{
computes the shortest path between \ccc{p} and \ccc{q} in the scene containing
the disks in the range [\ccc{first},\ccc{last}) and the constraints in the range
[\ccc{firstc},\ccc{lastc}). The past-the-end iterator for the list of vertices
of the shortest path is returned. Here vertex refers to the visibility complex
of the input scene plus the two points \ccc{p} and \ccc{q}.
}
\ccFunction{
template < class DiskIterator , class OutputIterator , class Traits >
OutputIterator shortest_path_2(DiskIterator first ,
DiskIterator last ,
Traits::Point_2 p , Traits::Point_2 q ,
OutputIterator result ,
Traits t);
}
{
Same as the previous function but with an empty list of constraints.
}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccHeading{Requirements}
\begin{enumerate}
\item \ccc{Traits} is a model for the concept ShortestPathTraits.
\ccIndexMainItem[c]{ShortestPathTraits}
\item \ccc{OutputIterator::value_type} should be the same as
\ccc{ConstraintIterator::value_type} and the same as
\ccc{Visibility_complex_2<Traits>::Vertex}.
\item \ccc{DiskIterator::value_type} should be \ccc{Traits::Disk}.
\end{enumerate}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Shortest_path_point_traits<R,E>} \\
\ccRefIdfierPage{CGAL::Shortest_path_segment_traits<R,E>} \\
\ccRefIdfierPage{CGAL::Shortest_path_polygon_traits<R,E>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccImplementation
The visibility graph of the input scene plus the two points is computed in time
$O(k + n \log n)$ and $O(k)$ space where $n$ and $k$ are respectively the size
of the input and output.
A Dijsktra algorithm is then applied to get the shortest path. We have
implemented the Dijsktra algorithm using a \ccc{stl::set} thus resulting in a
$O(k \log n)$ time complexity.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccExample
The following program read a list of pairwise disjoint segments from the file
\texttt{segments} and the outputs the bitangent segments of the shortest path to
standard output in a one-per-line fashion.
\ccIncludeExampleCode{Visibility_complex_ref/shortest_path.C}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefFunction}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,50 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Shortest_path_point_traits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Shortest_path_point_traits<R,E>}
\label{pageShortest_path_point_traitsRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is the predefined geometric traits class provided by
\cgal\ for use with disks whith type \ccc{CGAL::Point_2<R>}.
This class is to be used as last argument of the \ccc{shortest_path_2} function
which computes the shortest path between two points in a scene.
This class is templated with a representation class \ccc{R} and a number type
\ccc{E} which supports the square root operation. The number type \ccc{E} is
used to compute distances between pairs of points.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Shortest_path_point_traits.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInheritsFrom
\ccRefIdfierPage{CGAL::Visibility_complex_point_traits<R>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{ShortestPathTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Shortest_path_segment_traits<R,E>} \\
\ccRefIdfierPage{CGAL::Shortest_path_polygon_traits<R,E>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,50 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Shortest_path_polygon_traits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Shortest_path_polygon_traits<R,E>}
\label{pageShortest_path_polygon_traitsRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is the predefined geometric traits class provided by
\cgal\ for use with disks whith type \ccc{CGAL::Polygon_2<R>}.
This class is to be used as last argument of the \ccc{shortest_path_2} function
which computes the shortest path between two points in a scene.
This class is templated with a representation class \ccc{R} and a number type
\ccc{E} which supports the square root operation. The number type \ccc{E} is
used to compute distances between pairs of points.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Shortest_path_polygon_traits.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInheritsFrom
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{ShortestPathTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Shortest_path_segment_traits<R,E>} \\
\ccRefIdfierPage{CGAL::Shortest_path_point_traits<R,E>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,50 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Shortest_path_segment_traits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Shortest_path_segment_traits<R,E>}
\label{pageShortest_path_segment_traitsRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is the predefined geometric traits class provided by
\cgal\ for use with disks whith type \ccc{CGAL::Segment_2<R>}.
This class is to be used as last argument of the \ccc{shortest_path_2} function
which computes the shortest path between two points in a scene.
This class is templated with a representation class \ccc{R} and a number type
\ccc{E} which supports the square root operation. The number type \ccc{E} is
used to compute distances between pairs of points.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Shortest_path_segment_traits.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInheritsFrom
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{ShortestPathTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Shortest_path_polygon_traits<R,E>} \\
\ccRefIdfierPage{CGAL::Shortest_path_point_traits<R,E>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,109 @@
% +------------------------------------------------------------------------+
% | Reference manual page: VisibilityComplex.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +----------------------------------------------------------------------------+
\begin{ccRefConcept}{VisibilityComplex}
\label{pageVisibilityComplexRef}
% +----------------------------------------------------------------------------+
\ccDefinition
The class \ccRefName\ defines a vertex centered data structure capable of
maintaining the incidence between vertices, edges and faces of the visibility
complex of a collection of $n$ disks. In addition the \ccRefName\ maintains an
\ccc{VisibilityComplexAntichain} used for sweeping the visibility complex. The
\ccRefName\ offers iterators pairs for traversing the vertices,edges and faces
of the visibilty complex.
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccTypes
\ccTwo{VisibilityComplex:: Vertex_iterator }{}
\ccNestedType{Gt} {the geometric traits class.}
\ccGlue
\ccNestedType{Items} {items class, model of the \ccc{VisibilityComplex_items}
concept.}
\ccGlue
\ccNestedType{Antichain} {the antichain used for sweeping the visibility
complex, model for the
\ccc{VisibilityComplexAntichain} concept.}
\ccGlue
\ccNestedType{Vertex}{vertex type. Model of \ccc{VisibilityComplexVertex}.}
\ccGlue
\ccNestedType{Edge}{edge type. Model of \ccc{VisibilityComplexEdge}.}
\ccGlue
\ccNestedType{Face}{face type. Model of \ccc{VisibilityComplexFace}.}
\ccNestedType{Vertex_handle}{handle to vertex.}
\ccGlue
\ccNestedType{Edge_handle}{handle to edge.}
\ccGlue
\ccNestedType{Face_handle}{handle to face.}
\ccNestedType{Vertex_iterator}{iterator over all vertex.}
\ccGlue
\ccNestedType{Edge_iterator}{iterator over all edges.}
\ccGlue
\ccNestedType{Face_iterator}{iterator over all faces.}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccCreation
\ccCreationVariable{v}
\ccConstructor{VisibilityComplex();}{default constructor.}
\ccConstructor{VisibilityComplex(InputIterator first, InputIterator last,
ConstraintIt firstc,ConstraintIt lastc);}
{creates the visibility complex of the disks in the range
$[$\ccc{first,last}$)$ and constraints in the range $[$\ccc{firstc,lastc}$)$.
The value type of \ccc{ConstraintIt} is \ccc{Vertex}. }
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccOperations
\ccTagFullDeclarations
\ccMethod{Vertex_iterator vertices_begin();}{}
\ccGlue
\ccMethod{Vertex_iterator vertices_end();}{iterator over all vertices.}
\ccGlue
\ccMethod{Edge_iterator edges_begin();}{}
\ccGlue
\ccMethod{Edge_iterator edges_end();}{iterator over all edges.}
\ccGlue
\ccMethod{Face_iterator faces_begin();}{}
\ccGlue
\ccMethod{Face_iterator faces_end();}{iterator over all faces.}
\ccGlue
\ccTagDefaults
% +----------------------------------------------------------------------------+
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Visibility_complex_2<Gt,It>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexAntichain} \\
\ccRefConceptPage{VisibilityComplexTraits} \\
\ccRefConceptPage{VisibilityComplexVertex}\\
\ccRefConceptPage{VisibilityComplexEdge}\\
\ccRefConceptPage{VisibilityComplexFace}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\end{ccRefConcept}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,159 @@
% +------------------------------------------------------------------------+
% | Reference manual page: VisibilityComplexAntichain.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +----------------------------------------------------------------------------+
\begin{ccRefConcept}{VisibilityComplexAntichain}
\label{pageVisibilityComplexAntichainRef}
% +----------------------------------------------------------------------------+
\ccDefinition
The concept of a \ccRefName\ defines the sweep structure used to sweep the
visibility complex. It is a planar st-graph: a node corresponds to an edge of
visibility complex and an edge corresponds to a face of the visibility complex.
The antichain maintains a list of potential candidates which are ready to be
swept.
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccTypes
\ccTwo{VisibilityComplexAntichain:: Vertex_iterator }{}
\ccNestedType{Gt}{the geoemtric traits class. Model of a \ccc{VisibilityComplexTraits}. }
\ccGlue
\ccNestedType{Disk}{the disk type. Same as \ccc{VisibilityComplexTraits::Disk}. }
\ccGlue
\ccNestedType{Vertex}{vertex, model for \ccc{VisibilityComplexVertex}\
concept.}
\ccGlue
\ccNestedType{Edge}{edge, model for \ccc{VisibilityComplexEdge}\ concept.}
\ccGlue
\ccNestedType{Face}{face, model for \ccc{VisibilityComplexFace}\ concept.}
\ccNestedType{Vertex_handle}{handle to vertex.}
\ccGlue
\ccNestedType{Edge_handle}{handle to edge.}
\ccGlue
\ccNestedType{Face_handle}{handle to face.}
\ccNestedType{Vertex_iterator}{iterator over all vertices of the antichain.}
\ccGlue
\ccNestedType{Edge_iterator}{iterator over all edges of the antichain.}
\ccGlue
\ccNestedType{Face_iterator}{iterator over all faces of the antichain.}
\ccGlue
\ccNestedType{Minimals_iterator}{iterator over all the minimal vertices of the antichain. }
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccCreation
\ccCreationVariable{a}
\ccConstructor{VisibilityComplex_Antichain();}{default constructor.}
\ccConstructor{VisibilityComplex_Antichain(InputIterator first, InputIterator last,
ConstraintIt firstc, ConstraintIt lastc);}
{creates the antichain of the disks in the range $[$\ccc{first,last}$)$ and
constraints in the range $[$\ccc{firstc,lastc}$)$ corresponding to the filter
$I(0)$ of bitangents with positive slope. The value type of \ccc{InputIterator}
must be \ccc{Disk} and the value type of \ccc{ConstraintIt} must be
\ccc{Vertex}. }
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccOperations
\ccThree{Vertex_iterator}{a.vertices_cw_begin(); }{}
\ccThreeToTwo
\ccTagFullDeclarations
\ccMethod{Vertex_iterator vertices_begin();}{iterator over all the sinks of the
faces of the antichain. }
\ccGlue
\ccMethod{Vertex_iterator vertices_end();}{}
\ccGlue
\ccMethod{Vertex_iterator vertices_cw_begin();}{iterator over all the sources of the
faces of the antichain.}
\ccGlue
\ccMethod{Vertex_iterator vertices_cw_end();}{}
\ccGlue
\ccMethod{Edge_iterator edges_begin();}{iterator over all the edges of the
antichain.}
\ccGlue
\ccMethod{Edge_iterator edges_end();}{}
\ccGlue
\ccMethod{Face_iterator faces_begin();}{iterator over all the faces of the
antichain.}
\ccGlue
\ccMethod{Face_iterator faces_end();}{}
\ccThree{bool }{v.is_right_minimal( Vertex_handle v);}{}
\ccMethod{void set_linear_space(bool b);} {If \ccc{b} is true then the antichain
will destroy the elements which are no longer necessary after each sweep of a
vertex. This method is used to sweep the visibility complex while keeping the
storage linear (i.e. in the size of the input). The default value is true.}
\ccGlue
\ccMethod{bool linear_space(); } {returns true if the storage is linear. }
\ccMethod{void set_straight(bool b); } {if \ccc{b} is false (resp. true) then
the antichain will sweep the visibility complex using a topological (straight)
sweep. The default value is false. }
\ccGlue
\ccMethod{bool is_straight(); } { returns true if the antichain is straight. }
\ccMethod{bool is_right_minimal(Vertex_handle v);}{returns true if the vertex
$v$ is right minimal.}
\ccGlue
\ccMethod{bool is_left_minimal(Vertex_handle v);} {returns true if the vertex
$v$ is left minimal.}
\ccGlue
\ccMethod{bool is_minimal(Vertex_handle v);}{returns true if the vertex $v$ is
minimal.}
\ccThree{Minimals_iterator }{v.sweep( Vertex_handle v); }{}
\ccMethod{Minimals_iterator minimals_begin();} {}
\ccGlue
\ccMethod{Minimals_iterator minimals_end();}{ iterator over all the minimal
bitangents in the filter associated
with the antichain. If the antichain
is straight then the vertices are
ordered by increasing slope. }
\ccGlue
\ccMethod{void sweep_all_minimals();}{sweeps all the minimals vertices of the
antichain.}
\ccGlue
\ccMethod{void sweep(Vertex_handle v);}{sweeps the vertex $v$. precondition:
$v$ is minimal. If the antichain is
not straight, this operation is
amortized constant otherwise it takes
$O(\log n)$ time. The vertex is removed
from the list of minimals. }
\ccTagDefaults
% +----------------------------------------------------------------------------+
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Visibility_complex_antichain<Gt,It>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplex} \\
\ccRefConceptPage{VisibilityComplexTraits} \\
\ccRefConceptPage{VisibilityComplexVertex}\\
\ccRefConceptPage{VisibilityComplexEdge}\\
\ccRefConceptPage{VisibilityComplexFace}
% +----------------------------------------------------------------------------+
\end{ccRefConcept}
% +----------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,129 @@
% +------------------------------------------------------------------------+
% | Reference manual page: VisibilityComplexEdge.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +----------------------------------------------------------------------------+
\begin{ccRefConcept}{VisibilityComplexEdge}
\label{pageVCEdgeRef}
% +----------------------------------------------------------------------------+
\ccDefinition
The concept \ccRefName\ represents the edge class in the visibility complex.
It defines the minimal requirements for the \ccc{Edge} type in the
\ccc{VisibilityComplex} concept. It is also required in the
\ccc{Edge_wrapper<_Vc,_Tr>} member class template of an items class, see the
\ccc{VisibilityComplex_Items} concept. In addition to the requirement below, the
concept \ccRefName\ must inherit from the \ccc{Arc} concept
\ccIndexMainItem[c]{Arc}.
% +----------------------------------------------------------------------------+
% ------------------------------------------------------------------------------
\ccInheritsFrom
\ccRefConceptPage{Arc}\\
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{typedef Edge::Vertex_handle}{Vertex_handle;}{}
\ccThreeToTwo
\ccNestedType{Gt} {geometric traits class. }
\ccGlue
\ccNestedType{Vertex}{model of \ccc{Vertex}.}
\ccGlue
\ccNestedType{Edge}{model of \ccc{Edge}.}
\ccGlue
\ccNestedType{Face}{model of \ccc{Face}.}
\ccNestedType{Vertex_handle}{handle to vertex.}
\ccGlue
\ccNestedType{Edge_handle}{handle to halfedge.}
\ccGlue
\ccNestedType{Face_handle}{handle to face.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccThree{Vertex_handle}{void v.set_inf(Vertex_handle v);}{}
\ccThreeToTwo
% ------------------------------------------------------------------------------
\ccCreation
\ccCreationVariable{e}
\ccConstructor{Edge();}{default constructor.}
\ccConstructor{Edge(bool s, Disk_handle p);}
{ creates a edge with positive sign if $s$ is true and negative otherwise.
The underlying arc is the complete boundary of the disk $p$. }
\ccConstructor{Edge(Vertex_handle v, Vertex_handle w , Disk_handle p);}
{ creates an edge on disk $p$ whose source is $v$ and sink $w$. The underlying
arc is defined by the extremities of $v$ and $w$ on $p$. }
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccOperations
\ccTagFullDeclarations
\ccMethod{Face_handle dl(); const}{}
\ccGlue
\ccMethod{Face_handle dr(); const}{}
\ccGlue
\ccMethod{Face_handle ul(); const}{}
\ccGlue
\ccMethod{Face_handle ur(); const}
{ returns a handle to one of the three faces adjacent to the edge \ccVar. For
a positive (resp. negative) edge, \ccc{dr()} and \ccc{dl()} (resp.
\ccc{ur()} and \ccc{ul()}) return the same \ccc{Face_handle}.}
\ccMethod{Face_handle face(); const}
{returns the unique face adjacent to \ccVar\ if \ccVar\ is a constraint edge.
Otherwise $0$ is returned.}
\ccMethod{void set_adjacent_faces(Face_handle f0,Face_handle f1,Face_handle f2);}
{set \ccc{f0,f1,f2} as the adjacent faces of \ccVar. For a positive edge,
\ccc{f0 = dl() = dr()}, \ccc{f1 = ur()} and \ccc{f2 = ul()}. For a negative
edge \ccc{f0 = dl()}, \ccc{f1 = dr()} and \ccc{f2 = ul() = ur()}.}
\ccMethod{Vertex_handle sup(); const}
{returns the sink vertex of \ccVar.}
\ccGlue
\ccMethod{Vertex_handle inf(); const}
{returns the source vertex of \ccVar.}
\ccGlue
\ccMethod{void set_inf(Vertex_handle v);}
{sets the source vertex of \ccVar\ to $v$ and sets the \ccc{ccw_edge}
of $v$ to \ccVar.}
\ccGlue
\ccMethod{void set_sup(Vertex_handle v);}
{sets the sink vertex of \ccVar\ to $v$ and sets the \ccc{cw_edge}
of $v$ to \ccVar.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Visibility_complex_edge_base<Vc>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefConceptPage{Arc} \\
\ccRefConceptPage{VisibilityComplex} \\
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefConceptPage{VisibilityComplexVertex}\\
\ccRefConceptPage{VisibilityComplexFace}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefConcept}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,126 @@
% +------------------------------------------------------------------------+
% | Reference manual page: VisibilityComplexFace.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{VisibilityComplexFace}
\label{pageVCFaceRef}
% +----------------------------------------------------------------------------+
\ccDefinition
The concept \ccRefName\ defines the requirements for the \ccc{Face} type in the
\ccc{VisibilityComplex} concept. It is also required in the
\ccc{Face_wrapper<_Vc,_Tr>} member class template of an items class, see the
\ccc{VisibilityComplex_items} concept.
% +----------------------------------------------------------------------------+
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{typedef Face::Vertex_handle}{Vertex_handle;}{}
\ccThreeToTwo
\ccNestedType{Gt} {geometric traits class. }
\ccGlue
\ccNestedType{Vertex}{model of \ccc{Vertex}.}
\ccGlue
\ccNestedType{Edge}{model of \ccc{Edge}.}
\ccGlue
\ccNestedType{Face}{model of \ccc{Face}.}
\ccNestedType{Vertex_handle}{handle to vertex.}
\ccGlue
\ccNestedType{Edge_handle}{handle to halfedge.}
\ccGlue
\ccNestedType{Face_handle}{handle to face.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccThree{Edge_handle}{v.set_bottom_edge( Edge_handle e);}{}
\ccThreeToTwo
\ccCreation
\ccCreationVariable{f}
\ccConstructor{Face();}{default constructor.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccOperations
\ccTagFullDeclarations
\ccMethod{Edge_handle sup(); const}
{returns the sink of face \ccVar.}
\ccGlue
\ccMethod{Edge_handle inf(); const}
{returns the source of face \ccVar.}
\ccGlue
\ccMethod{void set_sup(Vertex_handle v);}
{sets the sink of face \ccVar\ to $v$ and sets the source face of $v$ to
\ccVar.}
\ccGlue
\ccMethod{void set_inf(Vertex_handle v);}
{sets the source of face \ccVar\ to $v$ and sets the sink face of $v$ to
\ccVar.}
\ccGlue
\ccMethod{Edge_handle top_edge(); const}
{returns the last edge on the left boundary of \ccVar\ that has been swept.
If \ccVar\ belongs to the current antichain then this is the target node of the
underlying upward directed graph of the antichain. }
\ccGlue
\ccMethod{Edge_handle bottom_edge(); const}
{returns the last edge on the right boundary of \ccVar\ that has been swept.
If \ccVar\ belongs to the current antichain then this is the source node of the
underlying upward directed graph of the antichain. }
\ccGlue
\ccMethod{void set_top_edge(Edge_handle e);}
{sets $e$ as the last edge on the left boundary of \ccVar\ that has been
swept.}
\ccGlue
\ccMethod{void set_bottom_edge(Edge_handle e);}
{sets $e$ as the last edge on the right boundary of \ccVar\ that has been
swept.}
\ccThree{Disk_handle}{ v.set_backward_edge( Disk_handle d) ;}{}
\ccMethod{Disk_handle backward_object(); const}
{returns a pointer to the disk in the backward view of the face \ccVar.}
\ccGlue
\ccMethod{Disk_handle forward_object(); const}
{returns a pointer to the disk in the forward view of the face \ccVar.}
\ccMethod{void set_backward_object(Disk_handle d);}
{sets $d$ as the backward view of \ccVar.}
\ccGlue
\ccMethod{void set_forward_object(Disk_handle d);}
{sets $d$ as the forward view of \ccVar.}
\ccTagDefaults
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Visibility_complex_face_base<Vc>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefConceptPage{VisibilityComplex} \\
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefConceptPage{VisibilityComplexVertex}\\
\ccRefConceptPage{VisibilityComplexEdge}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefConcept}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,63 @@
% +------------------------------------------------------------------------+
% | Reference manual page: VisibilityComplexItems.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefConcept}{VisibilityComplexItems}
\label{pageVisibilityComplexItemsRef}
% +----------------------------------------------------------------------------+
\ccDefinition
The concept \ccRefName\ wraps the three item types -- vertex, edge, and face --
for the visibity complex. A \ccRefName\ contains three member class templates
named \ccc{Vertex_wrapper}, \ccc{Edge_wrapper}, and \ccc{Face_wrapper}, each
with one template parameter \ccc{Antichain} which is an instantiated model of
the \ccc{VisibilityComplexAntichain} concept. These three member class templates
provide local types named \ccc{Vertex}, \ccc{Edge} and \ccc{Face} respectively.
The requirements on these types are described on page~\pageref{pageVCVertexRef},
page~\pageref{pageVCEdgeRef}, and page~\pageref{pageVCFaceRef} respectively.
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccTypes
\ccTwo{VisibilityComplexItems:: Vertex_wrapper<Antichain>::Vertex }{}
\ccNestedType{Vertex_wrapper<Antichain>::Vertex}
{model of \ccc{VisibilityComplexVertex}.}
\ccGlue
\ccNestedType{Edge_wrapper<Antichain>::Edge}
{model of \ccc{VisibilityComplexEdge}.}
\ccGlue
\ccNestedType{Face_wrapper<Antichain>::Face}
{model of \ccc{VisibilityComplexFace}.}
% +----------------------------------------------------------------------------+
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Visibility_complex_items}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexAntichain} \\
\ccRefConceptPage{VisibilityComplexVertex} \\
\ccRefConceptPage{VisibilityComplexEdge} \\
\ccRefConceptPage{VisibilityComplexFace} \\
\ccRefIdfierPage{CGAL::Visibility_complex_vertex_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_edge_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_face_base<Vc>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\end{ccRefConcept}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,92 @@
% +------------------------------------------------------------------------+
% | Reference manual page: VisibilityComplexTraits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefConcept}{VisibilityComplexTraits}
\label{pageVisibilityComplexTraitsRef}
% +----------------------------------------------------------------------------+
\ccDefinition
The concept \ccRefName\ describes the set of requirements to be fulfilled by
any class used to instantiate the first template parameter of the classes
\ccc{Visibility_complex_2<Gt,It>} and
\ccc{Visibility_complex_antichain<Gt,It>}. This concept provides the
types of the geometric primitives used in the visiblity complex and some
function object types for the required predicates on those primitives.
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccTypes
\ccThree{VisibilityComplexTraits::Is_upward_directed }{}{}
\ccThreeToTwo
\ccNestedType{Point_2}{point type.}
\ccGlue
\ccNestedType{Segment_2}{segment type.}
\ccGlue
\ccNestedType{Disk}{disk type.}
\ccGlue
\ccNestedType{Bitangent_2}{model of the \ccc{Bitangent} concept. }
\ccGlue
\ccNestedType{Arc_2}{model of the \ccc{Arc} concept. }
% +----------------------------------------------------------------------------+
\ccNestedType{Orientation_object}{Must provide the operator \ccc{Orientation
operator()(Bitangent_2 a, Bitangent_2 b)}, which returns \ccc{LEFTURN,
RIGHTTURN, COLLINEAR} depending on the sign, \ccc{POSITIVE, NEGATIVE, ZERO} of
the determinant $\det(\vec{a},\vec{b})$ of the two underlying vectors of the
bitangents $a$ and $b$.}
\ccGlue
\ccNestedType{Is_upward_directed}{Must provide the operator \ccc{bool
operator()(Bitangent_2 d)}, which returns true iff. the angle of the bitangent
belongs to $[0,\pi)$. }
\ccGlue
\ccNestedType{Compare_extreme_yx}{Let \ccc{FT extreme(bool x, C c)} be a function returning
the maximal (resp. minimal) $y$-coordinate of $c$ if $x$ is false (resp. true).
The type $C$ can be either \ccc{Disk} or \ccc{Bitangent_2}. \\
The type \ccc{Compare_extreme_yx} must provide an operator
\ccc{Comparison_result operator()(bool x , C a , bool y , D b)} which returns
the comparison result between the \ccc{compare(x,a)} and \ccc{extreme(y,b)}. The
types $C$ and $D$ can be either \ccc{Disk} or \ccc{Bitangent}. }
\ccNestedType{Is_point}{Must provide the operator \ccc{bool operator()(Disk d)},
which returns true iff. $d$ is a point.}
\ccGlue
\ccNestedType{Equal_as_segments}{Must provide the operator \ccc{bool
operator()(Bitangent_2 a, Bitangent_2 b)}, which returns true iff. the
underlying segments of $a$ and $b$ are equal.}
\ccGlue
\ccNestedType{Do_intersect}{Must provide the four operators \ccc{bool
operator()(C a, D b)}-- where the types $C, D$ are either \ccc{Disk} or
\ccc{Bitangent_2}-- which return true iff. $a$ and $b$ intersect.}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccCreation
\ccCreationVariable{traits}
\ccConstructor{VisibilityComplexTraits();} {default constructor.}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccHasModels
\ccRefIdfierPage{CGAL::Visibility_complex_point_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_circle_traits<R>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\end{ccRefConcept}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,134 @@
% +------------------------------------------------------------------------+
% | Reference manual page: VisibilityComplexVertex.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{VisibilityComplexVertex}
\label{pageVCVertexRef}
% ------------------------------------------------------------------------------
\ccDefinition
The concept \ccRefName\ represents the vertex class in the visibility complex.
It defines the requirements for the \ccc{Vertex} type in the
\ccc{VisibilityComplex} concept. It is also required in the
\ccc{Vertex_wrapper<_Vc>} member class template of an items class, see the
\ccc{VisibilityComplex_Items} concept. In addition to the requirement below, the
concept \ccRefName\ must inherit from the \ccc{Bitangent} concept defined on
page~\pageref{pageBitangentRef}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInheritsFrom
\ccRefConceptPage{Bitangent}\\
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{typedef Vertex::Vertex_handle}{Vertex_handle;}{}
\ccThreeToTwo
\ccNestedType{Gt} {geometric traits class. }
\ccGlue
\ccNestedType{Bitangent_2} {model of \ccc{Bitangent}. Same as
\ccc{Gt::Bitangent\_2}.}
\ccNestedType{Vertex}{model of \ccc{Vertex}.}
\ccGlue
\ccNestedType{Edge}{model of \ccc{Edge}.}
\ccGlue
\ccNestedType{Face}{model of \ccc{Face}.}
\ccNestedType{Vertex_handle}{handle to vertex.}
\ccGlue
\ccNestedType{Edge_handle}{handle to halfedge.}
\ccGlue
\ccNestedType{Face_handle}{handle to face.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{Vertex_handle}{v.set_ccw_edge( Edge_handle e); } {}
\ccThreeToTwo
% ------------------------------------------------------------------------------
\ccCreation
\ccCreationVariable{v}
\ccConstructor{Vertex();}{default constructor.}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccOperations
\ccTagFullDeclarations
\ccMethod{bool is_constraint(); const}
{returns true if the vertex is a constraint.}
\ccMethod{Edge_handle ccw_target_edge(); const}{}
\ccGlue
\ccMethod{Edge_handle ccw_source_edge(); const}{}
\ccGlue
\ccMethod{Edge_handle cw_source_edge(); const}{}
\ccGlue
\ccMethod{Edge_handle cw_target_edge(); const}
{returns the four adjacent edges of the vertex.}
\ccMethod{Edge_handle target_cusp_edge(); const}{}
\ccGlue
\ccMethod{Edge_handle source_cusp_edge(); const}
{If the vertex is a constraint, returns the two constraint edges with sink
\ccVar. Use this method on \ccc{\ccVar->pi()} to get the two other constraint
edges adjacent to \ccVar. If the vertex is regular, the null pointer is returned.}
\ccMethod{void set_ccw_edge(Edge_handle e);}
{sets the edge $e$ on the source or target object such that $\sup(e) = $ \ccVar.}
\ccGlue
\ccMethod{void set_cw_edge(Edge_handle e);}
{sets the edge $e$ on the source or target object such that $\sup(e) = $ \ccVar.}
\ccMethod{Face_handle sup(); const}
{returns the sink face of \ccVar.}
\ccGlue
\ccMethod{Face_handle inf(); const}
{returns the source face of \ccVar for a regular vertex and the null pointer
otherwise. To access the faces adjacent to a constraint vertex, use
the method \ccc{face()} on the two edges obtained by the methods
\ccc{target_cusp_edge()} and \ccc{source_cusp_edge()}.}
\ccGlue
\ccMethod{void set_inf(Face_handle f);}
{sets the source face of \ccVar\ to $f$.}
\ccGlue
\ccMethod{void set_sup(Face_handle f);}
{sets the sink face of \ccVar\ to $f$.}
\ccTagDefaults
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccHasModels
\ccRefIdfierPage{CGAL::Visibility_complex_vertex_base<Vc>}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefConceptPage{Bitangent} \\
\ccRefConceptPage{VisibilityComplex} \\
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefConceptPage{VisibilityComplexEdge}\\
\ccRefConceptPage{VisibilityComplexFace}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefConcept}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,47 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_2<Gt,It>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccDefinition
The class \ccRefName\ is a model of the \ccc{VisibilityComplex} concept.
\ccc{Gt} represents the geometric traits class. It is an instantiation of a
model for the VisibilityComplexTraits
\ccIndexMainItem[c]{VisibilityComplexTraits} concept. Currently four geometric
traits classes are provided. \ccc{It} is an instantiation of a model for the
VisibilityComplexItems \ccIndexMainItem[c]{VisibilityComplexItems} concept.
\ccInclude{CGAL/Visibility_complex.h}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccIsModel
\ccRefConceptPage{VisibilityComplex}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefConceptPage{VisibilityComplexTraits}\\
\ccRefIdfierPage{CGAL::Visibility_complex_point_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_circle_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_items}
% +----------------------------------------------------------------------------+
\end{ccRefClass}

View File

@ -0,0 +1,47 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_antichain.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_antichain<Gt,It>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccDefinition
The class \ccRefName\ is a model of the \ccc{VisibilityComplexAntichain}
concept. \ccc{Gt} represents the geometric traits class. It is an instantiation
of a model for the VisibilityComplexTraits
\ccIndexMainItem[c]{VisibilityComplexTraits} concept. Currently four geometric
traits classes are provided. \ccc{It} is an instantiation of a model for the
VisibilityComplexItems \ccIndexMainItem[c]{VisibilityComplexItems} concept
\ccInclude{CGAL/Visibility_complex_antichain.h}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccIsModel
\ccRefConceptPage{VisibilityComplexAntichain}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefConceptPage{VisibilityComplexTraits}\\
\ccRefIdfierPage{CGAL::Visibility_complex_point_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_circle_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_items}
% +----------------------------------------------------------------------------+
\end{ccRefClass}

View File

@ -0,0 +1,63 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_circle_traits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_circle_traits<R>}
\label{pageVisibility_complex_circle_traitsRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is the predefined geometric traits class provided by
\cgal\ for use with disks whith type \ccc{CGAL::Circle_by_radius<R>}.
It uses the kernel geometric objects and predicates. The class is templated
with a representation class \ccc{R}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Visibility_complex_circle_traits.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{typedef Bitangent_2<Disk> }{Bitangent_2; }{}
\ccTypedef{typedef R Rep;}{Representation type}
\ccGlue
\ccTypedef{typedef Point_2<R> Point_2;}{}
\ccGlue
\ccTypedef{typedef Segment_2<R> Segment_2;}{}
\ccGlue
\ccTypedef{typedef Circle_by_radius<R> Disk;}{Disk type}
\ccGlue
\ccTypedef{typedef Arc_2<Disk> Arc_2;}{}
\ccGlue
\ccTypedef{typedef Bitangent_2<Disk> Bitangent_2;}{}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{VisibilityComplexTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Arc_2<Disk>} \\
\ccRefIdfierPage{CGAL::Bitangent_2<Disk>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_point_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,40 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_edge_base.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_edge_base<Vc>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccDefinition
The class \ccRefName\ is a model of the \ccc{VisibilityComplexEdge}
concept. \ccc{Vc} is an instantiation of a \ccc{VisibilityComplexAntichain}.
\ccInclude{CGAL/Visibility_complex_edge_base.h}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccIsModel
\ccRefConceptPage{VisibilityComplexEdge}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefIdfierPage{CGAL::Visibility_complex_items}\\
\ccRefIdfierPage{CGAL::Visibility_complex_vertex_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_face_base<Vc>}
% +----------------------------------------------------------------------------+
\end{ccRefClass}

View File

@ -0,0 +1,40 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_face_base.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_face_base<Vc>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccDefinition
The class \ccRefName\ is a model of the \ccc{VisibilityComplexFace}
concept. \ccc{Vc} is an instantiation of a \ccc{VisibilityComplexAntichain}.
\ccInclude{CGAL/Visibility_complex_face_base.h}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccIsModel
\ccRefConceptPage{VisibilityComplexFace}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefIdfierPage{CGAL::Visibility_complex_items}\\
\ccRefIdfierPage{CGAL::Visibility_complex_vertex_base<Vc>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_edge_base<Vc>}
% +----------------------------------------------------------------------------+
\end{ccRefClass}

View File

@ -0,0 +1,45 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_items.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_items}
\label{pageVisibilitycomplexitemsRef}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccDefinition
The class \ccRefName\ is a model of the \ccc{VisibilityComplexItems} concept.
It uses the default types for vertices, halfedges, and faces.
\ccInclude{CGAL/Visibility_complex_items.h}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccIsModel
\ccRefConceptPage{VisibilityComplexItems}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefIdfierPage{CGAL::Visibility_complex_vertex_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_edge_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_face_base<Vc>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,63 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_point_traits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_point_traits<R>}
\label{pageVisibility_complex_point_traitsRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is the predefined geometric traits class provided by
\cgal\ for use with disks whith type \ccc{CGAL::Point_2<R>}.
It uses the kernel geometric objects and predicates. The class is templated
with a representation class \ccc{R}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Visibility_complex_point_traits.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{typedef Bitangent_2<Disk> }{Bitangent_2; }{}
\ccTypedef{typedef R Rep;}{Representation type}
\ccGlue
\ccTypedef{typedef Point_2<R> Point_2;}{}
\ccGlue
\ccTypedef{typedef Segment_2<R> Segment_2;}{}
\ccGlue
\ccTypedef{typedef Point_2<R> Disk;}{Disk type}
\ccGlue
\ccTypedef{typedef Arc_2<Disk> Arc_2;}{}
\ccGlue
\ccTypedef{typedef Bitangent_2<Disk> Bitangent_2;}{}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{VisibilityComplexTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Arc_2<Disk>} \\
\ccRefIdfierPage{CGAL::Bitangent_2<Disk>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_circle_traits<R>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,63 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_polygon_traits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_polygon_traits<R>}
\label{pageVisibility_complex_polygon_traitsRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is the predefined geometric traits class provided by
\cgal\ for use with disks whith type \ccc{CGAL::Polygon_2<R>}.
It uses the kernel geometric objects and predicates. The class is templated
with a representation class \ccc{R}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Visibility_complex_polygon_traits.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{typedef Bitangent_2<Disk> }{Bitangent_2; }{}
\ccTypedef{typedef R Rep;}{Representation type}
\ccGlue
\ccTypedef{typedef Point_2<R> Point_2;}{}
\ccGlue
\ccTypedef{typedef Segment_2<R> Segment_2;}{}
\ccGlue
\ccTypedef{typedef Polygon_2<R> Disk;}{Disk type}
\ccGlue
\ccTypedef{typedef Arc_2<Disk> Arc_2;}{}
\ccGlue
\ccTypedef{typedef Bitangent_2<Disk> Bitangent_2;}{}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{VisibilityComplexTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Arc_2<Disk>} \\
\ccRefIdfierPage{CGAL::Bitangent_2<Disk>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_circle_traits<R>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,63 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_segment_traits.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_segment_traits<R>}
\label{pageVisibility_complex_segment_traitsRef}
% ------------------------------------------------------------------------------
\ccDefinition
The class \ccRefName\ is the predefined geometric traits class provided by
\cgal\ for use with disks whith type \ccc{CGAL::Segment_2<R>}.
It uses the kernel geometric objects and predicates. The class is templated
with a representation class \ccc{R}.
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccInclude{CGAL/Visibility_complex_segment_traits.h}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{typedef Bitangent_2<Disk> }{Bitangent_2; }{}
\ccTypedef{typedef R Rep;}{Representation type}
\ccGlue
\ccTypedef{typedef Point_2<R> Point_2;}{}
\ccGlue
\ccTypedef{typedef Segment_2<R> Segment_2;}{}
\ccGlue
\ccTypedef{typedef Segment_2<R> Disk;}{Disk type}
\ccGlue
\ccTypedef{typedef Arc_2<Disk> Arc_2;}{}
\ccGlue
\ccTypedef{typedef Bitangent_2<Disk> Bitangent_2;}{}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccIsModel
\ccRefConceptPage{VisibilityComplexTraits}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccSeeAlso
\ccRefIdfierPage{CGAL::Arc_2<Disk>} \\
\ccRefIdfierPage{CGAL::Bitangent_2<Disk>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_point_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>} \\
\ccRefIdfierPage{CGAL::Visibility_complex_circle_traits<R>}
% ------------------------------------------------------------------------------
% +----------------------------------------------------------------------------+
\ccTagDefaults
\end{ccRefClass}
\ccRefPageEnd
% +----------------------------------------------------------------------------+

View File

@ -0,0 +1,40 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Visibility_complex_vertex_base.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\ccRefPageBegin
% +----------------------------------------------------------------------------+
\begin{ccRefClass}{Visibility_complex_vertex_base<Vc>}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccDefinition
The class \ccRefName\ is a model of the \ccc{VisibilityComplexVertex}
concept. \ccc{Vc} is an instantiation of a \ccc{VisibilityComplexAntichain}.
\ccInclude{CGAL/Visibility_complex_vertex_base.h}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccIsModel
\ccRefConceptPage{VisibilityComplexVertex}
% +----------------------------------------------------------------------------+
% +----------------------------------------------------------------------------+
\ccSeeAlso
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefIdfierPage{CGAL::Visibility_complex_items}\\
\ccRefIdfierPage{CGAL::Visibility_complex_edge_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_face_base<Vc>}
% +----------------------------------------------------------------------------+
\end{ccRefClass}

View File

@ -0,0 +1,6 @@
hds_optional.gif
hds_optional_small.gif
euler_face.gif
euler_vertex.gif
euler_center.gif
euler_loop.gif

View File

@ -0,0 +1,56 @@
% +------------------------------------------------------------------------+
% | Reference manual page: intro.tex
% +------------------------------------------------------------------------+
% | Last revision: 09.07.2002
% | Author : Pierre Angelier <Pierre.Angelier@ens.fr>
% | Maintainer: Laurent Rineau <Laurent.Rineau@ens.fr>
% | Package: Visibility_complex
% +------------------------------------------------------------------------+
\clearpage
\chapter{Visibility Complexes}
\label{chapterVisibilityComplexRef}
% +------------------------------------------------------------------------+
\section*{Summary}
\subsection*{Concepts}
\ccRefConceptPage{Bitangent}\\
\ccRefConceptPage{Arc}\\
\ccRefConceptPage{VisibilityComplexTraits}\\
\ccRefConceptPage{VisibilityComplexVertex}\\
\ccRefConceptPage{VisibilityComplexEdge}\\
\ccRefConceptPage{VisibilityComplexFace}\\
\ccRefConceptPage{VisibilityComplexItems}\\
\ccRefConceptPage{VisibilityComplex} \\
\ccRefConceptPage{VisibilityComplexAntichain}
\subsection*{Classes}
\ccRefIdfierPage{CGAL::Bitangent_base<Disk>}\\
\ccRefIdfierPage{CGAL::Bitangent_2<Disk>}\\
\ccRefIdfierPage{CGAL::Arc_2<Disk>}
\ccRefIdfierPage{CGAL::Visibility_complex_antichain<Gt,It>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_2<Gt,It>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_items}
\ccRefIdfierPage{CGAL::Visibility_complex_vertex_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_edge_base<Vc>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_face_base<Vc>}
\ccRefIdfierPage{CGAL::Visibility_complex_point_traits<R>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_segment_traits<R>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_polygon_traits<R>}\\
\ccRefIdfierPage{CGAL::Visibility_complex_circle_traits<R>}
\ccRefIdfierPage{CGAL::Shortest_path_point_traits<R,E>}\\
\ccRefIdfierPage{CGAL::Shortest_path_segment_traits<R,E>}\\
\ccRefIdfierPage{CGAL::Shortest_path_polygon_traits<R,E>}
\lcHtml{\subsection*{Links to the Reference Sections}}
%% EOF %%

View File

@ -0,0 +1,37 @@
% +------------------------------------------------------------------------+
% | CBP Reference Manual: main.tex
% +------------------------------------------------------------------------+
% | Automatically generated driver file for the reference manual chapter
% | of this package. Do not edit manually, you may loose your changes.
% +------------------------------------------------------------------------+
\input{Visibility_complex_ref/intro.tex}
\input{Visibility_complex_ref/Bitangent.tex}
\input{Visibility_complex_ref/Bitangent_base.tex}
\input{Visibility_complex_ref/Bitangent_2.tex}
\input{Visibility_complex_ref/Arc.tex}
\input{Visibility_complex_ref/Arc_2.tex}
\input{Visibility_complex_ref/VisibilityComplexTraits.tex}
\input{Visibility_complex_ref/Visibility_complex_point_traits.tex}
\input{Visibility_complex_ref/Visibility_complex_segment_traits.tex}
\input{Visibility_complex_ref/Visibility_complex_polygon_traits.tex}
\input{Visibility_complex_ref/Visibility_complex_circle_traits.tex}
\input{Visibility_complex_ref/VisibilityComplexVertex.tex}
\input{Visibility_complex_ref/Visibility_complex_vertex_base.tex}
\input{Visibility_complex_ref/VisibilityComplexEdge.tex}
\input{Visibility_complex_ref/Visibility_complex_edge_base.tex}
\input{Visibility_complex_ref/VisibilityComplexFace.tex}
\input{Visibility_complex_ref/Visibility_complex_face_base.tex}
\input{Visibility_complex_ref/VisibilityComplexItems.tex}
\input{Visibility_complex_ref/Visibility_complex_items.tex}
\input{Visibility_complex_ref/VisibilityComplexAntichain.tex}
\input{Visibility_complex_ref/Visibility_complex_antichain.tex}
\input{Visibility_complex_ref/VisibilityComplex.tex}
\input{Visibility_complex_ref/Visibility_complex.tex}
\input{Visibility_complex_ref/ShortestPathTraits.tex}
\input{Visibility_complex_ref/Shortest_path_point_traits.tex}
\input{Visibility_complex_ref/Shortest_path_segment_traits.tex}
\input{Visibility_complex_ref/Shortest_path_polygon_traits.tex}
\input{Visibility_complex_ref/Shortest_path_2.tex}
%% EOF

View File

@ -0,0 +1,80 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Bitangent_base.tex
% +------------------------------------------------------------------------+
% | 06.06.2000 Pierre Angelier
% | Package: Visibility_complex_2
% |
\RCSdef{\RCSBitangentBaseRev}{$Revision$}
\RCSdefDate{\RCSBitangentBaseDate}{$Date$}
% +------------------------------------------------------------------------+
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{Bitangent_base}
\label{pageVC_Bitangent_baseRef}
The \ccRefName\ concept defines the minimal requirement for a
\emph{combinatorial} bitangent, i.e. a bitangent with no underlying geometric
segment. The only information stored by the \ccRefName\ concept is the type and
the two disks defining a bitangent. The \ccc{Bitangent_2} concept will inherit
from \ccRefName\ . The only additional functionality the \ccc{Bitangent_2} will
provide are the constructors giving the coordinates of the bitangent's
endpoints. In other words the \ccc{Bitangent_2} concept will add geometric
information.
% ------------------------------------------------------------------------------
\ccTypes
\ccThree{Bitangent_base_2}{Disk_handle}{}
\ccThreeToTwo
\ccNestedType{Disk}{type of disks defining the bitangent. }
\ccGlue
\ccNestedType{Disk_handle}{handle to \ccc{Disk}.}
\ccGlue
\ccNestedType{Type}{enumerated type to specify the type of the bitangent. The
possible values are \ccc{LL,RR,RL} or \ccc{LR} respectively
for left-left,right-right,right-left and left-right
bitangents.}{}
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccThree{Disk_handle}{ b.source_object(); }{}
\ccThreeToTwo
\ccCreation
\ccCreationVariable{b}
\ccConstructor{Bitangent_base();}{default constructor.}
\ccGlue
\ccConstructor{Bitangent_base(Type t, Disk_handle source, Disk_handle target);}
{ Creates the combinatorial bitangent with type t directed from source to target. }
\ccGlue
% ------------------------------------------------------------------------------
% ------------------------------------------------------------------------------
\ccOperations
\ccTagFullDeclarations
\ccMethod{Disk_handle source_object(); const}
{returns a pointer to the disk that \ccVar\ leaves.}
\ccGlue
\ccMethod{Disk_handle target_object(); const}
{returns a pointer to the disk that \ccVar\ enters.}
\ccGlue
\ccMethod{Type type(); const}
{returns the type of the bitangent. }
\ccTagDefaults
% ------------------------------------------------------------------------------
\ccTagDefaults
\end{ccRefConcept}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,40 @@
#include <CGAL/basic.h>
#include <fstream>
#include <list>
#include <CGAL/Simple_cartesian.h>
#include <CEP/Visibility_complex/Shortest_path_segment_traits.h>
#include <CEP/Visibility_complex/Shortest_path_2.h>
// Number type used for input
typedef int NT;
// Number type used when computing distances
typedef double SNT;
typedef CGAL::Simple_cartesian<NT> R;
typedef CGAL::Shortest_path_segment_traits<R,SNT> Gt;
typedef Gt::Disk Segment;
typedef Gt::Point_2 Point;
int main()
{
// Reading segments from file
std::list<Segment> O;
std::ifstream ifs("segments");
std::istream_iterator<Segment> ifs_it(ifs),ifs_end;
std::copy(ifs_it,ifs_end,std::back_inserter(O));
// We want to ccompute the shortest path between p and q
Point p(0,0);
Point q(1000,800);
// Output the bitangents of the shortest path to cout
CGAL::shortest_path_2(O.begin(),O.end(),
p,q,
std::ostream_iterator<Segment>(cout , "\n"),
Gt());
return 0;
}

View File

@ -0,0 +1,174 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: bitangent.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Thu Apr 4 11:26:04 2002
%%For: angelier@mousse (Pierre Angelier)
%%BoundingBox: 0 0 397 212
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 212 moveto 0 0 lineto 397 0 lineto 397 212 lineto closepath clip newpath
-41.0 265.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
% Polyline
60.000 slw
gs clippath
6110 1121 m 6069 824 l 5154 951 l 5918 997 l 5195 1248 l cp
eoclip
n 1200 1650 m
6075 975 l gs col4 s gr gr
% arrowhead
n 5195 1248 m 5918 997 l 5154 951 l 5323 1079 l 5195 1248 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
6433 2849 m 6496 2556 l 5593 2362 l 6295 2667 l 5530 2655 l cp
eoclip
n 1575 1650 m
6450 2700 l gs col6 s gr gr
% arrowhead
n 5530 2655 m 6295 2667 l 5593 2362 l 5708 2540 l 5530 2655 l
cp gs col7 1.00 shd ef gr col6 s
% Polyline
gs clippath
6898 2606 m 6779 2331 l 5930 2697 l 6679 2538 l 6049 2972 l cp
eoclip
n 2475 4350 m
6825 2475 l gs col1 s gr gr
% arrowhead
n 6049 2972 m 6679 2538 l 5930 2697 l 6128 2775 l 6049 2972 l
cp gs col7 1.00 shd ef gr col1 s
/Times-Roman ff 360.00 scf sf
3750 1875 m
gs 1 -1 sc (RL) col6 sh gr
/Times-Roman ff 360.00 scf sf
4575 3825 m
gs 1 -1 sc (LL) col1 sh gr
/Times-Roman ff 360.00 scf sf
2775 1200 m
gs 1 -1 sc (RR) col4 sh gr
/Times-Roman ff 360.00 scf sf
2925 3225 m
gs 1 -1 sc (LR) col2 sh gr
30.000 slw
% Rotated Ellipse
gs
1800 3000 tr
-30.000 rot
n 0 0 900 1500 0 360 DrawEllipse 30.000 rot
gs col0 s gr
gr
% Polyline
60.000 slw
gs clippath
5592 1443 m 5377 1234 l 4733 1896 l 5364 1464 l 4948 2105 l cp
eoclip
n 2700 4200 m
5475 1350 l gs col2 s gr gr
% arrowhead
n 4948 2105 m 5364 1464 l 4733 1896 l 4945 1893 l 4948 2105 l
cp gs col7 1.00 shd ef gr col2 s
30.000 slw
% Ellipse
n 6300 1800 975 825 0 360 DrawEllipse gs col0 s gr
$F2psEnd
rs

View File

@ -0,0 +1,27 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 1 0 3 0 7 10 0 -1 0.000 1 0.0000 6300 1800 975 825 6300 1800 7275 1800
1 1 0 3 0 7 47 0 -1 0.000 1 0.5236 1800 3000 900 1500 1800 3000 2579 2550
2 1 0 5 2 7 40 0 -1 0.000 0 0 -1 1 0 2
2 0 5.00 300.00 600.00
2700 4200 5475 1350
2 1 0 5 4 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 5.00 300.00 600.00
1200 1650 6075 975
2 1 0 5 6 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 5.00 300.00 600.00
1575 1650 6450 2700
2 1 0 5 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 5.00 300.00 600.00
2475 4350 6825 2475
4 0 6 50 0 0 24 0.0000 4 240 465 3750 1875 RL\001
4 0 1 50 0 0 24 0.0000 4 240 450 4575 3825 LL\001
4 0 4 50 0 0 24 0.0000 4 240 480 2775 1200 RR\001
4 0 2 50 0 0 24 0.0000 4 240 465 2925 3225 LR\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,252 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: configuration.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3d
%%CreationDate: Sun May 12 23:53:59 2002
%%For: angelier@studio (Pierre Angelier)
%%BoundingBox: 0 0 640 359
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 359 moveto 0 0 lineto 640 0 lineto 640 359 lineto closepath clip newpath
-75.6 434.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
15.000 slw
% Ellipse
n 9525 3450 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 10650 6150 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 10350 4800 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 11475 1725 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 9375 6075 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 9375 7050 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8100 6075 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8100 7050 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8100 3075 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8775 4650 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 11025 3300 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 11745 4628 150 150 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 1350 3000 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 2025 4575 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 2775 3375 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 4275 3225 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 5025 4725 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 3900 6075 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 3600 4725 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 4725 1650 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 1350 6000 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 2625 6000 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 2625 6975 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 1350 6975 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Polyline
30.000 slw
n 8175 5940 m
9360 6210 l gs col0 s gr
% Polyline
n 9255 6930 m
9525 6120 l gs col0 s gr
% Polyline
n 8145 6900 m
9360 7200 l gs col0 s gr
% Polyline
n 7965 6960 m
8250 6105 l gs col0 s gr
% Polyline
n 8685 4530 m
9645 3540 l gs col0 s gr
% Polyline
n 9570 3285 m
11010 3450 l gs col0 s gr
% Polyline
n 10920 3165 m
11610 1800 l gs col0 s gr
% Polyline
n 8805 4500 m
10335 4950 l gs col0 s gr
% Polyline
n 10500 4785 m
10515 6090 l gs col0 s gr
% Polyline
n 10575 6000 m
11880 4718 l gs col0 s gr
% Polyline
n 11610 4673 m
11175 3225 l gs col0 s gr
% Polyline
n 2775 3375 m
4275 3225 l gs col0 s gr
% Polyline
n 4275 3225 m
4725 1575 l gs col0 s gr
% Polyline
n 2025 4575 m
2775 3375 l gs col0 s gr
% Polyline
n 2025 4575 m
3600 4725 l gs col0 s gr
% Polyline
n 3600 4725 m
3900 6075 l gs col0 s gr
% Polyline
n 3900 6075 m
5025 4725 l gs col0 s gr
% Polyline
n 5025 4725 m
4275 3225 l gs col0 s gr
% Polyline
n 1350 6975 m
1350 6000 l gs col0 s gr
% Polyline
n 1350 6000 m
2625 6000 l gs col0 s gr
% Polyline
n 2625 6000 m
2625 6975 l gs col0 s gr
% Polyline
n 2625 6975 m
1425 6975 l gs col0 s gr
/Times-Roman ff 450.00 scf sf
2475 1650 m
gs 1 -1 sc (S) col0 sh gr
/Times-Roman ff 450.00 scf sf
9413 1553 m
gs 1 -1 sc (T) col0 sh gr
$F2psEnd
rs

View File

@ -0,0 +1,79 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 9525 3450 150 150 9525 3450 9675 3450
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 10650 6150 150 150 10650 6150 10800 6150
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 10350 4800 150 150 10350 4800 10500 4800
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 11475 1725 150 150 11475 1725 11625 1725
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 9375 6075 150 150 9375 6075 9525 6075
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 9375 7050 150 150 9375 7050 9525 7050
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 8100 6075 150 150 8100 6075 8250 6075
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 8100 7050 150 150 8100 7050 8250 7050
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 8100 3075 150 150 8100 3075 8250 3075
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 8775 4650 150 150 8775 4650 8925 4650
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 11025 3300 150 150 11025 3300 11175 3300
1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 11745 4628 150 150 11745 4628 11895 4628
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1350 3000 75 75 1350 3000 1425 3000
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2025 4575 75 75 2025 4575 2100 4575
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2775 3375 75 75 2775 3375 2850 3375
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 4275 3225 75 75 4275 3225 4350 3225
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 5025 4725 75 75 5025 4725 5100 4725
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3900 6075 75 75 3900 6075 3975 6075
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3600 4725 75 75 3600 4725 3675 4725
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 4725 1650 75 75 4725 1650 4800 1650
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1350 6000 75 75 1350 6000 1425 6000
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2625 6000 75 75 2625 6000 2700 6000
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2625 6975 75 75 2625 6975 2700 6975
1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1350 6975 75 75 1350 6975 1425 6975
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
8175 5940 9360 6210
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
9255 6930 9525 6120
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
8145 6900 9360 7200
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7965 6960 8250 6105
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
8685 4530 9645 3540
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
9570 3285 11010 3450
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
10920 3165 11610 1800
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
8805 4500 10335 4950
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
10500 4785 10515 6090
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
10575 6000 11880 4718
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
11610 4673 11175 3225
2 1 0 3 0 7 50 0 -1 0.000 0 0 7 0 0 2
2775 3375 4275 3225
2 1 0 3 0 7 50 0 -1 0.000 0 0 7 0 0 2
4275 3225 4725 1575
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2025 4575 2775 3375
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2025 4575 3600 4725
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
3600 4725 3900 6075
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
3900 6075 5025 4725
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
5025 4725 4275 3225
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
1350 6975 1350 6000
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
1350 6000 2625 6000
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2625 6000 2625 6975
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2625 6975 1425 6975
4 0 0 50 0 0 30 0.0000 4 300 240 2475 1650 S\001
4 0 0 50 0 0 30 0.0000 4 300 285 9413 1553 T\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,223 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: constraint-edge.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Tue May 14 11:50:41 2002
%%For: angelier@mousse (Pierre Angelier)
%%BoundingBox: 0 0 389 230
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 230 moveto 0 0 lineto 389 0 lineto 389 230 lineto closepath clip newpath
-76.0 356.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
15.000 slw
% Ellipse
n 2325 3900 975 1350 0 360 DrawEllipse gs col0 s gr
% Polyline
gs clippath
7630 2802 m 7538 2724 l 7309 2995 l 7549 2805 l 7401 3072 l cp
eoclip
n 6750 3750 m
7575 2775 l gs col0 s gr gr
% arrowhead
n 7401 3072 m 7549 2805 l 7309 2995 l 7393 2988 l 7401 3072 l
cp gs col7 1.00 shd ef gr col0 s
% Ellipse
n 5571 3024 1875 900 0 360 DrawEllipse gs col0 s gr
% Polyline
30.000 slw
gs clippath
6794 3829 m 6733 3660 l 6220 3843 l 6675 3777 l 6281 4013 l cp
eoclip
n 2550 5250 m
6750 3750 l gs col1 s gr gr
% arrowhead
n 6281 4013 m 6675 3777 l 6220 3843 l 6335 3898 l 6281 4013 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
15.000 slw
gs clippath
6496 2884 m 6389 2938 l 6548 3256 l 6468 2961 l 6655 3202 l cp
eoclip
n 6825 3675 m
6450 2925 l gs col0 s gr gr
% arrowhead
n 6655 3202 m 6468 2961 l 6548 3256 l 6575 3175 l 6655 3202 l
cp gs col7 1.00 shd ef gr col0 s
% Polyline
gs clippath
5406 3163 m 5365 3276 l 5697 3399 l 5437 3239 l 5739 3286 l cp
eoclip
n 6825 3750 m
5400 3225 l gs col0 s gr gr
% arrowhead
n 5739 3286 m 5437 3239 l 5697 3399 l 5662 3321 l 5739 3286 l
cp gs col7 1.00 shd ef gr col0 s
% Polyline
gs clippath
5226 4407 m 5297 4310 l 5010 4102 l 5218 4327 l 4940 4199 l cp
eoclip
n 4425 3750 m
5250 4350 l gs col12 s gr gr
% arrowhead
n 4940 4199 m 5218 4327 l 5010 4102 l 5023 4185 l 4940 4199 l
cp gs col12 1.00 shd ef gr col12 s
% Polyline
7.500 slw
gs clippath
4153 4632 m 4093 4637 l 4108 4821 l 4127 4670 l 4168 4817 l cp
eoclip
n 2625 5850 m 4200 5625 l
4125 4650 l gs col0 s gr gr
% arrowhead
n 4168 4817 m 4127 4670 l 4108 4821 l 4136 4789 l 4168 4817 l
cp gs 0.00 setgray ef gr col0 s
% Polyline
2 slj
15.000 slw
gs clippath
5491 2625 m 5572 2714 l 5834 2476 l 5572 2633 l 5754 2387 l cp
eoclip
n 7718 2660 m 7716 2658 l 7711 2655 l 7702 2648 l 7689 2638 l 7672 2625 l
7651 2610 l 7627 2592 l 7601 2573 l 7573 2553 l 7546 2534 l
7519 2515 l 7493 2497 l 7468 2480 l 7444 2465 l 7421 2451 l
7399 2438 l 7378 2426 l 7357 2415 l 7336 2404 l 7315 2395 l
7293 2385 l 7273 2377 l 7252 2368 l 7230 2360 l 7208 2352 l
7184 2344 l 7160 2337 l 7134 2329 l 7108 2322 l 7081 2315 l
7053 2308 l 7024 2301 l 6995 2295 l 6966 2290 l 6936 2285 l
6906 2280 l 6876 2276 l 6846 2272 l 6816 2269 l 6787 2266 l
6758 2264 l 6729 2262 l 6700 2261 l 6672 2260 l 6643 2260 l
6616 2260 l 6590 2261 l 6562 2262 l 6534 2263 l 6506 2265 l
6477 2267 l 6447 2270 l 6417 2273 l 6387 2277 l 6356 2281 l
6326 2285 l 6295 2290 l 6264 2295 l 6234 2301 l 6204 2307 l
6175 2313 l 6146 2320 l 6118 2326 l 6091 2333 l 6065 2340 l
6040 2347 l 6016 2355 l 5994 2362 l 5972 2369 l 5951 2377 l
5931 2385 l 5905 2396 l 5881 2406 l 5858 2418 l 5835 2431 l
5812 2444 l 5788 2459 l 5765 2476 l 5740 2494 l 5715 2513 l
5689 2534 l 5663 2555 l 5637 2577 l 5613 2597 l 5592 2616 l
5574 2632 l
5543 2660 l gs col0 s gr gr
% arrowhead
0 slj
n 5754 2387 m 5572 2633 l 5834 2476 l 5750 2472 l 5754 2387 l
cp gs 0.00 setgray ef gr col0 s
/Times-Roman ff 300.00 scf sf
6975 4200 m
gs 1 -1 sc (e) col4 sh gr
/Times-Roman ff 300.00 scf sf
3750 4200 m
gs 1 -1 sc (face\(e\)) col12 sh gr
/Times-Roman ff 300.00 scf sf
1275 5925 m
gs 1 -1 sc (constraint) col0 sh gr
30.000 slw
% Ellipse
n 6825 3750 106 106 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 2550 5250 106 106 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
$F2psEnd
rs

View File

@ -0,0 +1,38 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 2325 3900 975 1350 2325 3900 3300 5250
1 3 0 3 4 4 10 0 20 0.000 1 0.0000 2550 5250 106 106 2550 5250 2656 5250
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 5571 3024 1875 900 5571 3024 7446 3924
1 3 0 3 4 4 10 0 20 0.000 1 0.0000 6825 3750 106 106 6825 3750 6931 3750
2 1 0 3 1 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 3.00 180.00 360.00
2550 5250 6750 3750
2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 2.00 120.00 240.00
6825 3675 6450 2925
2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 2.00 120.00 240.00
6825 3750 5400 3225
2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 2.00 120.00 240.00
6750 3750 7575 2775
2 1 0 2 12 7 50 0 -1 0.000 0 0 7 1 0 2
2 1 2.00 120.00 240.00
4425 3750 5250 4350
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
2 1 1.00 60.00 120.00
2625 5850 4200 5625 4125 4650
3 0 0 2 0 7 50 0 -1 0.000 0 1 0 5
2 1 2.00 120.00 240.00
7718 2660 7343 2360 6668 2210 5843 2360 5543 2660
0.000 1.000 1.000 1.000 0.000
4 0 4 50 0 0 20 0.0000 4 150 135 6975 4200 e\001
4 0 12 50 0 0 20 0.0000 4 255 855 3750 4200 face(e)\001
4 0 0 50 0 0 20 0.0000 4 210 1215 1275 5925 constraint\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,261 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: design.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Mon May 13 16:29:27 2002
%%For: angelier@mousse (Pierre Angelier)
%%BoundingBox: 0 0 620 305
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 305 moveto 0 0 lineto 620 0 lineto 620 305 lineto closepath clip newpath
-66.0 335.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
% Polyline
15.000 slw
n 3750 4800 m 5700 4800 l 5700 5250 l 3750 5250 l
cp gs col0 s gr
% Polyline
n 6525 4800 m 8475 4800 l 8475 5250 l 6525 5250 l
cp gs col0 s gr
% Polyline
n 1125 4425 m 11400 4425 l 11400 5550 l 1125 5550 l
cp gs col0 s gr
/Times-Roman ff 300.00 scf sf
3975 5100 m
gs 1 -1 sc (Bitangent_2) col1 sh gr
/Times-Roman ff 300.00 scf sf
7050 5100 m
gs 1 -1 sc (Arc_2) col4 sh gr
/Times-Roman ff 300.00 scf sf
1275 4725 m
gs 1 -1 sc (Traits) col0 sh gr
/Times-Roman ff 180.00 scf sf
1350 5025 m
gs 1 -1 sc (Geometric types) col0 sh gr
/Times-Roman ff 180.00 scf sf
1350 5325 m
gs 1 -1 sc (Predicates) col0 sh gr
% Polyline
n 3750 3075 m 5700 3075 l 5700 3525 l 3750 3525 l
cp gs col0 s gr
% Polyline
n 6450 3075 m 8400 3075 l 8400 3525 l 6450 3525 l
cp gs col0 s gr
% Polyline
n 9150 3075 m 11100 3075 l 11100 3525 l 9150 3525 l
cp gs col0 s gr
% Polyline
n 1125 2700 m 11400 2700 l 11400 3825 l 1125 3825 l
cp gs col0 s gr
/Times-Roman ff 300.00 scf sf
6825 3375 m
gs 1 -1 sc (Edge_base) col4 sh gr
/Times-Roman ff 300.00 scf sf
9525 3375 m
gs 1 -1 sc (Face_base) col12 sh gr
/Times-Roman ff 300.00 scf sf
3975 3375 m
gs 1 -1 sc (Vertex_base) col1 sh gr
/Times-Roman ff 300.00 scf sf
1275 3000 m
gs 1 -1 sc (Items) col0 sh gr
/Times-Roman ff 180.00 scf sf
1350 3600 m
gs 1 -1 sc (contains user data and functions) col0 sh gr
/Times-Roman ff 180.00 scf sf
1350 3300 m
gs 1 -1 sc (Stores actual information) col0 sh gr
% Polyline
n 3750 1200 m 5700 1200 l 5700 1650 l 3750 1650 l
cp gs col0 s gr
% Polyline
n 6450 1200 m 8400 1200 l 8400 1650 l 6450 1650 l
cp gs col0 s gr
% Polyline
n 9150 1200 m 11100 1200 l 11100 1650 l 9150 1650 l
cp gs col0 s gr
% Polyline
gs clippath
9165 1335 m 9165 1215 l 8810 1215 l 9110 1275 l 8810 1335 l cp
eoclip
n 8400 1275 m
9150 1275 l gs col4 s gr gr
% arrowhead
n 8810 1335 m 9110 1275 l 8810 1215 l 8870 1275 l 8810 1335 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
6465 1335 m 6465 1215 l 6110 1215 l 6410 1275 l 6110 1335 l cp
eoclip
n 5700 1275 m
6450 1275 l gs col4 s gr gr
% arrowhead
n 6110 1335 m 6410 1275 l 6110 1215 l 6170 1275 l 6110 1335 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
5685 1515 m 5685 1635 l 6040 1635 l 5740 1575 l 6040 1515 l cp
eoclip
n 6450 1575 m
5700 1575 l gs col4 s gr gr
% arrowhead
n 6040 1515 m 5740 1575 l 6040 1635 l 5980 1575 l 6040 1515 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
8385 1515 m 8385 1635 l 8740 1635 l 8440 1575 l 8740 1515 l cp
eoclip
n 9150 1575 m
8400 1575 l gs col4 s gr gr
% arrowhead
n 8740 1515 m 8440 1575 l 8740 1635 l 8680 1575 l 8740 1515 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
10065 1215 m 10185 1215 l 10185 860 l 10125 1160 l 10065 860 l cp
4665 1215 m 4785 1215 l 4785 860 l 4725 1160 l 4665 860 l cp
eoclip
n 4725 1200 m 4725 675 l 10125 675 l
10125 1200 l gs col4 s gr gr
% arrowhead
n 4665 860 m 4725 1160 l 4785 860 l 4725 920 l 4665 860 l
cp gs col7 1.00 shd ef gr col4 s
% arrowhead
n 10065 860 m 10125 1160 l 10185 860 l 10125 920 l 10065 860 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
n 1125 525 m 11400 525 l 11400 1950 l 1125 1950 l
cp gs col0 s gr
/Times-Roman ff 300.00 scf sf
4275 1500 m
gs 1 -1 sc (Vertex) col1 sh gr
/Times-Roman ff 300.00 scf sf
1275 900 m
gs 1 -1 sc (Visibility_complex) col0 sh gr
/Times-Roman ff 300.00 scf sf
9825 1500 m
gs 1 -1 sc (Face) col12 sh gr
/Times-Roman ff 300.00 scf sf
7050 1500 m
gs 1 -1 sc (Edge) col4 sh gr
/Times-Roman ff 180.00 scf sf
1350 1425 m
gs 1 -1 sc (defines handles and iterators) col0 sh gr
% Polyline
30.000 slw
n 7425 1650 m
7425 3075 l gs col0 s gr
% Polyline
n 10125 1650 m
10125 3075 l gs col0 s gr
% Polyline
n 4725 1650 m
4725 3075 l gs col0 s gr
% Polyline
n 4725 3525 m
4725 4800 l gs col0 s gr
% Polyline
n 7425 3525 m
7425 4800 l gs col0 s gr
% Polyline
n 9900 2250 m 10350 2250 l 10125 2475 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 4537 3975 m 4987 3975 l 4762 4200 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 7200 3975 m 7650 3975 l 7425 4200 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 4537 2250 m 4987 2250 l 4762 2475 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 7181 2269 m 7631 2269 l 7406 2494 l
cp gs col7 1.00 shd ef gr gs col0 s gr
$F2psEnd
rs

View File

@ -0,0 +1,89 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
6 1050 4350 11475 5625
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
3750 4800 5700 4800 5700 5250 3750 5250 3750 4800
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6525 4800 8475 4800 8475 5250 6525 5250 6525 4800
2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
1125 4425 11400 4425 11400 5550 1125 5550 1125 4425
4 0 1 50 0 0 20 0.0000 4 270 1485 3975 5100 Bitangent_2\001
4 0 4 50 0 0 20 0.0000 4 240 750 7050 5100 Arc_2\001
4 0 0 50 0 0 20 0.0000 4 210 720 1275 4725 Traits\001
4 0 0 50 0 0 12 0.0000 4 180 1155 1350 5025 Geometric types\001
4 0 0 50 0 0 12 0.0000 4 135 720 1350 5325 Predicates\001
-6
6 1050 2625 11475 3900
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
3750 3075 5700 3075 5700 3525 3750 3525 3750 3075
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6450 3075 8400 3075 8400 3525 6450 3525 6450 3075
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
9150 3075 11100 3075 11100 3525 9150 3525 9150 3075
2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
1125 2700 11400 2700 11400 3825 1125 3825 1125 2700
4 0 4 50 0 0 20 0.0000 4 270 1305 6825 3375 Edge_base\001
4 0 12 50 0 0 20 0.0000 4 240 1260 9525 3375 Face_base\001
4 0 1 50 0 0 20 0.0000 4 240 1515 3975 3375 Vertex_base\001
4 0 0 50 0 0 20 0.0000 4 210 690 1275 3000 Items\001
4 0 0 50 0 0 12 0.0000 4 135 2265 1350 3600 contains user data and functions\001
4 0 0 50 0 0 12 0.0000 4 135 1770 1350 3300 Stores actual information\001
-6
6 1050 450 11475 2025
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
3750 1200 5700 1200 5700 1650 3750 1650 3750 1200
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6450 1200 8400 1200 8400 1650 6450 1650 6450 1200
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
9150 1200 11100 1200 11100 1650 9150 1650 9150 1200
2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
8400 1275 9150 1275
2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
5700 1275 6450 1275
2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
6450 1575 5700 1575
2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
9150 1575 8400 1575
2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 1 4
2 0 2.00 120.00 240.00
2 0 2.00 120.00 240.00
4725 1200 4725 675 10125 675 10125 1200
2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
1125 525 11400 525 11400 1950 1125 1950 1125 525
4 0 1 50 0 0 20 0.0000 4 210 825 4275 1500 Vertex\001
4 0 0 50 0 0 20 0.0000 4 270 2370 1275 900 Visibility_complex\001
4 0 12 50 0 0 20 0.0000 4 210 570 9825 1500 Face\001
4 0 4 50 0 0 20 0.0000 4 270 615 7050 1500 Edge\001
4 0 0 50 0 0 12 0.0000 4 135 2010 1350 1425 defines handles and iterators\001
-6
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7425 1650 7425 3075
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
10125 1650 10125 3075
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
4725 1650 4725 3075
2 3 0 3 0 7 10 0 20 0.000 0 0 -1 0 0 4
9900 2250 10350 2250 10125 2475 9900 2250
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
4725 3525 4725 4800
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7425 3525 7425 4800
2 3 0 3 0 7 10 0 20 0.000 0 0 -1 0 0 4
4537 3975 4987 3975 4762 4200 4537 3975
2 3 0 3 0 7 10 0 20 0.000 0 0 -1 0 0 4
7200 3975 7650 3975 7425 4200 7200 3975
2 3 0 3 0 7 10 0 20 0.000 0 0 -1 0 0 4
4537 2250 4987 2250 4762 2475 4537 2250
2 3 0 3 0 7 10 0 20 0.000 0 0 -1 0 0 4
7181 2269 7631 2269 7406 2494 7181 2269

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,272 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: edge-face.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Mon May 13 15:28:16 2002
%%For: angelier@mousse (Pierre Angelier)
%%BoundingBox: 0 0 799 237
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 237 moveto 0 0 lineto 799 0 lineto 799 237 lineto closepath clip newpath
-21.0 299.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
15.000 slw
% Ellipse
n 3675 2475 450 675 0 360 DrawEllipse gs col0 s gr
% Polyline
gs clippath
10681 2828 m 10647 2713 l 10307 2813 l 10612 2786 l 10341 2928 l cp
eoclip
n 8625 3375 m
10650 2775 l gs col1 s gr gr
% arrowhead
n 10341 2928 m 10612 2786 l 10307 2813 l 10381 2854 l 10341 2928 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
12899 3361 m 12929 3245 l 12586 3156 l 12862 3290 l 12556 3272 l cp
eoclip
n 10875 2775 m
12900 3300 l gs col1 s gr gr
% arrowhead
n 12556 3272 m 12862 3290 l 12586 3156 l 12629 3229 l 12556 3272 l
cp gs col7 1.00 shd ef gr col1 s
% Ellipse
n 6300 3075 675 1125 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 1050 3375 675 975 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 12975 2175 675 1125 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 10800 3450 450 675 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8475 2400 675 975 0 360 DrawEllipse gs col0 s gr
% Polyline
30.000 slw
gs clippath
12315 2490 m 12315 2310 l 11771 2310 l 12221 2400 l 11771 2490 l cp
eoclip
n 9150 2400 m
12300 2400 l gs col12 s gr gr
% arrowhead
n 11771 2490 m 12221 2400 l 11771 2310 l 11861 2400 l 11771 2490 l
cp gs col7 1.00 shd ef gr col12 s
% Polyline
gs clippath
10440 3090 m 10440 2910 l 9896 2910 l 10346 3000 l 9896 3090 l cp
eoclip
n 9000 3000 m
10425 3000 l gs col12 s gr gr
% arrowhead
n 9896 3090 m 10346 3000 l 9896 2910 l 9986 3000 l 9896 3090 l
cp gs col7 1.00 shd ef gr col12 s
% Polyline
15.000 slw
gs clippath
3447 3136 m 3481 3021 l 3140 2922 l 3412 3064 l 3107 3037 l cp
eoclip
n 1125 2400 m
3450 3075 l gs col1 s gr gr
% arrowhead
n 3107 3037 m 3412 3064 l 3140 2922 l 3181 2997 l 3107 3037 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
6113 2073 m 6063 1964 l 5741 2113 l 6039 2042 l 5792 2222 l cp
eoclip
n 3975 3000 m
6075 2025 l gs col1 s gr gr
% arrowhead
n 5792 2222 m 6039 2042 l 5741 2113 l 5821 2143 l 5792 2222 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
30.000 slw
gs clippath
3240 2790 m 3240 2610 l 2696 2610 l 3146 2700 l 2696 2790 l cp
eoclip
n 1500 2700 m
3225 2700 l gs col12 s gr gr
% arrowhead
n 2696 2790 m 3146 2700 l 2696 2610 l 2786 2700 l 2696 2790 l
cp gs col7 1.00 shd ef gr col12 s
% Polyline
gs clippath
5640 2790 m 5640 2610 l 5096 2610 l 5546 2700 l 5096 2790 l cp
eoclip
n 4125 2700 m
5625 2700 l gs col12 s gr gr
% arrowhead
n 5096 2790 m 5546 2700 l 5096 2610 l 5186 2700 l 5096 2790 l
cp gs col7 1.00 shd ef gr col12 s
% Polyline
gs clippath
5715 3540 m 5715 3360 l 5171 3360 l 5621 3450 l 5171 3540 l cp
eoclip
n 1725 3450 m
5700 3450 l gs col12 s gr gr
% arrowhead
n 5171 3540 m 5621 3450 l 5171 3360 l 5261 3450 l 5171 3540 l
cp gs col7 1.00 shd ef gr col12 s
/Times-Roman ff 300.00 scf sf
2175 2475 m
gs 1 -1 sc (ul\(e\)) col12 sh gr
/Times-Roman ff 360.00 scf sf
2850 4875 m
gs 1 -1 sc (Positive edge) col0 sh gr
% Polyline
gs clippath
12540 3090 m 12540 2910 l 11996 2910 l 12446 3000 l 11996 3090 l cp
eoclip
n 11175 3000 m
12525 3000 l gs col12 s gr gr
% arrowhead
n 11996 3090 m 12446 3000 l 11996 2910 l 12086 3000 l 11996 3090 l
cp gs col7 1.00 shd ef gr col12 s
/Times-Roman ff 300.00 scf sf
4350 2475 m
gs 1 -1 sc (ur\(e\)) col12 sh gr
/Times-Roman ff 300.00 scf sf
3300 3825 m
gs 1 -1 sc (dl\(e\)) col12 sh gr
/Times-Roman ff 300.00 scf sf
3600 2925 m
gs 1 -1 sc (e) col4 sh gr
/Times-Roman ff 360.00 scf sf
9825 4875 m
gs 1 -1 sc (Negative edge) col0 sh gr
/Times-Roman ff 300.00 scf sf
10725 3150 m
gs 1 -1 sc (e) col4 sh gr
/Times-Roman ff 300.00 scf sf
10350 2175 m
gs 1 -1 sc (ul\(e\)) col12 sh gr
/Times-Roman ff 300.00 scf sf
9300 3450 m
gs 1 -1 sc (dl\(e\)) col12 sh gr
/Times-Roman ff 300.00 scf sf
11400 3450 m
gs 1 -1 sc (dr\(e\)) col12 sh gr
15.000 slw
% Ellipse
n 10650 2775 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 10950 2775 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 3450 3075 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 3975 3000 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
$F2psEnd
rs

View File

@ -0,0 +1,59 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 3675 2475 450 675 3675 2475 4125 3150
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 3450 3075 75 75 3450 3075 3525 3075
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 3975 3000 75 75 3975 3000 4050 3000
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 6300 3075 675 1125 6300 3075 6975 4200
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 1050 3375 675 975 1050 3375 1725 4350
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 12975 2175 675 1125 12975 2175 13650 3300
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 10800 3450 450 675 10800 3450 11250 4125
1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 8475 2400 675 975 8475 2400 9150 3375
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 10650 2775 75 75 10650 2775 10725 2775
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 10950 2775 75 75 10950 2775 11025 2775
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
1125 2400 3450 3075
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
3975 3000 6075 2025
2 1 0 3 12 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
1500 2700 3225 2700
2 1 0 3 12 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
4125 2700 5625 2700
2 1 0 3 12 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
1725 3450 5700 3450
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
8625 3375 10650 2775
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
10875 2775 12900 3300
2 1 0 3 12 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
9150 2400 12300 2400
2 1 0 3 12 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
11175 3000 12525 3000
2 1 0 3 12 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
9000 3000 10425 3000
4 0 12 50 0 0 20 0.0000 4 255 585 2175 2475 ul(e)\001
4 0 12 50 0 0 20 0.0000 4 255 600 4350 2475 ur(e)\001
4 0 12 50 0 0 20 0.0000 4 255 585 3300 3825 dl(e)\001
4 0 0 50 0 0 24 0.0000 4 315 1950 2850 4875 Positive edge\001
4 0 4 50 0 0 20 0.0000 4 150 135 3600 2925 e\001
4 0 0 50 0 0 24 0.0000 4 315 2100 9825 4875 Negative edge\001
4 0 4 50 0 0 20 0.0000 4 150 135 10725 3150 e\001
4 0 12 50 0 0 20 0.0000 4 255 585 10350 2175 ul(e)\001
4 0 12 50 0 0 20 0.0000 4 255 585 9300 3450 dl(e)\001
4 0 12 50 0 0 20 0.0000 4 255 600 11400 3450 dr(e)\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -0,0 +1,273 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: edge-vertex.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Mon May 13 13:37:05 2002
%%For: angelier@mousse (Pierre Angelier)
%%BoundingBox: 0 0 665 192
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 192 moveto 0 0 lineto 665 0 lineto 665 192 lineto closepath clip newpath
-56.0 469.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
% Polyline
7.500 slw
gs clippath
2580 7110 m 2520 7110 l 2520 7295 l 2550 7145 l 2580 7295 l cp
eoclip
n 1575 7575 m 1575 7800 l 2550 7800 l
2550 7125 l gs col0 s gr gr
% arrowhead
n 2580 7295 m 2550 7145 l 2520 7295 l 2550 7265 l 2580 7295 l
cp gs col7 1.00 shd ef gr col0 s
% Polyline
gs clippath
5872 6425 m 5816 6446 l 5881 6619 l 5857 6469 l 5937 6598 l cp
eoclip
n 5700 7275 m 5700 7050 l 6075 7050 l
5850 6450 l gs col0 s gr gr
% arrowhead
n 5937 6598 m 5857 6469 l 5881 6619 l 5899 6581 l 5937 6598 l
cp gs col7 1.00 shd ef gr col0 s
/Times-Roman ff 195.00 scf sf
5070 7455 m
gs 1 -1 sc (ccw_target_edge\(v\)) col4 sh gr
/Times-Roman ff 195.00 scf sf
3000 5400 m
gs 1 -1 sc (ccw_source_edge\(v\)) col4 sh gr
/Times-Roman ff 195.00 scf sf
3375 6225 m
gs 1 -1 sc (cw_target_edge\(v\)) col4 sh gr
/Times-Roman ff 195.00 scf sf
945 7440 m
gs 1 -1 sc (cw_source_edge\(v\)) col4 sh gr
% Polyline
30.000 slw
gs clippath
10215 4664 m 10044 4607 l 9872 5123 l 10100 4725 l 10043 5180 l cp
eoclip
n 9525 6450 m
10125 4650 l gs col1 s gr gr
% arrowhead
n 10043 5180 m 10100 4725 l 9872 5123 l 9986 5066 l 10043 5180 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
12004 6670 m 11971 6493 l 11436 6594 l 11895 6600 l 11469 6771 l cp
eoclip
n 9108 7125 m
11973 6585 l gs col1 s gr gr
% arrowhead
n 11469 6771 m 11895 6600 l 11436 6594 l 11541 6666 l 11469 6771 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
7.500 slw
gs clippath
2973 6954 m 3000 7008 l 3165 6925 l 3018 6966 l 3138 6872 l cp
eoclip
n 3825 5475 m 3825 5850 l 3300 5850 l 3300 6675 l 3300 6825 l
3000 6975 l gs col0 s gr gr
% arrowhead
n 3138 6872 m 3018 6966 l 3165 6925 l 3125 6912 l 3138 6872 l
cp gs col7 1.00 shd ef gr col0 s
% Polyline
gs clippath
5193 6477 m 5186 6418 l 5002 6440 l 5155 6452 l 5009 6500 l cp
eoclip
n 3975 6300 m 3975 6600 l
5175 6450 l gs col0 s gr gr
% arrowhead
n 5009 6500 m 5155 6452 l 5002 6440 l 5035 6466 l 5009 6500 l
cp gs col7 1.00 shd ef gr col0 s
% Polyline
30.000 slw
gs clippath
5701 6655 m 5668 6478 l 5133 6579 l 5592 6585 l 5166 6756 l cp
eoclip
n 2805 7110 m
5670 6570 l gs col1 s gr gr
% arrowhead
n 5166 6756 m 5592 6585 l 5133 6579 l 5238 6651 l 5166 6756 l
cp gs col7 1.00 shd ef gr col1 s
% Ellipse
n 9009 6239 525 900 0 360 DrawEllipse gs col0 s gr
% Rotated Ellipse
gs
5250 5775 tr
-30.000 rot
n 0 0 525 900 0 360 DrawEllipse 30.000 rot
gs col0 s gr
gr
% Ellipse
n 2700 6225 525 900 0 360 DrawEllipse gs col0 s gr
% Polyline
2 slj
15.000 slw
gs clippath
9328 6132 m 9268 6137 l 9287 6380 l 9306 6229 l 9346 6376 l cp
eoclip
n 8625 6375 m 8626 6379 l 8629 6386 l 8633 6400 l 8640 6419 l 8648 6443 l
8658 6470 l 8668 6499 l 8678 6528 l 8688 6556 l 8697 6582 l
8706 6606 l 8714 6627 l 8722 6647 l 8729 6665 l 8736 6682 l
8743 6697 l 8750 6713 l 8758 6729 l 8766 6745 l 8774 6762 l
8783 6778 l 8792 6794 l 8802 6809 l 8812 6824 l 8822 6839 l
8833 6853 l 8844 6866 l 8854 6878 l 8865 6889 l 8876 6899 l
8886 6908 l 8897 6916 l 8908 6923 l 8918 6929 l 8930 6934 l
8942 6938 l 8954 6942 l 8967 6945 l 8981 6946 l 8995 6947 l
9009 6946 l 9024 6944 l 9038 6941 l 9053 6937 l 9067 6931 l
9081 6924 l 9094 6917 l 9107 6908 l 9120 6898 l 9131 6887 l
9143 6876 l 9155 6864 l 9167 6850 l 9179 6835 l 9191 6818 l
9203 6801 l 9215 6782 l 9226 6762 l 9237 6742 l 9248 6721 l
9258 6700 l 9267 6679 l 9275 6658 l 9283 6637 l 9289 6616 l
9295 6596 l 9300 6575 l 9304 6556 l 9307 6537 l 9310 6518 l
9312 6497 l 9313 6475 l 9314 6451 l 9314 6426 l 9314 6398 l
9313 6369 l 9312 6338 l 9310 6306 l 9309 6274 l 9307 6243 l
9305 6215 l 9303 6191 l
9300 6150 l gs col0 s gr gr
% arrowhead
0 slj
30.000 slw
n 9346 6376 m 9306 6229 l 9287 6380 l 9314 6348 l 9346 6376 l
cp gs col7 1.00 shd ef gr col0 s
/Times-Roman ff 195.00 scf sf
10425 7275 m
gs 1 -1 sc (inf\(e\)) col1 sh gr
/Times-Roman ff 240.00 scf sf
4050 7125 m
gs 1 -1 sc (v) col1 sh gr
/Times-Roman ff 240.00 scf sf
9600 6825 m
gs 1 -1 sc (e) col4 sh gr
/Times-Roman ff 195.00 scf sf
10050 5625 m
gs 1 -1 sc (sup\(e\)) col1 sh gr
% Ellipse
n 9525 6525 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 9075 7125 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 4950 6225 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 3150 6675 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 5625 6570 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 2355 6915 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 5880 6150 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 2775 7125 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
$F2psEnd
rs

View File

@ -0,0 +1,53 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 2700 6225 525 900 2700 6225 3225 7125
1 1 0 3 0 7 50 0 -1 0.000 1 0.5236 5250 5775 525 900 5250 5775 6154 6292
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 2775 7125 75 75 2775 7125 2850 7125
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 2355 6915 75 75 2355 6915 2430 6915
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 5880 6150 75 75 5880 6150 5955 6150
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 5625 6570 75 75 5625 6570 5700 6570
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 3150 6675 75 75 3150 6675 3225 6675
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 4950 6225 75 75 4950 6225 5025 6225
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 9009 6239 525 900 9009 6239 9534 7139
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 9075 7125 75 75 9075 7125 9150 7125
1 3 0 3 4 4 30 0 20 0.000 1 0.0000 9525 6525 75 75 9525 6525 9600 6525
2 1 0 3 1 7 60 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
2805 7110 5670 6570
2 1 0 1 0 7 60 0 -1 0.000 0 0 -1 1 0 3
2 0 1.00 60.00 120.00
3975 6300 3975 6600 5175 6450
2 1 0 1 0 7 60 0 -1 0.000 0 0 -1 1 0 4
2 0 1.00 60.00 120.00
1575 7575 1575 7800 2550 7800 2550 7125
2 1 0 1 0 7 60 0 -1 0.000 0 0 -1 1 0 4
2 0 1.00 60.00 120.00
5700 7275 5700 7050 6075 7050 5850 6450
2 1 0 1 0 7 60 0 -1 0.000 0 0 -1 1 0 6
2 0 1.00 60.00 120.00
3825 5475 3825 5850 3300 5850 3300 6675 3300 6825 3000 6975
2 1 0 3 1 7 60 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
9108 7125 11973 6585
2 1 0 3 1 7 60 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
9525 6450 10125 4650
3 0 0 2 0 7 50 0 -1 0.000 0 1 0 6
2 0 3.00 60.00 120.00
8625 6375 8745 6735 8895 6960 9120 6960 9345 6585 9300 6150
0.000 1.000 1.000 1.000 1.000 0.000
4 0 4 60 0 0 13 0.0000 4 180 1395 945 7440 cw_source_edge(v)\001
4 0 4 60 0 0 13 0.0000 4 180 1320 3375 6225 cw_target_edge(v)\001
4 0 1 50 0 0 16 0.0000 4 120 120 4050 7125 v\001
4 0 4 50 0 0 16 0.0000 4 120 105 9600 6825 e\001
4 0 4 60 0 0 13 0.0000 4 180 1470 3000 5400 ccw_source_edge(v)\001
4 0 1 50 0 0 13 0.0000 4 180 450 10050 5625 sup(e)\001
4 0 1 50 0 0 13 0.0000 4 165 390 10425 7275 inf(e)\001
4 0 4 60 0 0 13 0.0000 4 180 1395 5070 7455 ccw_target_edge(v)\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,324 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: order.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Tue Apr 16 10:41:50 2002
%%For: angelier@quassia (Pierre Angelier)
%%BoundingBox: 0 0 827 260
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 260 moveto 0 0 lineto 827 0 lineto 827 260 lineto closepath clip newpath
-7.0 269.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
30.000 slw
% Ellipse
n 10500 3675 750 675 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 13125 2550 750 450 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 10800 1050 525 525 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8775 1500 525 825 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 2700 3675 750 675 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 5325 2550 750 450 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 3000 1050 525 525 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 975 1500 525 825 0 360 DrawEllipse gs col0 s gr
% Polyline
gs clippath
13643 3014 m 13563 2852 l 13075 3091 l 13519 2975 l 13154 3253 l cp
eoclip
n 10830 4290 m
13590 2940 l gs col4 s gr gr
% arrowhead
n 13154 3253 m 13519 2975 l 13075 3091 l 13195 3133 l 13154 3253 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
11136 501 m 11038 652 l 11496 947 l 11167 628 l 11594 796 l cp
eoclip
n 13800 2325 m
11100 585 l gs col1 s gr gr
% arrowhead
n 11594 796 m 11167 628 l 11496 947 l 11469 823 l 11594 796 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
8738 571 m 8751 750 l 9294 710 l 8839 654 l 9281 530 l cp
eoclip
n 10770 510 m
8760 660 l gs col4 s gr gr
% arrowhead
n 9281 530 m 8839 654 l 9294 710 l 9198 627 l 9281 530 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
5843 3014 m 5763 2852 l 5275 3091 l 5719 2975 l 5354 3253 l cp
eoclip
n 3030 4290 m
5790 2940 l gs col1 s gr gr
% arrowhead
n 5354 3253 m 5719 2975 l 5275 3091 l 5395 3133 l 5354 3253 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
4775 2338 m 4633 2227 l 4298 2657 l 4646 2358 l 4440 2768 l cp
eoclip
n 3375 3990 m
4695 2295 l gs col1 s gr gr
% arrowhead
n 4440 2768 m 4646 2358 l 4298 2657 l 4424 2642 l 4440 2768 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
3645 1008 m 3465 1001 l 3444 1545 l 3552 1099 l 3624 1552 l cp
eoclip
n 3450 3705 m
3555 1020 l gs col1 s gr gr
% arrowhead
n 3624 1552 m 3552 1099 l 3444 1545 l 3537 1458 l 3624 1552 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
2627 1257 m 2460 1325 l 2666 1829 l 2580 1379 l 2833 1761 l cp
eoclip
n 3375 3330 m
2550 1305 l gs col1 s gr gr
% arrowhead
n 2833 1761 m 2580 1379 l 2666 1829 l 2715 1712 l 2833 1761 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
1274 665 m 1136 781 l 1484 1199 l 1266 796 l 1623 1084 l cp
eoclip
n 3225 3150 m
1215 735 l gs col1 s gr gr
% arrowhead
n 1623 1084 m 1266 796 l 1484 1199 l 1496 1072 l 1623 1084 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
915 2235 m 856 2404 l 1370 2584 l 975 2351 l 1429 2414 l cp
eoclip
n 3000 3060 m
900 2325 l gs col1 s gr gr
% arrowhead
n 1429 2414 m 975 2351 l 1370 2584 l 1314 2469 l 1429 2414 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
2563 2910 m 2566 3090 l 3110 3082 l 2659 2999 l 3107 2902 l cp
eoclip
n 5580 2955 m
2580 3000 l gs col1 s gr gr
% arrowhead
n 3107 2902 m 2659 2999 l 3110 3082 l 3018 2993 l 3107 2902 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
2385 2950 m 2446 3119 l 2958 2935 l 2505 3003 l 2898 2766 l cp
eoclip
n 5025 2100 m
2430 3030 l gs col1 s gr gr
% arrowhead
n 2898 2766 m 2505 3003 l 2958 2935 l 2843 2881 l 2898 2766 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
1927 3320 m 2075 3423 l 2385 2976 l 2055 3295 l 2237 2874 l cp
eoclip
n 3510 1200 m
2010 3360 l gs col1 s gr gr
% arrowhead
n 2237 2874 m 2055 3295 l 2385 2976 l 2260 2999 l 2237 2874 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
1858 3521 m 2035 3557 l 2144 3024 l 1966 3447 l 1968 2988 l cp
eoclip
n 2490 885 m
1950 3525 l gs col1 s gr gr
% arrowhead
n 1968 2988 m 1966 3447 l 2144 3024 l 2038 3094 l 1968 2988 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
1864 3811 m 2041 3778 l 1940 3243 l 1935 3702 l 1763 3276 l cp
eoclip
n 1485 1290 m
1950 3780 l gs col1 s gr gr
% arrowhead
n 1763 3276 m 1935 3702 l 1940 3243 l 1868 3348 l 1763 3276 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
2081 4220 m 2226 4113 l 1902 3675 l 2098 4091 l 1757 3783 l cp
eoclip
n 600 2070 m
2145 4155 l gs col1 s gr gr
% arrowhead
n 1757 3783 m 2098 4091 l 1902 3675 l 1883 3801 l 1757 3783 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
[120] 0 sd
gs clippath
7140 4440 m 7140 4260 l 6596 4260 l 7046 4350 l 6596 4440 l cp
eoclip
n 150 4350 m
7125 4350 l gs col4 s gr gr
[] 0 sd
% arrowhead
n 6596 4440 m 7046 4350 l 6596 4260 l 6686 4350 l 6596 4440 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
2 slj
gs clippath
5080 3302 m 4948 3425 l 5249 3749 l 5070 3424 l 5380 3626 l cp
eoclip
n 5100 4350 m 5103 4348 l 5109 4343 l 5120 4334 l 5135 4321 l 5156 4304 l
5181 4283 l 5209 4260 l 5238 4234 l 5268 4207 l 5296 4180 l
5323 4154 l 5348 4128 l 5369 4104 l 5387 4081 l 5403 4059 l
5415 4038 l 5425 4017 l 5432 3997 l 5436 3977 l 5438 3958 l
5438 3938 l 5435 3920 l 5432 3902 l 5426 3884 l 5419 3865 l
5409 3845 l 5398 3823 l 5384 3801 l 5368 3776 l 5350 3750 l
5329 3723 l 5306 3693 l 5281 3662 l 5254 3630 l 5226 3597 l
5196 3563 l 5167 3530 l 5139 3498 l 5112 3469 l 5088 3443 l
5068 3421 l 5051 3403 l
5025 3375 l gs col12 s gr gr
% arrowhead
0 slj
n 5380 3626 m 5070 3424 l 5249 3749 l col12 s
/Times-Roman ff 420.00 scf sf
12375 3930 m
gs 1 -1 sc (a) col4 sh gr
/Times-Roman ff 420.00 scf sf
9690 450 m
gs 1 -1 sc (b) col4 sh gr
/Times-Roman ff 420.00 scf sf
5700 3975 m
gs 1 -1 sc (angle) col12 sh gr
/Times-Roman ff 420.00 scf sf
2565 3810 m
gs 1 -1 sc (o) col0 sh gr
$F2psEnd
rs

View File

@ -0,0 +1,73 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 10500 3675 750 675 10500 3675 11250 4350
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 13125 2550 750 450 13125 2550 13875 2100
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 10800 1050 525 525 10800 1050 11325 1575
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 8775 1500 525 825 8775 1500 9300 2325
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 2700 3675 750 675 2700 3675 3450 4350
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 5325 2550 750 450 5325 2550 6075 2100
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 3000 1050 525 525 3000 1050 3525 1575
1 1 0 3 0 7 50 0 -1 0.000 1 0.0000 975 1500 525 825 975 1500 1500 2325
2 1 0 3 4 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
10830 4290 13590 2940
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
13800 2325 11100 585
2 1 0 3 4 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
10770 510 8760 660
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
3030 4290 5790 2940
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
3375 3990 4695 2295
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
3450 3705 3555 1020
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
3375 3330 2550 1305
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
3225 3150 1215 735
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
3000 3060 900 2325
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
5580 2955 2580 3000
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
5025 2100 2430 3030
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
3510 1200 2010 3360
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
2490 885 1950 3525
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
1485 1290 1950 3780
2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
600 2070 2145 4155
2 1 1 3 4 7 50 0 -1 8.000 0 0 -1 1 0 2
2 0 3.00 180.00 360.00
150 4350 7125 4350
3 0 0 3 12 7 50 0 -1 0.000 0 1 0 3
0 0 3.00 180.00 360.00
5100 4350 5625 3975 5025 3375
0.000 1.000 0.000
4 0 4 50 0 0 28 0.0000 4 195 180 12375 3930 a\001
4 0 4 50 0 0 28 0.0000 4 285 210 9690 450 b\001
4 0 12 50 0 0 28 0.0000 4 375 900 5700 3975 angle\001
4 0 0 50 0 0 28 0.0000 4 195 210 2565 3810 o\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -0,0 +1,156 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: perturbation.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3d
%%CreationDate: Sun May 12 23:58:24 2002
%%For: angelier@studio (Pierre Angelier)
%%BoundingBox: 0 0 557 232
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 232 moveto 0 0 lineto 557 0 lineto 557 232 lineto closepath clip newpath
-110.2 310.7 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
30.000 slw
% Ellipse
n 9225 5025 106 106 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 7470 3840 106 106 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8670 1665 106 106 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 10365 1470 106 106 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 10950 3675 106 106 0 360 DrawEllipse gs col0 s gr
% Polyline
n 7365 3780 m
8565 1605 l gs col0 s gr
% Polyline
n 8685 1575 m
10350 1350 l gs col0 s gr
% Polyline
n 10485 1440 m
11070 3660 l gs col0 s gr
% Polyline
n 7425 3960 m
9195 5145 l gs col0 s gr
% Polyline
n 9285 5145 m
11025 3780 l gs col0 s gr
% Polyline
15.000 slw
[120] 0 sd
n 7456 3854 m 8656 1679 l 10381 1454 l 10981 3704 l 9256 5054 l
7456 3854 l cp gs col0 s gr [] 0 sd
% Polyline
75.000 slw
gs clippath
7365 3090 m 7365 2730 l 6464 2730 l 7184 2910 l 6464 3090 l cp
eoclip
n 5730 2910 m
7350 2910 l gs col1 s gr gr
% arrowhead
n 6464 3090 m 7184 2910 l 6464 2730 l col1 s
% Polyline
30.000 slw
n 1869 3811 m 3069 1636 l 4794 1411 l 5394 3661 l 3669 5011 l
1869 3811 l cp gs col0 s gr
$F2psEnd
rs

View File

@ -0,0 +1,31 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 9225 5025 106 106 9225 5025 9300 5100
1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 7470 3840 106 106 7470 3840 7545 3915
1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 8670 1665 106 106 8670 1665 8745 1740
1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 10365 1470 106 106 10365 1470 10440 1545
1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 10950 3675 106 106 10950 3675 11025 3750
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7365 3780 8565 1605
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
8685 1575 10350 1350
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
10485 1440 11070 3660
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7425 3960 9195 5145
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
9285 5145 11025 3780
2 1 1 2 0 7 50 0 -1 8.000 0 0 -1 0 0 6
7456 3854 8656 1679 10381 1454 10981 3704 9256 5054 7456 3854
2 1 0 6 1 7 50 0 -1 0.000 0 0 -1 1 0 2
0 0 6.00 360.00 720.00
5730 2910 7350 2910
2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 6
1869 3811 3069 1636 4794 1411 5394 3661 3669 5011 1869 3811

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,183 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: points.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Thu Apr 11 11:50:53 2002
%%For: angelier@mousse (Pierre Angelier)
%%BoundingBox: 0 0 390 160
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 160 moveto 0 0 lineto 390 0 lineto 390 160 lineto closepath clip newpath
-142.0 235.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
30.000 slw
% Ellipse
n 2475 3525 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 4275 1350 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
% Ellipse
n 6825 3675 212 212 0 360 DrawEllipse gs col0 s gr
% Ellipse
n 8625 1575 212 212 0 360 DrawEllipse gs col0 s gr
% Polyline
gs clippath
4353 1395 m 4215 1281 l 3867 1700 l 4224 1411 l 4006 1815 l cp
eoclip
n 2475 3525 m
4275 1350 l gs col1 s gr gr
% arrowhead
n 4006 1815 m 4224 1411 l 3867 1700 l 3994 1688 l 4006 1815 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
8835 1742 m 8697 1628 l 8349 2047 l 8706 1758 l 8488 2162 l cp
eoclip
n 6957 3872 m
8757 1697 l gs col1 s gr gr
% arrowhead
n 8488 2162 m 8706 1758 l 8349 2047 l 8476 2035 l 8488 2162 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
8557 1399 m 8419 1285 l 8071 1704 l 8428 1415 l 8210 1819 l cp
eoclip
n 6679 3529 m
8479 1354 l gs col4 s gr gr
% arrowhead
n 8210 1819 m 8428 1415 l 8071 1704 l 8198 1692 l 8210 1819 l
cp gs col7 1.00 shd ef gr col4 s
% Polyline
gs clippath
8770 1797 m 8651 1662 l 8244 2024 l 8641 1793 l 8363 2158 l cp
eoclip
n 6720 3495 m
8700 1740 l gs col31 s gr gr
% arrowhead
n 8363 2158 m 8641 1793 l 8244 2024 l 8371 2031 l 8363 2158 l
cp gs col7 1.00 shd ef gr col31 s
% Polyline
gs clippath
8544 1429 m 8391 1335 l 8107 1799 l 8419 1463 l 8260 1893 l cp
eoclip
n 6990 3795 m
8460 1395 l gs col2 s gr gr
% arrowhead
n 8260 1893 m 8419 1463 l 8107 1799 l 8230 1769 l 8260 1893 l
cp gs col7 1.00 shd ef gr col2 s
% Polyline
60.000 slw
gs clippath
6555 2820 m 6555 2520 l 5808 2520 l 6408 2670 l 5808 2820 l cp
eoclip
n 4050 2670 m
6540 2670 l gs col0 s gr gr
% arrowhead
n 5808 2820 m 6408 2670 l 5808 2520 l col0 s
/Times-Roman ff 420.00 scf sf
4290 2340 m
gs 1 -1 sc (Perturbation) col0 sh gr
$F2psEnd
rs

View File

@ -0,0 +1,32 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 3 0 3 0 0 50 0 20 0.000 1 0.0000 2475 3525 75 75 2475 3525 2550 3525
1 3 0 3 0 0 50 0 20 0.000 1 0.0000 4275 1350 75 75 4275 1350 4350 1350
1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 6825 3675 212 212 6825 3675 7037 3675
1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 8625 1575 212 212 8625 1575 8837 1575
2 1 0 3 1 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 3.00 180.00 360.00
2475 3525 4275 1350
2 1 0 3 1 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 3.00 180.00 360.00
6957 3872 8757 1697
2 1 0 3 4 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 3.00 180.00 360.00
6679 3529 8479 1354
2 1 0 3 31 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 3.00 180.00 360.00
6720 3495 8700 1740
2 1 0 3 2 7 50 0 -1 0.000 0 0 7 1 0 2
2 0 3.00 180.00 360.00
6990 3795 8460 1395
2 1 0 5 0 7 50 0 -1 0.000 0 0 -1 1 0 2
0 0 5.00 300.00 600.00
4050 2670 6540 2670
4 0 0 50 0 0 28 0.0000 4 285 2070 4290 2340 Perturbation\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,676 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: vis-complex.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3c
%%CreationDate: Mon May 13 15:05:37 2002
%%For: angelier@mousse (Pierre Angelier)
%%BoundingBox: 0 0 873 273
%%Magnification: 1.0000
%%EndComments
/MyAppDict 100 dict dup begin def
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 273 moveto 0 0 lineto 873 0 lineto 873 273 lineto closepath clip newpath
-21.0 296.0 translate
1 -1 scale
% This junk string is used by the show operators
/PATsstr 1 string def
/PATawidthshow { % cx cy cchar rx ry string
% Loop over each character in the string
{ % cx cy cchar rx ry char
% Show the character
dup % cx cy cchar rx ry char char
PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char)
false charpath % cx cy cchar rx ry char
/clip load PATdraw
% Move past the character (charpath modified the
% current point)
currentpoint % cx cy cchar rx ry char x y
newpath
moveto % cx cy cchar rx ry char
% Reposition by cx,cy if the character in the string is cchar
3 index eq { % cx cy cchar rx ry
4 index 4 index rmoveto
} if
% Reposition all characters by rx ry
2 copy rmoveto % cx cy cchar rx ry
} forall
pop pop pop pop pop % -
currentpoint
newpath
moveto
} bind def
/PATcg {
7 dict dup begin
/lw currentlinewidth def
/lc currentlinecap def
/lj currentlinejoin def
/ml currentmiterlimit def
/ds [ currentdash ] def
/cc [ currentrgbcolor ] def
/cm matrix currentmatrix def
end
} bind def
% PATdraw - calculates the boundaries of the object and
% fills it with the current pattern
/PATdraw { % proc
save exch
PATpcalc % proc nw nh px py
5 -1 roll exec % nw nh px py
newpath
PATfill % -
restore
} bind def
% PATfill - performs the tiling for the shape
/PATfill { % nw nh px py PATfill -
PATDict /CurrentPattern get dup begin
setfont
% Set the coordinate system to Pattern Space
PatternGState PATsg
% Set the color for uncolored pattezns
PaintType 2 eq { PATDict /PColor get PATsc } if
% Create the string for showing
3 index string % nw nh px py str
% Loop for each of the pattern sources
0 1 Multi 1 sub { % nw nh px py str source
% Move to the starting location
3 index 3 index % nw nh px py str source px py
moveto % nw nh px py str source
% For multiple sources, set the appropriate color
Multi 1 ne { dup PC exch get PATsc } if
% Set the appropriate string for the source
0 1 7 index 1 sub { 2 index exch 2 index put } for pop
% Loop over the number of vertical cells
3 index % nw nh px py str nh
{ % nw nh px py str
currentpoint % nw nh px py str cx cy
2 index oldshow % nw nh px py str cx cy
YStep add moveto % nw nh px py str
} repeat % nw nh px py str
} for
5 { pop } repeat
end
} bind def
% PATkshow - kshow with the current pattezn
/PATkshow { % proc string
exch bind % string proc
1 index 0 get % string proc char
% Loop over all but the last character in the string
0 1 4 index length 2 sub {
% string proc char idx
% Find the n+1th character in the string
3 index exch 1 add get % string proe char char+1
exch 2 copy % strinq proc char+1 char char+1 char
% Now show the nth character
PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr)
false charpath % string proc char+1 char char+1
/clip load PATdraw
% Move past the character (charpath modified the current point)
currentpoint newpath moveto
% Execute the user proc (should consume char and char+1)
mark 3 1 roll % string proc char+1 mark char char+1
4 index exec % string proc char+1 mark...
cleartomark % string proc char+1
} for
% Now display the last character
PATsstr dup 0 4 -1 roll put % string proc (char+1)
false charpath % string proc
/clip load PATdraw
neewath
pop pop % -
} bind def
% PATmp - the makepattern equivalent
/PATmp { % patdict patmtx PATmp patinstance
exch dup length 7 add % We will add 6 new entries plus 1 FID
dict copy % Create a new dictionary
begin
% Matrix to install when painting the pattern
TilingType PATtcalc
/PatternGState PATcg def
PatternGState /cm 3 -1 roll put
% Check for multi pattern sources (Level 1 fast color patterns)
currentdict /Multi known not { /Multi 1 def } if
% Font dictionary definitions
/FontType 3 def
% Create a dummy encoding vector
/Encoding 256 array def
3 string 0 1 255 {
Encoding exch dup 3 index cvs cvn put } for pop
/FontMatrix matrix def
/FontBBox BBox def
/BuildChar {
mark 3 1 roll % mark dict char
exch begin
Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata]
PaintType 2 eq Multi 1 ne or
{ XStep 0 FontBBox aload pop setcachedevice }
{ XStep 0 setcharwidth } ifelse
currentdict % mark [paintdata] dict
/PaintProc load % mark [paintdata] dict paintproc
end
gsave
false PATredef exec true PATredef
grestore
cleartomark % -
} bind def
currentdict
end % newdict
/foo exch % /foo newlict
definefont % newfont
} bind def
% PATpcalc - calculates the starting point and width/height
% of the tile fill for the shape
/PATpcalc { % - PATpcalc nw nh px py
PATDict /CurrentPattern get begin
gsave
% Set up the coordinate system to Pattern Space
% and lock down pattern
PatternGState /cm get setmatrix
BBox aload pop pop pop translate
% Determine the bounding box of the shape
pathbbox % llx lly urx ury
grestore
% Determine (nw, nh) the # of cells to paint width and height
PatHeight div ceiling % llx lly urx qh
4 1 roll % qh llx lly urx
PatWidth div ceiling % qh llx lly qw
4 1 roll % qw qh llx lly
PatHeight div floor % qw qh llx ph
4 1 roll % ph qw qh llx
PatWidth div floor % ph qw qh pw
4 1 roll % pw ph qw qh
2 index sub cvi abs % pw ph qs qh-ph
exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph
% Determine the starting point of the pattern fill
%(px, py)
4 2 roll % nw nh pw ph
PatHeight mul % nw nh pw py
exch % nw nh py pw
PatWidth mul exch % nw nh px py
end
} bind def
% Save the original routines so that we can use them later on
/oldfill /fill load def
/oldeofill /eofill load def
/oldstroke /stroke load def
/oldshow /show load def
/oldashow /ashow load def
/oldwidthshow /widthshow load def
/oldawidthshow /awidthshow load def
/oldkshow /kshow load def
% These defs are necessary so that subsequent procs don't bind in
% the originals
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
/PATredef {
MyAppDict begin
{
/fill { /clip load PATdraw newpath } bind def
/eofill { /eoclip load PATdraw newpath } bind def
/stroke { PATstroke } bind def
/show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
/ashow { 0 0 null 6 3 roll PATawidthshow }
bind def
/widthshow { 0 0 3 -1 roll PATawidthshow }
bind def
/awidthshow { PATawidthshow } bind def
/kshow { PATkshow } bind def
} {
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
} ifelse
end
} bind def
false PATredef
% Conditionally define setcmykcolor if not available
/setcmykcolor where { pop } {
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if 3 1 roll
} repeat
setrgbcolor - pop
} bind def
} ifelse
/PATsc { % colorarray
aload length % c1 ... cn length
dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
} ifelse } ifelse
} bind def
/PATsg { % dict
begin
lw setlinewidth
lc setlinecap
lj setlinejoin
ml setmiterlimit
ds aload pop setdash
cc aload pop setrgbcolor
cm setmatrix
end
} bind def
/PATDict 3 dict def
/PATsp {
true PATredef
PATDict begin
/CurrentPattern exch def
% If it's an uncolored pattern, save the color
CurrentPattern /PaintType get 2 eq {
/PColor exch def
} if
/CColor [ currentrgbcolor ] def
end
} bind def
% PATstroke - stroke with the current pattern
/PATstroke {
countdictstack
save
mark
{
currentpoint strokepath moveto
PATpcalc % proc nw nh px py
clip newpath PATfill
} stopped {
(*** PATstroke Warning: Path is too complex, stroking
with gray) =
cleartomark
restore
countdictstack exch sub dup 0 gt
{ { end } repeat } { pop } ifelse
gsave 0.5 setgray oldstroke grestore
} { pop restore pop } ifelse
newpath
} bind def
/PATtcalc { % modmtx tilingtype PATtcalc tilematrix
% Note: tiling types 2 and 3 are not supported
gsave
exch concat % tilingtype
matrix currentmatrix exch % cmtx tilingtype
% Tiling type 1 and 3: constant spacing
2 ne {
% Distort the pattern so that it occupies
% an integral number of device pixels
dup 4 get exch dup 5 get exch % tx ty cmtx
XStep 0 dtransform
round exch round exch % tx ty cmtx dx.x dx.y
XStep div exch XStep div exch % tx ty cmtx a b
0 YStep dtransform
round exch round exch % tx ty cmtx a b dy.x dy.y
YStep div exch YStep div exch % tx ty cmtx a b c d
7 -3 roll astore % { a b c d tx ty }
} if
grestore
} bind def
/PATusp {
false PATredef
PATDict begin
CColor PATsc
end
} bind def
% right45
11 dict begin
/PaintType 1 def
/PatternType 1 def
/TilingType 1 def
/BBox [0 0 1 1] def
/XStep 1 def
/YStep 1 def
/PatWidth 1 def
/PatHeight 1 def
/Multi 2 def
/PaintData [
{ clippath } bind
{ 32 32 true [ 32 0 0 -32 0 32 ]
{<010101010202020204040404080808081010101020202020
404040408080808001010101020202020404040408080808
101010102020202040404040808080800101010102020202
040404040808080810101010202020204040404080808080
010101010202020204040404080808081010101020202020
4040404080808080>}
imagemask } bind
] def
/PaintProc {
pop
exec fill
} def
currentdict
end
/P5 exch def
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
%
% Fig objects follow
%
% Polyline
n 11025 3525 m 12150 3075 l 12525 3000 l 13800 3525 l 13725 1425 l 12600 2400 l
12225 2325 l 11025 1575 l 11025 3000 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P5 [16 0 0 -16 735.00 95.00] PATmp PATsp ef gr PATusp
% Polyline
15.000 slw
gs clippath
8415 2460 m 8415 2340 l 8060 2340 l 8360 2400 l 8060 2460 l cp
eoclip
n 6600 2400 m
8400 2400 l gs col1 s gr gr
% arrowhead
n 8060 2460 m 8360 2400 l 8060 2340 l 8120 2400 l 8060 2460 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
8672 1764 m 8601 1667 l 8315 1875 l 8593 1748 l 8385 1972 l cp
eoclip
n 6150 3525 m
8625 1725 l gs col1 s gr gr
% arrowhead
n 8385 1972 m 8593 1748 l 8315 1875 l 8398 1889 l 8385 1972 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
8398 2686 m 8430 2571 l 8089 2475 l 8362 2614 l 8056 2590 l cp
eoclip
n 6525 2100 m
8400 2625 l gs col1 s gr gr
% arrowhead
n 8056 2590 m 8362 2614 l 8089 2475 l 8130 2549 l 8056 2590 l
cp gs col7 1.00 shd ef gr col1 s
/Times-Roman ff 270.00 scf sf
13350 600 m
gs 1 -1 sc ( forward view) col0 sh gr
/Times-Roman ff 270.00 scf sf
9825 600 m
gs 1 -1 sc ( backward view) col0 sh gr
% Ellipse
n 12375 3525 450 525 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 12450 1725 450 675 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 10800 2550 675 1050 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 13875 2475 600 1050 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 4125 2475 600 1050 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 2625 3525 450 525 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 7575 1725 450 675 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 9000 2475 600 1050 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 7500 3525 450 525 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 1050 2550 675 1050 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 2700 1725 450 675 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Ellipse
n 5925 2550 675 1050 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
gs clippath
3872 1689 m 3801 1592 l 3515 1803 l 3793 1674 l 3586 1900 l cp
eoclip
n 1275 3525 m
3825 1650 l gs col1 s gr gr
% arrowhead
n 3586 1900 m 3793 1674 l 3515 1803 l 3599 1816 l 3586 1900 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
3581 3058 m 3644 2956 l 3341 2771 l 3566 2979 l 3278 2873 l cp
eoclip
n 1275 1575 m
3600 3000 l gs col1 s gr gr
% arrowhead
n 3278 2873 m 3566 2979 l 3341 2771 l 3361 2853 l 3278 2873 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
8528 3208 m 8595 3108 l 8301 2910 l 8517 3128 l 8234 3010 l cp
eoclip
n 6222 1580 m
8550 3150 l gs col1 s gr gr
% arrowhead
n 8234 3010 m 8517 3128 l 8301 2910 l 8318 2993 l 8234 3010 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
13266 2911 m 13311 2799 l 12981 2667 l 13238 2835 l 12937 2779 l cp
eoclip
n 11400 2100 m
13275 2850 l gs col1 s gr gr
% arrowhead
n 12937 2779 m 13238 2835 l 12981 2667 l 13015 2745 l 12937 2779 l
cp gs col7 1.00 shd ef gr col1 s
/Times-Roman ff 450.00 scf sf
11925 4800 m
gs 1 -1 sc (Face) col0 sh gr
/Times-Roman ff 450.00 scf sf
7050 4800 m
gs 1 -1 sc (Edge) col0 sh gr
% Polyline
n 11025 1575 m
12225 2325 l gs col0 s gr
% Polyline
n 12600 2400 m
13575 1575 l gs col0 s gr
% Polyline
n 11025 3525 m
12300 3000 l gs col0 s gr
% Polyline
n 12525 3000 m
13725 3525 l gs col0 s gr
% Polyline
gs clippath
13290 2685 m 13290 2565 l 12935 2565 l 13235 2625 l 12935 2685 l cp
eoclip
n 11475 2625 m
13275 2625 l gs col1 s gr gr
% arrowhead
n 12935 2685 m 13235 2625 l 12935 2565 l 12995 2625 l 12935 2685 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
13311 2300 m 13266 2188 l 12937 2320 l 13238 2265 l 12981 2432 l cp
eoclip
n 11400 3000 m
13275 2250 l gs col1 s gr gr
% arrowhead
n 12981 2432 m 13238 2265 l 12937 2320 l 13015 2354 l 12981 2432 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
13305 2754 m 13273 2638 l 12931 2730 l 13237 2710 l 12962 2845 l cp
eoclip
n 11325 3225 m
13275 2700 l gs col1 s gr gr
% arrowhead
n 12962 2845 m 13237 2710 l 12931 2730 l 13005 2772 l 12962 2845 l
cp gs col7 1.00 shd ef gr col1 s
% Polyline
gs clippath
10665 2193 m 10785 2186 l 10767 1832 l 10723 2135 l 10647 1838 l cp
eoclip
n 10650 750 m
10725 2175 l gs col0 s gr gr
% arrowhead
n 10647 1838 m 10723 2135 l 10767 1832 l 10710 1895 l 10647 1838 l
cp gs col7 1.00 shd ef gr col0 s
% Polyline
gs clippath
13814 2111 m 13934 2118 l 13953 1763 l 13877 2060 l 13833 1757 l cp
eoclip
n 13950 750 m
13875 2100 l gs col0 s gr gr
% arrowhead
n 13833 1757 m 13877 2060 l 13953 1763 l 13890 1820 l 13833 1757 l
cp gs col7 1.00 shd ef gr col0 s
/Times-Roman ff 450.00 scf sf
1875 4800 m
gs 1 -1 sc (Vertices) col0 sh gr
% Ellipse
n 1275 3525 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 1275 1575 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Polyline
2 slj
gs clippath
8829 1903 m 8715 1940 l 8824 2277 l 8789 1974 l 8938 2240 l cp
eoclip
n 8675 3044 m 8676 3042 l 8679 3036 l 8684 3027 l 8692 3013 l 8702 2994 l
8715 2970 l 8729 2942 l 8745 2911 l 8761 2879 l 8778 2846 l
8794 2812 l 8809 2780 l 8823 2749 l 8836 2719 l 8848 2691 l
8858 2665 l 8867 2640 l 8874 2616 l 8881 2593 l 8886 2571 l
8890 2550 l 8894 2528 l 8896 2507 l 8898 2486 l 8898 2465 l
8898 2443 l 8897 2420 l 8895 2396 l 8892 2372 l 8887 2345 l
8882 2317 l 8876 2287 l 8869 2256 l 8860 2222 l 8851 2187 l
8842 2151 l 8831 2115 l 8821 2080 l 8811 2047 l 8802 2017 l
8794 1991 l 8788 1970 l
8777 1936 l gs col0 s gr gr
% arrowhead
0 slj
n 8938 2240 m 8789 1974 l 8824 2277 l 8862 2202 l 8938 2240 l
cp gs col7 1.00 shd ef gr col0 s
% Ellipse
n 2475 2325 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 2925 2325 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 7277 2226 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
% Ellipse
n 7856 2243 75 75 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr
$F2psEnd
rs
end

View File

@ -0,0 +1,83 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 1275 1575 75 75 1275 1575 1350 1575
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 1275 3525 75 75 1275 3525 1350 3525
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 2925 2325 75 75 2925 2325 3000 2325
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 2475 2325 75 75 2475 2325 2550 2325
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 7856 2243 75 75 7856 2243 7931 2243
1 3 0 2 4 4 10 0 20 0.000 1 0.0000 7277 2226 75 75 7277 2226 7352 2226
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 12375 3525 450 525 12375 3525 12825 3525
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 12450 1725 450 675 12450 1725 12900 1725
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 10800 2550 675 1050 10800 2550 11475 2550
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 13875 2475 600 1050 13875 2475 14475 2475
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 4125 2475 600 1050 4125 2475 4725 2475
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 2625 3525 450 525 2625 3525 3075 3525
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 7575 1725 450 675 7575 1725 8025 1725
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 9000 2475 600 1050 9000 2475 9600 2475
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 7500 3525 450 525 7500 3525 7950 3525
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 1050 2550 675 1050 1050 2550 1725 2550
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 2700 1725 450 675 2700 1725 3150 1725
1 1 0 2 0 7 50 0 20 0.000 1 0.0000 5925 2550 675 1050 5925 2550 6600 2550
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
1275 3525 3825 1650
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
1275 1575 3600 3000
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
6600 2400 8400 2400
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
6150 3525 8625 1725
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
6525 2100 8400 2625
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
6222 1580 8550 3150
2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
11025 1575 12225 2325
2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
12600 2400 13575 1575
2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
11025 3525 12300 3000
2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
12525 3000 13725 3525
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
11475 2625 13275 2625
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
11400 3000 13275 2250
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
11400 2100 13275 2850
2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
11325 3225 13275 2700
2 3 0 0 0 7 100 0 45 0.000 0 0 -1 0 0 10
11025 3525 12150 3075 12525 3000 13800 3525 13725 1425 12600 2400
12225 2325 11025 1575 11025 3000 11025 3525
2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
10650 750 10725 2175
2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
2 0 2.00 120.00 240.00
13950 750 13875 2100
3 0 0 2 0 7 10 0 -1 0.000 0 1 0 3
2 0 2.00 120.00 240.00
8675 3044 8981 2516 8777 1936
0.000 1.000 0.000
4 0 0 50 0 0 30 0.0000 4 300 1485 1875 4800 Vertices\001
4 0 0 50 0 0 30 0.0000 4 390 915 7050 4800 Edge\001
4 0 0 50 0 0 30 0.0000 4 300 840 11925 4800 Face\001
4 0 0 50 0 0 18 0.0000 4 210 1695 9825 600 backward view\001
4 0 0 50 0 0 18 0.0000 4 210 1500 13350 600 forward view\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -0,0 +1,20 @@
@techreport{G-ap-sstvc-01b
, category = "report"
, author = {P.~Angelier and M.~Pocchiola}
, title = {A sum of squares theorem for visibility complexes and applications}
, number = {G-LIENS-01-1}
, institution= {Department of Computer Science, Ecole normale supérieure Paris}
, address = {France}
, year = 2001
, month = {August}
}
@inproceedings{G-ap-sstvc-01
, category = "intc"
, author = {P. Angelier and M.~Pocchiola}
, title = {A sum of squares theorem for visibility complexes}
, booktitle = {Proc. 17th Annu. ACM Sympos. Comput. Geom.}
, year = 2001
, pages = "302--311"
, note = {}
}

View File

@ -0,0 +1,6 @@
\part{User Manual}
\input{Visibility_complex/main}
\part{Reference Manual}
\input{Visibility_complex_ref/main}

View File

@ -0,0 +1,38 @@
\begin{thebibliography}{1}
\bibitem{G-ap-sstvc-01}
P.~Angelier and M.~Pocchiola.
\newblock A sum of squares theorem for visibility complexes.
\newblock In {\em Proc. 17th Annu. ACM Sympos. Comput. Geom.}, pages 302--311,
2001.
\bibitem{ddp-fahrgv-99}
F.~Durand, G.~Drettakis, and C.~Puech.
\newblock Fast and accurate hierarchical radiosity using global visibility.
\newblock {\em ACM Trans. Graph.}, 18(2):128--170, 1999.
\bibitem{k-ugpdd-99}
L.~Kettner.
\newblock Using generic programming for designing a data structure for
polyhedral surfaces.
\newblock {\em Comput. Geom. Theory Appl.}, 13:65--90, 1999.
\bibitem{m-gspno-00}
Joseph S.~B. Mitchell.
\newblock Geometric shortest paths and network optimization.
\newblock In J{\"o}rg-R{\"u}diger Sack and Jorge Urrutia, editors, {\em
Handbook of Computational Geometry}, pages 633--701. Elsevier Science
Publishers B.V. North-Holland, Amsterdam, 2000.
\bibitem{pv-tsvcpt-96}
M.~Pocchiola and G.~Vegter.
\newblock Topologically sweeping visibility complexes via
pseudo-triangulations.
\newblock {\em Discrete Comput. Geom.}, 16:419--453, December 1996.
\bibitem{pv-vc-96}
M.~Pocchiola and G.~Vegter.
\newblock The visibility complex.
\newblock {\em Internat. J. Comput. Geom. Appl.}, 6(3):279--308, 1996.
\end{thebibliography}

View File

@ -0,0 +1,46 @@
This is BibTeX, Version 0.99c (Web2C 7.3.2x)
The top-level auxiliary file: manual.aux
The style file: plain.bst
Database file #1: local.bib
Database file #2: geom.bib
You've used 6 entries,
2118 wiz_defined-function locations,
538 strings with 4864 characters,
and the built_in function-call counts, 2252 in all, are:
= -- 235
> -- 79
< -- 2
+ -- 32
- -- 24
* -- 152
:= -- 358
add.period$ -- 19
call.type$ -- 6
change.case$ -- 29
chr.to.int$ -- 0
cite$ -- 6
duplicate$ -- 91
empty$ -- 188
format.name$ -- 24
if$ -- 483
int.to.chr$ -- 0
int.to.str$ -- 6
missing$ -- 6
newline$ -- 33
num.names$ -- 14
pop$ -- 26
preamble$ -- 1
purify$ -- 23
quote$ -- 0
skip$ -- 70
stack$ -- 0
substring$ -- 190
swap$ -- 25
text.length$ -- 2
text.prefix$ -- 0
top$ -- 0
type$ -- 24
warning$ -- 0
while$ -- 27
width$ -- 7
write$ -- 70

Binary file not shown.

View File

@ -0,0 +1,89 @@
% +------------------------------------------------------------------------+
% | manual.tex
% +------------------------------------------------------------------------+
% | includes the usual suspects (LaTeX style files), sets necessary
% | options, illustrates some optional options, and includes main.tex.
% +------------------------------------------------------------------------+
\documentclass{book}
\usepackage{alltt} % convinient for programs + a bit of formatting
\usepackage{cc_manual} % the style what all is about here
\usepackage{cc_manual_index} % the style file for indexing the manual
\usepackage{latex_converter} % the LaTeX to HTML converter style file
\usepackage{amssymb} % some more math symbols, needed for \mathbb
\usepackage{path} % for URL's (WWW addresses)
\usepackage{graphicx} % for PostScript figures
%\usepackage{ipe} % for IPE figures
\usepackage{makeidx} % for the index
\usepackage{minitoc} % for the local table of contents
\usepackage{color,psfrag}
\usepackage{t1enc}
% page dimensions, for example as used for the CGAL manuals
% ---------------------------------------------------------
\textwidth 15.6cm
\textheight 23 cm
\topmargin -14mm
\evensidemargin 3mm
\oddsidemargin 3mm
\sloppy
\makeindex % so the indexing commands have some effect
% New manual style including tab markers on the side margins
% ----------------------------------------------------------
\marginparsep7mm
\marginparwidth15mm
\gdef\ccNewRefManualStyle{\ccTrue} % undef this for old style manual
% Start renumbering chapters with each \part command
% ----------------------------------------------------------
\ccNumberChaptersByPart
% Tell HTML converter to use proper format for table of contents
% --------------------------------------------------------------
\ccMultiplePartsToc
% The tab markers are aligned with the top of the main text. To align
% them with the page header, the following definition of the amount
% by which the tab is shifted can be used
\setlength{\ccRefTabLift}{12.5mm}
% Optionally, package authors and a package release can be shown
% right below the chapter title. Comment out the following lines
% to get back to the default behavior.
% -----------------------------------------------------------------
\def\ccTagChapterAuthor{\ccTrue}
\def\ccTagChapterRelease{\ccTrue}
% The colunm layout can be set for all reference pages. Since
% local changes are possible, it is a good idea to enforce the
% the global layout before each reference page. This way, local
% changes of the layout do not change pages in the remainder
% of the manual.
% ------------------------------------------------------------
\newcommand{\cgalColumnLayout}{% example setting of the CGAL manuals
\ccSetThreeColumns{CGAL_Oriented_side}{}{\hspace*{8.5cm}}%
\ccPropagateThreeToTwoColumns
}
\cgalColumnLayout
\def\ccRefPageBegin{\ccParDims\cgalColumnLayout}
\def\ccRefPageEnd{\ccParDims\cgalColumnLayout}
% We define the global scope here, for example, to be 'CGAL::'.
% -------------------------------------------------------------
\ccDefGlobalScope{CGAL::}
\begin{document}
\bibliographystyle{plain}
\input{main}
\printindex %places the index in the PostScript document
\bibliography{local,geom}
\end{document}
%% EOF %%

View File

@ -0,0 +1,147 @@
#ifndef CGAL_CONVEX_ARC_2
#define CGAL_CONVEX_ARC_2
#include <list>
CGAL_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
// Abstract unsigned convex arc
template < class D_ >
class Arc_base
{
public:
// -------------------------------------------------------------------------
typedef D_ Disk;
typedef const Disk* Disk_handle;
// -------------------------------------------------------------------------
public:
// -------------------------------------------------------------------------
Arc_base() : _object(0) { }
Arc_base(Disk_handle P) : _object(P) { }
// -------------------------------------------------------------------------
Disk_handle object() const { return _object; }
void set_object(Disk_handle P) { _object = P; }
// -------------------------------------------------------------------------
private:
Disk_handle _object;
};
// -----------------------------------------------------------------------------
// --------------------- Arc_2 general definition -----------------------
// ----- This definition is sufficient if arcs have constant complexity --------
// -----------------------------------------------------------------------------
template < class D_ >
struct Arc_2 : public Arc_base<D_>
{
// -------------------------------------------------------------------------
typedef D_ Disk;
typedef typename Disk::R R;
typedef typename R::FT FT;
typedef typename R::Point_2 Point_2;
typedef typename R::Segment_2 Segment_2;
typedef Arc_base<D_> Base;
typedef typename Base::Disk_handle Disk_handle;
// -------------------------------------------------------------------------
Arc_2() : Base(0) { }
Arc_2(Disk_handle P) : Base(P) { }
Arc_2(Disk_handle P,const Point_2& p, const Point_2& q)
: Base(P) { }
// -------------------------------------------------------------------------
void split (Arc_2& /*tmp*/, const Point_2& /*p*/) { }
void split_cw(Arc_2& /*tmp*/, const Point_2& /*p*/) { }
void update_begin(const Point_2& /*p*/) { }
void update_end(const Point_2& /*p*/) { }
void join (Arc_2& /*y*/) { }
// -------------------------------------------------------------------------
};
// -----------------------------------------------------------------------------
// -------------- Arc_2 Specialization for CGAL::Polygon_2 --------------
// -----------------------------------------------------------------------------
#ifdef CGAL_POLYGON_2_H
template < class R_ , class C_ >
class Arc_2 < Polygon_2<R_,C_> >
: public Arc_base< Polygon_2<R_,C_> >
{
public:
// -------------------------------------------------------------------------
typedef R_ R;
typedef typename R_::FT FT;
typedef typename R::Point_2 Point_2;
typedef Polygon_2<R_,C_> Disk;
typedef C_ Container;
typedef Arc_base<Disk> Base;
typedef typename Base::Disk_handle Disk_handle;
typedef typename Disk::Vertex_const_circulator Vertex_const_iterator;
typedef typename Disk::Vertex_const_circulator Vertex_iterator;
// -------------------------------------------------------------------------
public:
// -------------------------------------------------------------------------
Arc_2() : Base(0) { }
Arc_2(Disk_handle P)
: Base(P) , first(Vertex_iterator()) , beyond(Vertex_iterator()) { }
// -------------------------------------------------------------------------
void split (Arc_2& tmp, const Point_2& p)
{
if (first == CGAL_CIRC_NULL) {
first = object()->vertices_circulator();
while (*first != p) ++first;
beyond = first; //++beyond;
tmp.first = first; tmp.beyond = beyond;
}
else {
tmp.beyond = beyond;
tmp.first = first;
while (*tmp.first != p) ++tmp.first;
beyond = tmp.first;
++beyond;
}
}
void split_cw(Arc_2& tmp, const Point_2& p)
{
if (first == CGAL_CIRC_NULL) {
first = object()->vertices_circulator();
while (*first != p) ++first;
beyond = first; //++beyond;
tmp.first = first; tmp.beyond = beyond;
}
else {
tmp.beyond = beyond;
tmp.first = first;
while (*tmp.beyond != p) --tmp.beyond;
first = tmp.beyond;
++tmp.beyond;
}
}
void update_begin(const Point_2& p) {
first = beyond; --first;
while (*first != p) --first;
}
void update_end(const Point_2& p) {
beyond = first;
while (*beyond != p) ++beyond;
++beyond;
}
void join (Arc_2& y) { beyond = y.beyond; }
// -------------------------------------------------------------------------
// these methods are specific to this specialization
Vertex_iterator begin() const { return first; }
Vertex_iterator end() const { return beyond; }
Vertex_iterator vertices_begin() const { return first; }
Vertex_iterator vertices_end() const { return beyond; }
// -------------------------------------------------------------------------
private:
Vertex_iterator first;
Vertex_iterator beyond;
};
#endif // CGAL_POLYGON_2_H
// -----------------------------------------------------------------------------
CGAL_END_NAMESPACE
#endif

View File

@ -0,0 +1,251 @@
// ======================================================================
//
// Copyright (c) 1999,2000 The CGAL Consortium
//
// This software and related documentation is part of an INTERNAL release
// of the Computational Geometry Algorithms Library (CGAL). It is not
// intended for general use.
//
// ----------------------------------------------------------------------
//
// release :
// release_date :
//
// file : include/CGAL/Arithmetic_filter/
// package : Interval_arithmetic
// author(s) : Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
//
// coordinator : INRIA Sophia-Antipolis (<Mariette.Yvinec@sophia.inria.fr>)
// ======================================================================
// This file is automatically generated by
// scripts/filtered_predicates_generator.pl
#ifndef CGAL_ARITHMETIC_FILTER_CIRCLE_2_CIRCLE_2_INTERSECTION_FTC2_H
#define CGAL_ARITHMETIC_FILTER_CIRCLE_2_CIRCLE_2_INTERSECTION_FTC2_H
CGAL_BEGIN_NAMESPACE
#ifndef CGAL_CFG_MATCHING_BUG_2
template < class CGAL_IA_CT, class CGAL_IA_ET, bool CGAL_IA_PROTECTED,
class CGAL_IA_CACHE >
#else
static
#endif
/* */
bool
circle_2_do_intersectC2(
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Dynamic, CGAL_IA_PROTECTED, CGAL_IA_CACHE> &c1x,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Dynamic, CGAL_IA_PROTECTED, CGAL_IA_CACHE> &c1y,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Dynamic, CGAL_IA_PROTECTED, CGAL_IA_CACHE> &R1_square,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Dynamic, CGAL_IA_PROTECTED, CGAL_IA_CACHE> &c2x,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Dynamic, CGAL_IA_PROTECTED, CGAL_IA_CACHE> &c2y,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Dynamic, CGAL_IA_PROTECTED, CGAL_IA_CACHE> &R2_square)
{
try
{
Protect_FPU_rounding<CGAL_IA_PROTECTED> Protection;
return circle_2_do_intersectC2(
c1x.interval(),
c1y.interval(),
R1_square.interval(),
c2x.interval(),
c2y.interval(),
R2_square.interval());
}
catch (Interval_nt_advanced::unsafe_comparison)
{
Protect_FPU_rounding<!CGAL_IA_PROTECTED> Protection(CGAL_FE_TONEAREST);
return circle_2_do_intersectC2(
c1x.exact(),
c1y.exact(),
R1_square.exact(),
c2x.exact(),
c2y.exact(),
R2_square.exact());
}
}
#ifdef CGAL_IA_NEW_FILTERS
struct Static_Filtered_circle_2_do_intersectC2_6
{
static double _bound;
//static double ;
static unsigned number_of_failures; // ?
static unsigned number_of_updates;
static bool update_epsilon(
const Static_filter_error &c1x,
const Static_filter_error &c1y,
const Static_filter_error &R1_square,
const Static_filter_error &c2x,
const Static_filter_error &c2y,
const Static_filter_error &R2_square)
{
typedef Static_filter_error FT;
FT square_sum(R1_square + R2_square);
FT a(c2x - c1x);
FT b(c2y - c1y);
FT d_square(a*a + b*b);
if (d_square <= square_sum) return true;
FT x = d_square - square_sum;
return (x*x <= FT(4) * R1_square * R2_square);
}
// Call this function from the outside to update the context.
static void new_bound (const double b) // , const double error = 0)
{
_bound = b;
number_of_updates++;
// recompute the epsilons: "just" call it over Static_filter_error.
// That's the tricky part that might not work for everything.
(void) update_epsilon(b,b,b,b,b,b);
// TODO: We should verify that all epsilons have really been updated.
}
static bool epsilon_variant(
const Restricted_double &c1x,
const Restricted_double &c1y,
const Restricted_double &R1_square,
const Restricted_double &c2x,
const Restricted_double &c2y,
const Restricted_double &R2_square)
{
typedef Restricted_double FT;
FT square_sum(R1_square + R2_square);
FT a(c2x - c1x);
FT b(c2y - c1y);
FT d_square(a*a + b*b);
if (d_square <= square_sum) return true;
FT x = d_square - square_sum;
return (x*x <= FT(4) * R1_square * R2_square);
}
};
#ifndef CGAL_CFG_MATCHING_BUG_2
template < class CGAL_IA_CT, class CGAL_IA_ET, class CGAL_IA_CACHE >
#else
static
#endif
/* */
bool
circle_2_do_intersectC2(
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, true, CGAL_IA_CACHE> &c1x,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, true, CGAL_IA_CACHE> &c1y,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, true, CGAL_IA_CACHE> &R1_square,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, true, CGAL_IA_CACHE> &c2x,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, true, CGAL_IA_CACHE> &c2y,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, true, CGAL_IA_CACHE> &R2_square)
{
// bool re_adjusted = false;
const double SAF_bound = Static_Filtered_circle_2_do_intersectC2_6::_bound;
// Check the bounds. All arguments must be <= SAF_bound.
if (
fabs(c1x.to_double()) > SAF_bound ||
fabs(c1y.to_double()) > SAF_bound ||
fabs(R1_square.to_double()) > SAF_bound ||
fabs(c2x.to_double()) > SAF_bound ||
fabs(c2y.to_double()) > SAF_bound ||
fabs(R2_square.to_double()) > SAF_bound)
{
// re_adjust:
// Compute the new bound.
double NEW_bound = 0.0;
NEW_bound = max(NEW_bound, fabs(c1x.to_double()));
NEW_bound = max(NEW_bound, fabs(c1y.to_double()));
NEW_bound = max(NEW_bound, fabs(R1_square.to_double()));
NEW_bound = max(NEW_bound, fabs(c2x.to_double()));
NEW_bound = max(NEW_bound, fabs(c2y.to_double()));
NEW_bound = max(NEW_bound, fabs(R2_square.to_double()));
// Re-adjust the context.
Static_Filtered_circle_2_do_intersectC2_6::new_bound(NEW_bound);
}
try
{
return Static_Filtered_circle_2_do_intersectC2_6::epsilon_variant(
c1x.dbl(),
c1y.dbl(),
R1_square.dbl(),
c2x.dbl(),
c2y.dbl(),
R2_square.dbl());
}
catch (...)
{
// if (!re_adjusted) { // It failed, we re-adjust once.
// re_adjusted = true;
// goto re_adjust;
// }
Static_Filtered_circle_2_do_intersectC2_6::number_of_failures++;
return circle_2_do_intersectC2(
c1x.exact(),
c1y.exact(),
R1_square.exact(),
c2x.exact(),
c2y.exact(),
R2_square.exact());
}
}
#ifndef CGAL_CFG_MATCHING_BUG_2
template < class CGAL_IA_CT, class CGAL_IA_ET, class CGAL_IA_CACHE >
#else
static
#endif
/* */
bool
circle_2_do_intersectC2(
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, false, CGAL_IA_CACHE> &c1x,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, false, CGAL_IA_CACHE> &c1y,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, false, CGAL_IA_CACHE> &R1_square,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, false, CGAL_IA_CACHE> &c2x,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, false, CGAL_IA_CACHE> &c2y,
const Filtered_exact <CGAL_IA_CT, CGAL_IA_ET, Static, false, CGAL_IA_CACHE> &R2_square)
{
CGAL_assertion_code(
const double SAF_bound = Static_Filtered_circle_2_do_intersectC2_6::_bound; )
CGAL_assertion(!(
fabs(c1x.to_double()) > SAF_bound ||
fabs(c1y.to_double()) > SAF_bound ||
fabs(R1_square.to_double()) > SAF_bound ||
fabs(c2x.to_double()) > SAF_bound ||
fabs(c2y.to_double()) > SAF_bound ||
fabs(R2_square.to_double()) > SAF_bound));
try
{
return Static_Filtered_circle_2_do_intersectC2_6::epsilon_variant(
c1x.dbl(),
c1y.dbl(),
R1_square.dbl(),
c2x.dbl(),
c2y.dbl(),
R2_square.dbl());
}
catch (...)
{
Static_Filtered_circle_2_do_intersectC2_6::number_of_failures++;
return circle_2_do_intersectC2(
c1x.exact(),
c1y.exact(),
R1_square.exact(),
c2x.exact(),
c2y.exact(),
R2_square.exact());
}
}
#endif // CGAL_IA_NEW_FILTERS
CGAL_END_NAMESPACE
#endif // CGAL_ARITHMETIC_FILTER_CIRCLE_2_CIRCLE_2_INTERSECTION_FTC2_H

View File

@ -0,0 +1,539 @@
#ifndef CGAL_BITANGENT_2_H
#define CGAL_BITANGENT_2_H
#include <cmath>
#include <list>
#ifndef CGAL_CONVEX_ARC_2_H
#include <CEP/Visibility_complex/Arc_2.h>
#endif
CGAL_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
// -------------------- Base Bitangent class -----------------------------------
template< class D_ >
class Bitangent_base
{
public:
// -------------------------------------------------------------------------
typedef D_ Disk;
typedef const Disk* Disk_handle;
// -------------------------------------------------------------------------
enum Type { LL , RR , LR , RL };
class Type_util {
public:
Type operator()(bool b1,bool b2) const {
if ( b1 && b2) return LL;
if (!b1 && b2) return RL;
if (!b1 && !b2) return RR;
return LR;
}
};
public:
// Constructeurs -----------------------------------------------------------
Bitangent_base()
: _type(LL) , _source_object(0) , _target_object(0) { }
Bitangent_base(Type t, Disk_handle o1, Disk_handle o2)
: _type(t) , _source_object(o1) , _target_object(o2) { }
// ----------------------- Operators ---------------------------------------
bool operator==(const Bitangent_base& b) const{
return (b.type() == type() && source_object() == b.source_object() &&
target_object() == b.target_object());
}
bool operator!=(const Bitangent_base& b) const{ return !(*this == b); }
// -------- return the opposite oriented bitangent -------------------------
Type type() const { return _type; }
// ---- accesing the two objects defining the bitangent --------------------
Disk_handle source_object() const { return _source_object; }
Disk_handle target_object() const { return _target_object; }
// ---------- informations on the type of the bitangent --------------------
bool is_left_right() const { return (type() == LR); }
bool is_left_left() const { return (type() == LL); }
bool is_right_right() const { return (type() == RR); }
bool is_right_left() const { return (type() == RL); }
bool is_left_xx() const { return (type() == LL || type() == LR); }
bool is_xx_left() const { return (type() == LL || type() == RL); }
bool is_right_xx() const { return (type() == RR || type() == RL); }
bool is_xx_right() const { return (type() == RR || type() == LR); }
bool is_internal() const { return (type() == RL || type() == LR); }
bool is_external() const { return (type() == LL || type() == RR); }
// -------------------------------------------------------------------------
private :
Type _type;
Disk_handle _source_object , _target_object;
};
//------------------------------------------------------------------------------
//------------------ General definition of Bitangent_2 -------------------------
//------------------------------------------------------------------------------
template< class D_ >
struct Bitangent_2
: public Bitangent_base<D_>
{
//--------------------------------------------------------------------------
typedef D_ Disk;
typedef Arc_2<Disk> Arc_2;
typedef Bitangent_base<Disk> Base;
typedef typename Base::Disk_handle Disk_handle;
typedef typename Base::Type Type;
typedef typename D_::Point_2 Point_2;
typedef typename D_::Segment_2 Segment_2;
//--------------------------------------------------------------------------
Bitangent_2() : Base() { }
Bitangent_2(const Point_2& v1 , const Point_2& v2 , Type t ,
Disk_handle start, Disk_handle finish)
: Base(v1,v2,t,start,finish) { }
Bitangent_2(Type t, const Arc_2& source,const Arc_2& target)
: Base(t,source.object(),target.object()) { }
Bitangent_2(Type t , Disk_handle o1 , Disk_handle o2)
: Base(t,o1,o2) { }
//--------------------------------------------------------------------------
bool operator==(const Bitangent_2& b) const
{ return Base::operator==(b); }
bool operator!=(const Bitangent_2& b) const
{ return Base::operator!=(b); }
//--------------------------------------------------------------------------
};
//------------------------------------------------------------------------------
//------------------ Partial Specialization for CGAL::Polygon_2 ----------------
//------------------------------------------------------------------------------
#ifdef CGAL_POLYGON_2_H
template< class R_ , class C_ >
struct Bitangent_2 < Polygon_2<R_,C_> >
: public R_::Segment_2 ,
public Bitangent_base< Polygon_2<R_,C_> >
{
// -------------------------------------------------------------------------
typedef R_ R;
typedef typename R::FT FT;
typedef Polygon_2<R_,C_> Disk;
typedef Bitangent_base<Disk> Base;
typedef CGAL::Arc_2<Disk> Arc_2;
typedef CGAL::Arc_2<Disk> CCC;
typedef typename Base::Disk_handle Disk_handle;
typedef typename R_::Segment_2 Segment_2;
typedef typename R_::Point_2 Point_2;
typedef typename Base::Type Type;
// -------------------------------------------------------------------------
typedef typename CCC::Vertex_const_iterator Vertex_iterator;
typedef typename CCC::Vertex_const_iterator Vertex_const_iterator;
typedef typename Disk::Vertex_const_circulator Vertex_circulator;
typedef typename Disk::Vertex_const_circulator Vertex_const_circulator;
// Constructeurs -----------------------------------------------------------
Bitangent_2() : Base() { }
Bitangent_2(const Point_2& v1 , const Point_2& v2 , Type t ,
Disk_handle start, Disk_handle finish)
: Segment_2(v1,v2) , Base(t,start,finish) { }
Bitangent_2(Type t, const Arc_2& source, const Arc_2& target) {
if (source.begin() == source.end() || target.begin() == target.end()) {
*this = Bitangent_2(t,source.object(),target.object());
return;
}
bool t1,t2;
Vertex_const_iterator it_source = source.begin();
Vertex_const_iterator it_source_succ;
Vertex_const_iterator it_target = target.begin();
Vertex_const_iterator it_target_succ;
Point_2 p_source(*it_source);
Point_2 p_target(*it_target);
Point_2 p_target_succ,p_source_succ;
bool finished_source = false;
bool finished_target = false;
do {
if (it_source == source.end()) finished_source = true;
if (it_target == target.end()) finished_target = true;
if (finished_target && finished_source) break;
p_source = *(it_source);
p_target = *(it_target);
it_source_succ = it_source; ++it_source_succ;
if (it_source_succ != source.end())
p_source_succ = *(it_source_succ);
else p_source_succ = p_source;
it_target_succ = it_target; ++it_target_succ;
if (it_target_succ != target.end())
p_target_succ = *(it_target_succ);
else p_target_succ = p_target;
t1 = ( (t == RR || t == RL) && !leftturn (p_source,p_target,p_source_succ))
|| ( (t == LL || t == LR) && !rightturn(p_source,p_target,p_source_succ));
if ( collinear(p_source,p_target,p_source_succ) && p_source != p_source_succ)
t1 = are_ordered_along_line(p_source_succ,p_source,p_target);
t2 = ( (t == LL || t == RL) && !rightturn(p_source,p_target,p_target_succ))
|| ( (t == RR || t == LR) && !leftturn (p_source,p_target,p_target_succ));
if ( collinear(p_source,p_target,p_target_succ) && p_target != p_target_succ)
t2 = are_ordered_along_line(p_source,p_target,p_target_succ);
if (finished_target) ++it_source;
else if (finished_source) ++it_target;
else if (t1 == 1 && t2 == 0) ++it_target;
else if (t1 == 0 && t2 == 1) ++it_source;
else if (t1 == 0 && t2 == 0) {
// Le test d'orientation est different suivant que
// source_is_left et target_is_left sont de meme
// signe ou non
Point_2 tmp(p_target_succ + (p_source_succ - p_target));
if ( ( (t == LR || t == RL)
&& rightturn(p_source_succ, p_source, tmp))
|| ( (t == LL || t == RR)
&& leftturn (p_source_succ, p_source, tmp)))
++it_target;
else ++it_source;
}
} while (t1 == 0 || t2 == 0);
*this = Bitangent_2(p_source,p_target,t,source_obj,target_obj);
}
Bitangent_2(Type t , Disk_handle o1 , Disk_handle o2){
bool exists = true;
bool found = false;
bool found_start = false;
bool found_finish = false;
bool found_start_succ = false;
bool found_start_pred = false;
bool found_finish_succ = false;
bool found_finish_pred = false;
int loop_counter = o1->size() + o2->size();
Vertex_circulator start = o1->vertices_circulator();
Vertex_circulator finish = o2->vertices_circulator();
do {
Vertex_circulator start_succ = start; ++start_succ;
Vertex_circulator finish_succ = finish; ++finish_succ;
Vertex_circulator start_pred = start; --start_pred;
Vertex_circulator finish_pred = finish; --finish_pred;
if (t == LL || t == LR) {
// --------------------------------------------------------------------
found_start_succ =
(leftturn(*start,*finish,*start_succ) ||
*start == *start_succ ||
(collinear(*start,*finish,*start_succ) &&
are_ordered_along_line(*start_succ,*start,*finish)));
// --------------------------------------------------------------------
found_start_pred =
(leftturn(*start,*finish,*start_pred) ||
*start == *start_pred ||
(collinear(*start,*finish,*start_pred) &&
are_ordered_along_line(*start_pred,*start,*finish)));
// --------------------------------------------------------------------
}
else {
// --------------------------------------------------------------------
found_start_succ =
(rightturn(*start,*finish,*start_succ) ||
*start == *start_succ ||
(collinear(*start,*finish,*start_succ) &&
are_ordered_along_line(*start_succ,*start,*finish)));
// --------------------------------------------------------------------
found_start_pred =
(rightturn(*start,*finish,*start_pred) ||
*start == *start_pred ||
(collinear(*start,*finish,*start_pred) &&
are_ordered_along_line(*start_pred,*start,*finish)));
// --------------------------------------------------------------------
}
found_start = (found_start_pred && found_start_succ);
if (t == LL || t == RL) {
// --------------------------------------------------------------------
found_finish_succ =
(rightturn(*finish,*start,*finish_succ) ||
*finish == *finish_succ ||
(collinear(*finish,*start,*finish_succ) &&
are_ordered_along_line(*start,*finish,*finish_succ)));
// --------------------------------------------------------------------
found_finish_pred =
(rightturn(*finish,*start,*finish_pred) ||
*finish == *finish_pred ||
(collinear(*finish,*start,*finish_pred) &&
are_ordered_along_line(*start,*finish,*finish_pred)));
// --------------------------------------------------------------------
}
else {
// --------------------------------------------------------------------
found_finish_succ =
(leftturn(*finish,*start,*finish_succ) ||
*finish == *finish_succ ||
(collinear(*finish,*start,*finish_succ) &&
are_ordered_along_line(*start,*finish,*finish_succ)));
// --------------------------------------------------------------------
found_finish_pred =
(leftturn(*finish,*start,*finish_pred) ||
*finish == *finish_pred ||
(collinear(*finish,*start,*finish_pred) &&
are_ordered_along_line(*start,*finish,*finish_pred)));
// --------------------------------------------------------------------
}
found_finish = (found_finish_pred && found_finish_succ);
/* If found == true we have found the bitangent */
found = (found_start && found_finish);
/* Otherwise we compute one more determinant to decide on which */
/* object to advance */
if (found == false)
{
if (( (t == LR || t == RL)
&& rightturn(*start_succ,*start,*finish_succ + (*start_succ - *finish)))||
((t == LL || t == RR)
&& leftturn (*start_succ,*start,*finish_succ + (*start_succ - *finish))))
{
++finish;
}
else if (((t == LR || t == RL)
&& leftturn (*start_succ,*start,*finish_succ + (*start_succ - *finish)))||
((t == LL || t == RR)
&& rightturn(*start_succ,*start,*finish_succ + (*start_succ - *finish))))
{
++start;
}
else if (found_start == true && found_finish == false) ++finish;
else ++start;
}
--loop_counter;
if (loop_counter < -100) {exists = false; break; }
} while (found == false);
if (exists){ *this = Bitangent_2(*start,*finish,t,o1,o2); }
else { *this = Bitangent_2(); }
}
//--------------------------------------------------------------------------
bool operator==(const Bitangent_2& b) const
{ return Base::operator==(b); }
bool operator!=(const Bitangent_2& b) const
{ return Base::operator!=(b); }
//--------------------------------------------------------------------------
};
#endif // CGAL_POLYGON_2_H
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------ Partial Specialization for CGAL::Point_2 ------------------
//------------------------------------------------------------------------------
template< class R_>
struct Bitangent_2 < Point_2<R_> >
: public R_::Segment_2 ,
public Bitangent_base< Point_2<R_> >
{
// -------------------------------------------------------------------------
typedef R_ R;
typedef typename R::FT FT;
typedef Point_2<R_> Disk;
typedef Bitangent_base<Disk> Base;
typedef Arc_2<Disk> Arc_2;
typedef typename R_::Segment_2 Segment_2;
typedef typename R_::Point_2 Point_2;
typedef typename Base::Type Type;
typedef typename Base::Disk_handle Disk_handle;
// Constructeurs -----------------------------------------------------------
Bitangent_2() : Base() { }
Bitangent_2(const Point_2& v1 , const Point_2& v2 ,
Type t, Disk_handle start, Disk_handle finish)
: Segment_2(v1,v2) , Base(t,start,finish) { }
Bitangent_2(Type t, const Arc_2& source, const Arc_2& target)
: Segment_2(*source.object(),*target.object()) ,
Base(t,source.object(),target.object()) { }
Bitangent_2(Type t , Disk_handle o1 , Disk_handle o2)
: R_::Segment_2(*o1,*o2) , Base(t,o1,o2) { }
//--------------------------------------------------------------------------
bool operator==(const Bitangent_2& b) const
{ return Base::operator==(b); }
bool operator!=(const Bitangent_2& b) const
{ return Base::operator!=(b); }
//--------------------------------------------------------------------------
};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//---------- Partial Specialization for CGAL::Circle_by_radius -----------------
//------------------------------------------------------------------------------
#ifdef CGAL_CIRCLE_BY_RADIUS_2_H
template< class R_>
class Bitangent_2 < Circle_by_radius_2<R_> >
: public R_::Segment_2 ,
public Bitangent_base< Circle_by_radius_2<R_> >
{
public:
// -------------------------------------------------------------------------
typedef R_ R;
typedef typename R::FT FT;
typedef Circle_by_radius_2<R_> Disk;
typedef Bitangent_base<Disk> Base;
typedef Base::Disk_handle Disk_handle;
typedef Arc_2<Disk> Arc_2;
typedef typename R::Segment_2 Segment_2;
typedef typename R::Point_2 Point_2;
typedef Base::Type Type;
// -------------------------------------------------------------------------
public:
// Constructeurs -----------------------------------------------------------
Bitangent_2() : Base() { }
Bitangent_2(const Point_2& v1 , const Point_2& v2 ,
Type t , Disk_handle start, Disk_handle finish)
: Segment_2(v1,v2) , Base(t,start,finish) { }
Bitangent_2(Type t , Disk_handle o1 , Disk_handle o2) : Base(t,o1,o2)
{
compute();
}
Bitangent_2(Type t, const Arc_2& source, const Arc_2& target)
{
*this = Bitangent_2(t,source.object(),target.object());
compute();
}
//--------------------------------------------------------------------------
Point_2 source() const
{
return Point_2(source_object()->center().x() + R1*pbra,
source_object()->center().y() - R1*parb);
}
Point_2 target() const
{
return Point_2(target_object()->center().x() + R2*pbra,
target_object()->center().y() - R2*parb);
}
//--------------------------------------------------------------------------
bool operator==(const Bitangent_2& b) const
{ return Base::operator==(b); }
bool operator!=(const Bitangent_2& b) const
{ return Base::operator!=(b); }
//--------------------------------------------------------------------------
private:
void compute() {
R1 = (is_left_xx())? source_object()->radius():
- source_object()->radius();
R2 = (is_xx_left())? target_object()->radius():
- target_object()->radius();
a = target_object()->center().x() - source_object()->center().x();
b = target_object()->center().y() - source_object()->center().y();
r = R2 - R1;
FT aabb = a*a + b*b;
p = CGAL::sqrt(aabb - r*r);
pbra = (p*b - r*a) / aabb;
parb = (p*a + r*b) / aabb;
}
FT R1,R2,a,b,r,p,pbra,parb;
};
#endif // CGAL_CIRCLE_BY_RADIUS_2_H
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------ Partial Specialization for CGAL::Segment_2 ----------------
//------------------------------------------------------------------------------
#ifdef CGAL_SEGMENT_2_H
template< class R_>
class Bitangent_2 < Segment_2<R_> >
: public R_::Segment_2 ,
public Bitangent_base< Segment_2<R_> >
{
public:
// -------------------------------------------------------------------------
typedef R_ R;
typedef typename R::FT FT;
typedef typename R::Segment_2 Segment_2;
typedef typename R::Point_2 Point_2;
typedef Bitangent_base<Segment_2> Base;
typedef typename Base::Disk Disk;
typedef typename Base::Disk_handle Disk_handle;
typedef Arc_2<Disk> Arc_2;
typedef typename Base::Type Type;
// -------------------------------------------------------------------------
public:
// Constructeurs -----------------------------------------------------------
Bitangent_2() : Base() { }
Bitangent_2(const Point_2& v1 , const Point_2& v2 ,
Type t, Disk_handle start, Disk_handle finish)
: Segment_2(v1,v2) , Base(t,start,finish) { }
Bitangent_2(Type t , Disk_handle o1 , Disk_handle o2) {
if (is_bitangent(t,o1->source(),o2->source(),
o1->target(),o2->target()))
*this = Bitangent_2(o1->source(),o2->source(),t,o1,o2);
else if (is_bitangent(t,o1->source(),o2->target(),
o1->target(),o2->source()))
*this = Bitangent_2(o1->source(),o2->target(),t,o1,o2);
else if (is_bitangent(t,o1->target(),o2->source(),
o1->source(),o2->target()))
*this = Bitangent_2(o1->target(),o2->source(),t,o1,o2);
else *this = Bitangent_2(o1->target(),o2->target(),t,o1,o2);
}
Bitangent_2(Type t, const Arc_2& source, const Arc_2& target)
{ *this = Bitangent_2(t,source.object(),target.object()); }
//--------------------------------------------------------------------------
bool operator==(const Bitangent_2& b) const
{ return Base::operator==(b); }
bool operator!=(const Bitangent_2& b) const
{ return Base::operator!=(b); }
// -------------------------------------------------------------------------
private:
// b = (p1 , p2) and q1 and q2 are the two other points respectively on
// source and target object. Returns true if the bitangent is valid.
bool is_bitangent(Type t , const Point_2& p1, const Point_2& p2,
const Point_2& q1, const Point_2& q2)
{
return ((t == LL
&& (leftturn (p1,p2,q1) ||
(collinear(p1,p2,q1) && are_ordered_along_line(q1,p1,p2)))
&& (leftturn (p1,p2,q2) ||
(collinear(p1,p2,q2) && are_ordered_along_line(p1,p2,q2))))
|| (t == LR
&& (leftturn (p1,p2,q1) ||
(collinear(p1,p2,q1) && are_ordered_along_line(q1,p1,p2)))
&& (rightturn(p1,p2,q2) ||
(collinear(p1,p2,q2) && are_ordered_along_line(p1,p2,q2))))
|| (t == RR
&& (rightturn(p1,p2,q1) ||
(collinear(p1,p2,q1) && are_ordered_along_line(q1,p1,p2)))
&& (rightturn(p1,p2,q2) ||
(collinear(p1,p2,q2) && are_ordered_along_line(p1,p2,q2))))
|| (t == RL
&& (rightturn(p1,p2,q1) ||
(collinear(p1,p2,q1) && are_ordered_along_line(q1,p1,p2)))
&& (leftturn (p1,p2,q2) ||
(collinear(p1,p2,q2) && are_ordered_along_line(p1,p2,q2)))));
}
//--------------------------------------------------------------------------
};
#endif // CGAL_SEGMENT_2_H
//------------------------------------------------------------------------------
template < class D_ >
std::ostream &
operator<<(std::ostream &os, const Bitangent_2<D_> &b)
{
switch (b.type()) {
case Bitangent_2<D_>::LL : os<<"LL "; break;
case Bitangent_2<D_>::LR : os<<"LR "; break;
case Bitangent_2<D_>::RL : os<<"RL "; break;
case Bitangent_2<D_>::RR : os<<"RR "; break;
default: os<<"Unknown type ";
}
typedef Bitangent_2<D_> Bitangent_2;
os << static_cast<const typename Bitangent_2::Segment_2&>(b);
return os;
}
//------------------------------------------------------------------------------
CGAL_END_NAMESPACE
#endif

View File

@ -0,0 +1,69 @@
#ifndef CGAL_BITANGENT_2_BITANGENT_2_INTERSECTION_H
#define CGAL_BITANGENT_2_BITANGENT_2_INTERSECTION_H
#include <CGAL/basic.h>
#include <CEP/Visibility_complex/Bitangent_2.h>
#include <CGAL/Segment_2_Segment_2_intersection.h>
CGAL_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
template < class D_ >
bool do_intersect( const Bitangent_2<D_>& b1, const Bitangent_2<D_>& b2 )
{
typedef typename Bitangent_2<D_>::Segment_2 Segment_2;
// -------------------------------------------------------------------------
if (b1 == b2) return true;
// -------------------------------------------------------------------------
if (b1.source_object() == b2.source_object() &&
b1.target_object() == b2.target_object())
return (b1.is_internal() && b2.is_internal());
// -------------------------------------------------------------------------
if (b1.source_object() == b2.target_object() &&
b1.target_object() == b2.source_object()) {
if (b1.is_internal() && b2.is_internal()) return true;
if (b1.is_internal() || b2.is_internal()) return false;
return (b1.type() != b2.type());
}
// -------------------------------------------------------------------------
if (b1.source() == b2.source()) {
if (b1.is_right_xx() == b2.is_right_xx()) return false;
return ((b1.is_right_xx() &&
leftturn(b1.source(),b1.target(),b2.target())) ||
(b2.is_right_xx() &&
leftturn(b2.source(),b2.target(),b1.target())));
}
// -------------------------------------------------------------------------
if (b1.target() == b2.target()) {
if (b1.is_xx_right() == b2.is_xx_right()) return false;
return ((b1.is_xx_right() &&
leftturn(b1.source(),b1.target(),b2.source())) ||
(b2.is_xx_right() &&
leftturn(b2.source(),b2.target(),b1.source())));
}
// -------------------------------------------------------------------------
if (b1.target() == b2.source()) {
if (b1.is_xx_right() != b2.is_right_xx()) return false;
return ((b1.is_xx_right() &&
leftturn(b1.source(),b1.target(),b2.target())) ||
(b1.is_xx_left() &&
rightturn(b1.source(),b1.target(),b2.target())));
}
// -------------------------------------------------------------------------
if (b1.source() == b2.target()) {
if (b1.is_right_xx() != b2.is_xx_right()) return false;
return ((b2.is_xx_right() &&
leftturn(b2.source(),b2.target(),b1.target())) ||
(b2.is_xx_left() &&
rightturn(b2.source(),b2.target(),b1.target())));
}
// -------------------------------------------------------------------------
return do_intersect(Segment_2(b1.source(),b1.target()),
Segment_2(b2.source(),b2.target()));
// -------------------------------------------------------------------------
}
// -----------------------------------------------------------------------------
CGAL_END_NAMESPACE
#endif // CGAL_BITANGENT_2_BITANGENT_2_INTERSECTION_H

View File

@ -0,0 +1,24 @@
#ifndef CGAL_CIRCLE_2_BITANGENT_2_INTERSECTION_H
#define CGAL_CIRCLE_2_BITANGENT_2_INTERSECTION_H
#include <CGAL/basic.h>
#include <CGAL/Point_2.h>
#include <CGAL/Circle_2.h>
#include <CEP/Visibility_complex/Bitangent_2.h>
CGAL_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
template < class R_ , class C_ >
bool do_intersect( const Circle_2<R_>& c1, const Bitangent_2<C_>& c2 )
{
cerr << "Not implemented Circle_2 - Bitangent_2 intersection !" << endl;
return false;
}
// -----------------------------------------------------------------------------
CGAL_END_NAMESPACE
#endif // CGAL_CIRCLE_2_BITANGENT_2_INTERSECTION_H

View File

@ -0,0 +1,26 @@
#ifndef CGAL_CIRCLE_2_CIRCLE_2_INTERSECTION_H
#define CGAL_CIRCLE_2_CIRCLE_2_INTERSECTION_H
#include <CGAL/basic.h>
#include <CGAL/Point_2.h>
#include <CGAL/Circle_2.h>
#include <CEP/Visibility_complex/predicates/Circle_2_Circle_2_intersection_ftC2.h>
CGAL_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
template < class Rep_ >
bool do_intersect( const Circle_2<Rep_>& c1, const Circle_2<Rep_>& c2 )
{
return circle_2_do_intersectC2(c1.center().x(),c1.center().y(),
c1.squared_radius(),
c2.center().x(),c2.center().y(),
c2.squared_radius());
}
// -----------------------------------------------------------------------------
CGAL_END_NAMESPACE
#endif

View File

@ -0,0 +1,60 @@
#ifndef CGAL_CIRCLE_BY_RADIUS_2_H
#define CGAL_CIRCLE_BY_RADIUS_2_H
#include <CGAL/Circle_2.h>
CGAL_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
template <class R_>
class Circle_by_radius_2 : public R_::Circle_2
{
public:
// -------------------------------------------------------------------------
typedef R_ R;
typedef typename R::RT RT;
typedef typename R::FT FT;
typedef typename R::Circle_2 Circle_2;
typedef typename R::Point_2 Point_2;
// -------------------------------------------------------------------------
Circle_by_radius_2()
: Circle_2() , _radius(0) { }
Circle_by_radius_2(const Circle_2 &t)
: Circle_2(t) , _radius(CGAL_NTS sqrt(t.squared_radius())) { }
Circle_by_radius_2(const Point_2&center,
const FT &radius,
const Orientation &orientation)
: Circle_2(center, radius*radius, orientation) , _radius(radius) { }
Circle_by_radius_2(const Point_2&center,
const FT &radius)
: Circle_2(center, radius*radius, COUNTERCLOCKWISE) , _radius(radius) { }
Circle_by_radius_2(const Point_2&p, const Point_2&q, const Point_2&r)
: Circle_2(p,q,r) ,
_radius(CGAL_NTS sqrt(squared_radius())) { }
Circle_by_radius_2(const Point_2& p, const Point_2& q,
const Orientation &orientation)
: Circle_2(p,q,orientation) ,
_radius(CGAL_NTS sqrt(squared_radius())) { }
Circle_by_radius_2(const Point_2& p,
const Point_2& q)
: Circle_2(p,q,COUNTERCLOCKWISE) ,
_radius(CGAL_NTS sqrt(squared_radius())) { }
Circle_by_radius_2(const Point_2& center,
const Orientation& orientation)
: Circle_2(center,FT(0),orientation) ,
_radius(CGAL_NTS sqrt(squared_radius())) { }
Circle_by_radius_2(const Point_2& center)
: Circle_2(center,FT(0),COUNTERCLOCKWISE) ,
_radius(CGAL_NTS sqrt(squared_radius())) { }
// -------------------------------------------------------------------------
FT radius() const { return _radius; }
private:
FT _radius;
};
// -----------------------------------------------------------------------------
CGAL_END_NAMESPACE
#endif // CGAL_CIRCLE_BY_RADIUS_2_H

View File

@ -0,0 +1,94 @@
#ifndef CGAL_POLYGON_2_POLYGON_2_INTERSECTION_H
#define CGAL_POLYGON_2_POLYGON_2_INTERSECTION_H
#include <CGAL/basic.h>
#include <CGAL/Segment_2.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Segment_2_Segment_2_intersection.h>
CGAL_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
template < class Traits , class Container >
bool do_intersect( const Polygon_2<Traits,Container>& P,
const Polygon_2<Traits,Container>& Q )
{
// -------------------------------------------------------------------------
// This function assumes the polygons are convex.
CGAL_precondition(P.is_convex() && Q.is_convex());
// -------------------------------------------------------------------------
// If P or Q is a point we use the CGAL bounded_side methods
if (P.size() == 1)
return (Q.bounded_side(*P.vertices_begin()) != CGAL::ON_UNBOUNDED_SIDE);
if (Q.size() == 1)
return (P.bounded_side(*Q.vertices_begin()) != CGAL::ON_UNBOUNDED_SIDE);
// -------------------------------------------------------------------------
// two booleans to avoid cycling more than twice on a Polygon.
bool a_has_cycled = false;
bool b_has_cycled = false;
// -------------------------------------------------------------------------
typedef Polygon_2<Traits,Container> Polygon_2;
typedef typename Polygon_2::Vertex_const_iterator Vertex_const_iterator;
Vertex_const_iterator a = P.vertices_begin();
Vertex_const_iterator b = Q.vertices_begin();
// -------------------------------------------------------------------------
do {
// ---------------------------------------------------------------------
if (a == P.vertices_end()) {
a = P.vertices_begin(); a_has_cycled = true;
}
if (b == Q.vertices_end()) {
b = Q.vertices_begin(); b_has_cycled = true;
}
// ---------------------------------------------------------------------
// Computations of key variables.
Vertex_const_iterator apred , bpred;
apred = (a == P.vertices_begin()) ? P.vertices_end() : a; --apred;
bpred = (b == Q.vertices_begin()) ? Q.vertices_end() : b; --bpred;
// ---------------------------------------------------------------------
// If A & B intersect, return true.
typedef typename Polygon_2::Segment_2 Segment_2;
/*
cout << "apred->Ptr() = " << long(apred->Ptr()) << endl;
cout << "bpred->Ptr() = " << long(bpred->Ptr()) << endl;
cout << "a->Ptr() = " << long(a->Ptr()) << endl;
cout << "b->Ptr() = " << long(b->Ptr()) << endl;
*/
Segment_2 s1(*apred,*a);
Segment_2 s2(*bpred,*b);
if ( do_intersect(s1,s2) ) return true;
// ---------------------------------------------------------------------
// Else Advance
// ---------------------------------------------------------------------
Orientation chi2 = orientation( *apred , *a , *b + (*apred - *bpred) );
Orientation chi1b = orientation( *bpred, *b, *a );
Orientation chi1a = orientation( *apred, *a, *b );
// ---------------------------------------------------------------------
if ( chi2 == COLLINEAR ) {
if ( chi1b == RIGHTTURN && chi1a == RIGHTTURN ) return false;
if ( chi1b == COLLINEAR && chi1a != RIGHTTURN ) ++a;
else ++b;
}
else if ( chi2 == LEFTTURN ) {
if ( chi1a == LEFTTURN ) ++a;
else ++b;
}
else {
if ( chi1b == LEFTTURN ) ++b;
else ++a;
}
// ---------------------------------------------------------------------
} while ( (a != P.vertices_end() || !a_has_cycled) &&
(b != Q.vertices_end() || !b_has_cycled) );
// -------------------------------------------------------------------------
return ((P.bounded_side(*Q.vertices_begin()) != CGAL::ON_UNBOUNDED_SIDE) ||
(Q.bounded_side(*P.vertices_begin()) != CGAL::ON_UNBOUNDED_SIDE));
// -------------------------------------------------------------------------
//return false;
// -------------------------------------------------------------------------
}
// -----------------------------------------------------------------------------
CGAL_END_NAMESPACE
#endif

Some files were not shown because too many files have changed in this diff Show More