Initial revision
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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.
|
||||
|
|
@ -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) $<
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
|
@ -0,0 +1,4 @@
|
|||
halfedge.gif
|
||||
halfedge_small.gif
|
||||
hds_design_col.gif
|
||||
loop.gif
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
% +------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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
|
||||
% +----------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
hds_optional.gif
|
||||
hds_optional_small.gif
|
||||
euler_face.gif
|
||||
euler_vertex.gif
|
||||
euler_center.gif
|
||||
euler_loop.gif
|
||||
|
|
@ -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 %%
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
% +------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 4.7 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 5.8 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 5.3 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
|
|
@ -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 = {}
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
\part{User Manual}
|
||||
\input{Visibility_complex/main}
|
||||
|
||||
\part{Reference Manual}
|
||||
\input{Visibility_complex_ref/main}
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -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
|
||||
|
|
@ -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 %%
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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¢er,
|
||||
const FT &radius,
|
||||
const Orientation &orientation)
|
||||
: Circle_2(center, radius*radius, orientation) , _radius(radius) { }
|
||||
Circle_by_radius_2(const Point_2¢er,
|
||||
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
|
||||
|
|
@ -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
|
||||