diff --git a/GraspPlanning/CMakeLists.txt b/GraspPlanning/CMakeLists.txt
index e8f285bb09e5d80264289c8f8a9dec9c51886d3c..da29449b2882adee175276d6bc515609f56f6de2 100644
--- a/GraspPlanning/CMakeLists.txt
+++ b/GraspPlanning/CMakeLists.txt
@@ -17,21 +17,7 @@ ENDMACRO(ADD_GRASPSTUDIO_TEST)
 
 
 ########### QHULL #################
-IF(NOT BUILD_qhull)
-    find_package(QHULL QUIET)
-    IF (NOT QHULL_FOUND)
-		MESSAGE (STATUS "Could not find QHULL, building internal version simox-qhull")
-		SET (BUILD_qhull ON)
-		SET (BUILD_qhull ON PARENT_SCOPE)
-    ENDIF()
-ENDIF()
-
-IF(BUILD_qhull)
-    ADD_SUBDIRECTORY(ExternalDependencies/qhull-2003.1)
-    set(QHULL_LIBRARIES simox-qhull)
-else()
-    find_package(QHULL REQUIRED)
-endif()
+find_package(QHULL REQUIRED)
 ########### END QHULL #################
 
 
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/Announce.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/Announce.txt
deleted file mode 100644
index 5813e25f9b6f9cb9edee1a84a7f08a420653b15f..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/Announce.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-
- Qhull 2003.1 2003/12/30
-
-        http://www.qhull.org
-        http://savannah.gnu.org/projects/qhull/
-        http://www6.uniovi.es/ftp/pub/mirrors/geom.umn.edu/software/ghindex.html
-        http://www.geomview.org
-        http://www.geom.uiuc.edu
-
-Qhull computes convex hulls, Delaunay triangulations, Voronoi diagrams, 
-furthest-site Voronoi diagrams, and halfspace intersections about a point. 
-It runs in 2-d, 3-d, 4-d, or higher.  It implements the Quickhull algorithm 
-for computing convex hulls.   Qhull handles round-off errors from floating 
-point arithmetic.  It can approximate a convex hull.
-
-The program includes options for hull volume, facet area, partial hulls,
-input transformations, randomization, tracing, multiple output formats, and
-execution statistics.  The program can be called from within your application.
-You can view the results in 2-d, 3-d and 4-d with Geomview.
-
-To download Qhull:
-        http://www.qhull.org/download
-        http://savannah.nongnu.org/files/?group=qhull
-
-Download qhull-96.ps for:
-
-        Barber, C. B., D.P. Dobkin, and H.T. Huhdanpaa, 
-        "The Quickhull Algorithm for Convex Hulls," ACM
-        Trans. on Mathematical Software, Dec. 1996.
-        http://www.acm.org/pubs/citations/journals/toms/1996-22-4/p469-barber/
-        http://citeseer.nj.nec.com/83502.html
-
-Abstract:
-
-The convex hull of a set of points is the smallest convex set that contains
-the points.  This article presents a practical convex hull algorithm that
-combines the two-dimensional Quickhull Algorithm with  the general dimension
-Beneath-Beyond Algorithm.  It is similar to the randomized, incremental
-algorithms for convex hull and Delaunay triangulation.  We provide empirical
-evidence that the algorithm runs faster when the input contains non-extreme
-points, and that it uses less memory. 
-
-Computational geometry algorithms have traditionally assumed that input sets
-are well behaved.  When an algorithm is implemented with floating point
-arithmetic, this assumption can lead to serious errors.  We briefly describe
-a solution to this problem when computing the convex hull in two, three, or
-four dimensions.  The output is a set of "thick" facets that contain all
-possible exact convex hulls of the input.   A variation is effective in five
-or more dimensions.  
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/CMakeLists.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/CMakeLists.txt
deleted file mode 100644
index 97d07defd103a04613241a24248cf7fa7ecd00d1..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-PROJECT(simox-qhull)
-
-MESSAGE (STATUS " **** Configuring qhull")
-
-# Specify sources and headers
-FILE(GLOB SRCS ${PROJECT_SOURCE_DIR}/src/*.c)
-FILE(GLOB INCS ${PROJECT_SOURCE_DIR}/src/*.h)
-
-ADD_LIBRARY(${PROJECT_NAME} STATIC ${SRCS} ${INCS})
-
-TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src)
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES FOLDER "3rd_Party")
-
-# .DLL path
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${Simox_BIN_DIR})
-# .so path
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${Simox_LIB_DIR})
-# .lib path (this is needed for setting the DLL-import library path on windows)
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${Simox_LIB_DIR})
-
-
-#######################################################################################
-############################ Setup for installation ###################################
-#######################################################################################
-
-install(TARGETS ${PROJECT_NAME}
-  # IMPORTANT: Add the library to the "export-set"
-  EXPORT SimoxTargets
-  RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin
-  LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT shlib
-  ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT library
-  COMPONENT dev)
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/COPYING.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/COPYING.txt
deleted file mode 100644
index 7230a27a3269ee9455acf04de4793e5ab5e33d30..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/COPYING.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-                    Qhull, Copyright (c) 1993-2003
-
-       The National Science and Technology Research Center for
-        Computation and Visualization of Geometric Structures
-                        (The Geometry Center)
-                       University of Minnesota
-
-                       email: qhull@qhull.org
-
-This software includes Qhull from The Geometry Center.  Qhull is 
-copyrighted as noted above.  Qhull is free software and may be obtained 
-via http from www.qhull.org.  It may be freely copied, modified, 
-and redistributed under the following conditions:
-
-1. All copyright notices must remain intact in all files.
-
-2. A copy of this text file must be distributed along with any copies 
-   of Qhull that you redistribute; this includes copies that you have 
-   modified, or copies of programs or other software products that 
-   include Qhull.
-
-3. If you modify Qhull, you must include a notice giving the
-   name of the person performing the modification, the date of
-   modification, and the reason for such modification.
-
-4. When distributing modified versions of Qhull, or other software 
-   products that include Qhull, you must provide notice that the original 
-   source code may be obtained as noted above.
-
-5. There is no warranty or other guarantee of fitness for Qhull, it is 
-   provided solely "as is".  Bug reports or fixes may be sent to 
-   qhull_bug@qhull.org; the authors may or may not act on them as 
-   they desire.
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/File_id.diz b/GraspPlanning/ExternalDependencies/qhull-2003.1/File_id.diz
deleted file mode 100644
index 765b146c6568a927132db0c75f28af79fb7ba0b4..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/File_id.diz
+++ /dev/null
@@ -1,12 +0,0 @@
-Qhull 2003.1 - Qhull computes convex hulls,
-Delaunay triangulations, halfspace inter-
-sections about a point, Voronoi diagrams, 
-furthest-site Delaunay triangulations, and 
-furthest-site Voronoi diagrams.  Qhull 
-works with 2-d, 3-d, 4-d, 5-d, and higher 
-dimensions.  It computes volumes, surface 
-areas, and approximations.  It runs in a 
-DOS window under Windows 95/NT/XP.
-www.qhull.org, freeware.
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/QHULL-GO.pif b/GraspPlanning/ExternalDependencies/qhull-2003.1/QHULL-GO.pif
deleted file mode 100644
index a5414428207cfe796fb9a7fff6ae0790af968500..0000000000000000000000000000000000000000
Binary files a/GraspPlanning/ExternalDependencies/qhull-2003.1/QHULL-GO.pif and /dev/null differ
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/README.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/README.txt
deleted file mode 100644
index 4cbbdde6123dbf79dba3b3bd66b13ae149c9639d..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/README.txt
+++ /dev/null
@@ -1,322 +0,0 @@
-Name
-
-      qhull, rbox         2003.1           2003/12/30
-  
-Convex hull, Delaunay triangulation, Voronoi diagrams, Halfspace intersection
- 
-      Documentation:
-        html/index.htm
-
-      Available from:
-        <http://www.qhull.org>
-	<http://savannah.gnu.org/projects/qhull>
- 
-     Version 1 (simplicial only):
-        <http://www.qhull.org/download/qhull-1.0.tar.gz>
-        <http://www.qhull.org/download/qhull.sit.hqx>
-       
-      News and a paper:
-        <http://www.qhull.org/news>
-        <http://citeseer.nj.nec.com/83502.html>
-
-Purpose
-
-  Qhull is a general dimension convex hull program that reads a set 
-  of points from stdin, and outputs the smallest convex set that contains 
-  the points to stdout.  It also generates Delaunay triangulations, Voronoi 
-  diagrams, furthest-site Voronoi diagrams, and halfspace intersections
-  about a point.  
-
-  Rbox is a useful tool in generating input for Qhull; it generates 
-  hypercubes, diamonds, cones, circles, simplices, spirals, 
-  lattices, and random points.
-  
-  Qhull produces graphical output for Geomview.  This helps with
-  understanding the output. <http://www.geomview.org>
-
-    
-Environment requirements
-
-  Qhull and rbox should run on all 32-bit and 64-bit computers.  Use
-  an ANSI C or C++ compiler to compile the program.  The software is 
-  self-contained.  
-  
-  Qhull is copyrighted software.  Please read COPYING.txt and REGISTER.txt
-  before using or distributing Qhull.
-
-To contribute to Qhull
-
-  Qhull is on Savannah at http://savannah.gnu.org/projects/qhull/
-
-Qhull on Windows 95, 98, ME, NT, 2000, XP
-
-  The zip file contains rbox.exe, qhull.exe, qconvex.exe, qdelaunay.exe, 
-  qhalf.exe, qvoronoi.exe, documentation files, and source files.
-  
-  To install Qhull:
-  - Unzip the files into a directory.  You may use WinZip32 <www.hotfiles.com>
-  - Click on QHULL-GO
-    
-  - In Windows 95, the DOS window needs improvement.
-      - Increase the size of the screen font to 8x12.
-      - If the text is too dim, fix the screen colors with shareware (e.g., crt.exe)
-  - If you use qhull a lot, consider using the Cygwin Unix shell (www.cygwin.com),
-
-  To learn about Qhull:
-  - Execute 'qconvex' for a synopsis and examples.
-  - Execute 'rbox 10 | qconvex' to compute the convex hull of 10 random points.
-  - Execute 'rbox 10 | qconvex i TO file' to write results to 'file'. 
-  - If an error occurs, Windows 95 sends the error to stdout instead of stderr 
-      - use 'TO xxx' to send normal output to xxx and error output to stdout
-  - Browse the documentation: qhull\html\index.htm
-
-Compiling with cygwin on Windows NT, 2000, XP
-  - install cygwin [www.cygwin.com] with gcc, make, ar, and ln
-  - cd qhull/src
-  - make -f Makefile.txt
-
-Qhull on Unix (Debian)
-
-  The gzip file, qhull.tar.gz, contains documentation and source files for
-  qhull and rbox.  It should compile on all Unix systems, including Debian.
-  You may also use the source instructions below.
-  
-  To unpack the gzip file
-  - tar zxf qhull.tar.gz
-  - cd qhull
-  
-  Compile with the configure Makefile [R. Laboissiere]:
-  - ./configure
-  - make
-
-Compiling the source distribution
-
-  The gzip file, qhull-src.tgz, contains documentation and source files for
-  qhull and rbox.  
-  
-  To unpack the gzip file
-  - tar zxf qhull-src.tgz
-  - cd qhull
-  
-  Compiling with Makefile (i.e., Makefile.txt)   
-  - cd src
-  - in Makefile, check the CC, CCOPTS1, PRINTMAN, and PRINTC defines
-      - the defaults are gcc and enscript
-      - CCOPTS1 should include the ANSI flag.  It defines __STDC__
-  - in user.h, check the definitions of qh_SECticks and qh_CPUclock.
-      - use '#define qh_CLOCKtype 2' for timing runs longer than 1 hour
-  - type: make 
-      - this builds: qhull qconvex qdelaunay qhalf qvoronoi rbox libqhull.a
-  - type: make doc
-      - this prints the man page
-      - See also qhull/html/index.htm
-  - if your compiler reports many errors, it is probably not a ANSI C compiler
-      - you will need to set the -ansi switch or find another compiler
-  - if your compiler warns about missing prototypes for fprintf() etc.
-      - this is ok, your compiler should have these in stdio.h
-  - if your compiler warns about missing prototypes for memset() etc.
-      - include memory.h in qhull_a.h
-  - if your compiler is gcc-2.95.1, you need to set flag -fno-strict-aliasing.  
-      - This flag is set by default for other versions [Karas, Krishnaswami]
-  - if your compiler reports "global.c: storage size of 'qh_qh' isn't known"
-      - delete the initializer "={0}" in global.c, stat.c and mem.c
-  - if your compiler warns about "stat.c: improper initializer"
-      - this is ok, the initializer is not used
-  - if you have trouble building libqhull.a with 'ar'
-      - try 'make -f Makefile.txt qhullx' 
-  - if the code compiles, the qhull test case will automatically execute
-  - if an error occurs, there's an incompatibility between machines
-      - For gcc-2.95.1, you need to set flag -fno-strict-aliasing.
-	    It is set by default for other versions of gcc [Karas, Krishnaswami]
-      - If you can, try a different compiler 
-      - You can turn off the Qhull memory manager with qh_NOmem in mem.h
-      - You can turn off compiler optimization (-O2 in Makefile)
-      - If you find the source of the problem, please let us know
-  - if you have Geomview (www.geomview.org)
-       - try  'rbox 100 | qconvex G >a' and load 'a' into Geomview
-       - run 'q_eg' for Geomview examples of Qhull output (see qh-eg.htm)
-  - to install the programs and their man pages:
-      - define MANDIR and BINDIR
-      - type 'make install'
-
-Compiling on Windows 95, 98, NT, 2000, XP
-
-  Qhull compiles as a console application in Visual C++ 5.0 at warning 
-  level 3.
-
-  Visual C++ quickstart for qhull.exe only:
-    - create a "Win32 console application" called "qhull"
-	- add the following files:
-	    geom.c geom2.c global.c io.c mem.c merge.c poly.c poly2.c qhull.c
-		qset.c stat.c unix.c user.c
-    - create a "Win32 console application" called "rbox" 
-	- add rbox.c
-
-  Visual C++ quickstart for qhull library, qhull.exe, qconvex.exe, etc.
-    - To simplify setting up lots of projects, 
-	- create a temporary "Win32 console application" called "source"
-	- add all .c files from .../src/...
-	- In Tools::Options::Tab
-	  Set tab size to 8 and indent size to 2
-
-    - create a "Win32 console application" called "rbox"
-	- move rbox.c from "qhull source"
-	- for Project:Settings..., Link
-	  you only need the default libraries
-	- build the project
-
-    - create a "Win32 static library" called "library"
-	- move these files from "qhull source"
-	    geom.c geom2.c global.c io.c mem.c merge.c poly.c poly2.c qhull.c
-		qset.c stat.c user.c
-	- set the library file (use the same for debug and release)
-	- build the project
-
-    - create a "Win32 console application" called "qhull"
-	- Move unix.c from "qhull source"
-	- Add the library file created by "library"
-	- Qhull does not use other libraries
-
-    - create a "Win32 console application" called "qconvex"
-	- Move qconvex.c from "qhull source"
-	- Copy the library file from "qhull"
-
-    - do the same for qdelaun.c, qhalf, qvoronoi.c, user_eg.c, user_eg2.c
-	- delete "qhull sources" since it is no longer needed
-	- use Project:Settings to make any changes
-	- use batch build to rebuild everything
-  
-  Qhull compiles with Borland C++ 5.0 bcc32.  A Makefile is included.
-  Execute 'make -f Mborland'.  If you use the Borland IDE, set the ANSI
-  option in Options:Project:Compiler:Source:Language-compliance.
-  
-  Qhull compiles with Borland C++ 4.02 for Win32 and DOS Power Pack.  
-  Use 'make -f Mborland -D_DPMI'.  Qhull 1.0 compiles with Borland 
-  C++ 4.02.  For rbox 1.0, use "bcc32 -WX -w- -O2-e -erbox -lc rbox.c".  
-  Use the same options for Qhull 1.0. [D. Zwick]
-  
-  Qhull compiles with Metrowerks C++ 1.7 with the ANSI option.
-
-  If you turn on full warnings, the compiler will report a number of 
-  unused variables, variables set but not used, and dead code.  These are
-  intentional.  For example, variables may be initialized (unnecessarily)
-  to prevent warnings about possible use of uninitialized variables.  
-
-Compiling on the Power Macintosh
-
-  Qhull compiles on the Power Macintosh with Metrowerk's C compiler.
-  It uses the SIOUX interface to read point coordinates and return output.
-  There is no graphical output.  For project files, see 'Compiling for
-  Windows 95'.  Instead of using SIOUX, Qhull may be embedded within an 
-  application.  
-
-  Version 1 is available for Macintosh computers by download of qhull.sit.hqx
-  It reads point coordinates from a standard file and returns output
-  to a standard file.  There is no graphical output.
-
-
-Compiling on other machines
- 
-  Some users have reported problems with compiling Qhull under Irix 5.1.  It
-  compiles under other versions of Irix. 
-  
-  If you have troubles with the memory manager, you can turn it off by
-  defining qh_NOmem in mem.h.
-
-  You may compile Qhull with a C++ compiler.  
-
-
-Distributed files
-
-  README.txt           // instructions for installing Qhull 
-  REGISTER.txt         // Qhull registration 
-  COPYING.txt          // copyright notice 
-  QHULL-GO.pif	       // Windows icon for qhull-go.bat
-  Announce.txt         // announcement 
-  Changes.txt          // change history for Qhull and rbox 
-  File_id.diz	       // package descriptor
-  index.htm            // Home page 
-  html/qh-faq.htm      // Frequently asked questions
-  html/qh-get.htm      // Download page
-  html/index.htm       // Manual
-  src/Makefile.txt     // Makefile for Unix or cygwin 'make' 
-  src/Mborland         // Makefile for Borland C++/Win32
-  src/Make-config.sh   // Create Debian configure and automake
- 
-src/      
-  rbox consists of:
-     rbox.exe          // Win32 executable (.zip only) 
-     rbox.htm          // html manual 
-     rbox.man          // Unix man page 
-     rbox.txt
-     rbox.c            // source program 
-     
-  qhull consists of:
-     qhull.exe         // Win32 executables (.zip only) 
-     qconvex.exe
-     qdelaunay.exe
-     qhalf.exe
-     qvoronoi.exe
-     qhull-go.bat      // DOS window
-     qconvex.htm       // html manuals
-     qdelaun.htm
-     qdelau_f.htm        
-     qhalf.htm
-     qvoronoi.htm
-     qvoron_f.htm
-     qh-eg.htm
-     qh-impre.htm
-     qh-in.htm
-     index.htm
-     qh-opt*.htm
-     qh-quick.htm
-     qh--4d.gif,etc.   // images for manual 
-     qhull.man         // Unix man page 
-     qhull.txt
-     q_eg              // shell script for Geomview examples
-     q_egtest          // shell script for Geomview test examples
-     q_test            // shell script to test qhull
-  
-  top-level source files:
-     src/index.htm     // index to source files 
-     qh-...htm         //   specific files
-     user.h            // header file of user definable constants 
-     qhull.h           // header file for qhull 
-     unix.c            // Unix front end to qhull 
-     qhull.c           // Quickhull algorithm with partitioning 
-     user.c            // user re-definable functions 
-     user_eg.c         // example of incorporating qhull into a user program 
-     user_eg2.c        // more complex example 
-     qhull_interface.cpp // call Qhull from C++
-
-  other source files:
-     qhull_a.h         // include file for *.c 
-     geom.c            // geometric routines 
-     geom2.c
-     geom.h	
-     global.c          // global variables 
-     io.c              // input-output routines 
-     io.h
-     mem.c             // memory routines, this is stand-alone code 
-     mem.h
-     merge.c           // merging of non-convex facets 
-     merge.h
-     poly.c            // polyhedron routines 
-     poly2.c
-     poly.h 
-     qset.c            // set routines, this only depends on mem.c 
-     qset.h
-     stat.c            // statistics 
-     stat.h
-
-Authors:
-
-  C. Bradford Barber                    Hannu Huhdanpaa
-  bradb@qhull.org                    hannu@qhull.org
-  
-                    The Geometry Center
-                    University of Minnesota
-  
-  Qhull 1.0 was developed under NSF grants NSF/DMS-8920161 and
-  NSF-CCR-91-15793 750-7504 at the Geometry Center and Harvard 
-  University.  If you find Qhull useful, please let us know.
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/REGISTER.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/REGISTER.txt
deleted file mode 100644
index 4682e02669f1da0583867cdc91f2c82f1a07c676..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/REGISTER.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-Dear User of Geometry Center Software:
-
-We would like to find out how you are using our software.  Think of
-Geometry Center software as a new kind of shareware: you share your
-science and successes with us, and we share our software and support
-with you. 
-
-If you use Geometry Center software, please send us a note telling
-us what you are doing with it.
-
-We need to know:
-
-  (1) What you are working on - an abstract of your work would be
-      fine.
-
-  (2) What Geometry Center software you use.
-
-  (3) How that software has helped you, for example, by increasing
-      your productivity or allowing you to do things you could not do
-      before.  In particular, if you feel that Geometry Center
-      software has had a direct bearing on your work, please tell us
-      about this.
-
-We encourage you to cite the use of any Geometry Center software you
-have used in your publications.  
-
-To cite Qhull, use
-
-        Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., "The Quickhull 
-	algorithm for convex hulls," ACM Trans. on Mathematical Software,
-	Dec 1996.  http://www.qhull.org
-
-Please send e-mail to
-
-    qhull@qhull.org
-
-Thank you!
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/Qhull-go.bat b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/Qhull-go.bat
deleted file mode 100644
index 22792bde3209e7eb674ddac44ada9c6fe1ce256d..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/Qhull-go.bat
+++ /dev/null
@@ -1,20 +0,0 @@
-@echo off
-echo.
-echo ========= Qhull-go.bat, DOS window for Qhull and Rbox ===========
-echo. 
-echo       Use arrow keys to repeat and edit commands
-echo.
-echo       Use properties button to increase size to 50 lines
-echo.
-echo       Change font to 8x12
-echo.
-echo       Change screen colors with ansi.sys or crt.exe v4.0 (shareware)
-echo.
-echo       For scrolling back, try peruse (PC Magazine utility)
-echo.
-echo       If full-screen, use alt-enter to return to Windows
-echo.
-echo       Type 'qconvex' for synopsis and examples.
-echo.
-doskey /insert
-%comspec%
\ No newline at end of file
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_eg b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_eg
deleted file mode 100644
index e9d0cfb289a3a65b9173612222741c1ff5bb08d0..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_eg
+++ /dev/null
@@ -1,58 +0,0 @@
-#! /bin/sh
-#   writes examples to eg/
-#   see html/qh_eg.htm
-set -v
-rbox c D3 | qconvex s G >eg/eg.01.cube
-rbox c d G2.0 | qconvex s G >eg/eg.02.diamond.cube
-rbox s 100 D3 | qconvex s G >eg/eg.03.sphere
-rbox s 100 D2 | qconvex s G >eg/eg.04.circle
-rbox 10 l | qconvex s G >eg/eg.05.spiral 
-rbox 1000 D2 | qconvex s C-0.03 Qc Gapcv >eg/eg.06.merge.square
-rbox 1000 D3 | qconvex s G >eg/eg.07.box 
-rbox c G0.4 s 500 | qconvex s G >eg/eg.08a.cube.sphere
-rbox d G0.6 s 500 | qconvex s G >eg/eg.08b.diamond.sphere
-rbox 100 L3 G0.5 s | qconvex s G >eg/eg.09.lens
-rbox 100 s P0.5,0.5,0.5 | qconvex s Ga QG0 >eg/eg.10a.sphere.visible
-rbox 100 s P0.5,0.5,0.5 | qconvex s Ga QG-0 >eg/eg.10b.sphere.beyond
-rbox 100 s P0.5,0.5,0.5 | qconvex s Ga QG0 PG >eg/eg.10c.sphere.horizon
-rbox 100 s P0.5,0.5,0.5 | qconvex s Ga QV0 PgG >eg/eg.10d.sphere.cone
-rbox 100 s P0.5,0.5,0.5 | qconvex s Ga >eg/eg.10e.sphere.new
-rbox 100 s P0.5,0.5,0.5 | qhull s Ga QV0g Q0 >eg/eg.14.sphere.corner
-rbox 500 W0 | qconvex s QR0 Qc Gvp >eg/eg.15a.surface
-rbox 500 W0 | qconvex s QR0 Qt Qc Gvp >eg/eg.15b.triangle
-rbox 500 W0 | qconvex s QR0 QJ5e-2 Qc Gvp >eg/eg.15c.joggle
-echo 2 = rbox 6 r s D2, rbox 15 B0.3 W0.25, c G0.5 >eg/eg.data.17
-echo 25 >>eg/eg.data.17
-rbox 15 D2 B0.3 W0.25 c G0.5 | tail +3 >>eg/eg.data.17
-rbox 6 r s D2 B0.2 | tail +3 >>eg/eg.data.17
-qdelaunay s Qt <eg/eg.data.17 GnraD2 >eg/eg.17a.delaunay.2
-qdelaunay s <eg/eg.data.17 GnraD2 >eg/eg.17b.delaunay.2i
-qdelaunay s <eg/eg.data.17 C-0 Ga >eg/eg.17c.delaunay.2-3
-qvoronoi s QJ <eg/eg.data.17 Gna >eg/eg.17d.voronoi.2
-qvoronoi s <eg/eg.data.17 Gna >eg/eg.17e.voronoi.2i
-rbox c G0.1 d | qdelaunay Gt Qz >eg/eg.17f.delaunay.3
-rbox 10 D2 d | qdelaunay s Qu G >eg/eg.18a.furthest.2-3
-rbox 10 D2 d | qdelaunay s Qu Pd2 G >eg/eg.18b.furthest-up.2-3
-rbox 10 D2 d | qvoronoi s Qu Gv >eg/eg.18c.furthest.2 
-rbox 10 D3 | qvoronoi s FQ QV5 p | qconvex s G >eg/eg.19.voronoi.region.3
-rbox r s 20 Z1 G0.2 | qconvex s QR1 G >eg/eg.20.cone
-rbox 200 s | qconvex s Qc R0.014 Gpav >eg/eg.21b.roundoff.fixed
-rbox 1000 s| qconvex s C0.01 Qc Gcrp >eg/eg.22a.merge.sphere.01
-rbox 1000 s| qconvex s C-0.01 Qc Gcrp >eg/eg.22b.merge.sphere.-01
-rbox 1000 s| qconvex s C0.05 Qc Gcrpv >eg/eg.22c.merge.sphere.05
-rbox 1000 s| qconvex s C-0.05 Qc Gcrpv >eg/eg.22d.merge.sphere.-05
-rbox 1000 | qconvex s Gcprvah C0.1 Qc >eg/eg.23.merge.cube
-rbox 5000 D4 | qconvex s GD0v Pd0:0.5 C-0.02 C0.1 >eg/eg.24.merge.cube.4d-in-3d
-rbox 5000 D4 | qconvex s s C-0.02 C0.1 Gh >eg/eg.30.4d.merge.cube
-rbox 20 D3 | qdelaunay s G >eg/eg.31.4d.delaunay
-rbox 30 s D4 | qconvex s G Pd0d1d2D3 >eg/eg.32.4d.octant
-rbox 10 r s Z1 G0.3 | qconvex G >eg/eg.33a.cone
-rbox 10 r s Z1 G0.3 | qconvex FQ FV n | qhalf G >eg/eg.33b.cone.dual
-rbox 10 r s Z1 G0.3 | qconvex FQ FV n | qhalf FQ s Fp | qconvex G >eg/eg.33c.cone.halfspace
-
-echo ==the following should generate flipped and concave facets== >/dev/null
-rbox 200 s | qhull Q0 s R0.014 Gav Po >eg/eg.21a.roundoff.errors
-echo ==the preceeding should report flipped and concave facets== >/dev/null
-
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_egtest b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_egtest
deleted file mode 100644
index 8948dcb1d6c426bcdfcfe727278e2f22b0a9ce00..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_egtest
+++ /dev/null
@@ -1,33 +0,0 @@
-#! /bin/sh
-#   writes examples to eg/
-set -v
-rbox d D3 | qconvex s Gnrv Tc Tv >eg/eg.t01.spheres.3
-rbox d D2 | qconvex s Gnv  Tc Tv >eg/eg.t02.spheres.2
-rbox d D3 | qconvex s Gnrp Tc Tv >eg/eg.t03.points.3
-rbox d D2 | qconvex s Gnp Tc Tv >eg/eg.t04.points.2
-rbox c D4 | qconvex s C0.05 GnpcD3 Pd3:0.5 Tc Tv >eg/eg.t05.centrum.points.4-3
-rbox d D3 | qconvex s Gnrc Tc Tv >eg/eg.t06.centrums.3.precise
-rbox d D3 | qconvex s C0.05 Gnrc Tc Tv >eg/eg.t07.centrums.3
-rbox d D2 | qconvex s C0.05 Gc Tc Tv >eg/eg.t08.centrums.2
-rbox d D3 | qconvex s Gnha Tc Tv >eg/eg.t09.intersect.3
-rbox d D3 | qconvex s GaD0 Pd0 Tc Tv >eg/eg.t10.faces.3-2
-rbox d D3 | qconvex s GnrpD0 Pd0 Tc Tv >eg/eg.t11.points.3-2
-rbox d D3 | qconvex s C0.05 GnrcD0 Pd0 Tc Tv >eg/eg.t12.centrums.3-2
-rbox d D3 | qconvex s GnhaD0 Pd0 Tc Tv >eg/eg.t13.intersect.3-2
-rbox d D3 | qconvex s GnrvD0 Pd0 Tc Tv >eg/eg.t14.spheres.3-2
-rbox c D4 | qconvex s GvD0 Pd0:0.5 Tc Tv >eg/eg.t15.spheres.4-3
-rbox c D4 | qhull s Q0 C0 GpD0 Pd0:0.5 Tc Tv >eg/eg.t16.points.4-3
-rbox c D4 | qconvex s GahD0 Pd0:0.5 Tc Tv >eg/eg.t17.intersect.4-3
-rbox 100 s | qconvex s C-0.05 Qc Gicvprh Tc Tv >eg/eg.t18.imprecise.3
-rbox 30 s D4 | qconvex s GhD0 Pd0d1d2D3 Tc >eg/eg.t19.intersect.precise.4-3
-rbox 100 s P1,1,1 | qconvex s QG-0 Pgp Tc G >eg/eg.t20.notvisible
-rbox 100 s | qconvex s QV-10 Pgp Tc G  >eg/eg.t21.notvertex
-rbox 100 r D2 P1,1 | qhull s Pd0:0.7 PD0:0.8 QgG0 G Tv >eg/eg.t22.split
-rbox 100 D2 c G1.0 | qvoronoi s A-0.95 Gna Tv >eg/eg.t23.voronoi.imprecise
-rbox 30 s D4 | qconvex s Gh Pd0d1d2D3 Tc >eg/eg.t24.intersect.precise.4d
-
-echo ==the following generates an error== >/dev/null
-rbox 1000 D4 | qhull Q0 s Po R0.005 Ga Tc Tv >eg/eg.t25.neighbors.4d
-echo ==the previous should generate an error== >/dev/null
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_test b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_test
deleted file mode 100644
index bc1b3c280e74d2afc51e6578df4a09a22b922e52..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_test
+++ /dev/null
@@ -1,385 +0,0 @@
-#!/bin/sh
-#
-#  NOTE:  all tests duplicated in q_test.bat
-set -v
-echo === errors if 'user_eg' and 'user_eg2' not found ===
-echo === check user_eg ${d:-`date`} =====================
-user_eg "QR1 p n Qt" "v p" Fp
-user_eg2 "QR1 p" "v p" Fp
-echo === check front ends ${d:-`date`} ==================
-qconvex -
-qconvex .
-qconvex
-rbox c D3 | qconvex s n Qt 
-rbox c D2 | qconvex s i 
-rbox c D2 | qconvex o
-rbox 1000 s | qconvex s Tv FA
-rbox c d D2 | qconvex s Qc Fx
-rbox y 1000 W0 | qconvex s n 
-rbox y 1000 W0 | qconvex s QJ
-rbox d G1 D12 | qconvex QR0 FA
-rbox c D6 | qconvex FA TF500
-rbox c P0 d D2 | qconvex p Fa Fc FP FI Fn FN FS Fv Fx 
-rbox c d D2 | qconvex s i QV0
-rbox c | qconvex Q0
-qvoronoi -
-qvoronoi .
-qvoronoi
-rbox c P0 D2 | qvoronoi s o
-rbox c P0 D2 | qvoronoi Fi Tv
-rbox c P0 D2 | qvoronoi Fo
-rbox c P0 D2 | qvoronoi Fv
-rbox c P0 D2 | qvoronoi s Qu Qt Fv
-rbox c P0 D2 | qvoronoi Qu Fo
-rbox c G1 d D2 | qvoronoi s p 
-rbox c G1 d D2 | qvoronoi QJ p 
-rbox c P-0.1 P+0.1 P+0.1 D2 | qvoronoi s Fc FP FQ Fn FN 
-rbox P0 c D2 | qvoronoi s Fv QV0
-qdelaunay -
-qdelaunay .
-qdelaunay
-rbox c P0 D2 | qdelaunay s o
-rbox c P0 D2 | qdelaunay i
-rbox c P0 D2 | qdelaunay Fv
-rbox c P0 D2 | qdelaunay s Qu Qt Fv
-rbox c G1 d D2 | qdelaunay s i
-rbox c G1 d D2 | qhull d Qbb Ft
-rbox c G1 d D2 | qhull d Qbb QJ s Ft
-rbox M3,4 z 100 D2 | qdelaunay s
-rbox c P-0.1 P+0.1 P+0.1 D2 | qdelaunay s Fx Fa Fc FP FQ Fn FN
-rbox P0 P0 c D2 | qdelaunay s FP QV0
-qhalf -
-qhalf .
-qhalf
-rbox d | qhull FQ n | qhalf s Qt H0,0,0 Fp
-rbox c | qhull FQ FV n | qhalf s i
-rbox c | qhull FQ FV n | qhalf o
-rbox d D2 | qhull FQ n | qhalf s H0 Fc FP Fn FN FQ Fv Fx
-echo === check quality of Qhull for ${d:-`hostname`} ${d:-`date`}
-rbox 1000 W0 | qhull QR2 QJ s Fs Tv
-rbox 1000 W0 | qhull QR2 s Fs Tv
-rbox 1000 s | qhull C0.02 Qc Tv
-rbox 500 s D4 | qhull C0.01 Qc Tv
-rbox 1000 s | qhull C-0.02 Qc Tv
-rbox 1000 s | qhull C-0.02 Qc Tv
-rbox 1000 s D4 | qhull C-0.01 Qc Tv
-rbox 200 s D5 | qhull C-0.01 Qx Qc Tv 
-rbox 100 s D6 | qhull C-0.001 Qx Qc Tv
-rbox 1000 W1e-4 | qhull C-1e-6 Qc Tv
-rbox 1000 W5e-4 D4 | qhull C-1e-5 Qc Tv
-rbox 400 W1e-3 D5 | qhull C-1e-5 Qx Qc Tv
-echo === check input format etc. ${d:-`date`}
-qhull <<EOF
-2 4 #;laskdjf
-1 0 1 1 1 2  0 0
-EOF
-qhull <<EOF
-2 4 #;laskdjf
-1 0 1 1 1 2  0 0 0
-EOF
-qhull <<EOF
-2 4 #;laskdjf
-1 0 1 1 1 2  0
-EOF
-qhull <<EOF
-2 
-4 #;laskdjf
-1 #kjdfasdf
-0 1 1 1 2  0
-EOF
-qhull <<EOF
-2 4  1 0  1 1  1 2  0 0
-EOF
-qhull d Qz <<EOF
-2 5  1 0  1 1  0 1  0 0  0
-EOF
-qhull d Q8 Qz <<EOF
-2 5  1 0  1 1  0 1  0 0  0
-EOF
-rbox d h | qhull Fd FV n FD Tcv | qhull Fd H Fp Tcv
-rbox 10 h | qhull Fd FD p Tcv | qhull Fd d Tcv 
-echo === check rbox ${d:-`date`}
-rbox 3 n D2
-rbox 3 D2
-rbox 3 h D2
-rbox 3 z D2
-rbox 3 z h D2
-rbox 3 B10 D2
-rbox 3 z B10 D2
-rbox 4 L2 r D2
-rbox 8 L2 D2
-rbox 4 L4 r D3
-rbox 4 L4 s D5 W1e-3 
-rbox y
-rbox 10 M3,4 
-rbox 10 L2 s D3 | qhull Tcv
-rbox 10 L4 s W1e-3 D3 | qhull Tcv
-rbox 10 L6 D3 | qhull Tcv
-rbox 10 L1.1 s D4 | qhull Tcv
-rbox y r 100 W0 O0.5 | qhull s p Tcv
-rbox x r 100 W0 O0.5 | qhull s Tcv
-rbox 12 D8 | qhull Tcv
-rbox 12 D9 | qhull Tcv
-rbox 1000 D4 | qhull s i A-0.97 C0.2 A0.7 Tcv
-rbox 3 D2 | qhull Qb0B1:-2 p 
-rbox 100 r D2 | qhull Pd0:0.7 PD0:0.8 n Tcv
-rbox 1000 s | qhull  C0.05 Tcv
-rbox 1000 s t | qhull Qm C0.05 Tcv
-rbox 500 D2 | qhull n A-0.95 C0.1 Tcv
-rbox 500 s P1,1,1 | qhull QgG0 Pp Tcv
-
-rbox d | qhull m
-rbox d | qhull FM
-rbox c D2 | qhull Tcv Q0
-rbox d D2 | qhull Tcv
-rbox c D3 | qhull Tcv Q0
-rbox d D3 | qhull Tcv
-rbox c D4 | qhull Tcv Q0
-rbox d D4 | qhull Tcv
-rbox c D5 | qhull Tcv Q0
-rbox d D5 | qhull Tcv
-rbox c D6 | qhull Tcv Q0
-rbox d D6 | qhull Tcv
-rbox d D7 | qhull Tcv
-rbox c D2 | qhull Tcv C-0
-rbox c D3 | qhull Tcv C-0
-rbox c D4 | qhull Tcv C-0
-rbox c D5 | qhull Tcv C-0
-rbox c D6 | qhull Tcv C-0
-rbox c D7 | qhull Tv C-0
-rbox 20 l D3 | qhull Tcv
-rbox 100 s D2 | qhull Tcv
-rbox 100 s D3 | qhull Tcv
-rbox 100 s D4 | qhull Tcv
-rbox 100 s c D4 | qhull Tcv
-rbox 100 s d G1.5 D4 | qhull Tcv
-rbox 100 s W1e-2 | qhull Tcv
-rbox 100 | qhull Tcv
-rbox 100 W1e-3 | qhull Tcv
-rbox 100 r D2 | qhull Tcv
-rbox 100 r s Z1 | qhull Tcv
-rbox 100 r s Z1 G0.1 | qhull Tcv C-0
-rbox 100 s Z1 G0.1 | qhull Tcv 
-rbox 100 s Z1e-5 G0.1 | qhull Tc Pp
-
-echo === check qhull output formats ${d:-`date`}
-rbox 5 r s D2 | qhull Tcv
-rbox 5 r s D2 | qhull s 
-rbox 5 r s D2 | qhull s o 
-rbox 5 r s D2 | qhull f
-rbox 5 r s D2 | qhull i 
-rbox 5 r s D2 | qhull m 
-rbox 5 r s D2 | qhull FM 
-rbox 5 r s D2 | qhull n 
-rbox 5 r s D2 | qhull p 
-rbox 5 r s D2 | qhull o 
-rbox 5 r s D2 | qhull Ft
-rbox 5 r s D2 | qhull Fx
-rbox 5 r s D2 | qhull p n i p p
-rbox 10 D3 | qhull f Tcv
-rbox 10 D3 | qhull i
-rbox 10 D3 | qhull p 
-rbox 10 D3 | qhull o 
-rbox 10 D3 | qhull Fx
-rbox 27 M1,0,1 | qhull Qc
-rbox 50 D3 s | qhull C0.1 Qc Pd0d1d2 s p Tcv
-rbox 10 D2 P0 P1e-15 | qhull d Qc FP s Tcv
-rbox 100 s | qhull C-0.003 Qc FP s
-rbox 100 s D2 | qhull C0.1 i Fx Tcv
-rbox 4 s D3 | qhull Qc Ghipv Tcv 
-rbox 6 D4 | qhull f Tcv
-rbox 6 D4 | qhull i
-rbox 6 D4 | qhull p 
-rbox 6 D4 | qhull o
-rbox 1000 s D2 | qhull FA Tcv
-rbox 1000 s | qhull FA Tcv
-rbox c D4 | qhull FA Tcv
-rbox c D5 | qhull FA Tcv
-rbox c D5 | qhull FA Qt Tcv
-rbox 10 D2 | qhull d FA Tcv
-rbox 10 D2 | qhull d Qu FA Tcv
-rbox 10 D2 | qhull FA Tcv
-rbox 10 c D2 | qhull Fx Tcv
-rbox 1000 s | qhull FS Tcv
-rbox 10 W0 D2 | qhull p Qc FcC Tcv
-rbox 4 z h s D2 | qhull Fd s n FD Tcv
-rbox 6 s D3 | qhull C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv
-rbox P0.5,0.5 P0.5,0.5 W0 5 D2 | qhull d FN Qc
-rbox 10 D3 | qhull Fa PA5
-rbox 10 D3 | qhull Fa PF0.4
-
-echo === test Qt ${d:-`date`}
-rbox c | qhull Qt s o Tcv
-rbox c | qhull Qt f i
-rbox c | qhull Qt m FM n
-rbox c | qhull Qt p o
-rbox c | qhull Qt Fx
-rbox c | qhull Qt FA s Fa
-rbox 6 r s c G0.1 D2 | qhull Qt d FA Tcv
-rbox 6 r s c G0.1 D2 | qhull d FA Tcv
-rbox 6 r s c G0.1 D2 | qhull Qt v p Tcv
-rbox c | qhull Qt C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv
-rbox 6 r s c G0.1 D2 P0.1,0.1 | qhull s FP d FO Qt
-rbox 100 W0 | qhull Tv Q11 
-
-echo === test unbounded intersection ${d:-`date`}
-rbox c | qhull PD0:0.5 n | qhull H0 Fp Tcv
-rbox 1000 W1e-3 D3 | qhull PA8 Fa FS s n Tcv 
-rbox 1000 W1e-3 D3 | qhull C-0.01 PM10 Fm n Tcv Qc
-rbox 1000 W1e-3 D3 | qhull C-0.01 PA8 PG n Tcv Qc
-rbox 10 | qhull FO Tz TO q_test.log.1
-cat q_test.log.1
-
-echo === check Delaunay/Voronoi ${d:-`date`}
-rbox 10 D2 | qhull d Tcv
-rbox 10 D2 | qhull d Tcv Qz
-rbox 10 D3 | qhull d Tcv
-rbox c | qhull d Qz Ft Tcv
-rbox 10 s D2 c | qhull d Tcv 
-rbox 10 s D2 | qhull d Tcv Q8 Qz
-rbox 10 D2 | qhull d Tcv p
-rbox 10 D2 | qhull d Tcv i
-rbox 10 D2 | qhull d Tcv o
-rbox 10 D2 | qhull v Tcv o
-rbox 10 D2 | qhull v Tcv p
-rbox 10 D2 | qhull v Tcv G
-rbox 10 D2 | qhull v Tcv Fv
-rbox 10 D2 | qhull v Tcv Fi
-rbox 10 D2 | qhull v Tcv Fo
-rbox 10 D2 | qhull v Qu o Fv Fi Fo Tcv
-rbox 10 D3 | qhull v Fv Tcv
-rbox 10 D3 | qhull v Fi Tcv
-rbox 10 D3 | qhull v Fo Tcv
-rbox 10 D3 | qhull v Qu o Fv Fi Fo Tcv
-rbox 5 D2 | qhull v f FnN o
-
-echo === check Halfspace ${d:-`date`}
-rbox 100 s D4 | qhull FA FV n s Tcv | qhull H Fp Tcv | qhull FA  Tcv
-rbox d D3 | qhull FQ n s FD Tcv | qhull Fd H0.1,0.1 Fp FQ Tcv
-rbox 5 r D2 | qhull s n Tcv | qhull H0 Fp Tcv
-
-echo === check qhull ${d:-`date`}
-rbox 10 s D3 | qhull Tcv
-rbox 10 s D3 | qhull f Pd0:0.5 Pd2 Tcv
-rbox 10 s D3 | qhull f Tcv PD2:-0.5
-rbox 10 s D3 | qhull QR-1
-rbox 10 s D3 | qhull QR-40
-rbox 1000 D3 | qhull Tcvs
-rbox 100 D3 | qhull T8 Tz TO q_test.log.1
-tail -10 q_test.log.1
-rm q_test.log.1
-rbox 100 s D3 | qhull TcvV-2
-rbox 100 s D3 | qhull TcvC2
-rbox 100 s D3 | qhull TcvV2
-rbox 100 s D3 | qhull T1cvV2P2
-rbox 100 s D3 | qhull TcvF100
-rbox 100 s D3 | qhull Qf Tcv
-rbox 100 D3 | qhull Tcv
-rbox 100 D3 | qhull Qs Tcv
-rbox 100 D5 | qhull Qs Tcv
-rbox 100 D3 | qhull Qr Tcv
-rbox 100 D3 | qhull Qxv Tcv
-rbox 100 D3 | qhull Qi f Pd0 Pd1 Pd2 Tcv
-rbox c d | qhull Qc f Tcv
-rbox c d | qhull Qc p Tcv
-rbox 100 D3 | qhull QbB FO Tcv
-rbox 1000 D2 B1e6 | qhull d Qbb FO Tcv
-rbox 10 D3 | qhull QbB p Tcv
-rbox 10 D3 | qhull Qbb p Tcv
-rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv
-rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv | qhull QbB p Tcv
-rbox 10 D3 | qhull Qb1:0B1:0 d Tcv Q8
-rbox 10 D3 | qhull Qb1:0B1:0B2:0 d Tcv Q8
-rbox 10 D3 | qhull Qb1:0 d Tcv 
-rbox 10 D3 | qhull Qb1:0B1:0  Tcv
-echo "== next command will error ${d:-`date`} =="
-rbox 10 D2 | qhull Qb1:1B1:1 Tcv
-rbox 200 L20 D2 t | qhull FO Tcv C-0
-rbox 1000 L20 t | qhull FO Tcv C-0
-rbox 200 L20 D4 t | qhull FO Tcv C-0
-rbox 200 L20 D5 t | qhull FO Tcv Qx
-rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu Q0
-rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu C-0
-
-echo === check joggle and TRn ${d:-`date`}
-rbox 100 W0 | qhull QJ1e-14 Qc TR100 Tv
-rbox 100 W0 | qhull QJ1e-13 Qc TR100 Tv
-rbox 100 W0 | qhull QJ1e-12 Qc TR100 Tv
-rbox 100 W0 | qhull QJ1e-11 Qc TR100 Tv
-rbox 100 W0 | qhull QJ1e-10 Qc TR100 Tv
-rbox 100 | qhull d QJ Qb0:1e4 QB0:1e5 Qb1:1e4 QB1:1e6 Qb2:1e5 QB2:1e7 FO Tv
-
-echo === check precision options ${d:-`date`}
-rbox 100 D3 s | qhull E0.01 Qx Tcv FO
-rbox 100 D3 W1e-1 | qhull W1e-3 Tcv
-rbox 100 D3 W1e-1 | qhull W1e-2 Tcv Q0
-rbox 100 D3 W1e-1 | qhull W1e-2 Tcv 
-rbox 100 D3 W1e-1 | qhull W1e-1 Tcv
-rbox 15 D2 P0 P1e-14,1e-14 | qhull d Quc Tcv
-rbox 15 D3 P0 P1e-12,1e-14,1e-14 | qhull d Qcu Tcv
-rbox 1000 s D3 | qhull C-0.01 Tcv Qc
-rbox 1000 s D3 | qhull C-0.01 V0 Qc Tcv
-rbox 1000 s D3 | qhull C-0.01 U0 Qc Tcv
-rbox 1000 s D3 | qhull C-0.01 V0 Qcm Tcv
-rbox 1000 s D3 | qhull C-0.01 Qcm Tcv
-rbox 1000 s D3 | qhull C-0.01 Q1 FO Tcv Qc
-rbox 1000 s D3 | qhull C-0.01 Q2 FO Tcv Qc
-rbox 1000 s D3 | qhull C-0.01 Q3 FO Tcv Qc
-rbox 1000 s D3 | qhull C-0.01 Q4 FO Tcv Qc
-echo === this may generate an error ${d:-`date`}
-rbox 1000 s D3 | qhull C-0.01 Q5 FO Tcv 
-echo === this should generate an error ${d:-`date`}
-rbox 1000 s D3 | qhull C-0.01 Q6 FO Po Tcv Qc
-rbox 1000 s D3 | qhull C-0.01 Q7 FO Tcv Qc
-rbox 1000 s D3 | qhull C-0.01 Qx Tcv Qc
-rbox 100 s D3 t | qhull R1e-3 Tcv Qc
-rbox 100 s D3 t | qhull R1e-2 Tcv Qc
-rbox 500 s D3 t | qhull R0.05 A-1 Tcv Qc
-rbox 100 W0 D3 t | qhull R1e-3 Tcv Qc
-rbox 100 W0 D3 t | qhull R1e-3 Qx Tcv Qc
-rbox 100 W0 D3 t | qhull R1e-2 Tcv Qc
-rbox 100 W0 D3 t | qhull R1e-2 Qx Tcv Qc
-rbox 500 W0 D3 t | qhull R0.05 A-1 Tcv Qc
-rbox 500 W0 D3 t | qhull R0.05 Qx Tcv Qc
-rbox 1000 W1e-20 t | qhull Tcv Qc
-rbox 1000 W1e-20 D4 t | qhull Tcv Qc
-rbox 500 W1e-20 D5 t | qhull Tv Qc
-rbox 100 W1e-20 D6 t | qhull Tv Qc
-rbox 50 W1e-20 D6 t | qhull Qv Tv Qc
-rbox 10000 D4 t | qhull QR0 Qc C-0.01 A0.3 Tv
-rbox 1000 D2 t | qhull d QR0 Qc C-1e-8 Qu Tv
-rbox 300 D5 t |qhull A-0.999 Qx Qc Tcv
-rbox 100 D6 t |qhull A-0.9999 Qx Qc Tcv
-rbox 50 D7 t |qhull A-0.99999 Qx Qc Tcv W0.1
-
-echo === check bad cases for Qhull.  May cause errors ${d:-`date`}
-rbox 1000 L100000 s G1e-6 t | qhull Tv
-rbox 1000 L100000 s G1e-6 t | qhull Tv Q10
-rbox 1000 s Z1 G1e-13 t | qhull Tv
-rbox 1000 s W1e-13 P0 t | qhull d Qbb Qc Tv
-rbox 1000 s W1e-13 t | qhull d Tv
-rbox 1000 s W1e-13 t D2 | qhull d Tv
-
-echo =======================================================
-echo =======================================================
-echo === The following commands may cause errors ${d:-`date`}
-echo =======================================================
-echo =======================================================
-rbox c D7 | qhull Q0 Tcv
-rbox 100 s D3 | qhull Q0 E1e-3 Tc Po
-rbox 100 s D3 | qhull Q0 E1e-2 Tc Po
-rbox 100 s D3 | qhull Q0 E1e-1 Tc Po
-rbox 100 s D3 | qhull Q0 R1e-3 Tc Po
-rbox 100 s D3 | qhull Q0 R1e-2 Tc Po
-rbox 100 s D3 | qhull Q0 R0.05 Tc
-rbox 100 s D3 | qhull Q0 R0.05 Tc Po
-rbox 1000 W1e-7 | qhull Q0 Tc Po
-rbox 50 s | qhull Q0 V0.05 W0.01 Tc Po
-rbox 100 s D5 | qhull Q0 R1e-2 Tc Po
-qhull
-qhull .
-qhull -
-rbox
-cat html/qhull.txt html/rbox.txt
-
-# end of q_test
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_test.bat b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_test.bat
deleted file mode 100644
index 81b679cfda0f7ebbe7e1da8b427c07b6d95d5a54..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/q_test.bat
+++ /dev/null
@@ -1,666 +0,0 @@
-echo q_test for Windows DOS box 2002/6/1 >q_test.x
-echo === errors if 'user_eg' and 'user_eg2' not found ===
-echo === check user_eg === >>q_test.x
-echo "user_eg 'QR1 p n Qt' 'v p' Fp" >>q_test.x
-user_eg "QR1 p n Qt" "v p" Fp >>q_test.x
-echo "user_eg2 'QR1 p' 'v p' Fp" >>q_test.x
-user_eg2 "QR1 p" "v p" Fp >>q_test.x
-echo === check front ends ========================================================== >>q_test.x
-echo "qconvex -" >>q_test.x
-qconvex - >>q_test.x
-echo "qconvex ." >>q_test.x
-qconvex . >>q_test.x
-echo "qconvex" >>q_test.x
-qconvex >>q_test.x
-echo "rbox c D3 | qconvex s n Qt" >>q_test.x
-rbox c D3 | qconvex s n Qt >>q_test.x
-echo "rbox c D2 | qconvex i Qt " >>q_test.x
-rbox c D2 | qconvex i Qt  >>q_test.x
-echo "rbox c D2 | qconvex o" >>q_test.x
-rbox c D2 | qconvex o >>q_test.x
-echo "rbox 1000 s | qconvex s Tv FA" >>q_test.x
-rbox 1000 s | qconvex s Tv FA >>q_test.x
-echo "rbox c d D2 | qconvex s Qc Fx" >>q_test.x
-rbox c d D2 | qconvex s Qc Fx >>q_test.x
-echo "rbox y 1000 W0 | qconvex s n " >>q_test.x
-rbox y 1000 W0 | qconvex s n  >>q_test.x
-echo "rbox y 1000 W0 | qconvex s QJ" >>q_test.x
-rbox y 1000 W0 | qconvex s QJ >>q_test.x
-echo "rbox d G1 D12 | qconvex QR0 FA" >>q_test.x
-rbox d G1 D12 | qconvex QR0 FA >>q_test.x
-echo "rbox c D6 | qconvex FA TF500" >>q_test.x
-rbox c D6 | qconvex FA TF500 >>q_test.x
-echo "rbox c P0 d D2 | qconvex p Fa Fc FP FI Fn FN FS Fv Fx" >>q_test.x
-rbox c P0 d D2 | qconvex p Fa Fc FP FI Fn FN FS Fv Fx >>q_test.x
-echo "rbox c d D2 | qconvex s i QV0" >>q_test.x
-rbox c d D2 | qconvex s i QV0 >>q_test.x
-echo "rbox c | qconvex Q0" >>q_test.x
-rbox c | qconvex Q0 >>q_test.x
-echo "qvoronoi -" >>q_test.x
-qvoronoi - >>q_test.x
-echo "qvoronoi ." >>q_test.x
-qvoronoi . >>q_test.x
-echo "qvoronoi" >>q_test.x
-qvoronoi >>q_test.x
-echo "rbox c P0 D2 | qvoronoi s o" >>q_test.x
-rbox c P0 D2 | qvoronoi s o >>q_test.x
-echo "rbox c P0 D2 | qvoronoi Fi" >>q_test.x
-rbox c P0 D2 | qvoronoi Fi >>q_test.x
-echo "rbox c P0 D2 | qvoronoi Fo" >>q_test.x
-rbox c P0 D2 | qvoronoi Fo >>q_test.x
-echo "rbox c P0 D2 | qvoronoi Fv" >>q_test.x
-rbox c P0 D2 | qvoronoi Fv >>q_test.x
-echo "rbox c P0 D2 | qvoronoi s Qu Qt Fv" >>q_test.x
-rbox c P0 D2 | qvoronoi s Qu Qt Fv >>q_test.x
-echo "rbox c P0 D2 | qvoronoi Qu Fo" >>q_test.x
-rbox c P0 D2 | qvoronoi Qu Fo >>q_test.x
-echo "rbox c G1 d D2 | qvoronoi s p " >>q_test.x
-rbox c G1 d D2 | qvoronoi s p  >>q_test.x
-echo "rbox c G1 d D2 | qvoronoi QJ p " >>q_test.x
-rbox c G1 d D2 | qvoronoi QJ p  >>q_test.x
-echo "rbox c P-0.1 P+0.1 P+0.1 D2 | qvoronoi s Fc FP FQ Fn FN " >>q_test.x
-rbox c P-0.1 P+0.1 P+0.1 D2 | qvoronoi s Fc FP FQ Fn FN  >>q_test.x
-echo "rbox P0 c D2 | qvoronoi s Fv QV0" >>q_test.x
-rbox P0 c D2 | qvoronoi s Fv QV0 >>q_test.x
-echo "qdelaunay -" >>q_test.x
-qdelaunay - >>q_test.x
-echo "qdelaunay ." >>q_test.x
-qdelaunay . >>q_test.x
-echo "qdelaunay" >>q_test.x
-qdelaunay >>q_test.x
-echo "rbox c P0 D2 | qdelaunay s o" >>q_test.x
-rbox c P0 D2 | qdelaunay s o >>q_test.x
-echo "rbox c P0 D2 | qdelaunay i" >>q_test.x
-rbox c P0 D2 | qdelaunay i >>q_test.x
-echo "rbox c P0 D2 | qdelaunay Fv" >>q_test.x
-rbox c P0 D2 | qdelaunay Fv >>q_test.x
-echo "rbox c P0 D2 | qdelaunay s Qu Qt Fv" >>q_test.x
-rbox c P0 D2 | qdelaunay s Qu Qt Fv >>q_test.x
-echo "rbox c G1 d D2 | qdelaunay s i" >>q_test.x
-rbox c G1 d D2 | qdelaunay s i >>q_test.x
-echo "rbox c G1 d D2 | qdelaunay Ft" >>q_test.x
-rbox c G1 d D2 | qdelaunay Ft >>q_test.x
-echo "rbox c G1 d D2 | qdelaunay QJ s Ft" >>q_test.x
-rbox c G1 d D2 | qdelaunay QJ s Ft >>q_test.x
-echo "rbox M3,4 z 100 D2 | qdelaunay s" >>q_test.x
-rbox M3,4 z 100 D2 | qdelaunay s >>q_test.x
-echo "rbox c P-0.1 P+0.1 P+0.1 D2 | qdelaunay s Fx Fa Fc FP FQ Fn FN" >>q_test.x
-rbox c P-0.1 P+0.1 P+0.1 D2 | qdelaunay s Fx Fa Fc FP FQ Fn FN >>q_test.x
-echo "rbox P0 P0 c D2 | qdelaunay s FP QV0" >>q_test.x
-rbox P0 P0 c D2 | qdelaunay s FP QV0 >>q_test.x
-echo "qhalf -" >>q_test.x
-qhalf - >>q_test.x
-echo "qhalf ." >>q_test.x
-qhalf . >>q_test.x
-echo "qhalf" >>q_test.x
-qhalf >>q_test.x
-echo "rbox d | qhull FQ n | qhalf s Qt H0,0,0 Fp" >>q_test.x
-rbox d | qhull FQ n | qhalf s H0,0,0 Fp >>q_test.x
-echo "rbox c | qhull FQ FV n | qhalf s i" >>q_test.x
-rbox c | qhull FQ FV n | qhalf s i >>q_test.x
-echo "rbox c | qhull FQ FV n | qhalf o" >>q_test.x
-rbox c | qhull FQ FV n | qhalf o >>q_test.x
-echo "rbox d D2 | qhull FQ n | qhalf s H0 Fc FP Fn FN FQ Fv Fx" >>q_test.x
-rbox d D2 | qhull FQ n | qhalf s H0 Fc FP Fn FN FQ Fv Fx >>q_test.x
-
-echo === check quality of merges for ${d:-`hostname`} ${d:-`date`} >>q_test.x
-echo "rbox 1000 W0 t | qhull QR2 QJ s Fs Tv" >>q_test.x
-rbox 1000 W0 t | qhull QR2 QJ s Fs Tv >>q_test.x
-echo "rbox 1000 W0 t | qhull QR2 s Fs Tv" >>q_test.x
-rbox 1000 W0 t | qhull QR2 s Fs Tv >>q_test.x
-echo "rbox 1000 s t | qhull C0.02 Qc Tv" >>q_test.x
-rbox 1000 s t | qhull C0.02 Qc Tv >>q_test.x
-echo "rbox 500 s D4 t | qhull C0.01 Qc Tv" >>q_test.x
-rbox 500 s D4 t | qhull C0.01 Qc Tv >>q_test.x
-echo "rbox 1000 s t | qhull C-0.02 Qc Tv" >>q_test.x
-rbox 1000 s t | qhull C-0.02 Qc Tv >>q_test.x
-echo "rbox 1000 s t | qhull C-0.02 Qc Tv" >>q_test.x
-rbox 1000 s t | qhull C-0.02 Qc Tv >>q_test.x
-echo "rbox 1000 s D4 t | qhull C-0.01 Qc Tv" >>q_test.x
-rbox 1000 s D4 t | qhull C-0.01 Qc Tv >>q_test.x
-echo "rbox 200 s D5 t | qhull C-0.01 Qx Qc Tv" >>q_test.x
-rbox 200 s D5 t | qhull C-0.01 Qx Qc Tv >>q_test.x
-echo "rbox 100 s D6 t | qhull C-0.001 Qx Qc Tv" >>q_test.x
-rbox 100 s D6 t | qhull C-0.001 Qx Qc Tv >>q_test.x
-echo "rbox 1000 W1e-4 t | qhull C-1e-6 Qc Tv" >>q_test.x
-rbox 1000 W1e-4 t | qhull C-1e-6 Qc Tv >>q_test.x
-echo "rbox 1000 W5e-4 D4 t | qhull C-1e-5 Qc Tv" >>q_test.x
-rbox 1000 W5e-4 D4 t | qhull C-1e-5 Qc Tv >>q_test.x
-echo "rbox 400 W1e-3 D5 t | qhull C-1e-5 Qx Qc Tv" >>q_test.x
-rbox 400 W1e-3 D5 t | qhull C-1e-5 Qx Qc Tv >>q_test.x
-
-echo === check input format etc. ${d:-`date`} >>q_test.x
-echo "rbox d h | qhull Fd FV n FD  Tcv | qhull Fd H Fp Tcv" >>q_test.x
-rbox d h | qhull Fd FV n FD Tcv | qhull Fd H Fp Tcv >>q_test.x
-echo "rbox 10 h | qhull Fd FD p Tcv | qhull Fd d Tcv " >>q_test.x
-rbox 10 h | qhull Fd FD p Tcv | qhull Fd d Tcv  >>q_test.x
-
-echo === check rbox ${d:-`date`} >>q_test.x
-echo "rbox 3 n D2" >>q_test.x
-rbox 3 n D2 >>q_test.x
-echo "rbox 3 D2" >>q_test.x
-rbox 3 D2 >>q_test.x
-echo "rbox 3 h D2" >>q_test.x
-rbox 3 h D2 >>q_test.x
-echo "rbox 3 z D2" >>q_test.x
-rbox 3 z D2 >>q_test.x
-echo "rbox 3 z h D2" >>q_test.x
-rbox 3 z h D2 >>q_test.x
-echo "rbox 3 B10 D2" >>q_test.x
-rbox 3 B10 D2 >>q_test.x
-echo "rbox 3 z B10 D2" >>q_test.x
-rbox 3 z B10 D2 >>q_test.x
-echo "rbox 4 L2 r D2" >>q_test.x
-rbox 4 L2 r D2 >>q_test.x
-echo "rbox 8 L2 D2" >>q_test.x
-rbox 8 L2 D2 >>q_test.x
-echo "rbox 4 L4 r D3" >>q_test.x
-rbox 4 L4 r D3 >>q_test.x
-echo "rbox y" >>q_test.x
-rbox y >>q_test.x
-echo "rbox 10 M3,4" >>q_test.x
-rbox 10 M3,4 >>q_test.x
-echo "rbox 4 L4 s D5 W1e-3 " >>q_test.x
-rbox 4 L4 s D5 W1e-3  >>q_test.x
-echo "rbox 10 L2 s D3 | qhull Tcv" >>q_test.x
-rbox 10 L2 s D3 | qhull Tcv >>q_test.x
-echo "rbox 10 L4 s W1e-3 D3 | qhull Tcv" >>q_test.x
-rbox 10 L4 s W1e-3 D3 | qhull Tcv >>q_test.x
-echo "rbox 10 L6 D3 | qhull Tcv" >>q_test.x
-rbox 10 L6 D3 | qhull Tcv >>q_test.x
-echo "rbox 10 L1.1 s D4 | qhull Tcv" >>q_test.x
-rbox 10 L1.1 s D4 | qhull Tcv >>q_test.x
-echo "rbox y r 100 W0 O0.5 | qhull s p Tcv" >>q_test.x
-rbox y r 100 W0 O0.5 | qhull s p Tcv >>q_test.x
-echo "rbox x r 100 W0 O0.5 | qhull s p Tcv" >>q_test.x
-rbox x r 100 W0 O0.5 | qhull s p Tcv >>q_test.x
-echo "rbox 12 D8 | qhull Tcv" >>q_test.x
-rbox 12 D8 | qhull Tcv >>q_test.x
-echo "rbox 12 D9 | qhull Tcv" >>q_test.x
-rbox 12 D9 | qhull Tcv >>q_test.x
-echo "rbox 1000 D4 | qhull s i A-0.97 C0.2 A0.7 Tcv" >>q_test.x
-rbox 1000 D4 | qhull s i A-0.97 C0.2 A0.7 Tcv >>q_test.x
-echo "rbox 3 D2 | qhull Qb0B1:-2 p " >>q_test.x
-rbox 3 D2 | qhull Qb0B1:-2 p  >>q_test.x
-echo "rbox 100 r D2 | qhull Pd0:0.7 PD0:0.8 n Tcv" >>q_test.x
-rbox 100 r D2 | qhull Pd0:0.7 PD0:0.8 n Tcv >>q_test.x
-echo "rbox 1000 s | qhull  C0.05 Tcv" >>q_test.x
-rbox 1000 s | qhull  C0.05 Tcv >>q_test.x
-echo "rbox 1000 s t | qhull Qm C0.05 Tcv" >>q_test.x
-rbox 1000 s t | qhull Qm C0.05 Tcv >>q_test.x
-echo "rbox 500 D2 | qhull n A-0.95 C0.1 Tcv" >>q_test.x
-rbox 500 D2 | qhull n A-0.95 C0.1 Tcv >>q_test.x
-echo "rbox 500 s P1,1,1 | qhull QgG0 Pp Tcv" >>q_test.x
-rbox 500 s P1,1,1 | qhull QgG0 Pp Tcv >>q_test.x
-
-echo "rbox d | qhull m" >>q_test.x
-rbox d | qhull m >>q_test.x
-echo "rbox d | qhull FM" >>q_test.x
-rbox d | qhull FM >>q_test.x
-echo "rbox c D2 | qhull Q0 Tcv" >>q_test.x
-rbox c D2 | qhull Q0 Tcv >>q_test.x
-echo "rbox d D2 | qhull Tcv" >>q_test.x
-rbox d D2 | qhull Tcv >>q_test.x
-echo "rbox c D3 | qhull Q0 Tcv" >>q_test.x
-rbox c D3 | qhull Q0 Tcv >>q_test.x
-echo "rbox d D3 | qhull Tcv" >>q_test.x
-rbox d D3 | qhull Tcv >>q_test.x
-echo "rbox c D4 | qhull Q0 Tcv" >>q_test.x
-rbox c D4 | qhull Q0 Tcv >>q_test.x
-echo "rbox d D4 | qhull Tcv" >>q_test.x
-rbox d D4 | qhull Tcv >>q_test.x
-echo "rbox c D5 | qhull Q0 Tcv" >>q_test.x
-rbox c D5 | qhull Q0 Tcv >>q_test.x
-echo "rbox d D5 | qhull Tcv" >>q_test.x
-rbox d D5 | qhull Tcv >>q_test.x
-echo "rbox c D6 | qhull Q0 Tcv" >>q_test.x
-rbox c D6 | qhull Q0 Tcv >>q_test.x
-echo "rbox d D6 | qhull Tcv" >>q_test.x
-rbox d D6 | qhull Tcv >>q_test.x
-echo "rbox d D7 | qhull Tcv" >>q_test.x
-rbox d D7 | qhull Tcv >>q_test.x
-echo "rbox c D2 | qhull Tcv C-0" >>q_test.x
-rbox c D2 | qhull Tcv C-0 >>q_test.x
-echo "rbox c D3 | qhull Tcv C-0" >>q_test.x
-rbox c D3 | qhull Tcv C-0 >>q_test.x
-echo "rbox c D4 | qhull Tcv C-0" >>q_test.x
-rbox c D4 | qhull Tcv C-0 >>q_test.x
-echo "rbox c D5 | qhull Tcv C-0" >>q_test.x
-rbox c D5 | qhull Tcv C-0 >>q_test.x
-echo "rbox c D6 | qhull Tcv C-0" >>q_test.x
-rbox c D6 | qhull Tcv C-0 >>q_test.x
-echo "rbox c D7 | qhull Tv C-0" >>q_test.x
-rbox c D7 | qhull Tv C-0 >>q_test.x
-echo "rbox 20 l D3 | qhull Tcv" >>q_test.x
-rbox 20 l D3 | qhull Tcv >>q_test.x
-echo "rbox 100 s D2 | qhull Tcv" >>q_test.x
-rbox 100 s D2 | qhull Tcv >>q_test.x
-echo "rbox 100 s D3 | qhull Tcv" >>q_test.x
-rbox 100 s D3 | qhull Tcv >>q_test.x
-echo "rbox 100 s D4 | qhull Tcv" >>q_test.x
-rbox 100 s D4 | qhull Tcv >>q_test.x
-echo "rbox 100 s c D4 | qhull Tcv" >>q_test.x
-rbox 100 s c D4 | qhull Tcv >>q_test.x
-echo "rbox 100 s d G1.5 D4 | qhull Tcv" >>q_test.x
-rbox 100 s d G1.5 D4 | qhull Tcv >>q_test.x
-echo "rbox 100 s W1e-2 | qhull Tcv" >>q_test.x
-rbox 100 s W1e-2 | qhull Tcv >>q_test.x
-echo "rbox 100 | qhull Tcv" >>q_test.x
-rbox 100 | qhull Tcv >>q_test.x
-echo "rbox 100 W1e-3 | qhull Tcv" >>q_test.x
-rbox 100 W1e-3 | qhull Tcv >>q_test.x
-echo "rbox 100 r D2 | qhull Tcv" >>q_test.x
-rbox 100 r D2 | qhull Tcv >>q_test.x
-echo "rbox 100 r s Z1 | qhull Tcv" >>q_test.x
-rbox 100 r s Z1 | qhull Tcv >>q_test.x
-echo "rbox 100 r s Z1 G0.1 | qhull Tcv C-0" >>q_test.x
-rbox 100 r s Z1 G0.1 | qhull Tcv C-0 >>q_test.x
-echo "rbox 100 s Z1 G0.1 | qhull Tcv " >>q_test.x
-rbox 100 s Z1 G0.1 | qhull Tcv  >>q_test.x
-echo "rbox 100 s Z1e-5 G0.1 | qhull Tc Pp" >>q_test.x
-rbox 100 s Z1e-5 G0.1 | qhull Tc Pp >>q_test.x
-
-echo === check qhull output formats ${d:-`date`} >>q_test.x
-echo "rbox 5 r s D2 | qhull Tcv" >>q_test.x
-rbox 5 r s D2 | qhull Tcv >>q_test.x
-echo "rbox 5 r s D2 | qhull s " >>q_test.x
-rbox 5 r s D2 | qhull s  >>q_test.x
-echo "rbox 5 r s D2 | qhull s o " >>q_test.x
-rbox 5 r s D2 | qhull s o  >>q_test.x
-echo "rbox 5 r s D2 | qhull f" >>q_test.x
-rbox 5 r s D2 | qhull f >>q_test.x
-echo "rbox 5 r s D2 | qhull i " >>q_test.x
-rbox 5 r s D2 | qhull i  >>q_test.x
-echo "rbox 5 r s D2 | qhull m " >>q_test.x
-rbox 5 r s D2 | qhull m  >>q_test.x
-echo "rbox 5 r s D2 | qhull FM " >>q_test.x
-rbox 5 r s D2 | qhull FM  >>q_test.x
-echo "rbox 5 r s D2 | qhull n " >>q_test.x
-rbox 5 r s D2 | qhull n  >>q_test.x
-echo "rbox 5 r s D2 | qhull p " >>q_test.x
-rbox 5 r s D2 | qhull p  >>q_test.x
-echo "rbox 5 r s D2 | qhull o " >>q_test.x
-rbox 5 r s D2 | qhull o  >>q_test.x
-echo "rbox 5 r s D2 | qhull Fx" >>q_test.x
-rbox 5 r s D2 | qhull Fx >>q_test.x
-echo "rbox 5 r s D2 | qhull p n i p p" >>q_test.x
-rbox 5 r s D2 | qhull p n i p p >>q_test.x
-echo "rbox 10 D3 | qhull f Tcv" >>q_test.x
-rbox 10 D3 | qhull f Tcv >>q_test.x
-echo "rbox 10 D3 | qhull i" >>q_test.x
-rbox 10 D3 | qhull i >>q_test.x
-echo "rbox 10 D3 | qhull p " >>q_test.x
-rbox 10 D3 | qhull p  >>q_test.x
-echo "rbox 10 D3 | qhull o " >>q_test.x
-rbox 10 D3 | qhull o  >>q_test.x
-echo "rbox 10 D3 | qhull Fx " >>q_test.x
-rbox 10 D3 | qhull Fx  >>q_test.x
-echo "rbox 27 M1,0,1 | qhull Qc" >>q_test.x
-rbox 27 M1,0,1 | qhull Qc >>q_test.x
-echo "rbox 50 D3 s | qhull C0.1 Qc Pd0d1d2 s p Tcv" >>q_test.x
-rbox 50 D3 s | qhull C0.1 Qc Pd0d1d2 s p Tcv >>q_test.x
-echo "rbox 10 D2 P0 P1e-15 | qhull d Qc FP s Tcv" >>q_test.x
-rbox 10 D2 P0 P1e-15 | qhull d Qc FP s Tcv >>q_test.x
-echo "rbox 100 s | qhull C-0.003 Qc FP s" >>q_test.x
-rbox 100 s | qhull C-0.003 Qc FP s >>q_test.x
-echo "rbox 100 s D2 | qhull C0.1 i Fx Tcv" >>q_test.x
-rbox 100 s D2 | qhull C0.1 i Fx Tcv >>q_test.x
-echo "rbox 4 s D3 | qhull Qc Ghipv Tcv " >>q_test.x
-rbox 4 s D3 | qhull Qc Ghipv Tcv  >>q_test.x
-echo "rbox 6 D4 | qhull f Tcv" >>q_test.x
-rbox 6 D4 | qhull f Tcv >>q_test.x
-echo "rbox 6 D4 | qhull i" >>q_test.x
-rbox 6 D4 | qhull i >>q_test.x
-echo "rbox 6 D4 | qhull p " >>q_test.x
-rbox 6 D4 | qhull p  >>q_test.x
-echo "rbox 6 D4 | qhull o" >>q_test.x
-rbox 6 D4 | qhull o >>q_test.x
-echo "rbox 1000 s D2 | qhull FA Tcv" >>q_test.x
-rbox 1000 s D2 | qhull FA Tcv >>q_test.x
-echo "rbox 1000 s | qhull FA Tcv" >>q_test.x
-rbox 1000 s | qhull FA Tcv >>q_test.x
-echo "rbox c D4 | qhull FA Tcv" >>q_test.x
-rbox c D4 | qhull FA Tcv >>q_test.x
-echo "rbox c D5 | qhull FA Tcv" >>q_test.x
-rbox c D5 | qhull FA Tcv >>q_test.x
-echo "rbox 10 D2 | qhull d FA Tcv" >>q_test.x
-rbox 10 D2 | qhull d FA Tcv >>q_test.x
-echo "rbox 10 D2 | qhull d Qu FA Tcv" >>q_test.x
-rbox 10 D2 | qhull d Qu FA Tcv >>q_test.x
-echo "rbox 10 D2 | qhull FA Tcv" >>q_test.x
-rbox 10 D2 | qhull FA Tcv >>q_test.x
-echo "rbox 10 c D2 | qhull Fx Tcv" >>q_test.x
-rbox 10 c D2 | qhull Fx Tcv >>q_test.x
-echo "rbox 1000 s | qhull FS Tcv" >>q_test.x
-rbox 1000 s | qhull FS Tcv >>q_test.x
-echo "rbox 10 W0 D2 | qhull p Qc FcC Tcv" >>q_test.x
-rbox 10 W0 D2 | qhull p Qc FcC Tcv >>q_test.x
-echo "rbox 4 z h s D2 | qhull Fd s n FD Tcv" >>q_test.x
-rbox 4 z h s D2 | qhull Fd s n FD Tcv >>q_test.x
-echo "rbox 6 s D3 | qhull C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv" >>q_test.x
-rbox 6 s D3 | qhull C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv >>q_test.x
-echo "rbox P0.5,0.5 P0.5,0.5 W0 5 D2 | qhull d FN Qc" >>q_test.x
-rbox P0.5,0.5 P0.5,0.5 W0 5 D2 | qhull d FN Qc >>q_test.x
-echo "rbox 10 D3 | qhull Fa PA5" >>q_test.x
-rbox 10 D3 | qhull Fa PA5 >>q_test.x
-echo "rbox 10 D3 | qhull Fa PF0.4" >>q_test.x
-rbox 10 D3 | qhull Fa PF0.4 >>q_test.x
-
-echo === test Qt >>q_test.x
-echo "rbox c | qhull Qt s o Tcv" >>q_test.x
-rbox c | qhull Qt s o Tcv >>q_test.x
-echo "rbox c | qhull Qt f i" >>q_test.x
-rbox c | qhull Qt f i >>q_test.x
-echo "rbox c | qhull Qt m FM n" >>q_test.x
-rbox c | qhull Qt m FM n >>q_test.x
-echo "rbox c | qhull Qt p o" >>q_test.x
-rbox c | qhull Qt p o >>q_test.x
-echo "rbox c | qhull Qt Fx" >>q_test.x
-rbox c | qhull Qt Fx >>q_test.x
-echo "rbox c | qhull Qt FA s Fa" >>q_test.x
-rbox c | qhull Qt FA s Fa >>q_test.x
-echo "rbox 6 r s c G0.1 D2 | qhull Qt d FA Tcv" >>q_test.x
-rbox 6 r s c G0.1 D2 | qhull Qt d FA Tcv >>q_test.x
-echo "rbox 6 r s c G0.1 D2 | qhull d FA Tcv" >>q_test.x
-rbox 6 r s c G0.1 D2 | qhull d FA Tcv >>q_test.x
-echo "rbox 6 r s c G0.1 D2 | qhull Qt v p Tcv" >>q_test.x
-rbox 6 r s c G0.1 D2 | qhull Qt v p Tcv >>q_test.x
-echo "rbox c | qhull Qt C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv" >>q_test.x
-rbox c | qhull Qt C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv >>q_test.x
-echo "rbox 6 r s c G0.1 D2 P0.1,0.1 | qhull s FP d FO Qt" >>q_test.x
-rbox 6 r s c G0.1 D2 P0.1,0.1 | qhull s FP d FO Qt >>q_test.x
-echo "RBOX 100 W0 | QHULL Tv Q11 FO" >>q_test.x
-RBOX 100 W0 | QHULL Tv Q11 FO >>q_test.x
-
-echo === test unbounded intersection >>q_test.x
-echo "rbox c | qhull PD0:0.5 n | qhull H0 Fp Tcv" >>q_test.x
-rbox c | qhull PD0:0.5 n | qhull H0 Fp Tcv >>q_test.x
-echo "rbox 1000 W1e-3 D3 | qhull PA8 Fa FS s n Tcv " >>q_test.x
-rbox 1000 W1e-3 D3 | qhull PA8 Fa FS s n Tcv  >>q_test.x
-echo "rbox 1000 W1e-3 D3 | qhull C-0.01 PM10 Fm n Tcv Qc" >>q_test.x
-rbox 1000 W1e-3 D3 | qhull C-0.01 PM10 Fm n Tcv Qc >>q_test.x
-echo "rbox 1000 W1e-3 D3 | qhull C-0.01 PA8 PG n Tcv Qc" >>q_test.x
-rbox 1000 W1e-3 D3 | qhull C-0.01 PA8 PG n Tcv Qc >>q_test.x
-rbox 10 | qhull FO Tz TO q_test.log.1 
-echo "type q_test.log.1" >>q_test.x
-type q_test.log.1 >>q_test.x
-
-echo === check Delaunay/Voronoi ${d:-`date`} >>q_test.x
-echo "rbox 10 D2 | qhull d Tcv" >>q_test.x
-rbox 10 D2 | qhull d Tcv >>q_test.x
-echo "rbox 10 D2 | qhull d Qz Tcv" >>q_test.x
-rbox 10 D2 | qhull d Qz Tcv >>q_test.x
-echo "rbox 10 D3 | qhull d Tcv" >>q_test.x
-rbox 10 D3 | qhull d Tcv >>q_test.x
-echo "rbox c | qhull d Qz Ft Tcv" >>q_test.x
-rbox c | qhull d Qz Ft Tcv >>q_test.x
-echo "rbox 10 s D2 c | qhull d Tcv" >>q_test.x
-rbox 10 s D2 c | qhull d Tcv >>q_test.x
-echo "rbox 10 s D2 | qhull d Tcv Qz Q8" >>q_test.x
-rbox 10 s D2 | qhull d Tcv Qz Q8 >>q_test.x
-echo "rbox 10 D2 | qhull d Tcv p" >>q_test.x
-rbox 10 D2 | qhull d Tcv p >>q_test.x
-echo "rbox 10 D2 | qhull d Tcv i" >>q_test.x
-rbox 10 D2 | qhull d Tcv i >>q_test.x
-echo "rbox 10 D2 | qhull d Tcv o" >>q_test.x
-rbox 10 D2 | qhull d Tcv o >>q_test.x
-echo "rbox 10 D2 | qhull v Tcv o" >>q_test.x
-rbox 10 D2 | qhull v Tcv o >>q_test.x
-echo "rbox 10 D2 | qhull v Tcv p" >>q_test.x
-rbox 10 D2 | qhull v Tcv p >>q_test.x
-echo "rbox 10 D2 | qhull v Tcv G" >>q_test.x
-rbox 10 D2 | qhull v Tcv G >>q_test.x
-echo "rbox 10 D2 | qhull v Tcv Fv" >>q_test.x
-rbox 10 D2 | qhull v Tcv Fv >>q_test.x
-echo "rbox 10 D2 | qhull v Tcv Fi" >>q_test.x
-rbox 10 D2 | qhull v Tcv Fi >>q_test.x
-echo "rbox 10 D2 | qhull v Tcv Fo" >>q_test.x
-rbox 10 D2 | qhull v Tcv Fo >>q_test.x
-echo "rbox 10 D2 | qhull v Qu Tcv o Fv Fi Fo" >>q_test.x
-rbox 10 D2 | qhull v Qu Tcv o Fv Fi Fo >>q_test.x
-echo "rbox 10 D3 | qhull v Tcv Fv" >>q_test.x
-rbox 10 D3 | qhull v Tcv Fv >>q_test.x
-echo "rbox 10 D3 | qhull v Tcv Fi" >>q_test.x
-rbox 10 D3 | qhull v Tcv Fi >>q_test.x
-echo "rbox 10 D3 | qhull v Tcv Fo" >>q_test.x
-rbox 10 D3 | qhull v Tcv Fo >>q_test.x
-echo "rbox 10 D3 | qhull v Qu Tcv o Fv Fi Fo" >>q_test.x
-rbox 10 D3 | qhull v Qu Tcv o Fv Fi Fo >>q_test.x
-echo "rbox 5 D2 | qhull v f FnN o" >>q_test.x
-rbox 5 D2 | qhull v f FnN o >>q_test.x
-
-echo === check Halfspace ${d:-`date`} >>q_test.x
-echo "rbox 100 s D4 | qhull FA FV n s Tcv | qhull H Fp Tcv | qhull FA  Tcv" >>q_test.x
-rbox 100 s D4 | qhull FA s Tcv >>q_test.x
-rbox 100 s D4 | qhull FA FV n s Tcv | qhull H Fp Tcv | qhull FA  Tcv >>q_test.x
-echo "rbox d D3 | qhull FQ n s FD Tcv | qhull Fd H0.1,0.1 Fp FQ Tcv" >>q_test.x
-rbox d D3 | qhull s >>q_test.x
-rbox d D3 | qhull FQ n FD Tcv | qhull Fd H0.1,0.1 Fp FQ Tcv >>q_test.x
-echo "rbox 5 r D2 | qhull s n Tcv | qhull H0 Fp Tcv" >>q_test.x
-rbox 5 r D2 | qhull >>q_test.x
-rbox 5 r D2 | qhull n Tcv | qhull H0 Fp Tcv >>q_test.x
-
-echo === check qhull ${d:-`date`} >>q_test.x
-echo "rbox 10 s D3 | qhull Tcv" >>q_test.x
-rbox 10 s D3 | qhull Tcv >>q_test.x
-echo "rbox 10 s D3 | qhull f Pd0:0.5 Pd2 Tcv" >>q_test.x
-rbox 10 s D3 | qhull f Pd0:0.5 Pd2 Tcv >>q_test.x
-echo "rbox 10 s D3 | qhull f Tcv PD2:-0.5" >>q_test.x
-rbox 10 s D3 | qhull f Tcv PD2:-0.5 >>q_test.x
-echo "rbox 10 s D3 | qhull QR-1" >>q_test.x
-rbox 10 s D3 | qhull QR-1 >>q_test.x
-echo "rbox 10 s D3 | qhull QR-40" >>q_test.x
-rbox 10 s D3 | qhull QR-40 >>q_test.x
-echo "rbox 1000 D3 | qhull Tcvs" >>q_test.x
-rbox 1000 D3 | qhull Tcvs >>q_test.x
-echo "rbox 100 s D3 | qhull TcvV-2" >>q_test.x
-rbox 100 s D3 | qhull TcvV-2 >>q_test.x
-echo "rbox 100 s D3 | qhull TcvC2" >>q_test.x
-rbox 100 s D3 | qhull TcvC2 >>q_test.x
-echo "rbox 100 s D3 | qhull TcvV2" >>q_test.x
-rbox 100 s D3 | qhull TcvV2 >>q_test.x
-echo "rbox 100 s D3 | qhull T1cvV2P2" >>q_test.x
-rbox 100 s D3 | qhull T1cvV2P2 >>q_test.x
-echo "rbox 100 s D3 | qhull TcvF100" >>q_test.x
-rbox 100 s D3 | qhull TcvF100 >>q_test.x
-echo "rbox 100 s D3 | qhull Qf Tcv" >>q_test.x
-rbox 100 s D3 | qhull Qf Tcv >>q_test.x
-echo "rbox 100 D3 | qhull Tcv" >>q_test.x
-rbox 100 D3 | qhull Tcv >>q_test.x
-echo "rbox 100 D3 | qhull Qs Tcv" >>q_test.x
-rbox 100 D3 | qhull Qs Tcv >>q_test.x
-echo "rbox 100 D5 | qhull Qs Tcv" >>q_test.x
-rbox 100 D5 | qhull Qs Tcv >>q_test.x
-echo "rbox 100 D3 | qhull Qr Tcv" >>q_test.x
-rbox 100 D3 | qhull Qr Tcv >>q_test.x
-echo "rbox 100 D3 | qhull Qxv Tcv" >>q_test.x
-rbox 100 D3 | qhull Qxv Tcv >>q_test.x
-echo "rbox 100 D3 | qhull Qi f Pd0 Pd1 Pd2 Tcv" >>q_test.x
-rbox 100 D3 | qhull Qi f Pd0 Pd1 Pd2 Tcv >>q_test.x
-echo "rbox c d | qhull Qc f Tcv" >>q_test.x
-rbox c d | qhull Qc f Tcv >>q_test.x
-echo "rbox c d | qhull Qc p Tcv" >>q_test.x
-rbox c d | qhull Qc p Tcv >>q_test.x
-echo "rbox 100 D3 | qhull QbB FO Tcv" >>q_test.x
-rbox 100 D3 | qhull QbB FO Tcv >>q_test.x
-echo "rbox 1000 D2 B1e6 | qhull d Qbb FO Tcv" >>q_test.x
-rbox 1000 D2 B1e6 | qhull d Qbb FO Tcv >>q_test.x
-echo "rbox 10 D3 | qhull QbB p Tcv" >>q_test.x
-rbox 10 D3 | qhull QbB p Tcv >>q_test.x
-echo "rbox 10 D3 | qhull Qbb p Tcv" >>q_test.x
-rbox 10 D3 | qhull Qbb p Tcv >>q_test.x
-echo "rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv" >>q_test.x
-rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv >>q_test.x
-echo "rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv | qhull QbB p Tcv" >>q_test.x
-rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv | qhull QbB p Tcv >>q_test.x
-echo "rbox 10 D3 | qhull Qb1:0B1:0 d Tcv Q8" >>q_test.x
-rbox 10 D3 | qhull Qb1:0B1:0 d Tcv Q8 >>q_test.x
-echo "rbox 10 D3 | qhull Qb1:0B1:0B2:0 d Tcv Q8" >>q_test.x
-rbox 10 D3 | qhull Qb1:0B1:0B2:0 d Tcv Q8 >>q_test.x
-echo "rbox 10 D3 | qhull Qb1:0 d Tcv " >>q_test.x
-rbox 10 D3 | qhull Qb1:0 d Tcv  >>q_test.x
-echo "rbox 10 D3 | qhull Qb1:0B1:0  Tcv" >>q_test.x
-rbox 10 D3 | qhull Qb1:0B1:0  Tcv >>q_test.x
-echo "== next command will error ==" >>q_test.x
-echo "rbox 10 D2 | qhull Qb1:1B1:1 Tcv" >>q_test.x
-rbox 10 D2 | qhull Qb1:1B1:1 Tcv >>q_test.x
-echo "rbox 200 L20 D2 t | qhull FO Tcv C-0" >>q_test.x
-rbox 200 L20 D2 t | qhull FO Tcv C-0 >>q_test.x
-echo "rbox 1000 L20 t | qhull FO Tcv C-0" >>q_test.x
-rbox 1000 L20 t | qhull FO Tcv C-0 >>q_test.x
-echo "rbox 200 L20 D4 t | qhull FO Tcv C-0" >>q_test.x
-rbox 200 L20 D4 t | qhull FO Tcv C-0 >>q_test.x
-echo "rbox 200 L20 D5 t | qhull FO Tcv Qx" >>q_test.x
-rbox 200 L20 D5 t | qhull FO Tcv Qx >>q_test.x
-echo "rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu Q0" >>q_test.x
-rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu Q0 >>q_test.x
-echo "rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu C-0" >>q_test.x
-rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu C-0 >>q_test.x
-
-echo === check joggle and TRn ${d:-`date`} >>q_test.x
-echo "rbox 100 W0 | qhull QJ1e-14 Qc TR100 Tv" >>q_test.x
-rbox 100 W0 | qhull QJ1e-14 Qc TR100 Tv >>q_test.x
-echo "rbox 100 W0 | qhull QJ1e-13 Qc TR100 Tv" >>q_test.x
-rbox 100 W0 | qhull QJ1e-13 Qc TR100 Tv >>q_test.x
-echo "rbox 100 W0 | qhull QJ1e-12 Qc TR100 Tv" >>q_test.x
-rbox 100 W0 | qhull QJ1e-12 Qc TR100 Tv >>q_test.x
-echo "rbox 100 W0 | qhull QJ1e-11 Qc TR100 Tv" >>q_test.x
-rbox 100 W0 | qhull QJ1e-11 Qc TR100 Tv >>q_test.x
-echo "rbox 100 W0 | qhull QJ1e-10 Qc TR100 Tv" >>q_test.x
-rbox 100 W0 | qhull QJ1e-10 Qc TR100 Tv >>q_test.x
-echo "rbox 100 | qhull d QJ Qb0:1e4 QB0:1e5 Qb1:1e4 QB1:1e6 Qb2:1e5 QB2:1e7 FO Tv" >>q_test.x
-rbox 100 | qhull d QJ Qb0:1e4 QB0:1e5 Qb1:1e4 QB1:1e6 Qb2:1e5 QB2:1e7 FO Tv >>q_test.x
-
-echo === check precision options ${d:-`date`} >>q_test.x
-echo "rbox 100 D3 s | qhull E0.01 Qx Tcv FO" >>q_test.x
-rbox 100 D3 s | qhull E0.01 Qx Tcv FO >>q_test.x
-echo "rbox 100 D3 W1e-1 | qhull W1e-3 Tcv" >>q_test.x
-rbox 100 D3 W1e-1 | qhull W1e-3 Tcv >>q_test.x
-echo "rbox 100 D3 W1e-1 | qhull W1e-2 Tcv Q0" >>q_test.x
-rbox 100 D3 W1e-1 | qhull W1e-2 Tcv Q0 >>q_test.x
-echo "rbox 100 D3 W1e-1 | qhull W1e-2 Tcv" >>q_test.x
-rbox 100 D3 W1e-1 | qhull W1e-2 Tcv >>q_test.x
-echo "rbox 100 D3 W1e-1 | qhull W1e-1 Tcv" >>q_test.x
-rbox 100 D3 W1e-1 | qhull W1e-1 Tcv >>q_test.x
-echo "rbox 15 D2 P0 P1e-14,1e-14 | qhull d Quc Tcv" >>q_test.x
-rbox 15 D2 P0 P1e-14,1e-14 | qhull d Quc Tcv >>q_test.x
-echo "rbox 15 D3 P0 P1e-12,1e-14,1e-14 | qhull d Qcu Tcv" >>q_test.x
-rbox 15 D3 P0 P1e-12,1e-14,1e-14 | qhull d Qcu Tcv >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Tcv Qc >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 V0 Qc Tcv" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 V0 Qc Tcv >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 U0 Qc Tcv" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 U0 Qc Tcv >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 V0 Qcm Tcv" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 V0 Qcm Tcv >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Qcm Tcv" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Qcm Tcv >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Q1 FO Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Q1 FO Tcv Qc >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Q2 FO Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Q2 FO Tcv Qc >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Q3 FO Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Q3 FO Tcv Qc >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Q4 FO Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Q4 FO Tcv Qc >>q_test.x
-echo === this may generate an error ${d:-`date`} >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Q5 FO Tcv " >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Q5 FO Tcv  >>q_test.x
-echo === this should generate an error ${d:-`date`} >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Q6 FO Po Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Q6 FO Po Tcv Qc >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Q7 FO Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Q7 FO Tcv Qc >>q_test.x
-echo "rbox 1000 s D3 | qhull C-0.01 Qx Tcv Qc" >>q_test.x
-rbox 1000 s D3 | qhull C-0.01 Qx Tcv Qc >>q_test.x
-echo "rbox 100 s D3 t | qhull R1e-3 Tcv Qc" >>q_test.x
-rbox 100 s D3 t | qhull R1e-3 Tcv Qc >>q_test.x
-echo "rbox 100 s D3 t | qhull R1e-2 Tcv Qc" >>q_test.x
-rbox 100 s D3 t | qhull R1e-2 Tcv Qc >>q_test.x
-echo "rbox 500 s D3 t | qhull R0.05 A-1 Tcv Qc" >>q_test.x
-rbox 500 s D3 t | qhull R0.05 A-1 Tcv Qc >>q_test.x
-echo "rbox 100 W0 D3 t | qhull R1e-3 Tcv Qc" >>q_test.x
-rbox 100 W0 D3 t | qhull R1e-3 Tcv Qc >>q_test.x
-echo "rbox 100 W0 D3 t | qhull R1e-3 Qx Tcv Qc" >>q_test.x
-rbox 100 W0 D3 t | qhull R1e-3 Qx Tcv Qc >>q_test.x
-echo "rbox 100 W0 D3 t | qhull R1e-2 Tcv Qc" >>q_test.x
-rbox 100 W0 D3 t | qhull R1e-2 Tcv Qc >>q_test.x
-echo "rbox 100 W0 D3 t | qhull R1e-2 Qx Tcv Qc" >>q_test.x
-rbox 100 W0 D3 t | qhull R1e-2 Qx Tcv Qc >>q_test.x
-echo "rbox 500 W0 D3 t | qhull R0.05 A-1 Tcv Qc" >>q_test.x
-rbox 500 W0 D3 t | qhull R0.05 A-1 Tcv Qc >>q_test.x
-echo "rbox 500 W0 D3 t | qhull R0.05 Qx Tcv Qc" >>q_test.x
-rbox 500 W0 D3 t | qhull R0.05 Qx Tcv Qc >>q_test.x
-echo "rbox 1000 W1e-20 t | qhull Tcv Qc" >>q_test.x
-rbox 1000 W1e-20 t | qhull Tcv Qc >>q_test.x
-echo "rbox 1000 W1e-20 D4 t | qhull Tcv Qc" >>q_test.x
-rbox 1000 W1e-20 D4 t | qhull Tcv Qc >>q_test.x
-echo "rbox 500 W1e-20 D5 t | qhull Tv Qc" >>q_test.x
-rbox 500 W1e-20 D5 t | qhull Tv Qc >>q_test.x
-echo "rbox 100 W1e-20 D6 t | qhull Tv Qc" >>q_test.x
-rbox 100 W1e-20 D6 t | qhull Tv Qc >>q_test.x
-echo "rbox 50 W1e-20 D6 t | qhull Qv Tv Qc" >>q_test.x
-rbox 50 W1e-20 D6 t | qhull Qv Tv Qc >>q_test.x
-echo "rbox 10000 D4 t | qhull QR0 Qc C-0.01 A0.3 Tv" >>q_test.x
-rbox 10000 D4 t | qhull QR0 Qc C-0.01 A0.3 Tv >>q_test.x
-echo "rbox 1000 D2 t | qhull d QR0 Qc C-1e-8 Qu Tv" >>q_test.x
-rbox 1000 D2 t | qhull d QR0 Qc C-1e-8 Qu Tv >>q_test.x
-echo "rbox 300 D5 t |qhull A-0.999 Qc Tcv" >>q_test.x
-rbox 300 D5 t |qhull A-0.999 Qc Tcv >>q_test.x
-echo "rbox 100 D6 t |qhull A-0.9999 Qc Tcv" >>q_test.x
-rbox 100 D6 t |qhull A-0.9999 Qc Tcv >>q_test.x
-echo "rbox 50 D7 t |qhull A-0.99999 Qc Tcv W0.1" >>q_test.x
-rbox 50 D7 t |qhull A-0.99999 Qc Tcv W0.1 >>q_test.x
-
-echo === check bad cases for Qhull.  May cause errors ${d:-`date`} >>q_test.x
-echo "RBOX 1000 L100000 s G1e-6 t | QHULL Tv" >>q_test.x
-RBOX 1000 L100000 s G1e-6 t | QHULL Tv >>q_test.x
-echo "RBOX 1000 L100000 s G1e-6 t | QHULL Tv Q10" >>q_test.x
-RBOX 1000 L100000 s G1e-6 t | QHULL Tv Q10 >>q_test.x
-echo "rbox 1000 s Z1 G1e-13 t | qhull Tv" >>q_test.x
-rbox 1000 s Z1 G1e-13 t | qhull Tv >>q_test.x
-echo "RBOX 1000 s W1e-13 P0 t | QHULL d Qbb Qc Tv" >>q_test.x
-RBOX 1000 s W1e-13 P0 t | QHULL d Qbb Qc Tv >>q_test.x
-echo "RBOX 1000 s W1e-13 t | QHULL d Tv" >>q_test.x
-RBOX 1000 s W1e-13 t | QHULL d Tv >>q_test.x
-echo "RBOX 1000 s W1e-13 t D2 | QHULL d Tv" >>q_test.x
-RBOX 1000 s W1e-13 t D2 | QHULL d Tv >>q_test.x
-
-echo ======================================================= >>q_test.x
-echo ======================================================= >>q_test.x
-echo === The following commands may cause errors =========== >>q_test.x
-echo ======================================================= >>q_test.x
-echo ======================================================= >>q_test.x
-echo "rbox c D7 | qhull Q0 Tcv" >>q_test.x
-rbox c D7 | qhull Q0 Tcv >>q_test.x
-echo "rbox 100 s D3 | qhull Q0 E1e-3 Tc Po" >>q_test.x
-rbox 100 s D3 | qhull Q0 E1e-3 Tc Po >>q_test.x
-echo "rbox 100 s D3 | qhull Q0 E1e-2 Tc Po" >>q_test.x
-rbox 100 s D3 | qhull Q0 E1e-2 Tc Po >>q_test.x
-echo "rbox 100 s D3 | qhull Q0 E1e-1 Tc Po" >>q_test.x
-rbox 100 s D3 | qhull Q0 E1e-1 Tc Po >>q_test.x
-echo "rbox 100 s D3 | qhull Q0 R1e-3 Tc Po" >>q_test.x
-rbox 100 s D3 | qhull Q0 R1e-3 Tc Po >>q_test.x
-echo "rbox 100 s D3 | qhull Q0 R1e-2 Tc Po" >>q_test.x
-rbox 100 s D3 | qhull Q0 R1e-2 Tc Po >>q_test.x
-echo "rbox 100 s D3 | qhull Q0 R0.05 Tc" >>q_test.x
-rbox 100 s D3 | qhull Q0 R0.05 Tc >>q_test.x
-echo "rbox 100 s D3 | qhull Q0 R0.05 Tc Po" >>q_test.x
-rbox 100 s D3 | qhull Q0 R0.05 Tc Po >>q_test.x
-echo "rbox 1000 W1e-7 | qhull Q0 Tc Po" >>q_test.x
-rbox 1000 W1e-7 | qhull Q0 Tc Po >>q_test.x
-echo "rbox 50 s | qhull Q0 V0.05 W0.01 Tc Po" >>q_test.x
-rbox 50 s | qhull Q0 V0.05 W0.01 Tc Po >>q_test.x
-echo "rbox 100 s D5 | qhull Q0 R1e-2 Tc Po" >>q_test.x
-rbox 100 s D5 | qhull Q0 R1e-2 Tc Po >>q_test.x
-echo "qhull" >>q_test.x
-qhull >>q_test.x
-echo "qhull ." >>q_test.x
-qhull . >>q_test.x
-echo "qhull -" >>q_test.x
-qhull - >>q_test.x
-echo "rbox" >>q_test.x
-rbox >>q_test.x
-
-echo "# end of q_test" >>q_test.x
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qconvex.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qconvex.c
deleted file mode 100644
index dbd89339d9cbe86d931cefd6ab9ef1dc46978559..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qconvex.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qconvex.c
-      compute convex hulls using qhull
-
-   see unix.c for full interface
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-
-#if __MWERKS__ && __POWERPC__
-#include <SIOUX.h>
-#include <Files.h>
-#include <console.h>
-#include <Desk.h>
-
-#elif __cplusplus
-extern "C" {
-  int isatty (int);
-}
-
-#elif _MSC_VER
-#include <io.h>
-#define isatty _isatty
-
-#else
-int isatty (int);  /* returns 1 if stdin is a tty
-		   if "Undefined symbol" this can be deleted along with call in main() */
-#endif
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt">-</a>
-
-  qh_prompt
-    long prompt for qconvex
-    
-  notes:
-    restricted version of qhull.c
-
-  see:
-    concise prompt below
-*/  
-
-/* duplicated in qconvex.htm */
-char hidden_options[]=" d v H Qbb Qf Qg Qm Qr Qu Qv Qx Qz TR E V Fp Gt Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 ";
-	       
-char qh_prompta[]= "\n\
-qconvex- compute the convex hull\n\
-    http://www.qhull.org  %s\n\
-\n\
-input (stdin):\n\
-    first lines: dimension and number of points (or vice-versa).\n\
-    other lines: point coordinates, best if one point per line\n\
-    comments:    start with a non-numeric character\n\
-\n\
-options:\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Qc   - keep coplanar points with nearest facet\n\
-    Qi   - keep interior points with nearest facet\n\
-\n\
-Qhull control options:\n\
-    Qbk:n   - scale coord k so that low bound is n\n\
-      QBk:n - scale coord k so that upper bound is n (QBk is %2.2g)\n\
-    QbB  - scale input to unit cube centered at the origin\n\
-    Qbk:0Bk:0 - remove k-th coordinate from input\n\
-    QJn  - randomly joggle input in range [-n,n]\n\
-    QRn  - random rotation (n=seed, n=0 time, n=-1 time/no rotate)\n\
-%s%s%s%s";  /* split up qh_prompt for Visual C++ */
-char qh_promptb[]= "\
-    Qs   - search all points for the initial simplex\n\
-    QGn  - good facet if visible from point n, -n for not visible\n\
-    QVn  - good facet if it includes point n, -n if not\n\
-\n\
-";
-char qh_promptc[]= "\
-Trace options:\n\
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events\n\
-    Tc   - check frequently during execution\n\
-    Ts   - print statistics\n\
-    Tv   - verify result: structure, convexity, and point inclusion\n\
-    Tz   - send all output to stdout\n\
-    TFn  - report summary when n or more facets created\n\
-    TI file - input data from file, no spaces or single quotes\n\
-    TO file - output results to file, may be enclosed in single quotes\n\
-    TPn  - turn on tracing when point n added to hull\n\
-     TMn - turn on tracing at merge n\n\
-     TWn - trace merge facets when width > n\n\
-    TVn  - stop qhull after adding point n, -n for before (see TCn)\n\
-     TCn - stop qhull after building cone for point n (see TVn)\n\
-\n\
-Precision options:\n\
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex\n\
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex\n\
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge\n\
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]\n\
-    Un   - max distance below plane for a new, coplanar point\n\
-    Wn   - min facet width for outside point (before roundoff)\n\
-\n\
-Output formats (may be combined; if none, produces a summary to stdout):\n\
-    f    - facet dump\n\
-    G    - Geomview output (see below)\n\
-    i    - vertices incident to each facet\n\
-    m    - Mathematica output (2-d and 3-d)\n\
-    n    - normals with offsets\n\
-    o    - OFF file format (dim, points and facets; Voronoi regions)\n\
-    p    - point coordinates \n\
-    s    - summary (stderr)\n\
-\n\
-";
-char qh_promptd[]= "\
-More formats:\n\
-    Fa   - area for each facet\n\
-    FA   - compute total area and volume for option 's'\n\
-    Fc   - count plus coplanar points for each facet\n\
-           use 'Qc' (default) for coplanar and 'Qi' for interior\n\
-    FC   - centrum for each facet\n\
-    Fd   - use cdd format for input (homogeneous with offset first)\n\
-    FD   - use cdd format for numeric output (offset first)\n\
-    FF   - facet dump without ridges\n\
-    Fi   - inner plane for each facet\n\
-    FI   - ID for each facet\n\
-    Fm   - merge count for each facet (511 max)\n\
-    Fn   - count plus neighboring facets for each facet\n\
-    FN   - count plus neighboring facets for each point\n\
-    Fo   - outer plane (or max_outside) for each facet\n\
-    FO   - options and precision constants\n\
-    FP   - nearest vertex for each coplanar point\n\
-    FQ   - command used for qconvex\n\
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,\n\
-                      for output: #vertices, #facets,\n\
-                                  #coplanar points, #non-simplicial facets\n\
-                    #real (2), max outer plane, min vertex\n\
-    FS   - sizes:   #int (0) \n\
-                    #real(2) tot area, tot volume\n\
-    Ft   - triangulation with centrums for non-simplicial facets (OFF format)\n\
-    Fv   - count plus vertices for each facet\n\
-    FV   - average of vertices (a feasible point for 'H')\n\
-    Fx   - extreme points (in order for 2-d)\n\
-\n\
-";
-char qh_prompte[]= "\
-Geomview output (2-d, 3-d, and 4-d)\n\
-    Ga   - all points as dots\n\
-     Gp  -  coplanar points and vertices as radii\n\
-     Gv  -  vertices as spheres\n\
-    Gi   - inner planes only\n\
-     Gn  -  no planes\n\
-     Go  -  outer planes only\n\
-    Gc   - centrums\n\
-    Gh   - hyperplane intersections\n\
-    Gr   - ridges\n\
-    GDn  - drop dimension n in 3-d and 4-d output\n\
-\n\
-Print options:\n\
-    PAn  - keep n largest facets by area\n\
-    Pdk:n - drop facet if normal[k] <= n (default 0.0)\n\
-    PDk:n - drop facet if normal[k] >= n\n\
-    Pg   - print good facets (needs 'QGn' or 'QVn')\n\
-    PFn  - keep facets whose area is at least n\n\
-    PG   - print neighbors of good facets\n\
-    PMn  - keep n facets with most merges\n\
-    Po   - force output.  If error, output neighborhood of facet\n\
-    Pp   - do not report precision problems\n\
-\n\
-    .    - list of all options\n\
-    -    - one line descriptions of all options\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt2">-</a>
-
-  qh_prompt2
-    synopsis for qhull 
-*/  
-char qh_prompt2[]= "\n\
-qconvex- compute the convex hull.  Qhull %s\n\
-    input (stdin): dimension, number of points, point coordinates\n\
-    comments start with a non-numeric character\n\
-\n\
-options (qconvex.htm):\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Tv   - verify result: structure, convexity, and point inclusion\n\
-    .    - concise list of all options\n\
-    -    - one-line description of all options\n\
-\n\
-output options (subset):\n\
-    s    - summary of results (default)\n\
-    i    - vertices incident to each facet\n\
-    n    - normals with offsets\n\
-    p    - vertex coordinates (includes coplanar points if 'Qc')\n\
-    Fx   - extreme points (convex hull vertices)\n\
-    FA   - compute total area and volume\n\
-    o    - OFF format (dim, n, points, facets)\n\
-    G    - Geomview output (2-d, 3-d, and 4-d)\n\
-    m    - Mathematica output (2-d and 3-d)\n\
-    QVn  - print facets that include point n, -n if not\n\
-    TO file- output results to file, may be enclosed in single quotes\n\
-\n\
-examples:\n\
-    rbox c D2 | qconvex s n                    rbox c D2 | qconvex i\n\
-    rbox c D2 | qconvex o                      rbox 1000 s | qconvex s Tv FA\n\
-    rbox c d D2 | qconvex s Qc Fx              rbox y 1000 W0 | qconvex s n\n\
-    rbox y 1000 W0 | qconvex s QJ              rbox d G1 D12 | qconvex QR0 FA Pp\n\
-    rbox c D7 | qconvex FA TF1000\n\
-\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt3">-</a>
-
-  qh_prompt3
-    concise prompt for qhull 
-*/  
-char qh_prompt3[]= "\n\
-Qhull %s.\n\
-Except for 'F.' and 'PG', upper-case options take an argument.\n\
-\n\
- incidences     mathematica    normals        OFF_format     points\n\
- summary        facet_dump\n\
-\n\
- Farea          FArea_total    Fcoplanars     FCentrums      Fd_cdd_in\n\
- FD_cdd_out     FFacet_xridge  Finner         FIDs           Fmerges\n\
- Fneighbors     FNeigh_vertex  Fouter         FOptions       FPoint_near\n\
- FQhull         Fsummary       FSize          Fvertices      FVertex_ave\n\
- Fxtremes       FMaple\n\
-\n\
- Gvertices      Gpoints        Gall_points    Gno_planes     Ginner\n\
- Gcentrums      Ghyperplanes   Gridges        Gouter         GDrop_dim\n\
-\n\
- PArea_keep     Pdrop d0:0D0   PFacet_area_keep Pgood        PGood_neighbors\n\
- PMerge_keep    Poutput_forced Pprecision_not\n\
-\n\
- QbBound 0:0.5  QbB_scale_box  Qcoplanar      QGood_point    Qinterior\n\
- QJoggle        Qrandom        QRotate        Qsearch_1st    Qtriangulate\n\
- QVertex_good\n\
-\n\
- T4_trace       Tcheck_often   Tstatistics    Tverify        Tz_stdout\n\
- TFacet_log     TInput_file    TPoint_trace   TMerge_trace   TOutput_file\n\
- TWide_trace    TVertex_stop   TCone_stop\n\
-\n\
- Angle_max      Centrum_size   Random_dist    Ucoplanar_max  Wide_outside\n\
-";
-
-/*-<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="main">-</a>
-  
-  main( argc, argv )
-    processes the command line, calls qhull() to do the work, and exits
-  
-  design:
-    initializes data structures
-    reads points
-    finishes initialization
-    computes convex hull and other structures
-    checks the result
-    writes the output
-    frees memory
-*/
-int main(int argc, char *argv[]) {
-  int curlong, totlong; /* used !qh_NOmem */
-  int exitcode, numpoints, dim;
-  coordT *points;
-  boolT ismalloc;
-
-#if __MWERKS__ && __POWERPC__
-  char inBuf[BUFSIZ], outBuf[BUFSIZ], errBuf[BUFSIZ];
-  SIOUXSettings.showstatusline= false;
-  SIOUXSettings.tabspaces= 1;
-  SIOUXSettings.rows= 40;
-  if (setvbuf (stdin, inBuf, _IOFBF, sizeof(inBuf)) < 0   /* w/o, SIOUX I/O is slow*/
-  || setvbuf (stdout, outBuf, _IOFBF, sizeof(outBuf)) < 0
-  || (stdout != stderr && setvbuf (stderr, errBuf, _IOFBF, sizeof(errBuf)) < 0)) 
-    fprintf (stderr, "qhull internal warning (main): could not change stdio to fully buffered.\n");
-  argc= ccommand(&argv);
-#endif
-
-  if ((argc == 1) && isatty( 0 /*stdin*/)) {      
-    fprintf(stdout, qh_prompt2, qh_version);
-    exit(qh_ERRnone);
-  }
-  if (argc > 1 && *argv[1] == '-' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompta, qh_version, qh_DEFAULTbox, 
-		qh_promptb, qh_promptc, qh_promptd, qh_prompte);
-    exit(qh_ERRnone);
-  }
-  if (argc >1 && *argv[1] == '.' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompt3, qh_version);
-    exit(qh_ERRnone);
-  }
-  qh_init_A (stdin, stdout, stderr, argc, argv);  /* sets qh qhull_command */
-  exitcode= setjmp (qh errexit); /* simple statement for CRAY J916 */
-  if (!exitcode) {
-    qh_checkflags (qh qhull_command, hidden_options);
-    qh_initflags (qh qhull_command);
-    points= qh_readpoints (&numpoints, &dim, &ismalloc);
-    if (dim >= 5) {
-      qh_option ("Qxact_merge", NULL, NULL);
-      qh MERGEexact= True; /* 'Qx' always */
-    }
-    qh_init_B (points, numpoints, dim, ismalloc);
-    qh_qhull();
-    qh_check_output();
-    qh_produce_output();
-    if (qh VERIFYoutput && !qh FORCEoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points();
-    exitcode= qh_ERRnone;
-  }
-  qh NOerrexit= True;  /* no more setjmp */
-#ifdef qh_NOmem
-  qh_freeqhull( True);
-#else
-  qh_freeqhull( False);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong) 
-    fprintf (stderr, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n",
-       totlong, curlong);
-#endif
-  return exitcode;
-} /* main */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qdelaun.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qdelaun.c
deleted file mode 100644
index 68620fa1a9704f494cb214a6e7898df822d54cd3..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qdelaun.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qdelaun.c
-     compute Delaunay triangulations and furthest-point Delaunay
-     triangulations using qhull
-
-   see unix.c for full interface
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-
-#if __MWERKS__ && __POWERPC__
-#include <SIOUX.h>
-#include <Files.h>
-#include <console.h>
-#include <Desk.h>
-
-#elif __cplusplus
-extern "C" {
-  int isatty (int);
-}
-
-#elif _MSC_VER
-#include <io.h>
-#define isatty _isatty
-
-#else
-int isatty (int);  /* returns 1 if stdin is a tty
-		   if "Undefined symbol" this can be deleted along with call in main() */
-#endif
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt">-</a>
-
-  qh_prompt 
-    long prompt for qhull
-    
-  notes:
-    restricted version of qhull.c
- 
-  see:
-    concise prompt below
-*/  
-
-/* duplicated in qdelau_f.htm and qdelaun.htm */
-char hidden_options[]=" d n v H U Qb QB Qc Qf Qg Qi Qm Qr QR Qv Qx TR E V FC Fi Fo Ft Fp FV Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 ";
-
-char qh_prompta[]= "\n\
-qdelaunay- compute the Delaunay triangulation\n\
-    http://www.qhull.org  %s\n\
-\n\
-input (stdin):\n\
-    first lines: dimension and number of points (or vice-versa).\n\
-    other lines: point coordinates, best if one point per line\n\
-    comments:    start with a non-numeric character\n\
-\n\
-options:\n\
-    Qu   - compute furthest-site Delaunay triangulation\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-\n\
-Qhull control options:\n\
-    QJn  - randomly joggle input in range [-n,n]\n\
-%s%s%s%s";  /* split up qh_prompt for Visual C++ */
-char qh_promptb[]= "\
-    Qs   - search all points for the initial simplex\n\
-    Qz   - add point-at-infinity to Delaunay triangulation\n\
-    QGn  - print Delaunay region if visible from point n, -n if not\n\
-    QVn  - print Delaunay regions that include point n, -n if not\n\
-\n\
-";
-char qh_promptc[]= "\
-Trace options:\n\
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events\n\
-    Tc   - check frequently during execution\n\
-    Ts   - print statistics\n\
-    Tv   - verify result: structure, convexity, and in-circle test\n\
-    Tz   - send all output to stdout\n\
-    TFn  - report summary when n or more facets created\n\
-    TI file - input data from file, no spaces or single quotes\n\
-    TO file - output results to file, may be enclosed in single quotes\n\
-    TPn  - turn on tracing when point n added to hull\n\
-     TMn - turn on tracing at merge n\n\
-     TWn - trace merge facets when width > n\n\
-    TVn  - stop qhull after adding point n, -n for before (see TCn)\n\
-     TCn - stop qhull after building cone for point n (see TVn)\n\
-\n\
-Precision options:\n\
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex\n\
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex\n\
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge\n\
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]\n\
-    Wn   - min facet width for outside point (before roundoff)\n\
-\n\
-Output formats (may be combined; if none, produces a summary to stdout):\n\
-    f    - facet dump\n\
-    G    - Geomview output (see below)\n\
-    i    - vertices incident to each Delaunay region\n\
-    m    - Mathematica output (2-d only, lifted to a paraboloid)\n\
-    o    - OFF format (dim, points, and facets as a paraboloid)\n\
-    p    - point coordinates (lifted to a paraboloid)\n\
-    s    - summary (stderr)\n\
-\n\
-";
-char qh_promptd[]= "\
-More formats:\n\
-    Fa   - area for each Delaunay region\n\
-    FA   - compute total area for option 's'\n\
-    Fc   - count plus coincident points for each Delaunay region\n\
-    Fd   - use cdd format for input (homogeneous with offset first)\n\
-    FD   - use cdd format for numeric output (offset first)\n\
-    FF   - facet dump without ridges\n\
-    FI   - ID of each Delaunay region\n\
-    Fm   - merge count for each Delaunay region (511 max)\n\
-    FM   - Maple output (2-d only, lifted to a paraboloid)\n\
-    Fn   - count plus neighboring region for each Delaunay region\n\
-    FN   - count plus neighboring region for each point\n\
-    FO   - options and precision constants\n\
-    FP   - nearest point and distance for each coincident point\n\
-    FQ   - command used for qdelaunay\n\
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,\n\
-                    for output: #vertices, #Delaunay regions,\n\
-                                #coincident points, #non-simplicial regions\n\
-                    #real (2), max outer plane, min vertex\n\
-    FS   - sizes:   #int (0)\n\
-                    #real(2) tot area, 0\n\
-    Fv   - count plus vertices for each Delaunay region\n\
-    Fx   - extreme points of Delaunay triangulation (on convex hull)\n\
-\n\
-";
-char qh_prompte[]= "\
-Geomview options (2-d and 3-d)\n\
-    Ga   - all points as dots\n\
-     Gp  -  coplanar points and vertices as radii\n\
-     Gv  -  vertices as spheres\n\
-    Gi   - inner planes only\n\
-     Gn  -  no planes\n\
-     Go  -  outer planes only\n\
-    Gc	   - centrums\n\
-    Gh   - hyperplane intersections\n\
-    Gr   - ridges\n\
-    GDn  - drop dimension n in 3-d and 4-d output\n\
-    Gt   - transparent outer ridges to view 3-d Delaunay\n\
-\n\
-Print options:\n\
-    PAn  - keep n largest Delaunay regions by area\n\
-    Pdk:n - drop facet if normal[k] <= n (default 0.0)\n\
-    PDk:n - drop facet if normal[k] >= n\n\
-    Pg   - print good Delaunay regions (needs 'QGn' or 'QVn')\n\
-    PFn  - keep Delaunay regions whose area is at least n\n\
-    PG   - print neighbors of good regions (needs 'QGn' or 'QVn')\n\
-    PMn  - keep n Delaunay regions with most merges\n\
-    Po   - force output.  If error, output neighborhood of facet\n\
-    Pp   - do not report precision problems\n\
-\n\
-    .    - list of all options\n\
-    -    - one line descriptions of all options\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt2">-</a>
-
-  qh_prompt2
-    synopsis for qhull 
-*/  
-char qh_prompt2[]= "\n\
-qdelaunay- compute the Delaunay triangulation.  Qhull %s\n\
-    input (stdin): dimension, number of points, point coordinates\n\
-    comments start with a non-numeric character\n\
-\n\
-options (qdelaun.htm):\n\
-    Qu   - furthest-site Delaunay triangulation\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Tv   - verify result: structure, convexity, and in-circle test\n\
-    .    - concise list of all options\n\
-    -    - one-line description of all options\n\
-\n\
-output options (subset):\n\
-    s    - summary of results (default)\n\
-    i    - vertices incident to each Delaunay region\n\
-    Fx   - extreme points (vertices of the convex hull)\n\
-    o    - OFF format (shows the points lifted to a paraboloid)\n\
-    G    - Geomview output (2-d and 3-d points lifted to a paraboloid)\n\
-    m    - Mathematica output (2-d inputs lifted to a paraboloid)\n\
-    QVn  - print Delaunay regions that include point n, -n if not\n\
-    TO file- output results to file, may be enclosed in single quotes\n\
-\n\
-examples:\n\
-    rbox c P0 D2 | qdelaunay s o          rbox c P0 D2 | qdelaunay i\n\
-    rbox c P0 D2 | qdelaunay Fv           rbox c P0 D2 | qdelaunay s Qu Fv\n\
-    rbox c G1 d D2 | qdelaunay s i        rbox c G1 d D2 | qdelaunay Qt\n\
-    rbox M3,4 z 100 D2 | qdelaunay s      rbox M3,4 z 100 D2 | qdelaunay s Qt\n\
-\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt3">-</a>
-
-  qh_prompt3
-    concise prompt for qhull 
-*/  
-char qh_prompt3[]= "\n\
-Qhull %s.\n\
-Except for 'F.' and 'PG', upper-case options take an argument.\n\
-\n\
- incidences     mathematica    OFF_format     points_lifted  summary\n\
- facet_dump\n\
-\n\
- Farea          FArea_total    Fcoincident    Fd_cdd_in      FD_cdd_out\n\
- FF_dump_xridge FIDs           Fmerges        Fneighbors     FNeigh_vertex\n\
- FOptions       FPoint_near    FQdelaun       Fsummary       FSize\n\
- Fvertices      Fxtremes       FMaple\n\
-\n\
- Gvertices      Gpoints        Gall_points    Gno_planes     Ginner\n\
- Gcentrums      Ghyperplanes   Gridges        Gouter         GDrop_dim\n\
- Gtransparent\n\
-\n\
- PArea_keep     Pdrop d0:0D0   Pgood          PFacet_area_keep\n\
- PGood_neighbors PMerge_keep   Poutput_forced Pprecision_not\n\
-\n\
- QGood_point    QJoggle        Qsearch_1st    Qtriangulate   QupperDelaunay\n\
- QVertex_good   Qzinfinite\n\
-\n\
- T4_trace       Tcheck_often   Tstatistics    Tverify        Tz_stdout\n\
- TFacet_log     TInput_file    TPoint_trace   TMerge_trace   TOutput_file\n\
- TWide_trace    TVertex_stop   TCone_stop\n\
-\n\
- Angle_max      Centrum_size   Random_dist    Wide_outside\n\
-";
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="main">-</a>
-  
-  main( argc, argv )
-    processes the command line, calls qhull() to do the work, and exits
-  
-  design:
-    initializes data structures
-    reads points
-    finishes initialization
-    computes convex hull and other structures
-    checks the result
-    writes the output
-    frees memory
-*/
-int main(int argc, char *argv[]) {
-  int curlong, totlong; /* used !qh_NOmem */
-  int exitcode, numpoints, dim;
-  coordT *points;
-  boolT ismalloc;
-
-#if __MWERKS__ && __POWERPC__
-  char inBuf[BUFSIZ], outBuf[BUFSIZ], errBuf[BUFSIZ];
-  SIOUXSettings.showstatusline= false;
-  SIOUXSettings.tabspaces= 1;
-  SIOUXSettings.rows= 40;
-  if (setvbuf (stdin, inBuf, _IOFBF, sizeof(inBuf)) < 0   /* w/o, SIOUX I/O is slow*/
-  || setvbuf (stdout, outBuf, _IOFBF, sizeof(outBuf)) < 0
-  || (stdout != stderr && setvbuf (stderr, errBuf, _IOFBF, sizeof(errBuf)) < 0)) 
-    fprintf (stderr, "qhull internal warning (main): could not change stdio to fully buffered.\n");
-  argc= ccommand(&argv);
-#endif
-
-  if ((argc == 1) && isatty( 0 /*stdin*/)) {      
-    fprintf(stdout, qh_prompt2, qh_version);
-    exit(qh_ERRnone);
-  }
-  if (argc > 1 && *argv[1] == '-' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompta, qh_version,
-		qh_promptb, qh_promptc, qh_promptd, qh_prompte);
-    exit(qh_ERRnone);
-  }
-  if (argc >1 && *argv[1] == '.' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompt3, qh_version);
-    exit(qh_ERRnone);
-  }
-  qh_init_A (stdin, stdout, stderr, argc, argv);  /* sets qh qhull_command */
-  exitcode= setjmp (qh errexit); /* simple statement for CRAY J916 */
-  if (!exitcode) {
-    qh_option ("delaunay  Qbbound-last", NULL, NULL);
-    qh DELAUNAY= True;     /* 'd'   */
-    qh SCALElast= True;    /* 'Qbb' */
-    qh KEEPcoplanar= True; /* 'Qc', to keep coplanars in 'p' */
-    qh_checkflags (qh qhull_command, hidden_options);
-    qh_initflags (qh qhull_command);
-    points= qh_readpoints (&numpoints, &dim, &ismalloc);
-    if (dim >= 5) {
-      qh_option ("Qxact_merge", NULL, NULL);
-      qh MERGEexact= True; /* 'Qx' always */
-    }
-    qh_init_B (points, numpoints, dim, ismalloc);
-    qh_qhull();
-    qh_check_output();
-    qh_produce_output();
-    if (qh VERIFYoutput && !qh FORCEoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points();
-    exitcode= qh_ERRnone;
-  }
-  qh NOerrexit= True;  /* no more setjmp */
-#ifdef qh_NOmem
-  qh_freeqhull( True);
-#else
-  qh_freeqhull( False);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong) 
-    fprintf (stderr, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n",
-       totlong, curlong);
-#endif
-  return exitcode;
-} /* main */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qhalf.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qhalf.c
deleted file mode 100644
index 0996c545e1263b4263f0b3d61c74620507383844..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qhalf.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qhalf.c
-     compute the intersection of halfspaces about a point
-
-   see unix.c for full interface
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-
-#if __MWERKS__ && __POWERPC__
-#include <SIOUX.h>
-#include <Files.h>
-#include <console.h>
-#include <Desk.h>
-
-#elif __cplusplus
-extern "C" {
-  int isatty (int);
-}
-
-#elif _MSC_VER
-#include <io.h>
-#define isatty _isatty
-
-#else
-int isatty (int);  /* returns 1 if stdin is a tty
-		   if "Undefined symbol" this can be deleted along with call in main() */
-#endif
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt">-</a>
-
-  qh_prompt 
-    long prompt for qhull
-    
-  notes:
-    restricted version of qhull.c
- 
-  see:
-    concise prompt below
-*/  
-
-/* duplicated in qhalf.htm */
-char hidden_options[]=" d n v Qbb QbB Qf Qg Qm Qr QR Qv Qx Qz TR E V Fa FA FC FD FS Ft FV Gt Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 ";
-
-char qh_prompta[]= "\n\
-qhalf- compute the intersection of halfspaces about a point\n\
-    http://www.qhull.org  %s\n\
-\n\
-input (stdin):\n\
-    optional interior point: dimension, 1, coordinates\n\
-    first lines: dimension+1 and number of halfspaces\n\
-    other lines: halfspace coefficients followed by offset\n\
-    comments:    start with a non-numeric character\n\
-\n\
-options:\n\
-    Hn,n - specify coordinates of interior point\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Qc   - keep coplanar halfspaces\n\
-    Qi   - keep other redundant halfspaces\n\
-\n\
-Qhull control options:\n\
-    QJn  - randomly joggle input in range [-n,n]\n\
-%s%s%s%s";  /* split up qh_prompt for Visual C++ */
-char qh_promptb[]= "\
-    Qbk:0Bk:0 - remove k-th coordinate from input\n\
-    Qs   - search all halfspaces for the initial simplex\n\
-    QGn  - print intersection if visible to halfspace n, -n for not\n\
-    QVn  - print intersections for halfspace n, -n if not\n\
-\n\
-";
-char qh_promptc[]= "\
-Trace options:\n\
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events\n\
-    Tc   - check frequently during execution\n\
-    Ts   - print statistics\n\
-    Tv   - verify result: structure, convexity, and redundancy\n\
-    Tz   - send all output to stdout\n\
-    TFn  - report summary when n or more facets created\n\
-    TI file - input data from file, no spaces or single quotes\n\
-    TO file - output results to file, may be enclosed in single quotes\n\
-    TPn  - turn on tracing when halfspace n added to intersection\n\
-    TMn  - turn on tracing at merge n\n\
-    TWn  - trace merge facets when width > n\n\
-    TVn  - stop qhull after adding halfspace n, -n for before (see TCn)\n\
-    TCn  - stop qhull after building cone for halfspace n (see TVn)\n\
-\n\
-Precision options:\n\
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex\n\
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex\n\
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge\n\
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]\n\
-    Un   - max distance below plane for a new, coplanar halfspace\n\
-    Wn   - min facet width for outside halfspace (before roundoff)\n\
-\n\
-Output formats (may be combined; if none, produces a summary to stdout):\n\
-    f    - facet dump\n\
-    G    - Geomview output (dual convex hull)\n\
-    i    - non-redundant halfspaces incident to each intersection\n\
-    m    - Mathematica output (dual convex hull)\n\
-    o    - OFF format (dual convex hull: dimension, points, and facets)\n\
-    p    - vertex coordinates of dual convex hull (coplanars if 'Qc' or 'Qi')\n\
-    s    - summary (stderr)\n\
-\n\
-";
-char qh_promptd[]= "\
-More formats:\n\
-    Fc   - count plus redundant halfspaces for each intersection\n\
-         -   Qc (default) for coplanar and Qi for other redundant\n\
-    Fd   - use cdd format for input (homogeneous with offset first)\n\
-    FF   - facet dump without ridges\n\
-    FI   - ID of each intersection\n\
-    Fm   - merge count for each intersection (511 max)\n\
-    FM   - Maple output (dual convex hull)\n\
-    Fn   - count plus neighboring intersections for each intersection\n\
-    FN   - count plus intersections for each non-redundant halfspace\n\
-    FO   - options and precision constants\n\
-    Fp   - dim, count, and intersection coordinates\n\
-    FP   - nearest halfspace and distance for each redundant halfspace\n\
-    FQ   - command used for qhalf\n\
-    Fs   - summary: #int (8), dim, #halfspaces, #non-redundant, #intersections\n\
-                      for output: #non-redundant, #intersections, #coplanar\n\
-                                  halfspaces, #non-simplicial intersections\n\
-                    #real (2), max outer plane, min vertex\n\
-    Fv   - count plus non-redundant halfspaces for each intersection\n\
-    Fx   - non-redundant halfspaces\n\
-\n\
-";
-char qh_prompte[]= "\
-Geomview output (2-d, 3-d and 4-d; dual convex hull)\n\
-    Ga   - all points (i.e., transformed halfspaces) as dots\n\
-     Gp  -  coplanar points and vertices as radii\n\
-     Gv  -  vertices (i.e., non-redundant halfspaces) as spheres\n\
-    Gi   - inner planes (i.e., halfspace intersections) only\n\
-     Gn  -  no planes\n\
-     Go  -  outer planes only\n\
-    Gc	 - centrums\n\
-    Gh   - hyperplane intersections\n\
-    Gr   - ridges\n\
-    GDn  - drop dimension n in 3-d and 4-d output\n\
-\n\
-Print options:\n\
-    PAn  - keep n largest facets (i.e., intersections) by area\n\
-    Pdk:n- drop facet if normal[k] <= n (default 0.0)\n\
-    PDk:n- drop facet if normal[k] >= n\n\
-    Pg   - print good facets (needs 'QGn' or 'QVn')\n\
-    PFn  - keep facets whose area is at least n\n\
-    PG   - print neighbors of good facets\n\
-    PMn  - keep n facets with most merges\n\
-    Po   - force output.  If error, output neighborhood of facet\n\
-    Pp   - do not report precision problems\n\
-\n\
-    .    - list of all options\n\
-    -    - one line descriptions of all options\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt2">-</a>
-
-  qh_prompt2
-    synopsis for qhull 
-*/  
-char qh_prompt2[]= "\n\
-qhalf- halfspace intersection about a point.  Qhull %s\n\
-    input (stdin): [dim, 1, interior point], dim+1, n, coefficients+offset\n\
-    comments start with a non-numeric character\n\
-\n\
-options (qhalf.htm):\n\
-    Hn,n - specify coordinates of interior point\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Tv   - verify result: structure, convexity, and redundancy\n\
-    .    - concise list of all options\n\
-    -    - one-line description of all options\n\
-\n\
-output options (subset):\n\
-    s    - summary of results (default)\n\
-    Fp   - intersection coordinates\n\
-    Fv   - non-redundant halfspaces incident to each intersection\n\
-    Fx   - non-redundant halfspaces\n\
-    o    - OFF file format (dual convex hull)\n\
-    G    - Geomview output (dual convex hull)\n\
-    m    - Mathematica output (dual convex hull)\n\
-    QVn  - print intersections for halfspace n, -n if not\n\
-    TO file - output results to file, may be enclosed in single quotes\n\
-\n\
-examples:\n\
-    rbox d | qconvex FQ n | qhalf s H0,0,0 Fp\n\
-    rbox c | qconvex FQ FV n | qhalf s i\n\
-    rbox c | qconvex FQ FV n | qhalf s o\n\
-\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt3">-</a>
-
-  qh_prompt3
-    concise prompt for qhull 
-*/  
-char qh_prompt3[]= "\n\
-Qhull %s.\n\
-Except for 'F.' and 'PG', upper_case options take an argument.\n\
-\n\
- incidences     Geomview       mathematica    OFF_format     point_dual\n\
- summary        facet_dump\n\
-\n\
- Fc_redundant   Fd_cdd_in      FF_dump_xridge FIDs           Fmerges\n\
- Fneighbors     FN_intersect   FOptions       Fp_coordinates FP_nearest\n\
- FQhalf         Fsummary       Fv_halfspace   FMaple         Fx_non_redundant\n\
-\n\
- Gvertices      Gpoints        Gall_points    Gno_planes     Ginner\n\
- Gcentrums      Ghyperplanes   Gridges        Gouter         GDrop_dim\n\
-\n\
- PArea_keep     Pdrop d0:0D0   Pgood          PFacet_area_keep\n\
- PGood_neighbors PMerge_keep   Poutput_forced Pprecision_not\n\
-\n\
- Qbk:0Bk:0_drop Qcoplanar      QG_half_good   Qi_redundant   QJoggle\n\
- Qsearch_1st    Qtriangulate   QVertex_good\n\
-\n\
- T4_trace       Tcheck_often   Tstatistics    Tverify        Tz_stdout\n\
- TFacet_log     TInput_file    TPoint_trace   TMerge_trace   TOutput_file\n\
- TWide_trace    TVertex_stop   TCone_stop\n\
-\n\
- Angle_max      Centrum_size   Random_dist    Ucoplanar_max  Wide_outside\n\
-";
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="main">-</a>
-  
-  main( argc, argv )
-    processes the command line, calls qhull() to do the work, and exits
-  
-  design:
-    initializes data structures
-    reads points
-    finishes initialization
-    computes convex hull and other structures
-    checks the result
-    writes the output
-    frees memory
-*/
-int main(int argc, char *argv[]) {
-  int curlong, totlong; /* used !qh_NOmem */
-  int exitcode, numpoints, dim;
-  coordT *points;
-  boolT ismalloc;
-
-#if __MWERKS__ && __POWERPC__
-  char inBuf[BUFSIZ], outBuf[BUFSIZ], errBuf[BUFSIZ];
-  SIOUXSettings.showstatusline= false;
-  SIOUXSettings.tabspaces= 1;
-  SIOUXSettings.rows= 40;
-  if (setvbuf (stdin, inBuf, _IOFBF, sizeof(inBuf)) < 0   /* w/o, SIOUX I/O is slow*/
-  || setvbuf (stdout, outBuf, _IOFBF, sizeof(outBuf)) < 0
-  || (stdout != stderr && setvbuf (stderr, errBuf, _IOFBF, sizeof(errBuf)) < 0)) 
-    fprintf (stderr, "qhull internal warning (main): could not change stdio to fully buffered.\n");
-  argc= ccommand(&argv);
-#endif
-
-  if ((argc == 1) && isatty( 0 /*stdin*/)) {      
-    fprintf(stdout, qh_prompt2, qh_version);
-    exit(qh_ERRnone);
-  }
-  if (argc > 1 && *argv[1] == '-' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompta, qh_version, 
-        qh_promptb, qh_promptc, qh_promptd, qh_prompte);
-    exit(qh_ERRnone);
-  }
-  if (argc >1 && *argv[1] == '.' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompt3, qh_version);
-    exit(qh_ERRnone);
-  }
-  qh_init_A (stdin, stdout, stderr, argc, argv);  /* sets qh qhull_command */
-  exitcode= setjmp (qh errexit); /* simple statement for CRAY J916 */
-  if (!exitcode) {
-    qh_option ("Halfspace", NULL, NULL);
-    qh HALFspace= True;    /* 'H'   */
-    qh_checkflags (qh qhull_command, hidden_options);
-    qh_initflags (qh qhull_command);
-    if (qh SCALEinput) {
-      fprintf(qh ferr, "\
-qhull error: options 'Qbk:n' and 'QBk:n' are not used with qhalf.\n\
-             Use 'Qbk:0Bk:0 to drop dimension k.\n");
-      qh_errexit(qh_ERRinput, NULL, NULL);
-    }
-    points= qh_readpoints (&numpoints, &dim, &ismalloc);
-    if (dim >= 5) {
-      qh_option ("Qxact_merge", NULL, NULL);
-      qh MERGEexact= True; /* 'Qx' always */
-    }
-    qh_init_B (points, numpoints, dim, ismalloc);
-    qh_qhull();
-    qh_check_output();
-    qh_produce_output();
-    if (qh VERIFYoutput && !qh FORCEoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points();
-    exitcode= qh_ERRnone;
-  }
-  qh NOerrexit= True;  /* no more setjmp */
-#ifdef qh_NOmem
-  qh_freeqhull( True);
-#else
-  qh_freeqhull( False);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong) 
-    fprintf (stderr, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n",
-       totlong, curlong);
-#endif
-  return exitcode;
-} /* main */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qvoronoi.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qvoronoi.c
deleted file mode 100644
index 1a3aeb4cef437b6d6ff92228e063cfb5280200f1..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/qvoronoi.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qvoronoi.c
-     compute Voronoi diagrams and furthest-point Voronoi
-     diagrams using qhull
-
-   see unix.c for full interface
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-
-#if __MWERKS__ && __POWERPC__
-#include <SIOUX.h>
-#include <Files.h>
-#include <console.h>
-#include <Desk.h>
-
-#elif __cplusplus
-extern "C" {
-  int isatty (int);
-}
-
-#elif _MSC_VER
-#include <io.h>
-#define isatty _isatty
-
-#else
-int isatty (int);  /* returns 1 if stdin is a tty
-		   if "Undefined symbol" this can be deleted along with call in main() */
-#endif
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt">-</a>
-
-  qh_prompt 
-    long prompt for qhull
-    
-  notes:
-    restricted version of qhull.c
- 
-  see:
-    concise prompt below
-*/  
-
-/* duplicated in qvoron_f.htm and qvoronoi.htm */
-char hidden_options[]=" d n m v H U Qb QB Qc Qf Qg Qi Qm Qr QR Qv Qx TR E V Fa FA FC Fp FS Ft FV Pv Gt Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 ";
-
-char qh_prompta[]= "\n\
-qvoronoi- compute the Voronoi diagram\n\
-    http://www.qhull.org  %s\n\
-\n\
-input (stdin):\n\
-    first lines: dimension and number of points (or vice-versa).\n\
-    other lines: point coordinates, best if one point per line\n\
-    comments:    start with a non-numeric character\n\
-\n\
-options:\n\
-    Qu   - compute furthest-site Voronoi diagram\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-\n\
-Qhull control options:\n\
-    Qz   - add point-at-infinity to Voronoi diagram\n\
-    QJn  - randomly joggle input in range [-n,n]\n\
-%s%s%s%s";  /* split up qh_prompt for Visual C++ */
-char qh_promptb[]= "\
-    Qs   - search all points for the initial simplex\n\
-    QGn  - Voronoi vertices if visible from point n, -n if not\n\
-    QVn  - Voronoi vertices for input point n, -n if not\n\
-\n\
-";
-char qh_promptc[]= "\
-Trace options:\n\
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events\n\
-    Tc   - check frequently during execution\n\
-    Ts   - statistics\n\
-    Tv   - verify result: structure, convexity, and in-circle test\n\
-    Tz   - send all output to stdout\n\
-    TFn  - report summary when n or more facets created\n\
-    TI file - input data from file, no spaces or single quotes\n\
-    TO file - output results to file, may be enclosed in single quotes\n\
-    TPn  - turn on tracing when point n added to hull\n\
-     TMn - turn on tracing at merge n\n\
-     TWn - trace merge facets when width > n\n\
-    TVn  - stop qhull after adding point n, -n for before (see TCn)\n\
-     TCn - stop qhull after building cone for point n (see TVn)\n\
-\n\
-Precision options:\n\
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex\n\
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex\n\
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge\n\
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]\n\
-    Wn   - min facet width for non-coincident point (before roundoff)\n\
-\n\
-Output formats (may be combined; if none, produces a summary to stdout):\n\
-    s    - summary to stderr\n\
-    p    - Voronoi vertices\n\
-    o    - OFF format (dim, Voronoi vertices, and Voronoi regions)\n\
-    i    - Delaunay regions (use 'Pp' to avoid warning)\n\
-    f    - facet dump\n\
-\n\
-";
-char qh_promptd[]= "\
-More formats:\n\
-    Fc   - count plus coincident points (by Voronoi vertex)\n\
-    Fd   - use cdd format for input (homogeneous with offset first)\n\
-    FD   - use cdd format for output (offset first)\n\
-    FF   - facet dump without ridges\n\
-    Fi   - separating hyperplanes for bounded Voronoi regions\n\
-    FI   - ID for each Voronoi vertex\n\
-    Fm   - merge count for each Voronoi vertex (511 max)\n\
-    Fn   - count plus neighboring Voronoi vertices for each Voronoi vertex\n\
-    FN   - count and Voronoi vertices for each Voronoi region\n\
-    Fo   - separating hyperplanes for unbounded Voronoi regions\n\
-    FO   - options and precision constants\n\
-    FP   - nearest point and distance for each coincident point\n\
-    FQ   - command used for qvoronoi\n\
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,\n\
-                    for output: #Voronoi regions, #Voronoi vertices,\n\
-                                #coincident points, #non-simplicial regions\n\
-                    #real (2), max outer plane and min vertex\n\
-    Fv   - Voronoi diagram as Voronoi vertices between adjacent input sites\n\
-    Fx   - extreme points of Delaunay triangulation (on convex hull)\n\
-\n\
-";
-char qh_prompte[]= "\
-Geomview options (2-d only)\n\
-    Ga   - all points as dots\n\
-     Gp  -  coplanar points and vertices as radii\n\
-     Gv  -  vertices as spheres\n\
-    Gi   - inner planes only\n\
-     Gn  -  no planes\n\
-     Go  -  outer planes only\n\
-    Gc	 - centrums\n\
-    Gh   - hyperplane intersections\n\
-    Gr   - ridges\n\
-    GDn  - drop dimension n in 3-d and 4-d output\n\
-\n\
-Print options:\n\
-    PAn  - keep n largest Voronoi vertices by 'area'\n\
-    Pdk:n - drop facet if normal[k] <= n (default 0.0)\n\
-    PDk:n - drop facet if normal[k] >= n\n\
-    Pg   - print good Voronoi vertices (needs 'QGn' or 'QVn')\n\
-    PFn  - keep Voronoi vertices whose 'area' is at least n\n\
-    PG   - print neighbors of good Voronoi vertices\n\
-    PMn  - keep n Voronoi vertices with most merges\n\
-    Po   - force output.  If error, output neighborhood of facet\n\
-    Pp   - do not report precision problems\n\
-\n\
-    .    - list of all options\n\
-    -    - one line descriptions of all options\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt2">-</a>
-
-  qh_prompt2
-    synopsis for qhull 
-*/  
-char qh_prompt2[]= "\n\
-qvoronoi- compute the Voronoi diagram.  Qhull %s\n\
-    input (stdin): dimension, number of points, point coordinates\n\
-    comments start with a non-numeric character\n\
-\n\
-options (qvoronoi.htm):\n\
-    Qu   - compute furthest-site Voronoi diagram\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Tv   - verify result: structure, convexity, and in-circle test\n\
-    .    - concise list of all options\n\
-    -    - one-line description of all options\n\
-\n\
-output options (subset):\n\
-    s    - summary of results (default)\n\
-    p    - Voronoi vertices\n\
-    o    - OFF file format (dim, Voronoi vertices, and Voronoi regions)\n\
-    FN   - count and Voronoi vertices for each Voronoi region\n\
-    Fv   - Voronoi diagram as Voronoi vertices between adjacent input sites\n\
-    Fi   - separating hyperplanes for bounded regions, 'Fo' for unbounded\n\
-    G    - Geomview output (2-d only)\n\
-    QVn  - Voronoi vertices for input point n, -n if not\n\
-    TO file- output results to file, may be enclosed in single quotes\n\
-\n\
-examples:\n\
-rbox c P0 D2 | qvoronoi s o         rbox c P0 D2 | qvoronoi Fi\n\
-rbox c P0 D2 | qvoronoi Fo          rbox c P0 D2 | qvoronoi Fv\n\
-rbox c P0 D2 | qvoronoi s Qu Fv     rbox c P0 D2 | qvoronoi Qu Fo\n\
-rbox c G1 d D2 | qvoronoi s p       rbox c G1 d D2 | qvoronoi QJ s p\n\
-rbox c P0 D2 | qvoronoi s Fv QV0\n\
-\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt3">-</a>
-
-  qh_prompt3
-    concise prompt for qhull 
-*/  
-char qh_prompt3[]= "\n\
-Qhull %s.\n\
-Except for 'F.' and 'PG', upper-case options take an argument.\n\
-\n\
- OFF_format     p_vertices     i_delaunay     summary        facet_dump\n\
-\n\
- Fcoincident    Fd_cdd_in      FD_cdd_out     FF-dump-xridge Fi_bounded\n\
- Fxtremes       Fmerges        Fneighbors     FNeigh_region  FOptions\n\
- Fo_unbounded   FPoint_near    FQvoronoi      Fsummary       Fvoronoi\n\
- FIDs\n\
-\n\
- Gvertices      Gpoints        Gall_points    Gno_planes     Ginner\n\
- Gcentrums      Ghyperplanes   Gridges        Gouter         GDrop_dim\n\
-\n\
- PArea_keep     Pdrop d0:0D0   Pgood          PFacet_area_keep\n\
- PGood_neighbors PMerge_keep   Poutput_forced Pprecision_not\n\
-\n\
- QG_vertex_good QJoggle        Qsearch_1st    Qtriangulate   Qupper_voronoi\n\
- QV_point_good  Qzinfinite\n\
-\n\
- T4_trace       Tcheck_often   Tstatistics    Tverify        Tz_stdout\n\
- TFacet_log     TInput_file    TPoint_trace   TMerge_trace   TOutput_file\n\
- TWide_trace    TVertex_stop   TCone_stop\n\
-\n\
- Angle_max      Centrum_size   Random_dist    Wide_outside\n\
-";
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="main">-</a>
-  
-  main( argc, argv )
-    processes the command line, calls qhull() to do the work, and exits
-  
-  design:
-    initializes data structures
-    reads points
-    finishes initialization
-    computes convex hull and other structures
-    checks the result
-    writes the output
-    frees memory
-*/
-int main(int argc, char *argv[]) {
-  int curlong, totlong; /* used !qh_NOmem */
-  int exitcode, numpoints, dim;
-  coordT *points;
-  boolT ismalloc;
-
-#if __MWERKS__ && __POWERPC__
-  char inBuf[BUFSIZ], outBuf[BUFSIZ], errBuf[BUFSIZ];
-  SIOUXSettings.showstatusline= false;
-  SIOUXSettings.tabspaces= 1;
-  SIOUXSettings.rows= 40;
-  if (setvbuf (stdin, inBuf, _IOFBF, sizeof(inBuf)) < 0   /* w/o, SIOUX I/O is slow*/
-  || setvbuf (stdout, outBuf, _IOFBF, sizeof(outBuf)) < 0
-  || (stdout != stderr && setvbuf (stderr, errBuf, _IOFBF, sizeof(errBuf)) < 0)) 
-    fprintf (stderr, "qhull internal warning (main): could not change stdio to fully buffered.\n");
-  argc= ccommand(&argv);
-#endif
-
-  if ((argc == 1) && isatty( 0 /*stdin*/)) {      
-    fprintf(stdout, qh_prompt2, qh_version);
-    exit(qh_ERRnone);
-  }
-  if (argc > 1 && *argv[1] == '-' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompta, qh_version,
-		qh_promptb, qh_promptc, qh_promptd, qh_prompte);
-    exit(qh_ERRnone);
-  }
-  if (argc >1 && *argv[1] == '.' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompt3, qh_version);
-    exit(qh_ERRnone);
-  }
-  qh_init_A (stdin, stdout, stderr, argc, argv);  /* sets qh qhull_command */
-  exitcode= setjmp (qh errexit); /* simple statement for CRAY J916 */
-  if (!exitcode) {
-    qh_option ("voronoi  _bbound-last  _coplanar-keep", NULL, NULL);
-    qh DELAUNAY= True;     /* 'v'   */
-    qh VORONOI= True; 
-    qh SCALElast= True;    /* 'Qbb' */
-    qh_checkflags (qh qhull_command, hidden_options);
-    qh_initflags (qh qhull_command);
-    points= qh_readpoints (&numpoints, &dim, &ismalloc);
-    if (dim >= 5) {
-      qh_option ("_merge-exact", NULL, NULL);
-      qh MERGEexact= True; /* 'Qx' always */
-    }
-    qh_init_B (points, numpoints, dim, ismalloc);
-    qh_qhull();
-    qh_check_output();
-    qh_produce_output();
-    if (qh VERIFYoutput && !qh FORCEoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points();
-    exitcode= qh_ERRnone;
-  }
-  qh NOerrexit= True;  /* no more setjmp */
-#ifdef qh_NOmem
-  qh_freeqhull( True);
-#else
-  qh_freeqhull( False);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong) 
-    fprintf (stderr, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n",
-       totlong, curlong);
-#endif
-  return exitcode;
-} /* main */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/rbox.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/rbox.c
deleted file mode 100644
index 1c288bddc96bb7214908ce94ca0c498169e51de1..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/rbox.c
+++ /dev/null
@@ -1,788 +0,0 @@
-/*<html><pre>  -<a                             href="index.htm#TOC"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   rbox.c
-     Generate input points for qhull.
-   
-   notes:
-     50 points generated for 'rbox D4'
-
-     This code needs a full rewrite.  It needs separate procedures for each 
-     distribution with common, helper procedures.
-   
-   WARNING: 
-     incorrect range if qh_RANDOMmax is defined wrong (user.h)
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <limits.h>
-#include <time.h>
-
-#include "user.h"
-#if __MWERKS__ && __POWERPC__
-#include <SIOUX.h>
-#include <Files.h>
-#include <console.h>
-#include <Desk.h>
-#endif
-
-#ifdef _MSC_VER  /* Microsoft Visual C++ */
-#pragma warning( disable : 4244)  /* conversion from double to int */
-#endif
-
-#define MINVALUE 0.8
-#define MAXdim 200
-#define PI 3.1415926535897932384
-#define DEFAULTzbox 1e6
-
-char prompt[]= "\n\
--rbox- generate various point distributions.  Default is random in cube.\n\
-\n\
-args (any order, space separated):                    Version: 2001/06/24\n\
-  3000    number of random points in cube, lens, spiral, sphere or grid\n\
-  D3      dimension 3-d\n\
-  c       add a unit cube to the output ('c G2.0' sets size)\n\
-  d       add a unit diamond to the output ('d G2.0' sets size)\n\
-  l       generate a regular 3-d spiral\n\
-  r       generate a regular polygon, ('r s Z1 G0.1' makes a cone)\n\
-  s       generate cospherical points\n\
-  x       generate random points in simplex, may use 'r' or 'Wn'\n\
-  y       same as 'x', plus simplex\n\
-  Pn,m,r  add point [n,m,r] first, pads with 0\n\
-\n\
-  Ln      lens distribution of radius n.  Also 's', 'r', 'G', 'W'.\n\
-  Mn,m,r  lattice (Mesh) rotated by [n,-m,0], [m,n,0], [0,0,r], ...\n\
-          '27 M1,0,1' is {0,1,2} x {0,1,2} x {0,1,2}.  Try 'M3,4 z'.\n\
-  W0.1    random distribution within 0.1 of the cube's or sphere's surface\n\
-  Z0.5 s  random points in a 0.5 disk projected to a sphere\n\
-  Z0.5 s G0.6 same as Z0.5 within a 0.6 gap\n\
-\n\
-  Bn      bounding box coordinates, default %2.2g\n\
-  h       output as homogeneous coordinates for cdd\n\
-  n       remove command line from the first line of output\n\
-  On      offset coordinates by n\n\
-  t       use time as the random number seed (default is command line)\n\
-  tn      use n as the random number seed\n\
-  z       print integer coordinates, default 'Bn' is %2.2g\n\
-";
-
-/* ------------------------------ prototypes ----------------*/
-int roundi( double a);
-void out1( double a);
-void out2n( double a, double b);
-void out3n( double a, double b, double c);
-int     qh_rand( void);
-void    qh_srand( int seed);
-
-
-/* ------------------------------ globals -------------------*/
-
-    FILE *fp;
-    int isinteger= 0;
-    double out_offset= 0.0;
-
-
-/*--------------------------------------------
--rbox-  main procedure of rbox application
-*/
-int main(int argc, char **argv) {
-    int i,j,k;
-    int gendim;
-    int cubesize, diamondsize, seed=0, count, apex;
-    int dim=3 , numpoints= 0, totpoints, addpoints=0;
-    int issphere=0, isaxis=0,  iscdd= 0, islens= 0, isregular=0, iswidth=0, addcube=0;
-    int isgap=0, isspiral=0, NOcommand= 0, adddiamond=0, istime=0;
-    int isbox=0, issimplex=0, issimplex2=0, ismesh=0;
-    double width=0.0, gap=0.0, radius= 0.0;
-    double coord[MAXdim], offset, meshm=3.0, meshn=4.0, meshr=5.0;
-    double *simplex, *simplexp;
-    int nthroot, mult[MAXdim];
-    double norm, factor, randr, rangap, lensangle= 0, lensbase= 1;
-    double anglediff, angle, x, y, cube= 0.0, diamond= 0.0;
-    double box= qh_DEFAULTbox; /* scale all numbers before output */
-    double randmax= qh_RANDOMmax;
-    char command[200], *s, seedbuf[200];    
-    time_t timedata;
-
-#if __MWERKS__ && __POWERPC__
-    char inBuf[BUFSIZ], outBuf[BUFSIZ], errBuf[BUFSIZ];
-    SIOUXSettings.showstatusline= False;
-    SIOUXSettings.tabspaces= 1;
-    SIOUXSettings.rows= 40;
-    if (setvbuf (stdin, inBuf, _IOFBF, sizeof(inBuf)) < 0   /* w/o, SIOUX I/O is slow*/
-    || setvbuf (stdout, outBuf, _IOFBF, sizeof(outBuf)) < 0
-    || (stdout != stderr && setvbuf (stderr, errBuf, _IOFBF, sizeof(errBuf)) < 0)) 
-      	fprintf ( stderr, "qhull internal warning (main): could not change stdio to fully buffered.\n");
-    argc= ccommand(&argv);
-#endif
-    if (argc == 1) {
- 	printf (prompt, box, DEFAULTzbox);
-    	exit(1);
-    }
-    if ((s = strrchr( argv[0], '\\'))) /* Borland gives full path */
-      strcpy (command, s+1);
-    else
-      strcpy (command, argv[0]);
-    if ((s= strstr (command, ".EXE"))
-    ||  (s= strstr (command, ".exe")))
-      *s= '\0';
-    /* ============= read flags =============== */
-    for (i=1; i < argc; i++) {
-  	if (strlen (command) + strlen(argv[i]) + 1 < sizeof(command) ) {
-	    strcat (command, " ");
-	    strcat (command, argv[i]);
-	}
-        if (isdigit (argv[i][0])) {
-      	    numpoints= atoi (argv[i]);
-      	    continue;
-	}
-	if (argv[i][0] == '-')
-	  (argv[i])++;
-        switch (argv[i][0]) {
-	  case 'c':
-	    addcube= 1;
-	    if (i+1 < argc && argv[i+1][0] == 'G')
-	      cube= (double) atof (&argv[++i][1]);
-	    break;
-	  case 'd':
-	    adddiamond= 1;
-	    if (i+1 < argc && argv[i+1][0] == 'G')
-	      diamond= (double) atof (&argv[++i][1]);
-	    break;
-	  case 'h':
-	    iscdd= 1;
-            break;
-	  case 'l':
-	    isspiral= 1;
-            break;
-	  case 'n':
-	    NOcommand= 1;
-	    break;
-	  case 'r':
-	    isregular= 1;
-	    break;
-	  case 's':
-	    issphere= 1;
-            break;
-	  case 't':
-	    istime= 1;
-	    if (isdigit (argv[i][1]))
-	      seed= atoi (&argv[i][1]);
-	    else {
-	      seed= time (&timedata);
-	      sprintf (seedbuf, "%d", seed);
-	      strcat (command, seedbuf);
-	    }
-            break;
-	  case 'x':
-	    issimplex= 1;
-	    break;
-	  case 'y':
-	    issimplex2= 1;
-	    break;
-	  case 'z':
-	    isinteger= 1;
-	    break;
-	  case 'B':
-	    box= (double) atof (&argv[i][1]);
-	    isbox= 1;
-	    break;
-	  case 'D':
-	    dim= atoi (&argv[i][1]);
-	    if (dim < 1
-	    || dim > MAXdim) {
-		fprintf (stderr, "rbox error: dim %d too large or too small\n", dim);
-		exit (1);
-	    }
-            break;
-	  case 'G':
-	    if (argv[i][1])
-	      gap= (double) atof (&argv[i][1]);
-	    else
-	      gap= 0.5;
-	    isgap= 1;
-	    break;
-	  case 'L':
-	    if (argv[i][1])
-	      radius= (double) atof (&argv[i][1]);
-	    else
-	      radius= 10;
-	    islens= 1;
-	    break;
-	  case 'M':
-	    ismesh= 1;
-    	    s= argv[i]+1;
-	    if (*s)
-	      meshn= strtod (s, &s);
-	    if (*s == ',')
-	      meshm= strtod (++s, &s);
-	    else
-	      meshm= 0.0;
-	    if (*s == ',')
-	      meshr= strtod (++s, &s);
-	    else
-	      meshr= sqrt (meshn*meshn + meshm*meshm);
-	    if (*s) {
-	      fprintf (stderr, "rbox warning: assuming 'M3,4,5' since mesh args are not integers or reals\n");
-	      meshn= 3.0, meshm=4.0, meshr=5.0;
-	    }
-	    break;
-	  case 'O':
-	    out_offset= (double) atof (&argv[i][1]);
-	    break;
-	  case 'P':
-	    addpoints++;
-	    break;
-	  case 'W':
-	    width= (double) atof (&argv[i][1]);
-	    iswidth= 1;
-	    break;
-	  case 'Z':
-	    if (argv[i][1])
-	      radius= (double) atof (&argv[i][1]);
-	    else
-	      radius= 1.0;
-	    isaxis= 1;
-	    break;
-	  default:
-            fprintf (stderr, "rbox warning: unknown flag %s.\nExecute 'rbox' without arguments for documentation.\n", argv[i]);
-	}
-    }
-    /* ============= defaults, constants, and sizes =============== */
-    if (isinteger && !isbox)
-      box= DEFAULTzbox;
-    if (addcube) {
-      cubesize= floor(ldexp(1.0,dim)+0.5);
-      if (cube == 0.0)
-        cube= box;
-    }else
-      cubesize= 0;
-    if (adddiamond) {
-      diamondsize= 2*dim;
-      if (diamond == 0.0)
-        diamond= box;
-    }else
-      diamondsize= 0;
-    if (islens) {
-      if (isaxis) {
-  	fprintf (stderr, "rbox error: can not combine 'Ln' with 'Zn'\n");
-  	exit(1);
-      }
-      if (radius <= 1.0) {
-  	fprintf (stderr, "rbox error: lens radius %.2g should be greater than 1.0\n",
-  	       radius);
-  	exit(1);
-      }
-      lensangle= asin (1.0/radius);
-      lensbase= radius * cos (lensangle);
-    }
-    if (!numpoints) {
-      if (issimplex2)
-	; /* ok */
-      else if (isregular + issimplex + islens + issphere + isaxis + isspiral + iswidth + ismesh) {
-	fprintf (stderr, "rbox error: missing count\n");
-	exit(1);
-      }else if (adddiamond + addcube + addpoints)
-	; /* ok */
-      else { 
-	numpoints= 50;  /* ./rbox D4 is the test case */
-	issphere= 1;
-      }
-    }
-    if ((issimplex + islens + isspiral + ismesh > 1) 
-    || (issimplex + issphere + isspiral + ismesh > 1)) {
-      fprintf (stderr, "rbox error: can only specify one of 'l', 's', 'x', 'Ln', or 'Mn,m,r' ('Ln s' is ok).\n");
-      exit(1);
-    }
-    fp= stdout;
-    /* ============= print header with total points =============== */
-    if (issimplex || ismesh)
-      totpoints= numpoints;
-    else if (issimplex2)
-      totpoints= numpoints+dim+1;
-    else if (isregular) {
-      totpoints= numpoints;
-      if (dim == 2) {
-      	if (islens)
-      	  totpoints += numpoints - 2;
-      }else if (dim == 3) {
-      	if (islens)
-      	  totpoints += 2 * numpoints;
-        else if (isgap)
-          totpoints += 1 + numpoints;
-        else
-          totpoints += 2;
-      }
-    }else
-      totpoints= numpoints + isaxis;
-    totpoints += cubesize + diamondsize + addpoints;
-    if (iscdd) 
-      fprintf(fp, "%s\nbegin\n        %d %d %s\n", 
-            NOcommand ? "" : command, 
-            totpoints, dim+1,
-            isinteger ? "integer" : "real");
-    else if (NOcommand)
-      fprintf(fp,  "%d\n%d\n", dim, totpoints);
-    else
-      fprintf(fp,  "%d %s\n%d\n", dim, command, totpoints);
-    /* ============= seed randoms =============== */
-    if (istime == 0) {
-      for (s=command; *s; s++) {
-	if (issimplex2 && *s == 'y') /* make 'y' same seed as 'x' */
-	  i= 'x';
-	else
-	  i= *s;
-	seed= 11*seed + i;
-      }
-    } /* else, seed explicitly set to n or to time */
-    qh_RANDOMseed_(seed);
-    /* ============= explicit points =============== */
-    for (i=1; i < argc; i++) {
-      if (argv[i][0] == 'P') {
-	s= argv[i]+1;
-	count= 0;
-	if (iscdd)
-	  out1( 1.0);
-	while (*s) {
-	  out1( strtod (s, &s));
-	  count++;
-	  if (*s) { 
-	    if (*s++ != ',') {
-	      fprintf (stderr, "rbox error: missing comma after coordinate in %s\n\n", argv[i]);
-	      exit (1);
-	    }
-          }
-	}
-	if (count < dim) {
-	  for (k= dim-count; k--; )
-	    out1( 0.0);
-	}else if (count > dim) {
-	  fprintf (stderr, "rbox error: %d coordinates instead of %d coordinates in %s\n\n", 
-                 count, dim, argv[i]);
-	  exit (1);
-	}
-	fprintf (fp, "\n");
-      }
-    }
-    /* ============= simplex distribution =============== */
-    if (issimplex+issimplex2) {
-      if (!(simplex= malloc( dim * (dim+1) * sizeof(double)))) {
-	fprintf (stderr, "insufficient memory for simplex\n");
-	exit(0);
-      }
-      simplexp= simplex;
-      if (isregular) {
-        for (i= 0; i<dim; i++) {
-          for (k= 0; k<dim; k++)
-	    *(simplexp++)= i==k ? 1.0 : 0.0;
-        }
-        for (k= 0; k<dim; k++)
-	  *(simplexp++)= -1.0;
-      }else {
-        for (i= 0; i<dim+1; i++) {
-          for (k= 0; k<dim; k++) {
-    	    randr= qh_RANDOMint;
-            *(simplexp++)= 2.0 * randr/randmax - 1.0;
-          }
-        }
-      }
-      if (issimplex2) { 
-	simplexp= simplex;
-        for (i= 0; i<dim+1; i++) {
-          if (iscdd)
-            out1( 1.0);
-          for (k= 0; k<dim; k++)
- 	    out1( *(simplexp++) * box);
-          fprintf (fp, "\n");
-	}
-      }
-      for (j= 0; j<numpoints; j++) {
-        if (iswidth) 
-          apex= qh_RANDOMint % (dim+1);
-        else
-          apex= -1;
-        for (k= 0; k<dim; k++)
-	  coord[k]= 0.0;
-	norm= 0.0;
-        for (i= 0; i<dim+1; i++) {
-    	  randr= qh_RANDOMint;
-          factor= randr/randmax;
-          if (i == apex)
-            factor *= width;
-          norm += factor;
-          for (k= 0; k<dim; k++) {
-	    simplexp= simplex + i*dim + k;
-            coord[k] += factor * (*simplexp);
-          }
-        }
-        for (k= 0; k<dim; k++)
-          coord[k] /= norm;
-        if (iscdd)
-          out1( 1.0);
-        for (k=0; k < dim; k++) 
-	  out1( coord[k] * box);
-        fprintf (fp, "\n");
-      }
-      isregular= 0; /* continue with isbox */
-      numpoints= 0;
-    }
-    /* ============= mesh distribution =============== */
-    if (ismesh) {
-      nthroot= pow (numpoints, 1.0/dim) + 0.99999;
-      for (k= dim; k--; )
-	mult[k]= 0;
-      for (i= 0; i < numpoints; i++) {
-	for (k= 0; k < dim; k++) {
-	  if (k == 0)
-	    out1( mult[0] * meshn + mult[1] * (-meshm));
-	  else if (k == 1)
-	    out1( mult[0] * meshm + mult[1] * meshn);
-	  else
-	    out1( mult[k] * meshr );
-	}
-        fprintf (fp, "\n");
-	for (k= 0; k < dim; k++) {
-	  if (++mult[k] < nthroot)
-	    break;
-	  mult[k]= 0;
-	}
-      }
-    }
-
-    /* ============= regular points for 's' =============== */
-    else if (isregular && !islens) {
-      if (dim != 2 && dim != 3) {
-	fprintf(stderr, "rbox error: regular points can be used only in 2-d and 3-d\n\n");
-	exit(1);
-      }
-      if (!isaxis || radius == 0.0) {
-	isaxis= 1;
-	radius= 1.0;
-      }
-      if (dim == 3) {
-        if (iscdd)
-          out1( 1.0);
-	out3n( 0.0, 0.0, -box);
-	if (!isgap) {
-          if (iscdd)
-            out1( 1.0);
-  	  out3n( 0.0, 0.0, box);
-  	}
-      }
-      angle= 0.0;
-      anglediff= 2.0 * PI/numpoints;
-      for (i=0; i < numpoints; i++) {
-	angle += anglediff;
-	x= radius * cos (angle);
-	y= radius * sin (angle);
-	if (dim == 2) {
-          if (iscdd)
-            out1( 1.0);
-	  out2n( x*box, y*box);
-	}else {
-	  norm= sqrt (1.0 + x*x + y*y);
-          if (iscdd)
-            out1( 1.0);
-	  out3n( box*x/norm, box*y/norm, box/norm);
-	  if (isgap) {
-	    x *= 1-gap;
-	    y *= 1-gap;
-	    norm= sqrt (1.0 + x*x + y*y);
-            if (iscdd)
-              out1( 1.0);
-	    out3n( box*x/norm, box*y/norm, box/norm);
-	  }
-	}
-      }
-    }
-    /* ============= regular points for 'r Ln D2' =============== */
-    else if (isregular && islens && dim == 2) {
-      double cos_0;
-      
-      angle= lensangle;
-      anglediff= 2 * lensangle/(numpoints - 1);
-      cos_0= cos (lensangle);
-      for (i=0; i < numpoints; i++, angle -= anglediff) {
-	x= radius * sin (angle);
-  	y= radius * (cos (angle) - cos_0);
-        if (iscdd)
-          out1( 1.0);
-	out2n( x*box, y*box);
-	if (i != 0 && i != numpoints - 1) {
-          if (iscdd)
-            out1( 1.0);
-	  out2n( x*box, -y*box);
-	}
-      }
-    }
-    /* ============= regular points for 'r Ln D3' =============== */
-    else if (isregular && islens && dim != 2) {
-      if (dim != 3) {
-	fprintf(stderr, "rbox error: regular points can be used only in 2-d and 3-d\n\n");
-	exit(1);
-      }
-      angle= 0.0;
-      anglediff= 2* PI/numpoints;
-      if (!isgap) {
-	isgap= 1;
-        gap= 0.5;
-      }
-      offset= sqrt (radius * radius - (1-gap)*(1-gap)) - lensbase;
-      for (i=0; i < numpoints; i++, angle += anglediff) {
-  	x= cos (angle);
-	y= sin (angle);
-        if (iscdd)
-          out1( 1.0);
-	out3n( box*x, box*y, 0);
-	x *= 1-gap;
-	y *= 1-gap;
-        if (iscdd)
-          out1( 1.0);
-	out3n( box*x, box*y, box * offset);
-        if (iscdd)
-          out1( 1.0);
-	out3n( box*x, box*y, -box * offset);
-      }
-    }
-    /* ============= apex of 'Zn' distribution + gendim =============== */
-    else {
-      if (isaxis) {
-	gendim= dim-1;
-	if (iscdd)
-	  out1( 1.0);
-	for (j=0; j < gendim; j++)
-	  out1( 0.0);
-	out1( -box);
-	fprintf (fp, "\n");
-      }else if (islens) 
-	gendim= dim-1;
-      else
-	gendim= dim;
-      /* ============= generate random point in unit cube =============== */
-      for (i=0; i < numpoints; i++) {
-	norm= 0.0;
-	for (j=0; j < gendim; j++) {
-	  randr= qh_RANDOMint;
-	  coord[j]= 2.0 * randr/randmax - 1.0;
-	  norm += coord[j] * coord[j];
-	}
-	norm= sqrt (norm);
-	/* ============= dim-1 point of 'Zn' distribution ========== */
-	if (isaxis) {
-	  if (!isgap) {
-	    isgap= 1;
-	    gap= 1.0;
-	  }
-	  randr= qh_RANDOMint;
-	  rangap= 1.0 - gap * randr/randmax;
-	  factor= radius * rangap / norm;
-	  for (j=0; j<gendim; j++)
-	    coord[j]= factor * coord[j];
-	/* ============= dim-1 point of 'Ln s' distribution =========== */
-	}else if (islens && issphere) {
-	  if (!isgap) {
-	    isgap= 1;
-	    gap= 1.0;
-	  }
-	  randr= qh_RANDOMint;
-	  rangap= 1.0 - gap * randr/randmax;
-	  factor= rangap / norm;
-	  for (j=0; j<gendim; j++)
-	    coord[j]= factor * coord[j];
-	/* ============= dim-1 point of 'Ln' distribution ========== */
-	}else if (islens && !issphere) {
-	  if (!isgap) {
-	    isgap= 1;
-	    gap= 1.0;
-	  }
-	  j= qh_RANDOMint % gendim;
-	  if (coord[j] < 0)
-	    coord[j]= -1.0 - coord[j] * gap;
-	  else
-	    coord[j]= 1.0 - coord[j] * gap;
-	/* ============= point of 'l' distribution =============== */
-	}else if (isspiral) {
-	  if (dim != 3) {
-	    fprintf(stderr, "rbox error: spiral distribution is available only in 3d\n\n");
-	    exit(1);
-	  }
-	  coord[0]= cos(2*PI*i/(numpoints - 1));
-	  coord[1]= sin(2*PI*i/(numpoints - 1));
-	  coord[2]= 2.0*(double)i/(double)(numpoints-1) - 1.0;
-	/* ============= point of 's' distribution =============== */
-	}else if (issphere) {
-	  factor= 1.0/norm;
-	  if (iswidth) {
-  	    randr= qh_RANDOMint;
-	    factor *= 1.0 - width * randr/randmax;
-	  }
-	  for (j=0; j<dim; j++)
-	    coord[j]= factor * coord[j];
-	}
-	/* ============= project 'Zn s' point in to sphere =============== */
-	if (isaxis && issphere) {
-	  coord[dim-1]= 1.0;
-	  norm= 1.0;
-	  for (j=0; j<gendim; j++)
-	    norm += coord[j] * coord[j];
-	  norm= sqrt (norm);
-	  for (j=0; j<dim; j++)
-	    coord[j]= coord[j] / norm;
-	  if (iswidth) {
-  	    randr= qh_RANDOMint;
-	    coord[dim-1] *= 1 - width * randr/randmax;
-	  }
-	/* ============= project 'Zn' point onto cube =============== */
-	}else if (isaxis && !issphere) {  /* not very interesting */
-	  randr= qh_RANDOMint;
-	  coord[dim-1]= 2.0 * randr/randmax - 1.0;
-	/* ============= project 'Ln' point out to sphere =============== */
-	}else if (islens) {
-	  coord[dim-1]= lensbase;
-	  for (j=0, norm= 0; j<dim; j++)
-	    norm += coord[j] * coord[j];
-	  norm= sqrt (norm);
-	  for (j=0; j<dim; j++)
-	    coord[j]= coord[j] * radius/ norm;
-	  coord[dim-1] -= lensbase;
-	  if (iswidth) {
-  	    randr= qh_RANDOMint;
-	    coord[dim-1] *= 1 - width * randr/randmax;
-	  }
-	  if (qh_RANDOMint > randmax/2)
-	    coord[dim-1]= -coord[dim-1];
-	/* ============= project 'Wn' point toward boundary =============== */
-	}else if (iswidth && !issphere) {
-	  j= qh_RANDOMint % gendim;
-	  if (coord[j] < 0)
-	    coord[j]= -1.0 - coord[j] * width;
-	  else
-	    coord[j]= 1.0 - coord[j] * width;
-	}
-	/* ============= write point =============== */
-	if (iscdd)
-	  out1( 1.0);
-	for (k=0; k < dim; k++) 
-	  out1( coord[k] * box);
-	fprintf (fp, "\n");
-      }
-    }
-    /* ============= write cube vertices =============== */
-    if (addcube) {
-      for (j=0; j<cubesize; j++) {
-        if (iscdd)
-          out1( 1.0);
-	for (k=dim-1; k>=0; k--) {
-	  if (j & ( 1 << k))
-	    out1( cube);
-	  else
-	    out1( -cube);
-	}
-	fprintf (fp, "\n");
-      }
-    }
-    /* ============= write diamond vertices =============== */
-    if (adddiamond) {
-      for (j=0; j<diamondsize; j++) {
-        if (iscdd)
-          out1( 1.0);
-	for (k=dim-1; k>=0; k--) {
-	  if (j/2 != k)
-	    out1( 0.0);
-	  else if (j & 0x1)
-	    out1( diamond);
-	  else
-	    out1( -diamond);
-	}
-	fprintf (fp, "\n");
-      }
-    }
-    if (iscdd)
-      fprintf (fp, "end\nhull\n");
-    return 0;
-  } /* rbox */
-
-/*------------------------------------------------
--outxxx - output functions
-*/
-int roundi( double a) {
-  if (a < 0.0) {
-    if (a - 0.5 < INT_MIN) {
-      fprintf(stderr, "rbox input error: coordinate %2.2g is too large.  Reduce 'Bn'\n", a);
-      exit (1);
-    }
-    return a - 0.5;
-  }else {
-    if (a + 0.5 > INT_MAX) {
-      fprintf(stderr, "rbox input error: coordinate %2.2g is too large.  Reduce 'Bn'\n", a);
-      exit (1);
-    }
-    return a + 0.5;
-  }
-} /* roundi */
-
-void out1(double a) {
-
-  if (isinteger) 
-    fprintf(fp, "%d ", roundi( a+out_offset));
-  else
-    fprintf(fp, qh_REAL_1, a+out_offset);
-} /* out1 */
-
-void out2n( double a, double b) {
-
-  if (isinteger)
-    fprintf(fp, "%d %d\n", roundi(a+out_offset), roundi(b+out_offset));
-  else
-    fprintf(fp, qh_REAL_2n, a+out_offset, b+out_offset);
-} /* out2n */
-
-void out3n( double a, double b, double c) { 
-
-  if (isinteger)
-    fprintf(fp, "%d %d %d\n", roundi(a+out_offset), roundi(b+out_offset), roundi(c+out_offset));
-  else
-    fprintf(fp, qh_REAL_3n, a+out_offset, b+out_offset, c+out_offset);
-} /* out3n */
-
-/*-------------------------------------------------
--rand & srand- generate pseudo-random number between 1 and 2^31 -2
-  from Park & Miller's minimimal standard random number generator
-  Communications of the ACM, 31:1192-1201, 1988.
-notes:
-  does not use 0 or 2^31 -1
-  this is silently enforced by qh_srand()
-  copied from geom2.c
-*/
-static int seed = 1;  /* global static */
-
-int qh_rand( void) {
-#define qh_rand_a 16807
-#define qh_rand_m 2147483647
-#define qh_rand_q 127773  /* m div a */
-#define qh_rand_r 2836    /* m mod a */
-  int lo, hi, test;
-
-  hi = seed / qh_rand_q;  /* seed div q */
-  lo = seed % qh_rand_q;  /* seed mod q */
-  test = qh_rand_a * lo - qh_rand_r * hi;
-  if (test > 0)
-    seed= test;
-  else
-    seed= test + qh_rand_m;
-  return seed;
-} /* rand */
-
-void qh_srand( int newseed) {
-  if (newseed < 1)
-    seed= 1;
-  else if (newseed >= qh_rand_m)
-    seed= qh_rand_m - 1;
-  else
-    seed= newseed;
-} /* qh_srand */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/unix.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/unix.c
deleted file mode 100644
index 9f06fcefb3ab432ac50b502ba0624ec61e2b61de..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/unix.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   unix.c
-     command line interface to qhull
-	 includes SIOUX interface for Macintoshes
-
-   see qh-qhull.htm
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-
-#if __MWERKS__ && __POWERPC__
-#include <SIOUX.h>
-#include <Files.h>
-#include <console.h>
-#include <Desk.h>
-
-#elif __cplusplus
-extern "C" {
-  int isatty (int);
-}
-
-#elif _MSC_VER
-#include <io.h>
-#define isatty _isatty
-
-#else
-int isatty (int);  /* returns 1 if stdin is a tty
-		   if "Undefined symbol" this can be deleted along with call in main() */
-#endif
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt">-</a>
-
-  qh_prompt 
-    long prompt for qhull
-    
-  see:
-    concise prompt below
-*/  
-char qh_prompta[]= "\n\
-qhull- compute convex hulls and related structures.\n\
-    http://www.qhull.org  %s\n\
-\n\
-input (stdin):\n\
-    first lines: dimension and number of points (or vice-versa).\n\
-    other lines: point coordinates, best if one point per line\n\
-    comments:    start with a non-numeric character\n\
-    halfspaces:  use dim plus one and put offset after coefficients.\n\
-                 May be preceeded by a single interior point ('H').\n\
-\n\
-options:\n\
-    d    - Delaunay triangulation by lifting points to a paraboloid\n\
-    d Qu - furthest-site Delaunay triangulation (upper convex hull)\n\
-    v    - Voronoi diagram (dual of the Delaunay triangulation)\n\
-    v Qu - furthest-site Voronoi diagram\n\
-    Hn,n,... - halfspace intersection about point [n,n,0,...]\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Qc   - keep coplanar points with nearest facet\n\
-    Qi   - keep interior points with nearest facet\n\
-\n\
-Qhull control options:\n\
-    Qbk:n   - scale coord k so that low bound is n\n\
-      QBk:n - scale coord k so that upper bound is n (QBk is %2.2g)\n\
-    QbB  - scale input to unit cube centered at the origin\n\
-    Qbb  - scale last coordinate to [0,m] for Delaunay triangulations\n\
-    Qbk:0Bk:0 - remove k-th coordinate from input\n\
-    QJn  - randomly joggle input in range [-n,n]\n\
-    QRn  - random rotation (n=seed, n=0 time, n=-1 time/no rotate)\n\
-%s%s%s%s";  /* split up qh_prompt for Visual C++ */
-char qh_promptb[]= "\
-    Qf   - partition point to furthest outside facet\n\
-    Qg   - only build good facets (needs 'QGn', 'QVn', or 'PdD')\n\
-    Qm   - only process points that would increase max_outside\n\
-    Qr   - process random outside points instead of furthest ones\n\
-    Qs   - search all points for the initial simplex\n\
-    Qu   - for 'd' or 'v', compute upper hull without point at-infinity\n\
-              returns furthest-site Delaunay triangulation\n\
-    Qv   - test vertex neighbors for convexity\n\
-    Qx   - exact pre-merges (skips coplanar and angle-coplanar facets)\n\
-    Qz   - add point-at-infinity to Delaunay triangulation\n\
-    QGn  - good facet if visible from point n, -n for not visible\n\
-    QVn  - good facet if it includes point n, -n if not\n\
-    Q0   - turn off default premerge with 'C-0'/'Qx'\n\
-    Q1	   - sort merges by type instead of angle\n\
-    Q2   - merge all non-convex at once instead of independent sets\n\
-    Q3   - do not merge redundant vertices\n\
-    Q4   - avoid old->new merges\n\
-    Q5   - do not correct outer planes at end of qhull\n\
-    Q6   - do not pre-merge concave or coplanar facets\n\
-    Q7   - depth-first processing instead of breadth-first\n\
-    Q8   - do not process near-inside points\n\
-    Q9   - process furthest of furthest points\n\
-    Q10  - no special processing for narrow distributions\n\
-    Q11  - copy normals and recompute centrums for tricoplanar facets\n\
-\n\
-";
-char qh_promptc[]= "\
-Topts- Trace options:\n\
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events\n\
-    Tc   - check frequently during execution\n\
-    Ts   - print statistics\n\
-    Tv   - verify result: structure, convexity, and point inclusion\n\
-    Tz   - send all output to stdout\n\
-    TFn  - report summary when n or more facets created\n\
-    TI file - input data from file, no spaces or single quotes\n\
-    TO file - output results to file, may be enclosed in single quotes\n\
-    TPn  - turn on tracing when point n added to hull\n\
-     TMn - turn on tracing at merge n\n\
-     TWn - trace merge facets when width > n\n\
-    TRn  - rerun qhull n times.  Use with 'QJn'\n\
-    TVn  - stop qhull after adding point n, -n for before (see TCn)\n\
-     TCn - stop qhull after building cone for point n (see TVn)\n\
-\n\
-Precision options:\n\
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex\n\
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex\n\
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge\n\
-    En   - max roundoff error for distance computation\n\
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]\n\
-    Vn   - min distance above plane for a visible facet (default 3C-n or En)\n\
-    Un   - max distance below plane for a new, coplanar point (default Vn)\n\
-    Wn   - min facet width for outside point (before roundoff, default 2Vn)\n\
-\n\
-Output formats (may be combined; if none, produces a summary to stdout):\n\
-    f    - facet dump\n\
-    G    - Geomview output (see below)\n\
-    i    - vertices incident to each facet\n\
-    m    - Mathematica output (2-d and 3-d)\n\
-    o    - OFF format (dim, points and facets; Voronoi regions)\n\
-    n    - normals with offsets\n\
-    p    - vertex coordinates or Voronoi vertices (coplanar points if 'Qc')\n\
-    s    - summary (stderr)\n\
-\n\
-";
-char qh_promptd[]= "\
-More formats:\n\
-    Fa   - area for each facet\n\
-    FA   - compute total area and volume for option 's'\n\
-    Fc   - count plus coplanar points for each facet\n\
-           use 'Qc' (default) for coplanar and 'Qi' for interior\n\
-    FC   - centrum or Voronoi center for each facet\n\
-    Fd   - use cdd format for input (homogeneous with offset first)\n\
-    FD   - use cdd format for numeric output (offset first)\n\
-    FF   - facet dump without ridges\n\
-    Fi   - inner plane for each facet\n\
-           for 'v', separating hyperplanes for bounded Voronoi regions\n\
-    FI   - ID of each facet\n\
-    Fm   - merge count for each facet (511 max)\n\
-    FM   - Maple output (2-d and 3-d)\n\
-    Fn   - count plus neighboring facets for each facet\n\
-    FN   - count plus neighboring facets for each point\n\
-    Fo   - outer plane (or max_outside) for each facet\n\
-           for 'v', separating hyperplanes for unbounded Voronoi regions\n\
-    FO   - options and precision constants\n\
-    Fp   - dim, count, and intersection coordinates (halfspace only)\n\
-    FP   - nearest vertex and distance for each coplanar point\n\
-    FQ   - command used for qhull\n\
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,\n\
-                      output: #vertices, #facets, #coplanars, #nonsimplicial\n\
-                    #real (2), max outer plane, min vertex\n\
-    FS   - sizes:   #int (0)\n\
-                    #real(2) tot area, tot volume\n\
-    Ft   - triangulation with centrums for non-simplicial facets (OFF format)\n\
-    Fv   - count plus vertices for each facet\n\
-           for 'v', Voronoi diagram as Voronoi vertices for pairs of sites\n\
-    FV   - average of vertices (a feasible point for 'H')\n\
-    Fx   - extreme points (in order for 2-d)\n\
-\n\
-";
-char qh_prompte[]= "\
-Geomview options (2-d, 3-d, and 4-d; 2-d Voronoi)\n\
-    Ga   - all points as dots\n\
-     Gp  -  coplanar points and vertices as radii\n\
-     Gv  -  vertices as spheres\n\
-    Gi   - inner planes only\n\
-     Gn  -  no planes\n\
-     Go  -  outer planes only\n\
-    Gc   - centrums\n\
-    Gh   - hyperplane intersections\n\
-    Gr   - ridges\n\
-    GDn  - drop dimension n in 3-d and 4-d output\n\
-    Gt   - for 3-d 'd', transparent outer ridges\n\
-\n\
-Print options:\n\
-    PAn  - keep n largest facets by area\n\
-    Pdk:n - drop facet if normal[k] <= n (default 0.0)\n\
-    PDk:n - drop facet if normal[k] >= n\n\
-    Pg   - print good facets (needs 'QGn' or 'QVn')\n\
-    PFn  - keep facets whose area is at least n\n\
-    PG   - print neighbors of good facets\n\
-    PMn  - keep n facets with most merges\n\
-    Po   - force output.  If error, output neighborhood of facet\n\
-    Pp   - do not report precision problems\n\
-\n\
-    .    - list of all options\n\
-    -    - one line descriptions of all options\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt2">-</a>
-
-  qh_prompt2
-    synopsis for qhull
-*/
-char qh_prompt2[]= "\n\
-qhull- compute convex hulls and related structures.  Qhull %s\n\
-    input (stdin): dimension, n, point coordinates\n\
-    comments start with a non-numeric character\n\
-    halfspace: use dim+1 and put offsets after coefficients\n\
-\n\
-options (qh-quick.htm):\n\
-    d    - Delaunay triangulation by lifting points to a paraboloid\n\
-    d Qu - furthest-site Delaunay triangulation (upper convex hull)\n\
-    v    - Voronoi diagram as the dual of the Delaunay triangulation\n\
-    v Qu - furthest-site Voronoi diagram\n\
-    H1,1 - Halfspace intersection about [1,1,0,...] via polar duality\n\
-    Qt   - triangulated output\n\
-    QJ   - joggled input instead of merged facets\n\
-    Tv   - verify result: structure, convexity, and point inclusion\n\
-    .    - concise list of all options\n\
-    -    - one-line description of all options\n\
-\n\
-Output options (subset):\n\
-    s    - summary of results (default)\n\
-    i    - vertices incident to each facet\n\
-    n    - normals with offsets\n\
-    p    - vertex coordinates (if 'Qc', includes coplanar points)\n\
-           if 'v', Voronoi vertices\n\
-    Fp   - halfspace intersections\n\
-    Fx   - extreme points (convex hull vertices)\n\
-    FA   - compute total area and volume\n\
-    o    - OFF format (if 'v', outputs Voronoi regions)\n\
-    G    - Geomview output (2-d, 3-d and 4-d)\n\
-    m    - Mathematica output (2-d and 3-d)\n\
-    QVn  - print facets that include point n, -n if not\n\
-    TO file- output results to file, may be enclosed in single quotes\n\
-\n\
-examples:\n\
-    rbox c d D2 | qhull Qc s f Fx | more      rbox 1000 s | qhull Tv s FA\n\
-    rbox 10 D2 | qhull d QJ s i TO result     rbox 10 D2 | qhull v Qbb Qt p\n\
-    rbox 10 D2 | qhull d Qu QJ m              rbox 10 D2 | qhull v Qu QJ o\n\
-    rbox c | qhull n                          rbox c | qhull FV n | qhull H Fp\n\
-    rbox d D12 | qhull QR0 FA                 rbox c D7 | qhull FA TF1000\n\
-    rbox y 1000 W0 | qhull                    rbox 10 | qhull v QJ o Fv\n\
-\n\
-";
-/* for opts, don't assign 'e' or 'E' to a flag (already used for exponent) */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="prompt3">-</a>
-
-  qh_prompt3
-    concise prompt for qhull
-*/
-char qh_prompt3[]= "\n\
-Qhull %s.\n\
-Except for 'F.' and 'PG', upper-case options take an argument.\n\
-\n\
- delaunay       voronoi	       Geomview       Halfspace      facet_dump\n\
- incidences     mathematica    normals        OFF_format     points\n\
- summary\n\
-\n\
- Farea          FArea-total    Fcoplanars     FCentrums      Fd-cdd-in\n\
- FD-cdd-out     FF-dump-xridge Finner         FIDs           Fmerges\n\
- Fneighbors     FNeigh-vertex  Fouter         FOptions       Fpoint-intersect\n\
- FPoint_near    FQhull         Fsummary       FSize          Ftriangles\n\
- Fvertices      Fvoronoi       FVertex-ave    Fxtremes       FMaple\n\
-\n\
- Gvertices      Gpoints        Gall_points    Gno_planes     Ginner\n\
- Gcentrums      Ghyperplanes   Gridges        Gouter         GDrop_dim\n\
- Gtransparent\n\
-\n\
- PArea-keep     Pdrop d0:0D0   Pgood          PFacet_area_keep\n\
- PGood_neighbors PMerge-keep   Poutput_forced Pprecision_not\n\
-\n\
- QbBound 0:0.5  Qbk:0Bk:0_drop QbB-scale-box  Qbb-scale-last Qcoplanar\n\
- Qfurthest      Qgood_only     QGood_point    Qinterior      Qmax_out\n\
- QJoggle        Qrandom        QRotate        Qsearch_1st    Qtriangulate\n\
- QupperDelaunay QVertex_good   Qvneighbors    Qxact_merge    Qzinfinite\n\
-\n\
- Q0_no_premerge Q1_no_angle    Q2_no_independ Q3_no_redundant Q4_no_old\n\
- Q5_no_check_out Q6_no_concave Q7_depth_first Q8_no_near_in  Q9_pick_furthest\n\
- Q10_no_narrow  Q11_trinormals\n\
-\n\
- T4_trace       Tcheck_often   Tstatistics    Tverify        Tz_stdout\n\
- TFacet_log     TInput_file    TPoint_trace   TMerge_trace   TOutput_file\n\
- TRerun         TWide_trace    TVertex_stop   TCone_stop\n\
-\n\
- Angle_max      Centrum_size   Error_round    Random_dist    Visible_min\n\
- Ucoplanar_max  Wide_outside\n\
-";
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="main">-</a>
-
-  main( argc, argv )
-    processes the command line, calls qhull() to do the work, and exits
-
-  design:
-    initializes data structures
-    reads points
-    finishes initialization
-    computes convex hull and other structures
-    checks the result
-    writes the output
-    frees memory
-*/
-int main(int argc, char *argv[]) {
-  int curlong, totlong; /* used !qh_NOmem */
-  int exitcode, numpoints, dim;
-  coordT *points;
-  boolT ismalloc;
-
-#if __MWERKS__ && __POWERPC__
-  char inBuf[BUFSIZ], outBuf[BUFSIZ], errBuf[BUFSIZ];
-  SIOUXSettings.showstatusline= false;
-  SIOUXSettings.tabspaces= 1;
-  SIOUXSettings.rows= 40;
-  if (setvbuf (stdin, inBuf, _IOFBF, sizeof(inBuf)) < 0   /* w/o, SIOUX I/O is slow*/
-  || setvbuf (stdout, outBuf, _IOFBF, sizeof(outBuf)) < 0
-  || (stdout != stderr && setvbuf (stderr, errBuf, _IOFBF, sizeof(errBuf)) < 0))
-    fprintf (stderr, "qhull internal warning (main): could not change stdio to fully buffered.\n");
-  argc= ccommand(&argv);
-#endif
-
-  if ((argc == 1) && isatty( 0 /*stdin*/)) {
-    fprintf(stdout, qh_prompt2, qh_version);
-    exit(qh_ERRnone);
-  }
-  if (argc > 1 && *argv[1] == '-' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompta, qh_version, qh_DEFAULTbox,
-		qh_promptb, qh_promptc, qh_promptd, qh_prompte);
-    exit(qh_ERRnone);
-  }
-  if (argc >1 && *argv[1] == '.' && !*(argv[1]+1)) {
-    fprintf(stdout, qh_prompt3, qh_version);
-    exit(qh_ERRnone);
-  }
-  qh_init_A (stdin, stdout, stderr, argc, argv);  /* sets qh qhull_command */
-  exitcode= setjmp (qh errexit); /* simple statement for CRAY J916 */
-  if (!exitcode) {
-    qh_initflags (qh qhull_command);
-    points= qh_readpoints (&numpoints, &dim, &ismalloc);
-    qh_init_B (points, numpoints, dim, ismalloc);
-    qh_qhull();
-    qh_check_output();
-    qh_produce_output();
-    if (qh VERIFYoutput && !qh FORCEoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points();
-    exitcode= qh_ERRnone;
-  }
-  qh NOerrexit= True;  /* no more setjmp */
-#ifdef qh_NOmem
-  qh_freeqhull( True);
-#else
-  qh_freeqhull( False);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong)
-    fprintf (stderr, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n",
-       totlong, curlong);
-#endif
-  return exitcode;
-} /* main */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/user_eg.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/user_eg.c
deleted file mode 100644
index 9f2ac81d781955721a83f4762bac571e6f13d7a8..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/user_eg.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*<html><pre>  -<a                             href="qh-user.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-  user_eg.c
-  sample code for calling qhull() from an application
-  
-  call with:
-
-     user_eg "cube/diamond options" "delaunay options" "halfspace options"
-
-  for example:
-
-     user_eg                             # return summaries
-
-     user_eg "n" "o" "Fp"                # return normals, OFF, points
-
-     user_eg "n Qt" "o" "Fp"             # triangulated cube
-
-     user_eg "QR0 p" "QR0 v p" "QR0 Fp"  # rotate input and return points
-                                         # 'v' returns Voronoi
-					 # transform is rotated for halfspaces
-
-   main() makes three runs of qhull.
-
-     1) compute the convex hull of a cube
-
-     2a) compute the Delaunay triangulation of random points
-
-     2b) find the Delaunay triangle closest to a point.
-
-     3) compute the halfspace intersection of a diamond
-
- notes:
- 
-   For another example, see main() in unix.c and user_eg2.c.
-   These examples, call qh_qhull() directly.  They allow
-   tighter control on the code loaded with Qhull.
-
-   For a simple C++ example, see qhull_interface.cpp
-
-   Summaries are sent to stderr if other output formats are used
-
-   compiled by 'make user_eg'
-
-   see qhull.h for data structures, macros, and user-callable functions.
-*/
-
-#include "qhull_a.h"
-
-/*-------------------------------------------------
--internal function prototypes
-*/
-void print_summary (void);
-void makecube (coordT *points, int numpoints, int dim);
-void makeDelaunay (coordT *points, int numpoints, int dim, int seed);
-void findDelaunay (int dim);
-void makehalf (coordT *points, int numpoints, int dim);
-
-/*-------------------------------------------------
--print_summary()
-*/
-void print_summary (void) {
-  facetT *facet;
-  int k;
-
-  printf ("\n%d vertices and %d facets with normals:\n", 
-                 qh num_vertices, qh num_facets);
-  FORALLfacets {
-    for (k=0; k < qh hull_dim; k++) 
-      printf ("%6.2g ", facet->normal[k]);
-    printf ("\n");
-  }
-}
-
-/*--------------------------------------------------
--makecube- set points to vertices of cube
-  points is numpoints X dim
-*/
-void makecube (coordT *points, int numpoints, int dim) {
-  int j,k;
-  coordT *point;
-
-  for (j=0; j<numpoints; j++) {
-    point= points + j*dim;
-    for (k=dim; k--; ) {
-      if (j & ( 1 << k))
-	point[k]= 1.0;
-      else
-	point[k]= -1.0;
-    }
-  }
-} /*.makecube.*/
-
-/*--------------------------------------------------
--makeDelaunay- set points for dim Delaunay triangulation of random points
-  points is numpoints X dim.
-notes:
-  makeDelaunay() in user_eg2.c uses qh_setdelaunay() to project points in place.
-*/
-void makeDelaunay (coordT *points, int numpoints, int dim, int seed) {
-  int j,k;
-  coordT *point, realr;
-
-  printf ("seed: %d\n", seed);
-  qh_RANDOMseed_( seed);
-  for (j=0; j<numpoints; j++) {
-    point= points + j*dim;
-    for (k= 0; k < dim; k++) {
-      realr= qh_RANDOMint;
-      point[k]= 2.0 * realr/(qh_RANDOMmax+1) - 1.0;
-    }
-  }
-} /*.makeDelaunay.*/
-
-/*--------------------------------------------------
--findDelaunay- find Delaunay triangle for [0.5,0.5,...]
-  assumes dim < 100
-notes:
-  calls qh_setdelaunay() to project the point to a parabaloid
-warning:
-  This is not implemented for tricoplanar facets ('Qt'),
-  See <a href="../html/qh-in.htm#findfacet">locate a facet with qh_findbestfacet()</a>
-*/
-void findDelaunay (int dim) {
-  int k;
-  coordT point[ 100];
-  boolT isoutside;
-  realT bestdist;
-  facetT *facet;
-  vertexT *vertex, **vertexp;
-
-  for (k= 0; k < dim; k++) 
-    point[k]= 0.5;
-  qh_setdelaunay (dim+1, 1, point);
-  facet= qh_findbestfacet (point, qh_ALL, &bestdist, &isoutside);
-  if (facet->tricoplanar) {
-    fprintf(stderr, "findDelaunay: not implemented for triangulated, non-simplicial Delaunay regions (tricoplanar facet, f%d).\n",
-       facet->id);
-    qh_errexit (qh_ERRqhull, facet, NULL);
-  }
-  FOREACHvertex_(facet->vertices) {
-    for (k=0; k < dim; k++)
-      printf ("%5.2f ", vertex->point[k]);
-    printf ("\n");
-  }
-} /*.findDelaunay.*/
-
-/*--------------------------------------------------
--makehalf- set points to halfspaces for a (dim)-dimensional diamond
-  points is numpoints X dim+1
-
-  each halfspace consists of dim coefficients followed by an offset
-*/
-void makehalf (coordT *points, int numpoints, int dim) {
-  int j,k;
-  coordT *point;
-
-  for (j=0; j<numpoints; j++) {
-    point= points + j*(dim+1);
-    point[dim]= -1.0; /* offset */
-    for (k=dim; k--; ) {
-      if (j & ( 1 << k))
-	point[k]= 1.0;
-      else
-	point[k]= -1.0;
-    }
-  }
-} /*.makehalf.*/
-
-#define DIM 3     /* dimension of points, must be < 31 for SIZEcube */
-#define SIZEcube (1<<DIM)
-#define SIZEdiamond (2*DIM)
-#define TOTpoints (SIZEcube + SIZEdiamond)
-
-/*--------------------------------------------------
--main- derived from call_qhull in user.c
-
-  see program header
-
-  this contains three runs of Qhull for convex hull, Delaunay
-  triangulation or Voronoi vertices, and halfspace intersection
-
-*/
-int main (int argc, char *argv[]) {
-  int dim= DIM;	            /* dimension of points */
-  int numpoints;            /* number of points */
-  coordT points[(DIM+1)*TOTpoints]; /* array of coordinates for each point */
-  coordT *rows[TOTpoints];
-  boolT ismalloc= False;    /* True if qhull should free points in qh_freeqhull() or reallocation */
-  char flags[250];          /* option flags for qhull, see qh_opt.htm */
-  FILE *outfile= stdout;    /* output from qh_produce_output()
-			       use NULL to skip qh_produce_output() */
-  FILE *errfile= stderr;    /* error messages from qhull code */
-  int exitcode;             /* 0 if no error from qhull */
-  facetT *facet;	    /* set by FORALLfacets */
-  int curlong, totlong;	    /* memory remaining after qh_memfreeshort */
-  int i;
-
-  printf ("This is the output from user_eg.c\n\n\
-It shows how qhull() may be called from an application.  It is not part\n\
-of qhull itself.  If it appears accidently, please remove user_eg.c from\n\
-your project.\n\n");
-
-  /*
-    Run 1: convex hull
-  */
-  printf( "\ncompute convex hull of cube after rotating input\n");
-  sprintf (flags, "qhull s Tcv %s", argc >= 2 ? argv[1] : "");
-  numpoints= SIZEcube;
-  makecube (points, numpoints, DIM);
-  for (i=numpoints; i--; )
-    rows[i]= points+dim*i;
-  qh_printmatrix (outfile, "input", rows, numpoints, dim);
-  exitcode= qh_new_qhull (dim, numpoints, points, ismalloc,
-                      flags, outfile, errfile); 
-  if (!exitcode) {                  /* if no error */
-    /* 'qh facet_list' contains the convex hull */
-    print_summary();
-    FORALLfacets {
-       /* ... your code ... */
-    }
-  }
-  qh_freeqhull(!qh_ALL);                   /* free long memory  */
-  qh_memfreeshort (&curlong, &totlong);    /* free short memory and memory allocator */
-  if (curlong || totlong) 
-    fprintf (errfile, "qhull internal warning (user_eg, #1): did not free %d bytes of long memory (%d pieces)\n", totlong, curlong);
-
-  /*
-    Run 2: Delaunay triangulation
-  */
-
-  printf( "\ncompute %d-d Delaunay triangulation\n", dim);
-  sprintf (flags, "qhull s d Tcv %s", argc >= 3 ? argv[2] : "");
-  numpoints= SIZEcube;
-  makeDelaunay (points, numpoints, dim, time(NULL));
-  for (i=numpoints; i--; )
-    rows[i]= points+dim*i;
-  qh_printmatrix (outfile, "input", rows, numpoints, dim);
-  exitcode= qh_new_qhull (dim, numpoints, points, ismalloc,
-                      flags, outfile, errfile); 
-  if (!exitcode) {                  /* if no error */
-    /* 'qh facet_list' contains the convex hull */
-    /* If you want a Voronoi diagram ('v') and do not request output (i.e., outfile=NULL), 
-       call qh_setvoronoi_all() after qh_new_qhull(). */
-    print_summary();
-    FORALLfacets {
-       /* ... your code ... */
-    }
-    printf( "\nfind %d-d Delaunay triangle closest to [0.5, 0.5, ...]\n", dim);
-    exitcode= setjmp (qh errexit);  
-    if (!exitcode) {
-      /* Trap Qhull errors in findDelaunay().  Without the setjmp(), Qhull
-         will exit() after reporting an error */
-      qh NOerrexit= False;
-      findDelaunay (DIM);
-    }
-    qh NOerrexit= True;
-  }
-#if qh_QHpointer  /* see user.h */
-  {
-    qhT *oldqhA, *oldqhB;
-    coordT pointsB[DIM*TOTpoints]; /* array of coordinates for each point */
-
-
-    printf( "\nsave first triangulation and compute a new triangulation\n");
-    oldqhA= qh_save_qhull();
-    sprintf (flags, "qhull s d Tcv %s", argc >= 3 ? argv[2] : "");
-    numpoints= SIZEcube;
-    makeDelaunay (pointsB, numpoints, dim, time(NULL)+1);
-    for (i=numpoints; i--; )
-      rows[i]= pointsB+dim*i;
-    qh_printmatrix (outfile, "input", rows, numpoints, dim);
-    exitcode= qh_new_qhull (dim, numpoints, pointsB, ismalloc,
-                      flags, outfile, errfile); 
-    if (!exitcode)
-      print_summary();
-    printf( "\nsave second triangulation and restore first one\n");
-    oldqhB= qh_save_qhull();
-    qh_restore_qhull (&oldqhA);
-    print_summary();
-    printf( "\nfree first triangulation and restore second one.\n");
-    qh_freeqhull (qh_ALL);               /* free short and long memory used by first call */
-			                 /* do not use qh_memfreeshort */
-    qh_restore_qhull (&oldqhB);
-    print_summary();
-  }
-#endif
-  qh_freeqhull(!qh_ALL);                 /* free long memory */
-  qh_memfreeshort (&curlong, &totlong);  /* free short memory and memory allocator */
-  if (curlong || totlong) 
-    fprintf (errfile, "qhull internal warning (user_eg, #2): did not free %d bytes of long memory (%d pieces)\n", totlong, curlong);
-
-  /*
-    Run 3: halfspace intersection about the origin
-  */
-  printf( "\ncompute halfspace intersection about the origin for a diamond\n");
-  sprintf (flags, "qhull H0 s Tcv %s", argc >= 4 ? argv[3] : "Fp");
-  numpoints= SIZEcube;
-  makehalf (points, numpoints, dim);
-  for (i=numpoints; i--; )
-    rows[i]= points+(dim+1)*i;
-  qh_printmatrix (outfile, "input as halfspace coefficients + offsets", rows, numpoints, dim+1);
-  /* use qh_sethalfspace_all to transform the halfspaces yourself.  
-     If so, set 'qh feasible_point and do not use option 'Hn,...' [it would retransform the halfspaces]
-  */
-  exitcode= qh_new_qhull (dim+1, numpoints, points, ismalloc,
-                      flags, outfile, errfile); 
-  if (!exitcode) 
-    print_summary();
-  qh_freeqhull (!qh_ALL);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong)  /* could also check previous runs */
-    fprintf (stderr, "qhull internal warning (user_eg, #3): did not free %d bytes of long memory (%d pieces)\n",
-       totlong, curlong);
-  return exitcode;
-} /* main */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/user_eg2.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/user_eg2.c
deleted file mode 100644
index 28ecbce467423160cd933c0165683c1c09108e36..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/eg/user_eg2.c
+++ /dev/null
@@ -1,542 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-  user_eg2.c
-
-  sample code for calling qhull() from an application.
-
-  See user_eg.c for a simpler method using qh_new_qhull().
-  The method used here and in unix.c gives you additional
-  control over Qhull. 
-  
-  call with:
-
-     user_eg2 "triangulated cube/diamond options" "delaunay options" "halfspace options"
-
-  for example:
-
-     user_eg2                             # return summaries
-
-     user_eg2 "n" "o" "Fp"                # return normals, OFF, points
-
-     user_eg2 "QR0 p" "QR0 v p" "QR0 Fp"  # rotate input and return points
-                                         # 'v' returns Voronoi
-					 # transform is rotated for halfspaces
-
-   main() makes three runs of qhull.
-
-     1) compute the convex hull of a cube, and incrementally add a diamond
-
-     2a) compute the Delaunay triangulation of random points, and add points.
-
-     2b) find the Delaunay triangle closest to a point.
-
-     3) compute the halfspace intersection of a diamond, and add a cube
-
- notes:
- 
-   summaries are sent to stderr if other output formats are used
-
-   derived from unix.c and compiled by 'make user_eg2'
-
-   see qhull.h for data structures, macros, and user-callable functions.
-   
-   If you want to control all output to stdio and input to stdin,
-   set the #if below to "1" and delete all lines that contain "io.c".  
-   This prevents the loading of io.o.  Qhull will
-   still write to 'qh ferr' (stderr) for error reporting and tracing.
-
-   Defining #if 1, also prevents user.o from being loaded.
-*/
-
-#include "qhull_a.h"
-
-/*-------------------------------------------------
--internal function prototypes
-*/
-void print_summary (void);
-void makecube (coordT *points, int numpoints, int dim);
-void adddiamond (coordT *points, int numpoints, int numnew, int dim);
-void makeDelaunay (coordT *points, int numpoints, int dim);
-void addDelaunay (coordT *points, int numpoints, int numnew, int dim);
-void findDelaunay (int dim);
-void makehalf (coordT *points, int numpoints, int dim);
-void addhalf (coordT *points, int numpoints, int numnew, int dim, coordT *feasible);
-
-/*-------------------------------------------------
--print_summary()
-*/
-void print_summary (void) {
-  facetT *facet;
-  int k;
-
-  printf ("\n%d vertices and %d facets with normals:\n", 
-                 qh num_vertices, qh num_facets);
-  FORALLfacets {
-    for (k=0; k < qh hull_dim; k++) 
-      printf ("%6.2g ", facet->normal[k]);
-    printf ("\n");
-  }
-}
-
-/*--------------------------------------------------
--makecube- set points to vertices of cube
-  points is numpoints X dim
-*/
-void makecube (coordT *points, int numpoints, int dim) {
-  int j,k;
-  coordT *point;
-
-  for (j=0; j<numpoints; j++) {
-    point= points + j*dim;
-    for (k=dim; k--; ) {
-      if (j & ( 1 << k))
-	point[k]= 1.0;
-      else
-	point[k]= -1.0;
-    }
-  }
-} /*.makecube.*/
-
-/*--------------------------------------------------
--adddiamond- add diamond to convex hull
-  points is numpoints+numnew X dim.
-  
-notes:
-  qh_addpoint() does not make a copy of the point coordinates.
-
-  For inside points and some outside points, qh_findbestfacet performs 
-  an exhaustive search for a visible facet.  Algorithms that retain 
-  previously constructed hulls should be faster for on-line construction 
-  of the convex hull.
-*/
-void adddiamond (coordT *points, int numpoints, int numnew, int dim) {
-  int j,k;
-  coordT *point;
-  facetT *facet;
-  boolT isoutside;
-  realT bestdist;
-
-  for (j= 0; j < numnew ; j++) {
-    point= points + (numpoints+j)*dim;
-    if (points == qh first_point)  /* in case of 'QRn' */
-      qh num_points= numpoints+j+1;
-    /* qh num_points sets the size of the points array.  You may
-       allocate the points elsewhere.  If so, qh_addpoint records
-       the point's address in qh other_points 
-    */
-    for (k=dim; k--; ) {
-      if (j/2 == k)
-	point[k]= (j & 1) ? 2.0 : -2.0;
-      else
-	point[k]= 0.0;
-    }
-    facet= qh_findbestfacet (point, !qh_ALL, &bestdist, &isoutside);
-    if (isoutside) {
-      if (!qh_addpoint (point, facet, False))
-	break;  /* user requested an early exit with 'TVn' or 'TCn' */
-    }
-    printf ("%d vertices and %d facets\n", 
-                 qh num_vertices, qh num_facets);
-    /* qh_produce_output(); */
-  }
-  if (qh DOcheckmax)
-    qh_check_maxout();
-  else if (qh KEEPnearinside)
-    qh_nearcoplanar();
-} /*.adddiamond.*/
-
-/*--------------------------------------------------
--makeDelaunay- set points for dim-1 Delaunay triangulation of random points
-  points is numpoints X dim.  Each point is projected to a paraboloid.
-*/
-void makeDelaunay (coordT *points, int numpoints, int dim) {
-  int j,k, seed;
-  coordT *point, realr;
-
-  seed= time(NULL);
-  printf ("seed: %d\n", seed);
-  qh_RANDOMseed_( seed);
-  for (j=0; j<numpoints; j++) {
-    point= points + j*dim;
-    for (k= 0; k < dim-1; k++) {
-      realr= qh_RANDOMint;
-      point[k]= 2.0 * realr/(qh_RANDOMmax+1) - 1.0;
-    }
-  }
-  qh_setdelaunay (dim, numpoints, points);
-} /*.makeDelaunay.*/
-
-/*--------------------------------------------------
--addDelaunay- add points to dim-1 Delaunay triangulation
-  points is numpoints+numnew X dim.  Each point is projected to a paraboloid.
-notes:
-  qh_addpoint() does not make a copy of the point coordinates.
-
-  Since qh_addpoint() is not given a visible facet, it performs a directed
-  search of all facets.  Algorithms that retain previously
-  constructed hulls may be faster.
-*/
-void addDelaunay (coordT *points, int numpoints, int numnew, int dim) {
-  int j,k;
-  coordT *point, realr;
-  facetT *facet;
-  realT bestdist;
-  boolT isoutside;
-
-  for (j= 0; j < numnew ; j++) {
-    point= points + (numpoints+j)*dim;
-    if (points == qh first_point)  /* in case of 'QRn' */
-      qh num_points= numpoints+j+1;  
-    /* qh num_points sets the size of the points array.  You may
-       allocate the point elsewhere.  If so, qh_addpoint records
-       the point's address in qh other_points 
-    */
-    for (k= 0; k < dim-1; k++) {
-      realr= qh_RANDOMint;
-      point[k]= 2.0 * realr/(qh_RANDOMmax+1) - 1.0;
-    }
-    qh_setdelaunay (dim, 1, point);
-    facet= qh_findbestfacet (point, !qh_ALL, &bestdist, &isoutside);
-    if (isoutside) {
-      if (!qh_addpoint (point, facet, False))
-	break;  /* user requested an early exit with 'TVn' or 'TCn' */
-    }
-    qh_printpoint (stdout, "added point", point);
-    printf ("%d points, %d extra points, %d vertices, and %d facets in total\n", 
-	          qh num_points, qh_setsize (qh other_points),
-                  qh num_vertices, qh num_facets);
-    
-    /* qh_produce_output(); */
-  }
-  if (qh DOcheckmax)
-    qh_check_maxout();
-  else if (qh KEEPnearinside)
-    qh_nearcoplanar();
-} /*.addDelaunay.*/
-
-/*--------------------------------------------------
--findDelaunay- find Delaunay triangle for [0.5,0.5,...]
-  assumes dim < 100
-notes:
-  calls qh_setdelaunay() to project the point to a parabaloid
-warning:
-  This is not implemented for tricoplanar facets ('Qt'),
-  See <a href="../html/qh-in.htm#findfacet">locate a facet with qh_findbestfacet()</a>
-*/
-void findDelaunay (int dim) {
-  int k;
-  coordT point[ 100];
-  boolT isoutside;
-  realT bestdist;
-  facetT *facet;
-  vertexT *vertex, **vertexp;
-
-  for (k= 0; k < dim-1; k++) 
-    point[k]= 0.5;
-  qh_setdelaunay (dim, 1, point);
-  facet= qh_findbestfacet (point, qh_ALL, &bestdist, &isoutside);
-  if (facet->tricoplanar) {
-    fprintf(stderr, "findDelaunay: not implemented for triangulated, non-simplicial Delaunay regions (tricoplanar facet, f%d).\n",
-       facet->id);
-    qh_errexit (qh_ERRqhull, facet, NULL);
-  }
-  FOREACHvertex_(facet->vertices) {
-    for (k=0; k < dim-1; k++)
-      printf ("%5.2f ", vertex->point[k]);
-    printf ("\n");
-  }
-} /*.findDelaunay.*/
-
-/*--------------------------------------------------
--makehalf- set points to halfspaces for a (dim)-d diamond
-  points is numpoints X dim+1
-
-  each halfspace consists of dim coefficients followed by an offset
-*/
-void makehalf (coordT *points, int numpoints, int dim) {
-  int j,k;
-  coordT *point;
-
-  for (j=0; j<numpoints; j++) {
-    point= points + j*(dim+1);
-    point[dim]= -1.0; /* offset */
-    for (k=dim; k--; ) {
-      if (j & ( 1 << k))
-	point[k]= 1.0;
-      else
-	point[k]= -1.0;
-    }
-  }
-} /*.makehalf.*/
-
-/*--------------------------------------------------
--addhalf- add halfspaces for a (dim)-d cube to the intersection
-  points is numpoints+numnew X dim+1
-notes:
-  assumes dim < 100. 
-
-  For makehalf(), points is the initial set of halfspaces with offsets.
-  It is transformed by qh_sethalfspace_all into a
-  (dim)-d set of newpoints.  Qhull computed the convex hull of newpoints -
-  this is equivalent to the halfspace intersection of the
-  orginal halfspaces.
-
-  For addhalf(), the remainder of points stores the transforms of
-  the added halfspaces.  Qhull computes the convex hull of newpoints
-  and the added points.  qh_addpoint() does not make a copy of these points.
-
-  Since halfspace intersection is equivalent to a convex hull, 
-  qh_findbestfacet may perform an exhaustive search
-  for a visible facet.  Algorithms that retain previously constructed
-  intersections should be faster for on-line construction.
-*/
-void addhalf (coordT *points, int numpoints, int numnew, int dim, coordT *feasible) {
-  int j,k;
-  coordT *point, normal[100], offset, *next;
-  facetT *facet;
-  boolT isoutside;
-  realT bestdist;
-
-  for (j= 0; j < numnew ; j++) {
-    offset= -1.0; 
-    for (k=dim; k--; ) {
-      if (j/2 == k) {
-	normal[k]= sqrt (dim);   /* to normalize as in makehalf */
-	if (j & 1)
-	  normal[k]= -normal[k];
-      }else
-	normal[k]= 0.0;
-    }
-    point= points + (numpoints+j)* (dim+1);  /* does not use point[dim] */
-    qh_sethalfspace (dim, point, &next, normal, &offset, feasible);
-    facet= qh_findbestfacet (point, !qh_ALL, &bestdist, &isoutside);
-    if (isoutside) {
-      if (!qh_addpoint (point, facet, False))
-	break;  /* user requested an early exit with 'TVn' or 'TCn' */
-    }
-    qh_printpoint (stdout, "added offset -1 and normal", normal);
-    printf ("%d points, %d extra points, %d vertices, and %d facets in total\n", 
-	          qh num_points, qh_setsize (qh other_points),
-                  qh num_vertices, qh num_facets);
-    /* qh_produce_output(); */
-  }
-  if (qh DOcheckmax)
-    qh_check_maxout();
-  else if (qh KEEPnearinside)
-    qh_nearcoplanar();
-} /*.addhalf.*/
-
-#define DIM 3     /* dimension of points, must be < 31 for SIZEcube */
-#define SIZEcube (1<<DIM)
-#define SIZEdiamond (2*DIM)
-#define TOTpoints (SIZEcube + SIZEdiamond)
-
-/*--------------------------------------------------
--main- derived from call_qhull in user.c
-
-  see program header
-
-  this contains three runs of Qhull for convex hull, Delaunay
-  triangulation or Voronoi vertices, and halfspace intersection
-
-*/
-int main (int argc, char *argv[]) {
-  boolT ismalloc;
-  int curlong, totlong, exitcode;
-  char options [2000];
-
-  printf ("This is the output from user_eg2.c\n\n\
-It shows how qhull() may be called from an application.  It is not part\n\
-of qhull itself.  If it appears accidently, please remove user_eg2.c from\n\
-your project.\n\n");
-  ismalloc= False; 	/* True if qh_freeqhull should 'free(array)' */
-  /*
-    Run 1: convex hull
-  */
-  qh_init_A (stdin, stdout, stderr, 0, NULL);
-  exitcode= setjmp (qh errexit);
-  if (!exitcode) {
-    coordT array[TOTpoints][DIM];
-
-    strcat (qh rbox_command, "user_eg cube");
-    sprintf (options, "qhull s Tcv Q11 %s ", argc >= 2 ? argv[1] : "");
-    qh_initflags (options);
-    printf( "\ncompute triangulated convex hull of cube after rotating input\n");
-    makecube (array[0], SIZEcube, DIM);
-    qh_init_B (array[0], SIZEcube, DIM, ismalloc);
-    qh_qhull();
-    qh_check_output();
-    qh_triangulate();  /* requires option 'Q11' if want to add points */ 
-    print_summary ();
-    if (qh VERIFYoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points ();
-    printf( "\nadd points in a diamond\n");
-    adddiamond (array[0], SIZEcube, SIZEdiamond, DIM);
-    qh_check_output();
-    print_summary (); 
-    qh_produce_output();  /* delete this line to help avoid io.c */
-    if (qh VERIFYoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points ();
-  }
-  qh NOerrexit= True;
-  qh_freeqhull (!qh_ALL);
-  qh_memfreeshort (&curlong, &totlong);
-  /*
-    Run 2: Delaunay triangulation
-  */
-  qh_init_A (stdin, stdout, stderr, 0, NULL);
-  exitcode= setjmp (qh errexit);
-  if (!exitcode) {
-    coordT array[TOTpoints][DIM];
-
-    strcat (qh rbox_command, "user_eg Delaunay");
-    sprintf (options, "qhull s d Tcv %s", argc >= 3 ? argv[2] : "");
-    qh_initflags (options);
-    printf( "\ncompute %d-d Delaunay triangulation\n", DIM-1);
-    makeDelaunay (array[0], SIZEcube, DIM);
-    /* Instead of makeDelaunay with qh_setdelaunay, you may
-       produce a 2-d array of points, set DIM to 2, and set 
-       qh PROJECTdelaunay to True.  qh_init_B will call 
-       qh_projectinput to project the points to the paraboloid
-       and add a point "at-infinity".
-    */
-    qh_init_B (array[0], SIZEcube, DIM, ismalloc);
-    qh_qhull();
-    /* If you want Voronoi ('v') without qh_produce_output(), call
-       qh_setvoronoi_all() after qh_qhull() */
-    qh_check_output();
-    print_summary ();
-    qh_produce_output();  /* delete this line to help avoid io.c */
-    if (qh VERIFYoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points ();
-    printf( "\nadd points to triangulation\n");
-    addDelaunay (array[0], SIZEcube, SIZEdiamond, DIM); 
-    qh_check_output();
-    qh_produce_output();  /* delete this line to help avoid io.c */
-    if (qh VERIFYoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points ();
-    printf( "\nfind Delaunay triangle closest to [0.5, 0.5, ...]\n");
-    findDelaunay (DIM);
-  }
-  qh NOerrexit= True;
-  qh_freeqhull (!qh_ALL);
-  qh_memfreeshort (&curlong, &totlong);
-  /*
-    Run 3: halfspace intersection
-  */
-  qh_init_A (stdin, stdout, stderr, 0, NULL);
-  exitcode= setjmp (qh errexit);
-  if (!exitcode) {
-    coordT array[TOTpoints][DIM+1];  /* +1 for halfspace offset */
-    pointT *points;
-
-    strcat (qh rbox_command, "user_eg halfspaces");
-    sprintf (options, "qhull H0 s Tcv %s", argc >= 4 ? argv[3] : "");
-    qh_initflags (options);
-    printf( "\ncompute halfspace intersection about the origin for a diamond\n");
-    makehalf (array[0], SIZEcube, DIM);
-    qh_setfeasible (DIM); /* from io.c, sets qh feasible_point from 'Hn,n' */
-    /* you may malloc and set qh feasible_point directly.  It is only used for
-       option 'Fp' */
-    points= qh_sethalfspace_all ( DIM+1, SIZEcube, array[0], qh feasible_point); 
-    qh_init_B (points, SIZEcube, DIM, True); /* qh_freeqhull frees points */
-    qh_qhull();
-    qh_check_output();
-    qh_produce_output();  /* delete this line to help avoid io.c */
-    if (qh VERIFYoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points ();
-    printf( "\nadd halfspaces for cube to intersection\n");
-    addhalf (array[0], SIZEcube, SIZEdiamond, DIM, qh feasible_point); 
-    qh_check_output();
-    qh_produce_output();  /* delete this line to help avoid io.c */
-    if (qh VERIFYoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points ();
-  }
-  qh NOerrexit= True;
-  qh NOerrexit= True;
-  qh_freeqhull (!qh_ALL);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong)  /* could also check previous runs */
-    fprintf (stderr, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n",
-       totlong, curlong);
-  return exitcode;
-} /* main */
-
-#if 1    /* use 1 to prevent loading of io.o and user.o */
-/*-------------------------------------------
--errexit- return exitcode to system after an error
-  assumes exitcode non-zero
-  prints useful information
-  see qh_errexit2() in qhull.c for 2 facets
-*/
-void qh_errexit(int exitcode, facetT *facet, ridgeT *ridge) {
-
-  if (qh ERREXITcalled) {
-    fprintf (qh ferr, "qhull error while processing previous error.  Exit program\n");
-    exit(1);
-  }
-  qh ERREXITcalled= True;
-  if (!qh QHULLfinished)
-    qh hulltime= (unsigned)clock() - qh hulltime;
-  fprintf (qh ferr, "\nWhile executing: %s | %s\n", qh rbox_command, qh qhull_command);
-  fprintf(qh ferr, "Options selected:\n%s\n", qh qhull_options);
-  if (qh furthest_id >= 0) {
-    fprintf(qh ferr, "\nLast point added to hull was p%d", qh furthest_id);
-    if (zzval_(Ztotmerge))
-      fprintf(qh ferr, "  Last merge was #%d.", zzval_(Ztotmerge));
-    if (qh QHULLfinished)
-      fprintf(qh ferr, "\nQhull has finished constructing the hull.");
-    else if (qh POSTmerging)
-      fprintf(qh ferr, "\nQhull has started post-merging");
-    fprintf(qh ferr, "\n\n");
-  }
-  if (qh NOerrexit) {
-    fprintf (qh ferr, "qhull error while ending program.  Exit program\n");
-    exit(1);
-  }
-  if (!exitcode)
-    exitcode= qh_ERRqhull;
-  qh NOerrexit= True;
-  longjmp(qh errexit, exitcode);
-} /* errexit */
-
-
-/*-------------------------------------------
--errprint- prints out the information of the erroneous object
-    any parameter may be NULL, also prints neighbors and geomview output
-*/
-void qh_errprint(char *string, facetT *atfacet, facetT *otherfacet, ridgeT *atridge, vertexT *atvertex) {
-
-  fprintf (qh ferr, "%s facets f%d f%d ridge r%d vertex v%d\n",
-	   string, getid_(atfacet), getid_(otherfacet), getid_(atridge),
-	   getid_(atvertex));
-} /* errprint */
-
-
-void qh_printfacetlist(facetT *facetlist, setT *facets, boolT printall) {
-  facetT *facet, **facetp;
-
-  /* remove these calls to help avoid io.c */
-  qh_printbegin (qh ferr, qh_PRINTfacets, facetlist, facets, printall);/*io.c*/
-  FORALLfacet_(facetlist)                                              /*io.c*/
-    qh_printafacet(qh ferr, qh_PRINTfacets, facet, printall);          /*io.c*/
-  FOREACHfacet_(facets)                                                /*io.c*/
-    qh_printafacet(qh ferr, qh_PRINTfacets, facet, printall);          /*io.c*/
-  qh_printend (qh ferr, qh_PRINTfacets, facetlist, facets, printall);  /*io.c*/
-
-  FORALLfacet_(facetlist)
-    fprintf( qh ferr, "facet f%d\n", facet->id);
-} /* printfacetlist */
-
-
-
-/*-----------------------------------------
--user_memsizes- allocate up to 10 additional, quick allocation sizes
-*/
-void qh_user_memsizes (void) {
-
-  /* qh_memsize (size); */
-} /* user_memsizes */
-
-#endif
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/index.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/index.htm
deleted file mode 100644
index 354579bc0afe2ab7af4b8005ea2e90cb157508fe..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/index.htm
+++ /dev/null
@@ -1,777 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
-<title>Qhull manual</title>
-<!-- Navigation links 
-NOTE -- verify all links by 'grep href=' 'grep name=' add # 'sort /+7'
-        index.htm
--->
-</head>
-
-<body>
-
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b><a
-href="http://www.qhull.org/news">News</a> about Qhull<br>
-<b>Up:</b> <a href="http://www.qhull.org/html/qh-faq.htm">FAQ</a> about Qhull<br>
-<b>To:</b> <a href="#TOC">Qhull manual: Table of Contents</a>
-(please wait while loading) <br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/fixed.html"><img
-src="qh--rand.gif" alt="[random-fixed]" align="middle"
-width="100" height="100"></a> Qhull manual </h1>
-
-<p>Qhull is a general dimension code for computing convex hulls,
-Delaunay triangulations, halfspace intersections about a point, Voronoi
-diagrams, furthest-site Delaunay triangulations, and
-furthest-site Voronoi diagrams.  These structures have
-applications in science, engineering, statistics, and
-mathematics. See <a
-href="http://www.ifor.math.ethz.ch/staff/fukuda/polyfaq/polyfaq.html">Fukuda's
-introduction</a> to convex hulls, Delaunay triangulations,
-Voronoi diagrams, and linear programming. For a detailed
-introduction, see O'Rourke [<a href="#orou94">'94</a>], <i>Computational
-Geometry in C</i>.  
-</p>
-
-<p>There are six programs.  Except for rbox, they use
-the same code.
-<blockquote>
-<ul>
-<li><a href="qconvex.htm">qconvex</a> -- convex hulls
-<li><a href="qdelaun.htm">qdelaunay</a> -- Delaunay triangulations and
- furthest-site Delaunay triangulations
-<li><a href="qhalf.htm">qhalf</a> -- halfspace intersections about a point
-<li><a href="qhull.htm">qhull</a> -- all structures with additional options
-<li><a href="qvoronoi.htm">qvoronoi</a> -- Voronoi diagrams and 
-  furthest-site Voronoi diagrams
-<li><a href="rbox.htm">rbox</a> -- generate point distributions for qhull
-</ul>
-</blockquote>
-
-<p>Qhull implements the Quickhull algorithm for computing the
-convex hull. Qhull includes options
-for hull volume, facet area, multiple output formats, and
-graphical output. It can approximate a convex hull. </p>
-
-<p>Qhull handles roundoff errors from floating point
-arithmetic.  It generates a convex hull with "thick" facets.  
-A facet's outer plane is clearly above all of the points;
-its inner plane is clearly below the facet's vertices.  Any
-exact convex hull must lie between the inner and outer plane.
-
-<p>Qhull uses merged facets, triangulated output, or joggled
-input.  Triangulated output triangulates non-simplicial, merged
-facets.  Joggled input also 
-guarantees simplicial output, but it
-is less accurate than merged facets.  For merged facets, Qhull
-reports the maximum outer and inner plane. 
-
-<p><i>Brad Barber, Cambridge MA, 2003/12/30</i></p>
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h2><a href="#TOP">»</a><a name="TOC">Qhull manual: Table of
-Contents </a></h2>
-
-<ul>
-    <li><a href="#when">When</a> to use Qhull
-	     <ul>
-	 <li><a href="http://www.qhull.org/news">News</a> for Qhull
-	 with new features and reported bugs.
-        <li><a href="http://www.qhull.org">Home</a> for Qhull with additional URLs
-		(<a href=index.htm>local copy</a>)
-		<li><a href="http://www.qhull.org/html/qh-faq.htm">FAQ</a> for Qhull (<a href="qh-faq.htm">local copy</a>)
-		<li><a href="http://www.qhull.org/download">Download</a> Qhull (<a href=qh-get.htm>local copy</a>)
-		<li><a href="qh-quick.htm#programs">Quick</a> reference for Qhull and its <a href="qh-quick.htm#options">options</a>
-      <p>
-        <li><a href="../COPYING.txt">COPYING.txt</a> - copyright notice<br>
-        <li><a href="../REGISTER.txt">REGISTER.txt</a> - registration<br>
-        <li><a href="../README.txt">README.txt</a> - installation
-        instructions<br>
-        <li><a href="../src/Changes.txt">Changes.txt</a> - change history <br>
-        <li><a href="qhull.txt">qhull.txt</a> - Unix manual page
-	     </ul>
-	<p>
-    <li><a href="#description">Description</a> of Qhull
-	     <ul>
-            <li><a href="#definition">de</a>finition &#149; <a
-                href="#input">in</a>put &#149; <a href="#output">ou</a>tput
-                &#149; <a href="#algorithm">al</a>gorithm &#149; <a
-                href="#structure">da</a>ta structure </li>
-    <li><a href="qh-impre.htm">Imprecision</a> in Qhull</li>
-    <LI><a href="qh-impre.htm#joggle">Merged facets</a> or joggled input
-		<li><a href="#geomview">Geomview</a>, Qhull's graphical
-			viewer</li>
-		<li><a href="qh-eg.htm">Examples</a> of Qhull using Geomview</li>
-        </ul>
-	<p>
-  <li><a href=qh-quick.htm#programs>Qhull programs</a>
-	<ul>
-	<li><a href="qconvex.htm">qconvex</a> -- convex hulls
-	<li><a href="qdelaun.htm">qdelaunay</a> -- Delaunay triangulations and
-	 furthest-site Delaunay triangulations
-	<li><a href="qhalf.htm">qhalf</a> -- halfspace intersections about a point
-	<li><a href="qhull.htm">qhull</a> -- all structures with additional options
-	<li><a href="qvoronoi.htm">qvoronoi</a> -- Voronoi diagrams and 
-	  furthest-site Voronoi diagrams
-	<li><a href="rbox.htm">rbox</a> -- generate point distributions for qhull
-	</ul>
-	<p>
-    <li>Related URLs
-	 <ul>
-	 
-	<li><a href="news:comp.graphics.algorithms">Newsgroup</a>:
-        comp.graphics.algorithms
-	<li><a 
-        href="http://exaflop.org/docs/cgafaq/">FAQ</a> for computer graphics algorithms and
-		<a href="http://exaflop.org/docs/cgafaq/cga6.html">geometric</a> structures.
-    <li>Amenta's <a href="http://www.geom.uiuc.edu/software/cglist">Directory
-        of Computational Geometry Software </a></li>
-    <li>Erickson's <a
-        href="http://compgeom.cs.uiuc.edu/~jeffe/compgeom/code.html">Computational
-        Geometry Software</a> </li>
-	<li>Fukuda's <a 
-		href="http://www.ifor.math.ethz.ch/staff/fukuda/polyfaq/polyfaq.html">
-		introduction</a> to convex hulls, Delaunay triangulations,
-		Voronoi diagrams, and linear programming. 
-    <li>Stony Brook's <a
-        href="http://www.cs.sunysb.edu/~algorith/major_section/1.6.shtml">Algorithm Repository</a> on computational geometry.
-    </li>
-     </ul>
-	<p>
-    <li><a href="qh-quick.htm#options">Qhull options</a><ul>
-            <li><a href="qh-opto.htm#output">Output</a> formats</li>
-            <li><a href="qh-optf.htm#format">Additional</a> I/O
-                formats</li>
-            <li><a href="qh-optg.htm#geomview">Geomview</a>
-                output options</li>
-            <li><a href="qh-optp.htm#print">Print</a> options</li>
-            <li><a href="qh-optq.htm#qhull">Qhull</a> control
-                options</li>
-            <li><a href="qh-optc.htm#prec">Precision</a> options</li>
-            <li><a href="qh-optt.htm#trace">Trace</a> options</li>
-        </ul>
-    </li>
-	<p>
-    <li><a href="qh-in.htm">Qhull internals</a><ul>
-            <li><a href="qh-in.htm#performance">Performance</a>
-                of Qhull</li>
-            <li><a href="qh-in.htm#library">Calling</a> Qhull
-                from your program</li>
-            <li><a href="qh-in.htm#enhance">Enhancements</a> to
-                Qhull</li>
-            <li><a href="../src/index.htm">Qhull functions, macros, and
-                data structures</a> </li>
-        </ul>
-    </li>
-	<p>
-    <li><a href="#bugs">What to do</a> if something goes wrong</li>
-    <li><a href="#email">Email</a></li>
-    <li><a href="#authors">Authors</a></li>
-    <li><a href="#ref">References</a></li>
-    <li><a href="#acknowledge">Acknowledgments</a></li>
-</ul>
-<h2><a href="#TOC">»</a><a name="when">When to use Qhull</a></h2>
-<blockquote>
-
-<p>Qhull constructs convex hulls, Delaunay triangulations,
-halfspace intersections about a point, Voronoi diagrams, furthest-site Delaunay
-triangulations, and furthest-site Voronoi diagrams.</p>
-
-<p>For convex hulls and halfspace intersections, Qhull may be used 
-for 2-d upto 8-d.  For Voronoi diagrams and Delaunay triangulations, Qhull may be
-used for 2-d upto 7-d.  In higher dimensions, the size of the output
-grows rapidly and Qhull does not work well with virtual memory. 
-If <i>n</i> is the size of
-the input and <i>d</i> is the dimension (d>=3), the size of the output 
-and execution time
-grows by <i>n^(floor(d/2)</i> 
-[see <a href=qh-in.htm#performance>Performance</a>].  For example, do
-not try to build a 16-d convex hull of 1000 points.  It will
-have on the order of 1,000,000,000,000,000,000,000,000 facets.
-
-<p>On a 600 MHz Pentium 3, Qhull computes the 2-d convex hull of
-300,000 cocircular points in 11 seconds.  It computes the
-2-d Delaunay triangulation and 3-d convex hull of 120,000 points
-in 12 seconds.  It computes the
-3-d Delaunay triangulation and 4-d convex hull of 40,000 points
-in 18 seconds.  It computes the
-4-d Delaunay triangulation and 5-d convex hull of 6,000 points
-in 12 seconds.  It computes the
-5-d Delaunay triangulation and 6-d convex hull of 1,000 points
-in 12 seconds.  It computes the
-6-d Delaunay triangulation and 7-d convex hull of 300 points
-in 15 seconds.  It computes the
-7-d Delaunay triangulation and 8-d convex hull of 120 points
-in 15 seconds.  It computes the
-8-d Delaunay triangulation and 9-d convex hull of 70 points
-in 15 seconds.  It computes the
-9-d Delaunay triangulation and 10-d convex hull of 50 points
-in 17 seconds.  The 10-d convex hull of 50 points has about 90,000 facets.
-
-<!-- duplicated in index.htm and html/index.htm -->
-<p>Qhull does <i>not</i> support constrained Delaunay
-triangulations, triangulation of non-convex surfaces, mesh
-generation of non-convex objects, or medium-sized inputs in 9-D
-and higher. </p>
-
-<p>This is a big package with many options. It is one of the
-fastest available. It is the only 3-d code that handles precision
-problems due to floating point arithmetic. For example, it
-implements the identity function for extreme points (see <a
-href="qh-impre.htm">Imprecision in Qhull</a>). </p>
-
-<p>If you need a short code for convex hull, Delaunay
-triangulation, or Voronoi volumes consider Clarkson's <a
-href="http://netlib.bell-labs.com/netlib/voronoi/hull.html">hull
-program</a>. If you need 2-d Delaunay triangulations consider
-Shewchuk's <a href="http://www.cs.cmu.edu/~quake/triangle.html">triangle
-program</a>. It is much faster than Qhull and it allows
-constraints. Both programs use exact arithmetic. They are in <a
-href="ftp://netlib.bell-labs.com/netlib/voronoi">ftp://netlib.bell-labs.com/netlib/voronoi</a>.
-Qhull <a
-href="http://www.qhull.org/download">version
-1.0</a> may also meet your needs. It detects precision problems,
-but does not handle them.</p>
-
-<p><a href=http://www.algorithmic-solutions.com/enleda.htm>Leda</a> is a 
-library for writing computational
-geometry programs and other combinatorial algorithms.  It 
-includes routines for computing 3-d convex
-hulls, 2-d Delaunay triangulations, and 3-d Delaunay triangulations.  
-It provides rational arithmetic and graphical output.  It runs on most 
-platforms.
-
-<p>If your problem is in high dimensions with a few,
-non-simplicial facets, try Fukuda's <a
-href="http://www.cs.mcgill.ca/~fukuda/soft/cdd_home/cdd.html">cdd</a>.
-It is much faster than Qhull for these distributions. </p>
-
-<p>Custom software for 2-d and 3-d convex hulls may be faster
-than Qhull.  Custom software should use less memory.  Qhull uses 
-general-dimension data structures and code.   The data structures
-support non-simplicial facets.</p>
-
-<p>Qhull is not suitable for mesh generation or triangulation of
-arbitrary surfaces. You may use Qhull if the surface is convex or
-completely visible from an interior point (e.g., a star-shaped
-polyhedron). First, project each site to a sphere that is
-centered at the interior point. Then, compute the convex hull of
-the projected sites. The facets of the convex hull correspond to
-a triangulation of the surface. For mesh generation of arbitrary
-surfaces, see <a
-href="http://www-users.informatik.rwth-aachen.de/~roberts/meshgeneration.html">Schneiders'
-Finite Element Mesh Generation</a>.</p>
-
-<p>Qhull is not suitable for constrained Delaunay triangulations.
-With a lot of work, you can write a program that uses Qhull to
-add constraints by adding additional points to the triangulation.</p>
-
-<p>Qhull is not suitable for the subdivision of arbitrary
-objects. Use <tt>qdelaunay</tt> to subdivide a convex object.</p>
-
-</blockquote>
-<h2><a href="#TOC">»</a><a name="description">Description of
-Qhull </a></h2>
-<blockquote>
-
-<h3><a href="#TOC">»</a><a name="definition">definition</a></h3>
-<blockquote>
-
-<p>The <i>convex hull</i> of a point set <i>P</i> is the smallest
-convex set that contains <i>P</i>. If <i>P</i> is finite, the
-convex hull defines a matrix <i>A</i> and a vector <i>b</i> such
-that for all <i>x</i> in <i>P</i>, <i>Ax+b &lt;= [0,...]</i>. </p>
-
-<p>Qhull computes the convex hull in 2-d, 3-d, 4-d, and higher
-dimensions. Qhull represents a convex hull as a list of facets.
-Each facet has a set of vertices, a set of neighboring facets,
-and a halfspace. A halfspace is defined by a unit normal and an
-offset (i.e., a row of <i>A</i> and an element of <i>b</i>). </p>
-
-<p>Qhull accounts for round-off error. It returns
-&quot;thick&quot; facets defined by two parallel hyperplanes. The
-outer planes contain all input points. The inner planes exclude
-all output vertices. See <a href="qh-impre.htm#imprecise">Imprecise
-convex hulls</a>.</p>
-
-<p>Qhull may be used for the Delaunay triangulation or the
-Voronoi diagram of a set of points. It may be used for the
-intersection of halfspaces. </p>
-
-</blockquote>
-<h3><a href="#TOC">»</a><a name="input">input format</a></h3>
-<blockquote>
-
-<p>The input data on <tt>stdin</tt> consists of:</p>
-
-<ul>
-    <li>first line contains the dimension</li>
-    <li>second line contains the number of input points</li>
-    <li>remaining lines contain point coordinates</li>
-</ul>
-
-<p>For example: </p>
-
-<pre>
-    3  #sample 3-d input
-    5
-    0.4 -0.5 1.0
-    1000 -1e-5 -100
-    0.3 0.2 0.1
-    1.0 1.0 1.0
-    0 0 0
-</pre>
-
-<p>Input may be entered by hand. End the input with a control-D
-(^D) character. </p>
-
-<p>To input data from a file, use I/O redirection or '<a
-href="qh-optt.htm#TI">TI file</a>'.  The filename may not
-include spaces or quotes.</p>
-
-<p>A comment starts with a non-numeric character and continues to
-the end of line. The first comment is reported in summaries and
-statistics. With multiple <tt>qhull</tt> commands, use option '<a
-href="qh-optf.htm#FQ">FQ</a>' to place a comment in the output.</p>
-
-<p>The dimension and number of points can be reversed. Comments
-and line breaks are ignored. Error reporting is better if there
-is one point per line.</p>
-
-</blockquote>
-<h3><a href="#TOC">»</a><a name="option">option format</a></h3>
-<blockquote>
-
-<p>Use options to specify the output formats and control
-Qhull.  The <tt>qhull</tt> program takes all options.  The
-other programs use a subset of the options.  They disallow
-experimental and inappropriate options.
-
-<blockquote>
-<ul>
-<li>
-qconvex == qhull
-<li>
-qdelaunay == qhull d Qbb
-<li>
-qhalf == qhull H
-<li>
-qvoronoi == qhull v Qbb
-</ul>
-</blockquote>
-
-<p>Single letters are used for output formats and precision
-constants. The other options are grouped into menus for formats
-('<a href="qh-optf.htm#format">F</a>'), Geomview ('<a
-href="qh-optg.htm#geomview">G </a>'), printing ('<a
-href="qh-optp.htm#print">P</a>'), Qhull control ('<a
-href="qh-optq.htm#qhull">Q </a>'), and tracing ('<a
-href="qh-optt.htm#trace">T</a>'). The menu options may be listed
-together (e.g., 'GrD3' for 'Gr' and 'GD3'). Options may be in any
-order. Capitalized options take a numeric argument (except for '<a
-href="qh-optp.htm#PG">PG</a>' and '<a href="qh-optf.htm#format">F</a>'
-options). Use option '<a href="qh-optf.htm#FO">FO</a>' to print
-the selected options.</p>
-
-<p>Qhull uses zero-relative indexing. If there are <i>n</i>
-points, the index of the first point is <i>0</i> and the index of
-the last point is <i>n-1</i>.</p>
-
-<p>The default options are:</p>
-
-<ul>
-    <li>summary output ('<a href="qh-opto.htm#s">s</a>') </li>
-    <li>merged facets ('<a href="qh-optc.htm#C0">C-0</a>' in 2-d,
-        3-d, 4-d; '<a href="qh-optq.htm#Qx">Qx</a>' in 5-d and
-        up)</li>
-</ul>
-
-<p>Except for bounding box
-('<a href="qh-optq.htm#Qbk">Qbk:n</a>', etc.), drop facets 
-('<a href="qh-optp.htm#Pdk">Pdk:n</a>', etc.), and
-Qhull command ('<a href="qh-optf.htm#FQ">FQ</a>'), only the last
-occurence of an option counts.  
-Bounding box and drop facets may be repeated for each dimension.
-Option 'FQ' may be repeated any number of times.
-
-<p>The Unix <tt>tcsh</tt> and <tt>ksh </tt>shells make it easy to
-try out different options. In Windows 95, use a DOS window with <tt>doskey</tt>
-and a window scroller (e.g., <tt>peruse</tt>). </p>
-
-</blockquote>
-<h3><a href="#TOC">»</a><a name="output">output format</a></h3>
-<blockquote>
-
-<p>To write the results to a file, use I/O redirection or '<a
-href="qh-optt.htm#TO">TO file</a>'. Windows 95 users should use
-'TO file' or the console.  If a filename is surrounded by single quotes, 
-it may include spaces.
-</p>
-
-<p>The default output option is a short summary ('<a
-href="qh-opto.htm#s">s</a>') to <tt>stdout</tt>. There are many
-others (see <a href="qh-opto.htm">output</a> and <a
-href="qh-optf.htm">formats</a>). You can list vertex incidences,
-vertices and facets, vertex coordinates, or facet normals. You
-can view Qhull objects with Geomview, Mathematica, or Maple. You can
-print the internal data structures. You can call Qhull from your
-application (see <a href="qh-in.htm#library">Qhull library</a>).</p>
-
-<p>For example, 'qhull <a href="qh-opto.htm#o">o</a>' lists the
-vertices and facets of the convex hull. </p>
-
-<p>Error messages and additional summaries ('<a
-href="qh-opto.htm#s">s</a>') go to <tt>stderr</tt>. Unless
-redirected, <tt>stderr</tt> is the console.</p>
-
-</blockquote>
-<h3><a href="#TOC">»</a><a name="algorithm">algorithm</a></h3>
-<blockquote>
-
-<p>Qhull implements the Quickhull algorithm for convex hull
-[Barber et al. <a href="#bar-dob96">'96</a>]. This algorithm
-combines the 2-d Quickhull algorithm with the <em>n</em>-d
-beneath-beyond algorithm [c.f., Preparata &amp; Shamos <a
-href="#pre-sha85">'85</a>]. It is similar to the randomized
-algorithms of Clarkson and others [Clarkson &amp; Shor <a
-href="#cla-sho89">'89</a>; Clarkson et al. <a href="#cla-meh93">'93</a>;
-Mulmuley <a href="#mulm94">'94</a>]. For a demonstration, see <a
-href="qh-eg.htm#how">How Qhull adds a point</a>. The main
-advantages of Quickhull are output sensitive performance (in
-terms of the number of extreme points), reduced space
-requirements, and floating-point error handling. </p>
-
-</blockquote>
-<h3><a href="#TOC">»</a><a name="structure">data structures</a></h3>
-<blockquote>
-
-<p>Qhull produces the following data structures for dimension <i>d</i>:
-</p>
-
-<ul>
-    <li>A <em>coordinate</em> is a real number in floating point
-        format. </li>
-    <li>A <em>point</em> is an array of <i>d</i> coordinates.
-        With option '<a href="qh-optq.htm#QJn">QJ</a>', the
-        coordinates are joggled by a small amount. </li>
-    <li>A <em>vertex</em> is an input point. </li>
-    <li>A <em>hyperplane</em> is <i>d</i> normal coefficients and
-        an offset. The length of the normal is one. The
-        hyperplane defines a halfspace. If <i>V</i> is a normal, <i>b</i>
-        is an offset, and <i>x</i> is a point inside the convex
-        hull, then <i>Vx+b &lt;0</i>.</li>
-    <li>An <em>outer plane</em> is a positive
-        offset from a hyperplane. When Qhull is done, all points
-        will be below all outer planes.</li>
-    <li>An <em>inner plane</em> is a negative
-        offset from a hyperplane. When Qhull is done, all
-        vertices will be above the corresponding inner planes.</li>
-    <li>An <em>orientation</em> is either 'top' or 'bottom'. It is the
-        topological equivalent of a hyperplane's geometric
-        orientation. </li>
-    <li>A <em>simplicial facet</em> is a set of
-        <i>d</i> neighboring facets, a set of <i>d</i> vertices, a
-        hyperplane equation, an inner plane, an outer plane, and
-        an orientation. For example in 3-d, a simplicial facet is
-        a triangle. </li>
-    <li>A <em>centrum</em> is a point on a facet's hyperplane. A
-        centrum is the average of a facet's vertices. Neighboring
-        facets are <em>convex</em> if each centrum is below the
-        neighbor facet's hyperplane. </li>
-    <li>A <em>ridge</em> is a set of <i>d-1</i> vertices, two
-        neighboring facets, and an orientation. For example in
-        3-d, a ridge is a line segment. </li>
-    <li>A <em>non-simplicial facet</em> is a set of ridges, a
-        hyperplane equation, a centrum, an outer plane, and an
-        inner plane. The ridges determine a set of neighboring
-        facets, a set of vertices, and an orientation. Qhull
-        produces a non-simplicial facet when it merges two facets
-        together. For example, a cube has six non-simplicial
-        facets. </li>
-</ul>
-
-<p>For examples, use option '<a href="qh-opto.htm#f">f</a>'. See <a
-href="../src/qh-poly.htm">polyhedron operations</a> for further
-design documentation. </p>
-
-</blockquote>
-<h3><a href="#TOC">»</a>Imprecision in Qhull</h3>
-<blockquote>
-
-<p>See <a href="qh-impre.htm">Imprecision in Qhull</a>.</p>
-
-</blockquote>
-<h3><a href="#TOC">»</a><a name="geomview">Geomview, Qhull's
-graphical viewer</a></h3>
-<blockquote>
-
-<p><a href="http://www.geomview.org">Geomview</a>
-is an interactive geometry viewing program for Linux, SGI workstations,
-Sun workstations, AIX workstations, NeXT workstations, and X-windows.
-It is an 
-<a href=http://sourceforge.net/projects/geomview>open source project</a>
-under SourceForge.  
-Besides a 3-d viewer, it includes a 4-d viewer, an n-d viewer and
-many features for viewing mathematical objects. You may need to
-ftp <tt>ndview</tt> from the <tt>newpieces</tt> directory. </p>
-
-</blockquote>
-<h3><a href="#TOC">»</a>Description of Qhull examples</h3>
-<blockquote>
-
-<p>See <a href="qh-eg.htm">Examples</a>. Some of the examples
-have <a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/welcome.html">pictures
-</a>.</p>
-
-</blockquote>
-</blockquote>
-<h2><a href="#TOC">»</a>Options for using Qhull </h2>
-<blockquote>
-
-<p>See <a href="qh-quick.htm#options">Options</a>.</p>
-
-</blockquote>
-<h2><a href="#TOC">»</a>Qhull internals </h2>
-<blockquote>
-
-<p>See <a href="qh-in.htm">Internals</a>.</p>
-
-</blockquote>
-<h2><a href="#TOC">»</a><a name="bugs">What to do if something
-goes wrong</a></h2>
-<blockquote>
-
-<p>Please report bugs to <a href=mailto:qhull_bug@qhull.org>qhull_bug@qhull.org</a>
-</a>. Please report if Qhull crashes. Please report if Qhull
-generates an &quot;internal error&quot;. Please report if Qhull
-produces a poor approximate hull in 2-d, 3-d or 4-d. Please
-report documentation errors. Please report missing or incorrect
-links.</p>
-
-<p>If you do not understand something, try a small example. The <a
-href="rbox.htm">rbox</a> program is an easy way to generate
-test cases. The <a href="#geomview">Geomview</a> program helps to
-visualize the output from Qhull.</p>
-
-<p>If Qhull does not compile, it is due to an incompatibility
-between your system and ours. The first thing to check is that
-your compiler is ANSI standard. Qhull produces a compiler error
-if __STDC__ is not defined. You may need to set a flag (e.g.,
-'-A' or '-ansi').</p>
-
-<p>If Qhull compiles but crashes on the test case (rbox D4),
-there's still incompatibility between your system and ours.
-Sometimes it is due to memory management. This can be turned off
-with qh_NOmem in mem.h. Please let us know if you figure out how
-to fix these problems. </p>
-
-<p>If you doubt the output from Qhull, add option '<a
-href="qh-optt.htm#Tv">Tv</a>'. It checks that every point is
-inside the outer planes of the convex hull. It checks that every
-facet is convex with its neighbors. It checks the topology of the
-convex hull.</p>
-
-<p>Qhull should work on all inputs. It may report precision
-errors if you turn off merged facets with option '<a
-href="qh-optq.htm#Q0">Q0</a>'. This can get as bad as facets with
-flipped orientation or two facets with the same vertices. You'll
-get a long help message if you run into such a case. They are
-easy to generate with <tt>rbox</tt>.</p>
-
-<p>If you do find a problem, try to simplify it before reporting
-the error. Try different size inputs to locate the smallest one
-that causes an error. You're welcome to hunt through the code
-using the execution trace ('<a href="qh-optt.htm#Tn">T4</a>') as
-a guide. This is especially true if you're incorporating Qhull
-into your own program. </p>
-
-<p>When you report an error, please attach a data set to the end
-of your message. Include the options that you used with Qhull,
-the results of option '<a href="qh-optf.htm#FO">FO</a>', and any
-messages generated by Qhull. This allows me to see the error for
-myself. Qhull is maintained part-time. </p>
-
-</blockquote>
-<h2><a href="#TOC">»</a><a name="email">Email</a></h2>
-<blockquote>
-
-<p>Please send correspondence to Brad Barber at <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-and report bugs to <a href=mailto:qhull_bug@qhull.org>qhull_bug@qhull.org</a>
-</a>. Let me know how you use Qhull. If you mention it in a
-paper, please send a reference and abstract.</p>
-
-<p>If you would like to get Qhull announcements (e.g., a new
-version) and news (any bugs that get fixed, etc.), let us know
-and we will add you to our mailing list. If you would like to
-communicate with other Qhull users, I will add you to the
-qhull_users alias. For Internet news about geometric algorithms
-and convex hulls, look at comp.graphics.algorithms and
-sci.math.num-analysis. For Qhull news look at <a
-href="http://www.qhull.org/news">qhull-news.html</a>.</p>
-
-</blockquote>
-<h2><a href="#TOC">»</a><a name="authors">Authors</a></h2>
-<blockquote>
-
-<pre>  C. Bradford Barber                    Hannu Huhdanpaa
-  bradb@qhull.org                    hannu@qhull.org
-  
-                    c/o The Geometry Center
-                    University of Minnesota
-                    400 Lind Hall
-                    207 Church Street S.E.
-                    Minneapolis, MN 55455
-</pre>
-
-</blockquote>
-<h2><a href="#TOC">»</a><a name="acknowledge">Acknowledgments</a></h2>
-<blockquote>
-
-<p>A special thanks to David Dobkin for his guidance. A special
-thanks to Albert Marden, Victor Milenkovic, the Geometry Center,
-and Harvard University for supporting this work.</p>
-
-<p>A special thanks to Mark Phillips, Robert Miner, and Stuart Levy for running the Geometry
- Center web site long after the Geometry Center closed.  
- Stuart moved the web site to the University of Illinois at Champaign-Urbana.
-Mark and Robert are founders of <a href=http://www.geomtech.com>Geometry Technologies</a>.
-Mark, Stuart, and Tamara Munzner are the original authors of <a href=http://www.geomview.org>Geomview</a>.
-
-<p>A special thanks to <a href="http://www.endocardial.com/">Endocardial
-Solutions, Inc.</a> of St. Paul, Minnesota for their support of the
-internal documentation (<a href=../src/index.htm>src/index.htm</a>). They use Qhull to build 3-d models of
-heart chambers.</p>
-
-<p>Qhull 1.0 was developed under National Science Foundation
-grants NSF/DMS-8920161 and NSF-CCR-91-15793 750-7504. If you find
-it useful, please let us know.</p>
-
-<p>The Geometry Center was supported by grant DMS-8920161 from the
-National Science Foundation, by grant DOE/DE-FG02-92ER25137 from
-the Department of Energy, by the University of Minnesota, and by
-Minnesota Technology, Inc.</p>
-
-</blockquote>
-<h2><a href="#TOC">»</a><a name="ref">References</a></h2>
-<blockquote>
-
-<p><a name="aure91">Aurenhammer</a>, F., &quot;Voronoi diagrams
--- A survey of a fundamental geometric data structure,&quot; <i>ACM
-Computing Surveys</i>, 1991, 23:345-405. </p>
-
-<p><a name="bar-dob96">Barber</a>, C. B., D.P. Dobkin, and H.T.
-Huhdanpaa, &quot;The Quickhull Algorithm for Convex Hulls,&quot; <i>ACM
-Transactions on Mathematical Software</i>, Vol. 22, No. 4 (Dec.
-1996), p. 469-483 [<a
-href="http://www.acm.org/pubs/citations/journals/toms/1996-22-4/p469-barber/">http://www.acm.org</a>;
-<a href="http://citeseer.nj.nec.com/83502.html">http://citeseer.nj.nec.com</a>].
-</p>
-
-<p><a name="cla-sho89">Clarkson</a>, K.L. and P.W. Shor,
-&quot;Applications of random sampling in computational geometry,
-II&quot;, <i>Discrete Computational Geometry</i>, 4:387-421, 1989</p>
-
-<p><a name="cla-meh93">Clarkson</a>, K.L., K. Mehlhorn, and R.
-Seidel, &quot;Four results on randomized incremental
-construction,&quot; <em>Computational Geometry: Theory and
-Applications</em>, vol. 3, p. 185-211, 1993.</p>
-
-<p><a name="devi01">Devillers</a>, et. al., 
-"Walking in a triangulation," <i>ACM Symposium on
-Computational Geometry</i>, June 3-5,2001, Medford MA.
-
-<p><a name="dob-kir90">Dobkin</a>, D.P. and D.G. Kirkpatrick,
-&quot;Determining the separation of preprocessed polyhedra--a
-unified approach,&quot; in <i>Proc. 17th Inter. Colloq. Automata
-Lang. Program.</i>, in <i>Lecture Notes in Computer Science</i>,
-Springer-Verlag, 443:400-413, 1990. </p>
-
-<p><a name="edel01">Edelsbrunner</a>, H, <i>Geometry and Topology for Mesh Generation</i>, 
-Cambridge University Press, 2001.
-
-<p><a name=gart99>Gartner, B.</a>, "Fast and robust smallest enclosing balls", <i>Algorithms - ESA '99</i>, LNCS 1643.
-
-<p><a name="fort93">Fortune, S.</a>, &quot;Computational
-geometry,&quot; in R. Martin, editor, <i>Directions in Geometric
-Computation</i>, Information Geometers, 47 Stockers Avenue,
-Winchester, SO22 5LB, UK, ISBN 1-874728-02-X, 1993.</p>
-
-<p><a name="mile93">Milenkovic, V.</a>, &quot;Robust polygon
-modeling,&quot; Computer-Aided Design, vol. 25, p. 546-566,
-September 1993. </p>
-
-<p><a name="muck96">Mucke</a>, E.P., I. Saias, B. Zhu, <i>Fast
-randomized point location without preprocessing in Two- and
-Three-dimensional Delaunay Triangulations</i>, ACM Symposium on
-Computational Geometry, p. 274-283, 1996 [<a
-href="http://www.geom.uiuc.edu/software/cglist/GeomDir/">GeomDir</a>].
-</p>
-
-<p><a name="mulm94">Mulmuley</a>, K., <i>Computational Geometry,
-An Introduction Through Randomized Algorithms</i>, Prentice-Hall,
-NJ, 1994.</p>
-
-<p><a name="orou94">O'Rourke</a>, J., <i>Computational Geometry
-in C</i>, Cambridge University Press, 1994.</p>
-
-<p><a name="pre-sha85">Preparata</a>, F. and M. Shamos, <i>Computational
-Geometry</i>, Springer-Verlag, New York, 1985.</p>
-
-</blockquote>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b><a
-href="http://www.qhull.org/news">News</a> about Qhull<br>
-<b>Up:</b> <a href="http://www.qhull.org/html/qh-faq.htm">FAQ</a> about Qhull<br>
-<b>To:</b> <a href="#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>Dn:</b> <a href="qh-impre.htm">Imprecision in Qhull</a><br>
-<b>Dn:</b> <a href="qh-eg.htm">Description of Qhull examples</a><br>
-<b>Dn:</b> <a href="qh-in.htm">Qhull internals</a><br>
-<b>Dn:</b> <a href="../src/index.htm">Qhull functions, macros, and data
-structures</a>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qconvex.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qconvex.htm
deleted file mode 100644
index 9811cab40cfdb4cc82f44c334fa88f12b69d8c62..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qconvex.htm
+++ /dev/null
@@ -1,628 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>qconvex -- convex hull</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<a name="TOP"><b>Up</b></a><b>:</b> 
-<a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a> -- Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/cone.html"><img
-src="qh--cone.gif" alt="[cone]" align="middle" width="100"
-height="100"></a>qconvex -- convex hull</h1>
-
-<p>The convex hull of a set of points is the smallest convex set
-containing the points. See the detailed introduction by O'Rourke
-[<a href="index.htm#orou94">'94</a>]. See <a
-href="index.htm#description">Description of Qhull</a> and <a
-href="qh-eg.htm#how">How Qhull adds a point</a>.</p>
-
-<blockquote>
-<dl>
-    <dt><b>Example:</b> rbox 10 D3 | qconvex <a
-        href="qh-opto.htm#s">s</a> <a href="qh-opto.htm#o">o</a> <a
-        href="qh-optt.htm#TO">TO result</a></dt>
-    <dd>Compute the 3-d convex hull of 10 random points. Write a
-        summary to the console and the points and facets to
-        'result'.</dd>
-
-        <dt>&nbsp;</dt>
-            <dt><b>Example:</b> rbox c | qconvex <a
-                href="qh-opto.htm#n">n</a></dt>
-            <dd>Print the normals for each facet of a cube.</dd>
-            <dt>&nbsp;</dt>
-            <dt><b>Example:</b> rbox c | qconvex <a
-                href="qh-opto.htm#i">i</a> <a href="qh-optq.htm#Qt">Qt</a></dt>
-            <dd>Print the triangulated facets of a cube.</dd>
-            <dt>&nbsp;</dt>
-            <dt><b>Example:</b> rbox y 500 W0 | qconvex</dt>
-            <dd>Compute the convex hull of a simplex with 500
-                points on its surface.</dd>
-            <dt>&nbsp;</dt>
-            <dt><b>Example:</b> rbox x W1e-12 1000 | qconvex
-            <a href="qh-optq.htm#QR">QR0</a></dt>
-        <dd>Compute the convex hull of 1000 points near the
-		    surface of a randomly rotated simplex.  Report
-			the maximum thickness of a facet.</dd>
-            <dt>&nbsp;</dt>
-       <dt><b>Example:</b> rbox 1000 s | qconvex <a
-            href="qh-opto.htm#s">s</a> <a
-            href="qh-optf.htm#FA">FA</a> </dt>
-        <dd>Compute the convex hull of 1000 cospherical
-            points. Verify the results and print a summary
-            with the total area and volume.</dd>
-        <dt>&nbsp;</dt>
-            <dt><b>Example:</b> rbox d D12 | qconvex <a
-                href="qh-optq.htm#QRn">QR0</a> <a
-                href="qh-optf.htm#FA">FA</a></dt>
-            <dd>Compute the convex hull of a 12-d diamond.
-                Randomly rotate the input. Note the large number
-                of facets and the small volume.</dd>
-            <dt>&nbsp;</dt>
-            <dt><b>Example:</b> rbox c D7 | qconvex <a
-                href="qh-optf.htm#FA">FA</a> <a
-                href="qh-optt.htm#TFn">TF1000</a></dt>
-            <dd>Compute the convex hull of the 7-d hypercube.
-                Report on progress every 1000 facets. Computing
-                the convex hull of the 9-d hypercube takes too
-                much time and space. </dd>
-            <dt>&nbsp;</dt>
-        <dt><b>Example:</b> rbox c d D2 | qconvex <a
-            href="qh-optq.htm#Qc">Qc</a> <a
-            href="qh-opto.htm#s">s</a> <a
-            href="qh-opto.htm#f">f</a> <a
-            href="qh-optf.htm#Fx">Fx</a> | more</dt>
-        <dd>Dump all fields of all facets for a square and a
-            diamond. Also print a summary and a list of
-            vertices. Note the coplanar points.</dd>
-        <dt>&nbsp;</dt>
-</dl>
-</blockquote>
-
-<p>Except for rbox, all of the qhull programs compute a convex hull. 
-
-<p>By default, Qhull merges coplanar facets.  For example, the convex
-hull of a cube's vertices has six facets.
-
-<p>If you use '<a href="qh-optq.htm#Qt">Qt</a>' (triangulated output), 
-all facets will be simplicial (e.g., triangles in 2-d).  For the cube 
-example, it will have 12 facets.  Some facets may be
-degenerate and have zero area. 
-
-<p>If you use '<a href="qh-optq.htm#QJn">QJ</a>' (joggled input), 
-all facets will be simplicial.  The corresponding vertices will be
-slightly perturbed and identical points will be joggled apart.  
-Joggled input is less accurate that triangulated
-output.See <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>The output for 4-d convex hulls may be confusing if the convex
-hull contains non-simplicial facets (e.g., a hypercube). See
-<a href=qh-faq.htm#extra>Why
-are there extra points in a 4-d or higher convex hull?</a><br>
-</p>
-</p>
-
-<p>The 'qconvex' program is equivalent to 
-'<a href=qhull.htm#outputs>qhull</a>' in 2-d to 4-d, and
-'<a href=qhull.htm#outputs>qhull</a> <a href=qh-optq.htm#Qx>Qx</a>' 
-in 5-d and higher.  It disables the following Qhull
-<a href=qh-quick.htm#options>options</a>: <i>d v H Qbb Qf Qg Qm 
-Qr Qu Qv Qx Qz TR E V Fp Gt Q0,etc</i>.
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h3><a href="#TOP">»</a><a name="synopsis">qconvex synopsis</a></h3>
-<pre>
-qconvex- compute the convex hull.  
-    input (stdin): dimension, number of points, point coordinates
-    comments start with a non-numeric character
-
-options (qconvex.htm):
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Tv   - verify result: structure, convexity, and point inclusion
-    .    - concise list of all options
-    -    - one-line description of all options
-
-output options (subset):
-    s    - summary of results (default)
-    i    - vertices incident to each facet
-    n    - normals with offsets
-    p    - vertex coordinates (includes coplanar points if 'Qc')
-    Fx   - extreme points (convex hull vertices)
-    FA   - compute total area and volume
-    o    - OFF format (dim, n, points, facets)
-    G    - Geomview output (2-d, 3-d, and 4-d)
-    m    - Mathematica output (2-d and 3-d)
-    QVn  - print facets that include point n, -n if not
-    TO file- output results to file, may be enclosed in single quotes
-
-examples:
-    rbox c D2 | qconvex s n                    rbox c D2 | qconvex i
-    rbox c D2 | qconvex o                      rbox 1000 s | qconvex s Tv FA
-    rbox c d D2 | qconvex s Qc Fx              rbox y 1000 W0 | qconvex s n
-    rbox y 1000 W0 | qconvex s QJ              rbox d G1 D12 | qconvex QR0 FA Pp
-    rbox c D7 | qconvex FA TF1000
-</pre>
-
-<h3><a href="#TOP">»</a><a name="input">qconvex
-input</a></h3>
-<blockquote>
-
-<p>The input data on <tt>stdin</tt> consists of:</p>
-<ul>
-    <li>dimension
-    <li>number of points</li>
-    <li>point coordinates</li>
-</ul>
-
-<p>Use I/O redirection (e.g., qconvex &lt; data.txt), a pipe (e.g., rbox 10 | qconvex),
-or the '<a href=qh-optt.htm#TI>TI</a>' option (e.g., qconvex TI data.txt).  
-
-<p>Comments start with a non-numeric character.  Error reporting is
-simpler if there is one point per line.  Dimension
-and number of points may be reversed.  
-
-<p>Here is the input for computing the convex
-hull of the unit cube.  The output is the normals, one
-per facet.</p>
-
-<blockquote>
-    <p>rbox c &gt; data </p>
-    <pre>
-3 RBOX c
-8
-  -0.5   -0.5   -0.5
-  -0.5   -0.5    0.5
-  -0.5    0.5   -0.5
-  -0.5    0.5    0.5
-   0.5   -0.5   -0.5
-   0.5   -0.5    0.5
-   0.5    0.5   -0.5
-   0.5    0.5    0.5
-</pre>
-    <p>qconvex s n &lt; data</p>
-    <pre>
-
-Convex hull of 8 points in 3-d:
-
-  Number of vertices: 8
-  Number of facets: 6
-  Number of non-simplicial facets: 6
-
-Statistics for: RBOX c | QCONVEX s n
-
-  Number of points processed: 8
-  Number of hyperplanes created: 11
-  Number of distance tests for qhull: 35
-  Number of merged facets: 6
-  Number of distance tests for merging: 84
-  CPU seconds to compute hull (after input): 0.081
-
-4
-6
-     0      0     -1   -0.5
-     0     -1      0   -0.5
-     1      0      0   -0.5
-    -1      0      0   -0.5
-     0      1      0   -0.5
-     0      0      1   -0.5
-</pre>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="outputs">qconvex outputs</a></h3>
-<blockquote>
-
-<p>These options control the output of qconvex. They may be used
-individually or together.</p>
-<blockquote>
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>Vertices</b></dd>
-    <dt><a href="qh-optf.htm#Fx">Fx</a></dt>
-    <dd>list extreme points (i.e., vertices).  The first line is the number of
-	extreme points.  Each point is listed, one per line.  The cube example
-	has eight vertices.</dd>
-    <dt><a href="qh-optf.htm#Fv">Fv</a></dt>
-    <dd>list vertices for each facet.  The first line is the number of facets.  
-	Each remaining line starts with the number of vertices.  For the cube example,
-	each facet has four vertices.</dd>
-    <dt><a href="qh-opto.htm#i">i</a></dt>
-    <dd>list vertices for each facet.  The first line is the number of facets.  The
-	remaining lines list the vertices for each facet.  In 3-d and
-        higher, report cospherical sites by adding extra points.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Coordinates</b></dd>
-    <dt><a href="qh-opto.htm#o">o</a></dt>
-    <dd>print vertices and facets of the convex hull in OFF format.  The
-	   first line is the dimension.  The second line is the number of
-	   vertices, facets, and ridges.  The vertex
-	   coordinates are next, followed by the facets.  Each facet starts with
-	   the number of vertices.  The cube example has four vertices per facet.</dd>
-    <dt><a href="qh-optf.htm#Ft">Ft</a></dt>
-    <dd>print a triangulation of the convex hull in OFF format.  The first line
-	is the dimension.  The second line is the number of vertices and added points, 
-	followed by the number of facets and the number of ridges.
-    The vertex coordinates are next, followed by the centrum coordinates.  There is
-	one centrum for each non-simplicial facet.
-	The cube example has six centrums, one per square.  
-    Each facet starts with the number of vertices or centrums.
-	In the cube example, each facet uses two vertices and one centrum.</dd>
-    <dt><a href="qh-opto.htm#p">p</a></dt>
-    <dd>print vertex coordinates.  The first line is the dimension and the second
-	line is the number of vertices.  The following lines are the coordinates of each
-	vertex.  The cube example has eight vertices.</dd>
-    <dt><a href="qh-optq.htm#Qc">Qc</a> <a href="qh-opto.htm#p">p</a></dt>
-    <dd>print coordinates of vertices and coplanar points.  The first line is the dimension.
-	The second line is the number of vertices and coplanar points.  The coordinates
-	are next, one line per point.  Use '<a href="qh-optq.htm#Qc">Qc</a> <a href="qh-optq.htm#Qi">Qi</a> p'
-	to print the coordinates of all points.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Facets</b></dd>
-    <dt><a href="qh-optf.htm#Fn">Fn</a></dt>
-    <dd>list neighboring facets for each facet.  The first line is the
-	number of facets.  Each remaining line starts with the number of 
-	neighboring facets.  The cube example has four neighbors per facet.</dd>
-    <dt><a href="qh-optf.htm#FN">FN</a></dt>
-    <dd>list neighboring facets for each point.  The first line is the
-	total number of points.  Each remaining line starts with the number of 
-	neighboring facets.  Each vertex of the cube example has three neighboring
-	facets.  Use '<a href="qh-optq.htm#Qc">Qc</a> <a href="qh-optq.htm#Qi">Qi</a> FN'
-	to include coplanar and interior points. </dd>
-    <dt><a href="qh-optf.htm#Fa">Fa</a></dt>
-    <dd>print area for each facet.  The first line is the number of facets.
-	Facet area follows, one line per facet.  For the cube example, each facet has area one.</dd>
-    <dt><a href="qh-optf.htm#FI">FI</a></dt>
-    <dd>list facet IDs.  The first line is the number of 
-	facets.  The IDs follow, one per line.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Coplanar and interior points</b></dd>
-    <dt><a href="qh-optf.htm#Fc">Fc</a></dt>
-    <dd>list coplanar points for each facet.  The first line is the number
-	of facets.  The remaining lines start with the number of coplanar points.
-	A coplanar point is assigned to one facet.</dd>
-    <dt><a href="qh-optq.htm#Qi">Qi</a> <a href="qh-optf.htm#Fc">Fc</a></dt>
-    <dd>list interior points for each facet.  The first line is the number
-	of facets.  The remaining lines start with the number of interior points.
-	A coplanar point is assigned to one facet.</dd>
-    <dt><a href="qh-optf.htm#FP">FP</a></dt>
-    <dd>print distance to nearest vertex for coplanar points.  The first line is the 
-	number of coplanar points.  Each remaining line starts with the point ID of
-	a vertex, followed by the point ID of a coplanar point, its facet, and distance.
-	Use '<a href="qh-optq.htm#Qc">Qc</a> <a href="qh-optq.htm#Qi">Qi</a>
-        <a href="qh-optf.htm#FP">FP</a>' for coplanar and interior points.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Hyperplanes</b></dd>
-    <dt><a href="qh-opto.htm#n">n</a></dt>
-    <dd>print hyperplane for each facet.  The first line is the dimension.  The
-	second line is the number of facets.  Each remaining line is the hyperplane's
-	coefficients followed by its offset.</dd>
-    <dt><a href="qh-optf.htm#Fo">Fo</a></dt>
-    <dd>print outer plane for each facet.  The output plane is above all points.
-	 The first line is the dimension.  The
-	second line is the number of facets.  Each remaining line is the outer plane's
-	coefficients followed by its offset.</dd>
-    <dt><a href="qh-optf.htm#Fi">Fi</a></dt>
-    <dd>print inner plane for each facet.  The inner plane of a facet is
-	below its vertices.
-	 The first line is the dimension.  The
-	second line is the number of facets.  Each remaining line is the inner plane's
-	coefficients followed by its offset.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="qh-opto.htm#s">s</a></dt>
-    <dd>print summary for the convex hull. Use '<a
-        href="qh-optf.htm#Fs">Fs</a>' and '<a
-        href="qh-optf.htm#FS">FS</a>' if you need numeric data.</dd>
-    <dt><a href="qh-optf.htm#FA">FA</a></dt>
-    <dd>compute total area and volume for '<a
-        href="qh-opto.htm#s">s</a>' and '<a href="qh-optf.htm#FS">FS</a>'</dd>
-    <dt><a href="qh-opto.htm#m">m</a></dt>
-    <dd>Mathematica output for the convex hull in 2-d or 3-d.</dd>
-    <dt><a href="qh-optf.htm#FM">FM</a></dt>
-    <dd>Maple output for the convex hull in 2-d or 3-d.</dd>
-    <dt><a href="qh-optg.htm#G">G</a></dt>
-    <dd>Geomview output for the convex hull in 2-d, 3-d, or 4-d.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Scaling and rotation</b></dd>
-    <dt><a href="qh-optq.htm#Qbk">Qbk:n</a></dt>
-    <dd>scale k'th coordinate to lower bound.</dd>
-    <dt><a href="qh-optq.htm#QBk">QBk:n</a></dt>
-    <dd>scale k'th coordinate to upper bound.</dd>
-    <dt><a href="qh-optq.htm#QbB">QbB</a></dt>
-    <dd>scale input to unit cube centered at the origin.</dd>
-    <dt><a href="qh-optq.htm#QRn">QRn</a></dt>
-    <dd>randomly rotate the input with a random seed of n.  If n=0, the
-	seed is the time.  If n=-1, use time for the random seed, but do
-	not rotate the input.</dd>
-    <dt><a href="qh-optq.htm#Qb0">Qbk:0Bk:0</a></dt>
-    <dd>remove k'th coordinate from input.  This computes the
-	convex hull in one lower dimension.</dd>
-</dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="controls">qconvex controls</a></h3>
-<blockquote>
-
-<p>These options provide additional control:</p>
-
-<blockquote>
-<dl compact>
-    <dt><a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>triangulated output.  Qhull triangulates non-simplicial facets.  It may produce
-     degenerate facets of zero area.</dd>
-    <dt><a href="qh-optq.htm#QJn">QJ</a></dt>
-    <dd>joggle the input instead of merging facets.  This guarantees simplicial facets 
-	(e.g., triangles in 3-d).  It is less accurate than triangulated output ('Qt').</dd>
-    <dt><a href="qh-optq.htm#Qc">Qc</a></dt>
-    <dd>keep coplanar points</dd>
-    <dt><a href="qh-optq.htm#Qi">Qi</a></dt>
-    <dd>keep interior points</dd>
-    <dt><a href="qh-opto.htm#f">f </a></dt>
-    <dd>facet dump.  Print the data structure for each facet.</dd>
-    <dt><a href="qh-optq.htm#QVn">QVn</a></dt>
-    <dd>select facets containing point <em>n</em> as a vertex,</dd>
-    <dt><a href="qh-optq.htm#QGn">QGn</a></dt>
-    <dd>select facets that are visible from point <em>n</em>
-        (marked 'good').  Use <em>-n</em> for the remainder.</dd>
-    <dt><a href="qh-optp.htm#PDk">PDk:0</a></dt>
-    <dd>select facets with a negative coordinate for dimension <i>k</i></dd>
-    <dt><a href="qh-optt.htm#TFn">TFn</a></dt>
-    <dd>report progress after constructing <em>n</em> facets</dd>
-    <dt><a href="qh-optt.htm#Tv">Tv</a></dt>
-    <dd>verify result</dd>
-    <dt><a href="qh-optt.htm#TO">TI file</a></dt>
-    <dd>input data from file.  The filename may not use spaces or quotes.</dd>
-    <dt><a href="qh-optt.htm#TO">TO file</a></dt>
-    <dd>output results to file.  Use single quotes if the filename
-	contains spaces (e.g., <tt>TO 'file with spaces.txt'</tt></dd>
-    <dt><a href="qh-optq.htm#Qs">Qs</a></dt>
-    <dd>search all points for the initial simplex.  If Qhull can 
-	not construct an initial simplex, it reports a
-descriptive message. Usually, the point set is degenerate and one
-or more dimensions should be removed ('<a href="qh-optq.htm#Qb0">Qbk:0Bk:0</a>').
-If not, use option 'Qs'. It performs an exhaustive search for the
-best initial simplex. This is expensive is high dimensions.</dd>
-</dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="graphics">qconvex graphics</a></h3>
-<blockquote>
-
-<p>Display 2-d, 3-d, and 4-d convex hulls with Geomview ('<a
-href="qh-optg.htm#G">G</a>').</p>
-
-<p>Display 2-d and 3-d convex hulls with Mathematica ('<a
-href="qh-opto.htm#m">m</a>').</p>
-
-<p>To view 4-d convex hulls in 3-d, use '<a
-href="qh-optp.htm#Pdk">Pd0d1d2d3</a>' to select the positive
-octant and '<a href="qh-optg.htm#GDn">GrD2</a>' to drop dimension
-2. </p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="notes">qconvex notes</a></h3>
-<blockquote>
-
-<p>Qhull always computes a convex hull.  The
-convex hull may be used for other geometric structures. The
-general technique is to transform the structure into an
-equivalent convex hull problem. For example, the Delaunay
-triangulation is equivalent to the convex hull of the input sites
-after lifting the points to a paraboloid.</p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="conventions">qconvex
-conventions</a></h3>
-<blockquote>
-
-<p>The following terminology is used for convex hulls in Qhull.
-See <a href="index.htm#structure">Qhull's data structures</a>.</p>
-
-<ul>
-    <li><em>point</em> - <em>d</em> coordinates</li>
-    <li><em>vertex</em> - extreme point of the input set</li>
-    <li><em>ridge</em> - <i>d-1</i> vertices between two
-        neighboring facets</li>
-    <li><em>hyperplane</em> - halfspace defined by a unit normal
-        and offset</li>
-    <li><em>coplanar point</em> - a nearly incident point to a
-        hyperplane</li>
-    <li><em>centrum</em> - a point on the hyperplane for testing
-        convexity</li>
-    <li><em>facet</em> - a facet with vertices, ridges, coplanar
-        points, neighboring facets, and hyperplane</li>
-    <li><em>simplicial facet</em> - a facet with <em>d</em>
-        vertices, <em>d</em> ridges, and <em>d</em> neighbors</li>
-    <li><em>non-simplicial facet</em> - a facet with more than <em>d</em>
-        vertices</li>
-    <li><em>good facet</em> - a facet selected by '<a
-        href="qh-optq.htm#QVn">QVn</a>', etc.</li>
-</ul>
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">qconvex options</a></h3>
-
-<pre>
-qconvex- compute the convex hull
-    http://www.qhull.org
-
-input (stdin):
-    first lines: dimension and number of points (or vice-versa).
-    other lines: point coordinates, best if one point per line
-    comments:    start with a non-numeric character
-
-options:
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Qc   - keep coplanar points with nearest facet
-    Qi   - keep interior points with nearest facet
-
-Qhull control options:
-    Qbk:n   - scale coord k so that low bound is n
-      QBk:n - scale coord k so that upper bound is n (QBk is 0.5)
-    QbB  - scale input to unit cube centered at the origin
-    Qbk:0Bk:0 - remove k-th coordinate from input
-    QJn  - randomly joggle input in range [-n,n]
-    QRn  - random rotation (n=seed, n=0 time, n=-1 time/no rotate)
-    Qs   - search all points for the initial simplex
-    QGn  - good facet if visible from point n, -n for not visible
-    QVn  - good facet if it includes point n, -n if not
-
-Trace options:
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events
-    Tc   - check frequently during execution
-    Ts   - print statistics
-    Tv   - verify result: structure, convexity, and point inclusion
-    Tz   - send all output to stdout
-    TFn  - report summary when n or more facets created
-    TI file - input data from file, no spaces or single quotes
-    TO file - output results to file, may be enclosed in single quotes
-    TPn  - turn on tracing when point n added to hull
-     TMn - turn on tracing at merge n
-     TWn - trace merge facets when width > n
-    TVn  - stop qhull after adding point n, -n for before (see TCn)
-     TCn - stop qhull after building cone for point n (see TVn)
-
-Precision options:
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]
-    Un   - max distance below plane for a new, coplanar point
-    Wn   - min facet width for outside point (before roundoff)
-
-Output formats (may be combined; if none, produces a summary to stdout):
-    f    - facet dump
-    G    - Geomview output (see below)
-    i    - vertices incident to each facet
-    m    - Mathematica output (2-d and 3-d)
-    n    - normals with offsets
-    o    - OFF file format (dim, points and facets; Voronoi regions)
-    p    - point coordinates 
-    s    - summary (stderr)
-
-More formats:
-    Fa   - area for each facet
-    FA   - compute total area and volume for option 's'
-    Fc   - count plus coplanar points for each facet
-           use 'Qc' (default) for coplanar and 'Qi' for interior
-    FC   - centrum for each facet
-    Fd   - use cdd format for input (homogeneous with offset first)
-    FD   - use cdd format for numeric output (offset first)
-    FF   - facet dump without ridges
-    Fi   - inner plane for each facet
-    FI   - ID for each facet
-    Fm   - merge count for each facet (511 max)
-    FM   - Maple output (2-d and 3-d)
-    Fn   - count plus neighboring facets for each facet
-    FN   - count plus neighboring facets for each point
-    Fo   - outer plane (or max_outside) for each facet
-    FO   - options and precision constants
-    FP   - nearest vertex for each coplanar point
-    FQ   - command used for qconvex
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,
-                      for output: #vertices, #facets,
-                                  #coplanar points, #non-simplicial facets
-                    #real (2), max outer plane, min vertex
-    FS   - sizes:   #int (0) 
-                    #real(2) tot area, tot volume
-    Ft   - triangulation with centrums for non-simplicial facets (OFF format)
-    Fv   - count plus vertices for each facet
-    FV   - average of vertices (a feasible point for 'H')
-    Fx   - extreme points (in order for 2-d)
-
-Geomview output (2-d, 3-d, and 4-d)
-    Ga   - all points as dots
-     Gp  -  coplanar points and vertices as radii
-     Gv  -  vertices as spheres
-    Gi   - inner planes only
-     Gn  -  no planes
-     Go  -  outer planes only
-    Gc   - centrums
-    Gh   - hyperplane intersections
-    Gr   - ridges
-    GDn  - drop dimension n in 3-d and 4-d output
-
-Print options:
-    PAn  - keep n largest facets by area
-    Pdk:n - drop facet if normal[k] &lt;= n (default 0.0)
-    PDk:n - drop facet if normal[k] >= n
-    Pg   - print good facets (needs 'QGn' or 'QVn')
-    PFn  - keep facets whose area is at least n
-    PG   - print neighbors of good facets
-    PMn  - keep n facets with most merges
-    Po   - force output.  If error, output neighborhood of facet
-    Pp   - do not report precision problems
-
-    .    - list of all options
-    -    - one line descriptions of all options
-
-</pre>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149;<a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qdelau_f.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qdelau_f.htm
deleted file mode 100644
index c07fa335a5be15f9c24a964a3bf8c83fe98a878e..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qdelau_f.htm
+++ /dev/null
@@ -1,414 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>qdelaunay Qu -- furthest-site Delaunay triangulation</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<a name="TOP"><b>Up</b></a><b>:</b> 
-<a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a>qdelaunay Qu -- furthest-site Delaunay triangulation</h1>
-
-<p>The furthest-site Delaunay triangulation corresponds to the upper facets of the <a href="qdelaun.htm">Delaunay construction</a>.
-Its vertices are the
-extreme points of the input sites.
-It is the dual of the <a
-href="qvoron_f.htm">furthest-site Voronoi diagram</a>.
-
-<blockquote>
-<dl>
-    <dt><b>Example:</b> rbox 10 D2 | qdelaunay <a
-        href="qh-optq.htm#Qu">Qu</a> <a
-        href="qh-optq.htm#Qt">Qt</a> <a href="qh-opto.htm#s">s</a>
-        <a href="qh-opto.htm#i">i</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d, furthest-site Delaunay triangulation of 10 random
-        points. Triangulate the output.
-        Write a summary to the console and the regions to
-        'result'.</dd>
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox 10 D2 | qdelaunay <a
-        href="qh-optq.htm#Qu">Qu</a> <a
-        href="qh-optq.htm#QJn">QJ</a> <a href="qh-opto.htm#s">s</a>
-        <a href="qh-opto.htm#i">i</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d, furthest-site Delaunay triangulation of 10 random
-        points. Joggle the input to guarantee triangular output.
-        Write a summary to the console and the regions to
-        'result'.</dd>
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox r y c G1 D2 | qdelaunay <a
-        href="qh-optq.htm#Qu">Qu</a> <a href="qh-opto.htm#s">s</a>
-        <a href="qh-optf.htm#Fv">Fv</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d, furthest-site Delaunay triangulation of a triangle inside
-		a square.
-        Write a summary to the console and unoriented regions to 'result'.
-        Merge regions for cocircular input sites (e.g., the square).
-		The square is the only furthest-site
-        Delaunay region.</dd>
-</dl>
-</blockquote>
-
-<p>As with the Delaunay triangulation, Qhull computes the
-furthest-site Delaunay triangulation by lifting the input sites to a
-paraboloid. The lower facets correspond to the Delaunay
-triangulation while the upper facets correspond to the
-furthest-site triangulation. Neither triangulation includes
-&quot;vertical&quot; facets (i.e., facets whose last hyperplane
-coefficient is nearly zero). Vertical facets correspond to input
-sites that are coplanar to the convex hull of the input. An
-example is points on the boundary of a lattice.</p>
-
-<p>By default, qdelaunay merges cocircular and cospherical regions.
-For example, the furthest-site Delaunay triangulation of a square inside a diamond
-('rbox D2 c d G4 | qdelaunay Qu') consists of one region (the diamond).
-
-<p>If you use '<a href="qh-optq.htm#Qt">Qt</a>' (triangulated output), 
-all furthest-site Delaunay regions will be simplicial (e.g., triangles in 2-d).  
-Some regions may be
-degenerate and have zero area.
-
-<p>If you use '<a href="qh-optq.htm#QJn">QJ</a>' (joggled input), all furthest-site 
-Delaunay regions 
-will be simplicial (e.g., triangles in 2-d).  Joggled input
-is less accurate than triangulated output ('Qt').  See <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>The output for 3-d, furthest-site Delaunay triangulations may be confusing if the 
-input contains cospherical data. See the FAQ item
-<a href=qh-faq.htm#extra>Why
-are there extra points in a 4-d or higher convex hull?</a>
-Avoid these problems with triangulated output ('<a href="qh-optq.htm#Qt">Qt</a>') or
-joggled input ('<a href="qh-optq.htm#QJn">QJ</a>').
-</p>
-
-<p>The 'qdelaunay' program is equivalent to 
-'<a href=qhull.htm#outputs>qhull d</a> <a href=qh-optq.htm#Qbb>Qbb</a>' in 2-d to 3-d, and
-'<a href=qhull.htm#outputs>qhull d</a> <a href=qh-optq.htm#Qbb>Qbb</a> <a href=qh-optq.htm#Qx>Qx</a>' 
-in 4-d and higher.  It disables the following Qhull
-<a href=qh-quick.htm#options>options</a>: <i>d n v H U Qb QB Qc Qf Qg Qi
-Qm Qr QR Qv Qx TR E V FC Fi Fo Fp FV Q0,etc</i>.
-
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h3><a href="#TOP">»</a><a name="synopsis">furthest-site qdelaunay synopsis</a></h3>
-<blockquote>
-
-See <a href="qdelaun.htm#synopsis">qdelaunay synopsis</a>.  The same
-program is used for both constructions.  Use option '<a href="qh-optq.htm#Qu">Qu</a>'
-for furthest-site Delaunay triangulations.
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="input">furthest-site qdelaunay
-input</a></h3>
-
-<blockquote>
-<p>The input data on <tt>stdin</tt> consists of:</p>
-<ul>
-    <li>dimension 
-    <li>number of points</li>
-    <li>point coordinates</li>
-</ul>
-
-<p>Use I/O redirection (e.g., qdelaunay Qu &lt; data.txt), a pipe (e.g., rbox 10 | qdelaunay Qu),
-or the '<a href=qh-optt.htm#TI>TI</a>' option (e.g., qdelaunay Qu TI data.txt).  
-
-<p>For example, this is a square containing four random points.  
-Its furthest-site Delaunay 
-triangulation contains one square.
-<p>
-<blockquote>
-<tt>rbox c 4 D2 &gt; data</tt> 
-<blockquote><pre>
-2 RBOX c 4 D2
-8
--0.4999921736307369 -0.3684622117955817
-0.2556053225468894 -0.0413498678629751
-0.0327672376602583 -0.2810408135699488
--0.452955383763607 0.17886471718444
-  -0.5   -0.5
-  -0.5    0.5
-   0.5   -0.5
-   0.5    0.5
-</pre></blockquote>
-
-<p><tt>qdelaunay Qu i &lt; data</tt>
-<blockquote><pre>
-
-Furthest-site Delaunay triangulation by the convex hull of 8 points in 3-d:
-
-  Number of input sites: 8
-  Number of Delaunay regions: 1
-  Number of non-simplicial Delaunay regions: 1
-
-Statistics for: RBOX c 4 D2 | QDELAUNAY s Qu i
-
-  Number of points processed: 8
-  Number of hyperplanes created: 20
-  Number of facets in hull: 11
-  Number of distance tests for qhull: 34
-  Number of merged facets: 1
-  Number of distance tests for merging: 107
-  CPU seconds to compute hull (after input): 0.02
-
-1
-7 6 4 5
-</pre></blockquote>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="outputs">furthest-site qdelaunay
-outputs</a></h3>
-<blockquote>
-
-<p>These options control the output of furthest-site Delaunay triangulations:</p>
-<blockquote>
-
-<dl compact>
-    <dd><b>furthest-site Delaunay regions</b></dd>
-    <dt><a href="qh-opto.htm#i">i</a></dt>
-    <dd>list input sites for each furthest-site Delaunay region. The first line is the number of regions.  The
-	remaining lines list the input sites for each region.  The regions are
-		oriented.  In 3-d and
-        higher, report cospherical sites by adding extra points.  For the points-in-square example,
-	the square is the only furthest-site Delaunay region.</dd>
-    <dt><a href="qh-optf.htm#Fv">Fv</a></dt>
-    <dd>list input sites for each furthest-site Delaunay region.  The first line is the number of regions.  
-	Each remaining line starts with the number of input sites.  The regions
-	are unoriented.  For the points-in-square example,
-	the square is the only furthest-site Delaunay region.</dd>
-    <dt><a href="qh-optf.htm#Ft">Ft</a></dt>
-    <dd>print a triangulation of the furthest-site Delaunay regions in OFF format.  The first line
-	is the dimension.  The second line is the number of input sites and added points, 
-	followed by the number of simplices and the number of ridges.
-    The input coordinates are next, followed by the centrum coordinates.  There is
-	one centrum for each non-simplicial furthest-site Delaunay region.  Each remaining line starts
-	with dimension+1.  The 
-	simplices are oriented.
-	For the points-in-square example, the square has a centrum at the
-	origin.  It splits the square into four triangular regions.</dd>
-    <dt><a href="qh-optf.htm#Fn">Fn</a></dt>
-    <dd>list neighboring regions for each furthest-site Delaunay region.  The first line is the
-	number of regions.  Each remaining line starts with the number of 
-	neighboring regions.  Negative indices (e.g., <em>-1</em>) indicate regions
-	outside of the furthest-site Delaunay triangulation.
-	For the points-in-square example, the four neighboring regions 
-	are outside of the triangulation.  They belong to the regular
-	Delaunay triangulation.</dd>
-    <dt><a href="qh-optf.htm#FN">FN</a></dt>
-    <dd>list the furthest-site Delaunay regions for each input site.  The first line is the
-	total number of input sites.  Each remaining line starts with the number of 
-	furthest-site Delaunay regions.  Negative indices (e.g., <em>-1</em>) indicate regions
-	outside of the furthest-site Delaunay triangulation.
-	For the points-in-square example, the four random points belong to no region
-	while the square's vertices belong to region <em>0</em> and three
-	regions outside of the furthest-site Delaunay triangulation.</dd>
-    <dt><a href="qh-optf.htm#Fa">Fa</a></dt>
-    <dd>print area for each furthest-site Delaunay region. The first line is the number of regions.
-	The areas follow, one line per region.  For the points-in-square example, the
-	square has unit area. </dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Input sites</b></dd>
-    <dt><a href="qh-optf.htm#Fx">Fx</a></dt>
-    <dd>list extreme points of the input sites.  These points are vertices of the furthest-point
-	Delaunay triangulation.  They are on the
-	boundary of the convex hull.   The first line is the number of
-	extreme points.  Each point is listed, one per line.  The points-in-square example
-	has four extreme points.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="qh-optf.htm#FA">FA</a></dt>
-    <dd>compute total area for '<a href="qh-opto.htm#s">s</a>'
-        and '<a href="qh-optf.htm#FS">FS</a>'.  This is the
-		same as the area of the convex hull.</dd>
-    <dt><a href="qh-opto.htm#o">o</a></dt>
-    <dd>print upper facets of the corresponding convex hull (a
-        paraboloid)</dd>
-    <dt><a href="qh-opto.htm#m">m</a></dt>
-    <dd>Mathematica output for the upper facets of the paraboloid (2-d triangulations).</dd>
-    <dt><a href="qh-optf.htm#FM">FM</a></dt>
-    <dd>Maple output for the upper facets of the paraboloid (2-d triangulations).</dd>
-    <dt><a href="qh-optg.htm#G">G</a></dt>
-    <dd>Geomview output for the paraboloid (2-d or 3-d triangulations).</dd>
-    <dt><a href="qh-opto.htm#s">s</a></dt>
-    <dd>print summary for the furthest-site Delaunay triangulation. Use '<a
-        href="qh-optf.htm#Fs">Fs</a>' and '<a
-        href="qh-optf.htm#FS">FS</a>' for numeric data.</dd>
-</dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="controls">furthest-site qdelaunay
-controls</a></h3>
-<blockquote>
-
-<p>These options provide additional control:</p>
-<blockquote>
-
-<dl compact>
-   <dt><a href="qh-optq.htm#Qu">Qu</a></dt>
-    <dd>must be used for furthest-site Delaunay triangulation.</dd>
-    <dt><a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>triangulated output.  Qhull triangulates non-simplicial facets.  It may produce
-     degenerate facets of zero area.</dd>
-   <dt><a href="qh-optq.htm#QJn">QJ</a></dt>
-    <dd>joggle the input to avoid cospherical and coincident
-        sites.    It is less accurate than triangulated output ('Qt').</dd>
-    <dt><a href="qh-optq.htm#QVn">QVn</a></dt>
-    <dd>select facets adjacent to input site <em>n</em> (marked
-        'good').</dd>
-    <dt><a href="qh-optt.htm#Tv">Tv</a></dt>
-    <dd>verify result.</dd>
-    <dt><a href="qh-optt.htm#TO">TI file</a></dt>
-    <dd>input data from file.  The filename may not use spaces or quotes.</dd>
-    <dt><a href="qh-optt.htm#TO">TO file</a></dt>
-    <dd>output results to file.  Use single quotes if the filename
-	contains spaces (e.g., <tt>TO 'file with spaces.txt'</tt></dd>
-    <dt><a href="qh-optt.htm#TFn">TFn</a></dt>
-    <dd>report progress after constructing <em>n</em> facets</dd>
-    <dt><a href="qh-optp.htm#PDk">PDk:1</a></dt>
-    <dd>include upper and lower facets in the output.  Set <em>k</em>
-        to the last dimension (e.g., 'PD2:1' for 2-d inputs). </dd>
-    <dt><a href="qh-opto.htm#f">f</a></dt>
-    <dd>facet dump.  Print the data structure for each facet (i.e., furthest-site Delaunay region).</dd>
-</dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="graphics">furthest-site qdelaunay
-graphics</a></h3>
-<blockquote>
-
-See <a href="qdelaun.htm#graphics">Delaunay graphics</a>.  
-They are the same except for Mathematica and Maple output.
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="notes">furthest-site
-qdelaunay notes</a></h3>
-<blockquote>
-
-<p>The furthest-site Delaunay triangulation does not
-record coincident input sites.  Use <tt>qdelaunay</tt> instead.
-
-<p><tt>qdelaunay Qu</tt> does not work for purely cocircular
-or cospherical points (e.g., rbox c | qdelaunay Qu).  Instead,
-use <tt>qdelaunay Qz</tt> -- when all points are vertices of the convex
-hull of the input sites, the Delaunay triangulation is the same
-as the furthest-site Delaunay triangulation.
-
-<p>A non-simplicial, furthest-site Delaunay region indicates nearly cocircular or
-cospherical input sites. To avoid non-simplicial regions triangulate
-the output ('<a href="qh-optq.htm#Qt">Qt</a>') or joggle
-the input ('<a href="qh-optq.htm#QJn">QJ</a>').  Joggled input
-is less accurate than triangulated output.
-You may also triangulate
-non-simplicial regions with option '<a
-href="qh-optf.htm#Ft">Ft</a>'. It adds
-the centrum to non-simplicial regions. Alternatively, use an <a
-href="qh-impre.htm#exact">exact arithmetic code</a>.</p>
-
-<p>Furthest-site Delaunay triangulations do not include facets that are
-coplanar with the convex hull of the input sites.  A facet is
-coplanar if the last coefficient of its normal is
-nearly zero (see <a href="../src/user.h#ZEROdelaunay">qh_ZEROdelaunay</a>).
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="conventions">furthest-site qdelaunay conventions</a></h3>
-<blockquote>
-
-<p>The following terminology is used for furthest-site Delaunay
-triangulations in Qhull. The underlying structure is the upper
-facets of a convex hull in one higher dimension. See <a
-href="qconvex.htm#conventions">convex hull conventions</a>, <a
-href="qdelaun.htm#conventions">Delaunay conventions</a>,
-and <a href="index.htm#structure">Qhull's data structures</a></p>
-<blockquote>
-<ul>
-    <li><em>input site</em> - a point in the input (one dimension
-        lower than a point on the convex hull)</li>
-    <li><em>point</em> - <i>d+1</i> coordinates. The last
-        coordinate is the sum of the squares of the input site's
-        coordinates</li>
-    <li><em>vertex</em> - a point on the paraboloid. It
-        corresponds to a unique input site. </li>
-    <li><em>furthest-site Delaunay facet</em> - an upper facet of the
-        paraboloid. The last coefficient of its normal is
-		clearly positive.</li>
-    <li><em>furthest-site Delaunay region</em> - a furthest-site Delaunay 
-	    facet projected to the input sites</li>
-    <li><em>non-simplicial facet</em> - more than <em>d</em>
-        points are cocircular or cospherical</li>
-    <li><em>good facet</em> - a furthest-site Delaunay facet with optional
-        restrictions by '<a href="qh-optq.htm#QVn">QVn</a>', etc.</li>
-</ul>
-</blockquote>
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">furthest-site qdelaunay options</a></h3>
-<blockquote>
-
-See <a href="qdelaun.htm#options">qdelaunay options</a>.    The same
-program is used for both constructions.  Use option '<a href="qh-optq.htm#Qu">Qu</a>'
-for furthest-site Delaunay triangulations.
-
-</blockquote>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qdelaun.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qdelaun.htm
deleted file mode 100644
index 807554af7def557e06b395ec5b7b75f0128b141e..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qdelaun.htm
+++ /dev/null
@@ -1,624 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>qdelaunay -- Delaunay triangulation</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<a name="TOP"><b>Up</b></a><b>:</b> 
-<a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a>qdelaunay -- Delaunay triangulation</h1>
-
-<p>The Delaunay triangulation is the triangulation with empty
-circumspheres. It has many useful properties and applications.
-See the survey article by Aurenhammer [<a
-href="index.htm#aure91">'91</a>] and the detailed introduction
-by O'Rourke [<a href="index.htm#orou94">'94</a>]. </p>
-
-<blockquote>
-<dl>
-    <dt><b>Example:</b> rbox r y c G0.1 D2 | qdelaunay <a href="qh-opto.htm#s">s</a>
-        <a href="qh-optf.htm#Fv">Fv</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d Delaunay triangulation of a triangle and
-        a small square.
-        Write a summary to the console and unoriented regions to 'result'.
-        Merge regions for cocircular input sites (i.e., the
-        square).</dd>
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox r y c G0.1 D2 | qdelaunay <a href="qh-opto.htm#s">s</a>
-        <a href="qh-optf.htm#Fv">Fv</a> <a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>Compute the 2-d Delaunay triangulation of a triangle and
-        a small square. Write a summary and unoriented 
-	regions to the console.  Produce triangulated output.</dd>
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox 10 D2 | qdelaunay <a
-        href="qh-optq.htm#QJn">QJ</a> <a href="qh-opto.htm#s">s</a>
-        <a href="qh-opto.htm#i">i</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d Delaunay triangulation of 10 random
-        points. Joggle the input to guarantee triangular output.
-        Write a summary to the console and the regions to
-        'result'.</dd>
-</dl>
-</blockquote>
-
-<p>Qhull computes the Delaunay triangulation by computing a
-convex hull. It lifts the input sites to a paraboloid by adding
-the sum of the squares of the coordinates. It scales the height
-of the paraboloid to improve numeric precision ('<a href=qh-optq.htm#Qbb>Qbb</a>').
-It computes the convex
-hull of the lifted sites, and projects the lower convex hull to
-the input. 
-
-<p>Each region of the Delaunay triangulation
-corresponds to a facet of the lower half of the convex hull.
-Facets of the upper half of the convex hull correspond to the <a
-href="qdelau_f.htm">furthest-site Delaunay triangulation</a>.
-See the examples, <a href="qh-eg.htm#delaunay">Delaunay and
-Voronoi diagrams</a>.</p>
-
-<p>See <a href="http://www.qhull.org/html/qh-faq.htm#TOC">Qhull FAQ</a> - Delaunay and
-Voronoi diagram questions.</p>
-
-<p>By default, qdelaunay merges cocircular and cospherical regions.
-For example, the Delaunay triangulation of a square inside a diamond
-('rbox D2 c d G4 | qdelaunay') contains one region for the square.
-It identifies coincident points.
-
-<p>If you use '<a href="qh-optq.htm#Qt">Qt</a>' (triangulated output), 
-all Delaunay regions will be simplicial (e.g., triangles in 2-d).  
-Some regions may be
-degenerate and have zero area.  Triangulated output identifies coincident
-points.
-
-<p>If you use '<a href="qh-optq.htm#QJn">QJ</a>' (joggled input), all Delaunay regions 
-will be simplicial (e.g., triangles in 2-d).  Coincident points will 
-create small regions since the points are joggled apart.  Joggled input
-is less accurate than triangulated output ('Qt').  See <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>The output for 3-d Delaunay triangulations may be confusing if the 
-input contains cospherical data.  See the FAQ item
-<a href=qh-faq.htm#extra>Why
-are there extra points in a 4-d or higher convex hull?</a> 
-Avoid these problems with triangulated output ('<a href="qh-optq.htm#Qt">Qt</a>') or
-joggled input ('<a href="qh-optq.htm#QJn">QJ</a>').
-</p>
-
-<p>The 'qdelaunay' program is equivalent to 
-'<a href=qhull.htm#outputs>qhull d</a> <a href=qh-optq.htm#Qbb>Qbb</a>' in 2-d to 3-d, and
-'<a href=qhull.htm#outputs>qhull d</a> <a href=qh-optq.htm#Qbb>Qbb</a> <a href=qh-optq.htm#Qx>Qx</a>' 
-in 4-d and higher.  It disables the following Qhull
-<a href=qh-quick.htm#options>options</a>: <i>d n v H U Qb QB Qc Qf Qg Qi
-Qm Qr QR Qv Qx TR E V FC Fi Fo Fp Ft FV Q0,etc</i>.
-
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h3><a href="#TOP">»</a><a name="synopsis">qdelaunay synopsis</a></h3>
-
-<pre>
-qdelaunay- compute the Delaunay triangulation.
-    input (stdin): dimension, number of points, point coordinates
-    comments start with a non-numeric character
-
-options (qdelaun.htm):
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Qu   - furthest-site Delaunay triangulation
-    Tv   - verify result: structure, convexity, and in-circle test
-    .    - concise list of all options
-    -    - one-line description of all options
-
-output options (subset):
-    s    - summary of results (default)
-    i    - vertices incident to each Delaunay region
-    Fx   - extreme points (vertices of the convex hull)
-    o    - OFF format (shows the points lifted to a paraboloid)
-    G    - Geomview output (2-d and 3-d points lifted to a paraboloid)
-    m    - Mathematica output (2-d inputs lifted to a paraboloid)
-    QVn  - print Delaunay regions that include point n, -n if not
-    TO file- output results to file, may be enclosed in single quotes
-
-examples:
-    rbox c P0 D2 | qdelaunay s o          rbox c P0 D2 | qdelaunay i
-    rbox c P0 D3 | qdelaunay Fv Qt        rbox c P0 D2 | qdelaunay s Qu Fv
-    rbox c G1 d D2 | qdelaunay s i        rbox c G1 d D2 | qdelaunay s i Qt
-    rbox M3,4 z 100 D2 | qdelaunay s      rbox M3,4 z 100 D2 | qdelaunay s Qt
-</pre>
-
-
-<h3><a href="#TOP">»</a><a name="input">qdelaunay
-input</a></h3>
-
-<blockquote>
-<p>The input data on <tt>stdin</tt> consists of:</p>
-<ul>
-    <li>dimension 
-    <li>number of points</li>
-    <li>point coordinates</li>
-</ul>
-
-<p>Use I/O redirection (e.g., qdelaunay &lt; data.txt), a pipe (e.g., rbox 10 | qdelaunay),
-or the '<a href=qh-optt.htm#TI>TI</a>' option (e.g., qdelaunay TI data.txt).  
-
-<p>For example, this is four cocircular points inside a square.  Its Delaunay 
-triangulation contains 8 triangles and one four-sided
-figure.
-<p>
-<blockquote>
-<tt>rbox s 4 W0 c G1 D2 &gt; data</tt> 
-<blockquote><pre>
-2 RBOX s 4 W0 c D2
-8
--0.4941988586954018 -0.07594397977563715
--0.06448037284989526 0.4958248496365813
-0.4911154367094632 0.09383830681375946
--0.348353580869097 -0.3586778257652367
-    -1     -1
-    -1      1
-     1     -1
-     1      1
-</pre></blockquote>
-
-<p><tt>qdelaunay s i &lt; data</tt>
-<blockquote><pre>
-
-Delaunay triangulation by the convex hull of 8 points in 3-d
-
-  Number of input sites: 8
-  Number of Delaunay regions: 9
-  Number of non-simplicial Delaunay regions: 1
-
-Statistics for: RBOX s 4 W0 c D2 | QDELAUNAY s i
-
-  Number of points processed: 8
-  Number of hyperplanes created: 18
-  Number of facets in hull: 10
-  Number of distance tests for qhull: 33
-  Number of merged facets: 2
-  Number of distance tests for merging: 102
-  CPU seconds to compute hull (after input): 0.028
-
-9
-1 7 5
-6 3 4
-2 3 6
-7 2 6
-2 7 1
-0 5 4
-3 0 4
-0 1 5
-1 0 3 2
-</pre></blockquote>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="outputs">qdelaunay
-outputs</a></h3>
-<blockquote>
-
-<p>These options control the output of Delaunay triangulations:</p>
-<blockquote>
-
-<dl compact>
-    <dd><b>Delaunay regions</b></dd>
-    <dt><a href="qh-opto.htm#i">i</a></dt>
-    <dd>list input sites for each Delaunay region. The first line is the number of regions.  The
-	remaining lines list the input sites for each region.  The regions are
-		oriented.  In 3-d and
-        higher, report cospherical sites by adding extra points.  Use triangulated
-	output ('<a href="qh-optq.htm#Qt">Qt</a>') to avoid non-simpicial regions.  For the circle-in-square example,
-	eight Delaunay regions are triangular and the ninth has four input sites.</dd>
-    <dt><a href="qh-optf.htm#Fv">Fv</a></dt>
-    <dd>list input sites for each Delaunay region.  The first line is the number of regions.  
-	Each remaining line starts with the number of input sites.  The regions
-	are unoriented.  For the circle-in-square example,
-	eight Delaunay regions are triangular and the ninth has four input sites.</dd>
-    <dt><a href="qh-optf.htm#Fn">Fn</a></dt>
-    <dd>list neighboring regions for each Delaunay region.  The first line is the
-	number of regions.  Each remaining line starts with the number of 
-	neighboring regions.  Negative indices (e.g., <em>-1</em>) indicate regions
-	outside of the Delaunay triangulation.
-	For the circle-in-square example, the four regions on the square are neighbors to
-	the region-at-infinity.</dd>
-    <dt><a href="qh-optf.htm#FN">FN</a></dt>
-    <dd>list the Delaunay regions for each input site.  The first line is the
-	total number of input sites.  Each remaining line starts with the number of 
-	Delaunay regions.  Negative indices (e.g., <em>-1</em>) indicate regions
-	outside of the Delaunay triangulation.
-	For the circle-in-square example, each point on the circle belongs to four 
-	Delaunay regions.  Use '<a href="qh-optq.htm#Qc">Qc</a> FN'
-	to include coincident input sites and deleted vertices. </dd>
-    <dt><a href="qh-optf.htm#Fa">Fa</a></dt>
-    <dd>print area for each Delaunay region. The first line is the number of regions.
-	The areas follow, one line per region.  For the circle-in-square example, the
-	cocircular region has area 0.4. </dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Input sites</b></dd>
-    <dt><a href="qh-optf.htm#Fc">Fc</a></dt>
-    <dd>list coincident input sites for each Delaunay region.
-	The first line is the number of regions.  The remaining lines start with 
-	the number of coincident sites and deleted vertices.  Deleted vertices
-	indicate highly degenerate input (see'<A href="qh-optf.htm#Fs">Fs</a>').  
-	A coincident site is assigned to one Delaunay
-	region.  Do not use '<a href="qh-optq.htm#QJn">QJ</a>' with 'Fc'; the joggle will separate
-	coincident sites.</dd>
-    <dt><a href="qh-optf.htm#FP">FP</a></dt>
-    <dd>print coincident input sites with distance to
-        nearest site (i.e., vertex). The first line is the 
-	number of coincident sites.  Each remaining line starts with the point ID of
-	an input site, followed by the point ID of a coincident point, its region, and distance.
-        Includes deleted vertices which
-	indicate highly degenerate input (see'<A href="qh-optf.htm#Fs">Fs</a>').  
-        Do not use '<a href="qh-optq.htm#QJn">QJ</a>' with 'FP'; the joggle will separate
-	coincident sites.</dd>
-    <dt><a href="qh-optf.htm#Fx">Fx</a></dt>
-    <dd>list extreme points of the input sites.  These points are on the
-	boundary of the convex hull.   The first line is the number of
-	extreme points.  Each point is listed, one per line.  The circle-in-square example
-	has four extreme points.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="qh-optf.htm#FA">FA</a></dt>
-    <dd>compute total area for '<a href="qh-opto.htm#s">s</a>'
-        and '<a href="qh-optf.htm#FS">FS</a>'</dd>
-    <dt><a href="qh-opto.htm#o">o</a></dt>
-    <dd>print lower facets of the corresponding convex hull (a
-        paraboloid)</dd>
-    <dt><a href="qh-opto.htm#m">m</a></dt>
-    <dd>Mathematica output for the lower facets of the paraboloid (2-d triangulations).</dd>
-    <dt><a href="qh-optf.htm#FM">FM</a></dt>
-    <dd>Maple output for the lower facets of the paraboloid (2-d triangulations).</dd>
-    <dt><a href="qh-optg.htm#G">G</a></dt>
-    <dd>Geomview output for the paraboloid (2-d or 3-d triangulations).</dd>
-    <dt><a href="qh-opto.htm#s">s</a></dt>
-    <dd>print summary for the Delaunay triangulation. Use '<a
-        href="qh-optf.htm#Fs">Fs</a>' and '<a
-        href="qh-optf.htm#FS">FS</a>' for numeric data.</dd>
-</dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="controls">qdelaunay
-controls</a></h3>
-<blockquote>
-
-<p>These options provide additional control:</p>
-<blockquote>
-
-<dl compact>
-   <dt><a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>triangulated output.  Qhull triangulates non-simplicial facets.  It may produce
-degenerate facets of zero area.</dd>
-   <dt><a href="qh-optq.htm#QJn">QJ</a></dt>
-    <dd>joggle the input to avoid cospherical and coincident
-        sites.    It is less accurate than triangulated output ('Qt').</dd>
-   <dt><a href="qh-optq.htm#Qu">Qu</a></dt>
-    <dd>compute the <a href="qdelau_f.htm">furthest-site Delaunay triangulation</a>.</dd>
-     <dt><a href="qh-optq.htm#Qz">Qz</a></dt>
-    <dd>add a point above the paraboloid to reduce precision
-        errors. Use it for nearly cocircular/cospherical input
-        (e.g., 'rbox c | qdelaunay Qz'). The point is printed for
-        options '<a href="qh-optf.htm#Ft">Ft</a>' and '<a
-        href="qh-opto.htm#o">o</a>'.</dd>
-    <dt><a href="qh-optq.htm#QVn">QVn</a></dt>
-    <dd>select facets adjacent to input site <em>n</em> (marked
-        'good').</dd>
-    <dt><a href="qh-optt.htm#Tv">Tv</a></dt>
-    <dd>verify result.</dd>
-    <dt><a href="qh-optt.htm#TO">TI file</a></dt>
-    <dd>input data from file.  The filename may not use spaces or quotes.</dd>
-    <dt><a href="qh-optt.htm#TO">TO file</a></dt>
-    <dd>output results to file.  Use single quotes if the filename
-	contains spaces (e.g., <tt>TO 'file with spaces.txt'</tt></dd>
-    <dt><a href="qh-optt.htm#TFn">TFn</a></dt>
-    <dd>report progress after constructing <em>n</em> facets</dd>
-    <dt><a href="qh-optp.htm#PDk">PDk:1</a></dt>
-    <dd>include upper and lower facets in the output.  Set <em>k</em>
-        to the last dimension (e.g., 'PD2:1' for 2-d inputs). </dd>
-    <dt><a href="qh-opto.htm#f">f</a></dt>
-    <dd>facet dump.  Print the data structure for each facet (i.e., Delaunay region).</dd>
-</dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="graphics">qdelaunay
-graphics</a></h3>
-<blockquote>
-
-<p>For 2-d and 3-d Delaunay triangulations, Geomview ('qdelaunay <a
-href="qh-optg.htm#G">G</a>') displays the corresponding convex
-hull (a paraboloid). </p>
-
-<p>To view a 2-d Delaunay triangulation, use 'qdelaunay <a
-href="qh-optg.htm#GDn">GrD2</a>' to drop the last dimension. This
-is the same as viewing the hull without perspective (see
-Geomview's 'cameras' menu). </p>
-
-<p>To view a 3-d Delaunay triangulation, use 'qdelaunay <a
-href="qh-optg.htm#GDn">GrD3</a>' to drop the last dimension. You
-may see extra edges. These are interior edges that Geomview moves
-towards the viewer (see 'lines closer' in Geomview's camera
-options). Use option '<a href="qh-optg.htm#Gt">Gt</a>' to make
-the outer ridges transparent in 3-d. See <a
-href="qh-eg.htm#delaunay">Delaunay and Voronoi examples</a>.</p>
-
-<p>For 2-d Delaunay triangulations, Mathematica ('<a
-href="qh-opto.htm#m">m</a>') and Maple ('<a
-href="qh-optf.htm#FM">FM</a>') output displays the lower facets of the corresponding convex
-hull (a paraboloid). </p>
-
-<p>For 2-d, furthest-site Delaunay triangulations, Maple and Mathematica output ('<a
-href="qh-optq.htm#Qu">Qu</a> <a
-href="qh-opto.htm#m">m</a>') displays the upper facets of the corresponding convex
-hull (a paraboloid). </p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="notes">qdelaunay
-notes</a></h3>
-<blockquote>
-
-<p>You can simplify the Delaunay triangulation by enclosing the input
-sites in a large square or cube.  This is particularly recommended
-for cocircular or cospherical input data.
-
-<p>A non-simplicial Delaunay region indicates nearly cocircular or
-cospherical input sites. To avoid non-simplicial regions either triangulate
-the output ('<a href="qh-optq.htm#Qt">Qt</a>') or joggle
-the input ('<a href="qh-optq.htm#QJn">QJ</a>').  Triangulated output 
-is more accurate than joggled input.  Alternatively, use an <a
-href="qh-impre.htm#exact">exact arithmetic code</a>.</p>
-
-<p>Delaunay triangulations do not include facets that are
-coplanar with the convex hull of the input sites.  A facet is
-coplanar if the last coefficient of its normal is
-nearly zero (see <a href="../src/user.h#ZEROdelaunay">qh_ZEROdelaunay</a>).
-
-<p>See <a href=qh-impre.htm#delaunay>Imprecision issues :: Delaunay triangulations</a>
-for a discussion of precision issues.  Deleted vertices indicate
-highly degenerate input.  They are listed in the summary output and
-option '<a href="qh-optf.htm#Fs">Fs</a>'.</p>
-
-<p>To compute the Delaunay triangulation of points on a sphere,
-compute their convex hull. If the sphere is the unit sphere at
-the origin, the facet normals are the Voronoi vertices of the
-input. The points may be restricted to a hemisphere. [S. Fortune]
-</p>
-
-<p>The 3-d Delaunay triangulation of regular points on a half 
-spiral (e.g., 'rbox 100 l | qdelaunay') has quadratic size, while the Delaunay triangulation 
-of random 3-d points is 
-approximately linear for reasonably sized point sets.
-
-<p>With the <a href="qh-in.htm#library">Qhull library</a>, you
-can use <tt>qh_findbestfacet</tt> in <tt>poly2.c</tt> to locate the facet
-that contains a point. You should first lift the point to the
-paraboloid (i.e., the last coordinate is the sum of the squares
-of the point's coordinates -- <tt>qh_setdelaunay</tt>). Do not use options
-'<a href="qh-optq.htm#Qbb">Qbb</a>', '<a href="qh-optq.htm#QbB">QbB</a>',
-'<a href="qh-optq.htm#Qbk">Qbk:n</a>', or '<a
-href="qh-optq.htm#QBk">QBk:n</a>' since these scale the last
-coordinate. </p>
-
-<p>If a point is interior to the convex hull of the input set, it
-is interior to the adjacent vertices of the Delaunay
-triangulation. This is demonstrated by the following pipe for
-point 0:
-
-<pre>
-    qdelaunay &lt;data s FQ QV0 p | qconvex s Qb3:0B3:0 p
-</pre>
-
-<p>The first call to qdelaunay returns the neighboring points of
-point 0 in the Delaunay triangulation. The second call to qconvex
-returns the vertices of the convex hull of these points (after
-dropping the lifted coordinate). If point 0 is interior to the
-original point set, it is interior to the reduced point set. </p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="conventions">qdelaunay conventions</a></h3>
-<blockquote>
-
-<p>The following terminology is used for Delaunay triangulations
-in Qhull for dimension <i>d</i>. The underlying structure is the
-lower facets of a convex hull in dimension <i>d+1</i>. For
-further information, see <a href="index.htm#structure">data
-structures</a> and <a href="qconvex.htm#conventions">convex hull
-conventions</a>.</p>
-<blockquote>
-<ul>
-    <li><em>input site</em> - a point in the input (one dimension
-        lower than a point on the convex hull)</li>
-    <li><em>point</em> - a point has <i>d+1</i> coordinates. The
-        last coordinate is the sum of the squares of the input
-        site's coordinates</li>
-    <li><em>coplanar point</em> - a <em>coincident</em>
-        input site or a deleted vertex.  Deleted vertices
-	indicate highly degenerate input.</li>
-    <li><em>vertex</em> - a point on the paraboloid. It
-        corresponds to a unique input site. </li>
-    <li><em>point-at-infinity</em> - a point added above the
-        paraboloid by option '<a href="qh-optq.htm#Qz">Qz</a>'</li>
-    <li><em>lower facet</em> - a facet corresponding to a
-        Delaunay region. The last coefficient of its normal is
-        clearly negative.</li>
-    <li><em>upper facet</em> - a facet corresponding to a
-        furthest-site Delaunay region. The last coefficient of
-        its normal is clearly positive. </li>
-    <li><em>Delaunay region</em> - a
-        lower facet projected to the input sites</li>
-    <li><em>upper Delaunay region</em> - an upper facet projected
-        to the input sites</li>
-    <li><em>non-simplicial facet</em> - more than <em>d</em>
-        input sites are cocircular or cospherical</li>
-    <li><em>good facet</em> - a Delaunay region with optional
-        restrictions by '<a href="qh-optq.htm#QVn">QVn</a>', etc.</li>
-</ul>
-</blockquote>
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">qdelaunay options</a></h3>
-
-<pre>
-qdelaunay- compute the Delaunay triangulation
-    http://www.qhull.org 
-
-input (stdin):
-    first lines: dimension and number of points (or vice-versa).
-    other lines: point coordinates, best if one point per line
-    comments:    start with a non-numeric character
-
-options:
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Qu   - compute furthest-site Delaunay triangulation
-
-Qhull control options:
-    QJn  - randomly joggle input in range [-n,n]
-    Qs   - search all points for the initial simplex
-    Qz   - add point-at-infinity to Delaunay triangulation
-    QGn  - print Delaunay region if visible from point n, -n if not
-    QVn  - print Delaunay regions that include point n, -n if not
-
-Trace options:
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events
-    Tc   - check frequently during execution
-    Ts   - print statistics
-    Tv   - verify result: structure, convexity, and in-circle test
-    Tz   - send all output to stdout
-    TFn  - report summary when n or more facets created
-    TI file - input data from file, no spaces or single quotes
-    TO file - output results to file, may be enclosed in single quotes
-    TPn  - turn on tracing when point n added to hull
-     TMn - turn on tracing at merge n
-     TWn - trace merge facets when width > n
-    TVn  - stop qhull after adding point n, -n for before (see TCn)
-     TCn - stop qhull after building cone for point n (see TVn)
-
-Precision options:
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]
-    Wn   - min facet width for outside point (before roundoff)
-
-Output formats (may be combined; if none, produces a summary to stdout):
-    f    - facet dump
-    G    - Geomview output (see below)
-    i    - vertices incident to each Delaunay region
-    m    - Mathematica output (2-d only, lifted to a paraboloid)
-    o    - OFF format (dim, points, and facets as a paraboloid)
-    p    - point coordinates (lifted to a paraboloid)
-    s    - summary (stderr)
-
-More formats:
-    Fa   - area for each Delaunay region
-    FA   - compute total area for option 's'
-    Fc   - count plus coincident points for each Delaunay region
-    Fd   - use cdd format for input (homogeneous with offset first)
-    FD   - use cdd format for numeric output (offset first)
-    FF   - facet dump without ridges
-    FI   - ID of each Delaunay region
-    Fm   - merge count for each Delaunay region (511 max)
-    FM   - Maple output (2-d only, lifted to a paraboloid)
-    Fn   - count plus neighboring region for each Delaunay region
-    FN   - count plus neighboring region for each point
-    FO   - options and precision constants
-    FP   - nearest point and distance for each coincident point
-    FQ   - command used for qdelaunay
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,
-                    for output: #vertices, #Delaunay regions,
-                                #coincident points, #non-simplicial regions
-                    #real (2), max outer plane, min vertex
-    FS   - sizes:   #int (0)
-                    #real(2) tot area, 0
-    Fv   - count plus vertices for each Delaunay region
-    Fx   - extreme points of Delaunay triangulation (on convex hull)
-
-Geomview options (2-d and 3-d)
-    Ga   - all points as dots
-     Gp  -  coplanar points and vertices as radii
-     Gv  -  vertices as spheres
-    Gi   - inner planes only
-     Gn  -  no planes
-     Go  -  outer planes only
-    Gc	   - centrums
-    Gh   - hyperplane intersections
-    Gr   - ridges
-    GDn  - drop dimension n in 3-d and 4-d output
-    Gt   - transparent outer ridges to view 3-d Delaunay
-
-Print options:
-    PAn  - keep n largest Delaunay regions by area
-    Pdk:n - drop facet if normal[k] &lt;= n (default 0.0)
-    PDk:n - drop facet if normal[k] >= n
-    Pg   - print good Delaunay regions (needs 'QGn' or 'QVn')
-    PFn  - keep Delaunay regions whose area is at least n
-    PG   - print neighbors of good regions (needs 'QGn' or 'QVn')
-    PMn  - keep n Delaunay regions with most merges
-    Po   - force output.  If error, output neighborhood of facet
-    Pp   - do not report precision problems
-
-    .    - list of all options
-    -    - one line descriptions of all options
-</pre>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--4d.gif b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--4d.gif
deleted file mode 100644
index 08be18c8a5a1c89f07da6abb451283cbf176d5b4..0000000000000000000000000000000000000000
Binary files a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--4d.gif and /dev/null differ
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--cone.gif b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--cone.gif
deleted file mode 100644
index 78470ee8f020a5a669645452aada93bc50918cca..0000000000000000000000000000000000000000
Binary files a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--cone.gif and /dev/null differ
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--dt.gif b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--dt.gif
deleted file mode 100644
index b6d4e26727ce648be6ed6d4c8e5a49a367064f20..0000000000000000000000000000000000000000
Binary files a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--dt.gif and /dev/null differ
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--geom.gif b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--geom.gif
deleted file mode 100644
index 9c70b54991a4574015671ec0e0b29102c5346737..0000000000000000000000000000000000000000
Binary files a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--geom.gif and /dev/null differ
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--half.gif b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--half.gif
deleted file mode 100644
index 80a4d0883b5e139a93fe5df8bcdcdd4f94d63137..0000000000000000000000000000000000000000
Binary files a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--half.gif and /dev/null differ
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--rand.gif b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--rand.gif
deleted file mode 100644
index 4d4e4daee8cb9f758248405028b0f87d8006931d..0000000000000000000000000000000000000000
Binary files a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh--rand.gif and /dev/null differ
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-eg.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-eg.htm
deleted file mode 100644
index bec9dda74de64a63767fe59eb5a6c20268b8b543..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-eg.htm
+++ /dev/null
@@ -1,691 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Examples of Qhull</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a href="http://www.qhull.org">Home
-page</a> for Qhull <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To: </b><a href="#TOC">Qhull examples: Table of Contents</a> (please wait
-while loading)<br>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/half.html"><img
-src="qh--half.gif" alt="[halfspace]" align="middle" width="100"
-height="100"></a> Examples of Qhull</h1>
-
-<p>This section of the Qhull manual will introduce you to Qhull
-and its options. Each example is a file for viewing with <a
-href="index.htm#geomview">Geomview</a>.  You will need to
-use a Unix computer with a copy of Geomview.
-<p>
-If you are not running Unix, you can view <a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/welcome.html">pictures</a> 
-for some of the examples.  To understand Qhull without Geomview, try the
-examples in <a href="qh-quick.htm#programs">Programs</a> and
-<a href="qh-quick.htm#programs">Programs/input</a>.  You can also try small
-examples that you compute by hand.  Use <a href="rbox.htm">rbox</a>
-to generate examples.
-<p>
-To generate the Geomview examples, execute the shell script <tt>eg/q_eg</tt>.
-It uses <tt>rbox</tt>.  The shell script <tt>eg/q_egtest</tt> generates
-test examples, and <tt>eg/q_test</tt> exercises the code. If you
-find yourself viewing the inside of a 3-d example, use Geomview's
-normalization option on the 'obscure' menu.</p>
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h2><a href="#TOP">»</a><a name="TOC">Qhull examples: Table of
-Contents </a></h2>
-
-<ul>
-    <li><a href="#2d">2-d and 3-d examples</a></li>
-    <li><a href="#how">How Qhull adds a point</a></li>
-    <li><a href="#joggle">Triangulated output or joggled input</a></li>
-    <li><a href="#delaunay">Delaunay and Voronoi diagrams</a></li>
-    <li><a href="#merge">Facet merging for imprecision</a></li>
-    <li><a href="#4d">4-d objects</a></li>
-    <li><a href="#half">Halfspace intersections</a></li>
-</ul>
-
-<hr>
-<ul>
-    <li><a href="#TOC">»</a><a name="2d">2-d and 3-d examples</a><ul>
-            <li><a href="#01">eg.01.cube</a></li>
-            <li><a href="#02">eg.02.diamond.cube</a></li>
-            <li><a href="#03">eg.03.sphere</a></li>
-            <li><a href="#04">eg.04.circle</a></li>
-            <li><a href="#05">eg.05.spiral</a></li>
-            <li><a href="#06">eg.06.merge.square</a></li>
-            <li><a href="#07">eg.07.box</a></li>
-            <li><a href="#08a">eg.08a.cube.sphere</a></li>
-            <li><a href="#08b">eg.08b.diamond.sphere</a></li>
-            <li><a href="#09">eg.09.lens</a></li>
-        </ul>
-    </li>
-    <li><a href="#TOC">»</a><a name="how">How Qhull adds a point</a><ul>
-            <li><a href="#10a">eg.10a.sphere.visible</a></li>
-            <li><a href="#10b">eg.10b.sphere.beyond</a></li>
-            <li><a href="#10c">eg.10c.sphere.horizon</a></li>
-            <li><a href="#10d">eg.10d.sphere.cone</a></li>
-            <li><a href="#10e">eg.10e.sphere.new</a></li>
-            <li><a href="#14">eg.14.sphere.corner</a></li>
-        </ul>
-    </li>
-    <li><a href="#TOC">»</a> <a name="joggle">Triangulated output or joggled input</a>
-    	<ul>
-            <li><a href="#15a">eg.15a.surface</a></li>
-            <li><a href="#15b">eg.15b.triangle</a></li>
-            <li><a href="#15c">eg.15c.joggle</a></li>
-        </ul>
-    <li><a href="#TOC">»</a><a name="delaunay"> Delaunay and
-        Voronoi diagrams</a><ul>
-            <li><a href="#17a">eg.17a.delaunay.2</a></li>
-            <li><a href="#17b">eg.17b.delaunay.2i</a></li>
-            <li><a href="#17c">eg.17c.delaunay.2-3</a></li>
-            <li><a href="#17d">eg.17d.voronoi.2</a></li>
-            <li><a href="#17e">eg.17e.voronoi.2i</a></li>
-            <li><a href="#17f">eg.17f.delaunay.3</a></li>
-            <li><a href="#18a">eg.18a.furthest.2-3</a></li>
-            <li><a href="#18b">eg.18b.furthest-up.2-3</a></li>
-            <li><a href="#18c">eg.18c.furthest.2</a></li>
-            <li><a href="#19">eg.19.voronoi.region.3</a></li>
-        </ul>
-    </li>
-    <li><a href="#TOC">»</a><a name="merge">Facet merging for
-        imprecision </a><ul>
-            <li><a href="#20">eg.20.cone</a></li>
-            <li><a href="#21a">eg.21a.roundoff.errors</a></li>
-            <li><a href="#21b">eg.21b.roundoff.fixed</a></li>
-            <li><a href="#22a">eg.22a.merge.sphere.01</a></li>
-            <li><a href="#22b">eg.22b.merge.sphere.-01</a></li>
-            <li><a href="#22c">eg.22c.merge.sphere.05</a></li>
-            <li><a href="#22d">eg.22d.merge.sphere.-05</a></li>
-            <li><a href="#23">eg.23.merge.cube</a></li>
-        </ul>
-    </li>
-    <li><a href="#TOC">»</a><a name="4d">4-d objects</a><ul>
-            <li><a href="#24">eg.24.merge.cube.4d-in-3d</a></li>
-            <li><a href="#30">eg.30.4d.merge.cube</a></li>
-            <li><a href="#31">eg.31.4d.delaunay</a></li>
-            <li><a href="#32">eg.32.4d.octant</a></li>
-        </ul>
-    </li>
-    <li><a href="#TOC">»</a><a name="half">Halfspace
-        intersections</a><ul>
-            <li><a href="#33a">eg.33a.cone</a></li>
-            <li><a href="#33b">eg.33b.cone.dual</a></li>
-            <li><a href="#33c">eg.33c.cone.halfspace</a></li>
-        </ul>
-    </li>
-</ul>
-
-<hr>
-
-<h2><a href="#TOC">»</a>2-d and 3-d examples</h2>
-
-<h3><a href="#2d">»</a><a name="01">rbox c D3 | qconvex G
-&gt;eg.01.cube </a></h3>
-
-<p>The first example is a cube in 3-d. The color of each facet
-indicates its normal. For example, normal [0,0,1] along the Z
-axis is (r=0.5, g=0.5, b=1.0). With the 'Dn' option in <tt>rbox</tt>,
-you can generate hypercubes in any dimension. Above 7-d the
-number of intermediate facets grows rapidly. Use '<a
-href="qh-optt.htm#TFn">TFn</a>' to track qconvex's progress. Note
-that each facet is a square that qconvex merged from coplanar
-triangles.</p>
-
-<h3><a href="#2d">»</a><a name="02">rbox c d G3.0 | qconvex G
-&gt;eg.02.diamond.cube </a></h3>
-
-<p>The second example is a cube plus a diamond ('d') scaled by <tt>rbox</tt>'s
-'G' option. In higher dimensions, diamonds are much simpler than
-hypercubes. </p>
-
-<h3><a href="#2d">»</a><a name="03">rbox s 100 D3 | qconvex G
-&gt;eg.03.sphere </a></h3>
-
-<p>The <tt>rbox s</tt> option generates random points and
-projects them to the d-sphere. All points should be on the convex
-hull. Notice that random points look more clustered than you
-might expect. You can get a smoother distribution by merging
-facets and printing the vertices, e.g.,<i> rbox 1000 s | qconvex
-A-0.95 p | qconvex G &gt;eg.99</i>.</p>
-
-<h3><a href="#2d">»</a><a name="04">rbox s 100 D2 | qconvex G
-&gt;eg.04.circle </a></h3>
-
-<p>In 2-d, there are many ways to generate a convex hull. One of
-the earliest algorithms, and one of the fastest, is the 2-d
-Quickhull algorithm [c.f., Preparata &amp; Shamos <a
-href="index.htm#pre-sha85">'85</a>]. It was the model for
-Qhull.</p>
-
-<h3><a href="#2d">»</a><a name="05">rbox 10 l | qconvex G
-&gt;eg.05.spiral </a></h3>
-
-<p>One rotation of a spiral.</p>
-
-<h3><a href="#2d">»</a><a name="06">rbox 1000 D2 | qconvex C-0.03
-Qc Gapcv &gt;eg.06.merge.square</a></h3>
-
-<p>This demonstrates how Qhull handles precision errors. Option '<a
-href="qh-optc.htm#Cn">C-0.03</a>' requires a clearly convex angle
-between adjacent facets. Otherwise, Qhull merges the facets. </p>
-
-<p>This is the convex hull of random points in a square. The
-facets have thickness because they must be outside all points and
-must include their vertices. The colored lines represent the
-original points and the spheres represent the vertices. Floating
-in the middle of each facet is the centrum. Each centrum is at
-least 0.03 below the planes of its neighbors. This guarantees
-that the facets are convex.</p>
-
-<h3><a href="#2d">»</a><a name="07">rbox 1000 D3 | qconvex G
-&gt;eg.07.box </a></h3>
-
-<p>Here's the same distribution but in 3-d with Qhull handling
-machine roundoff errors. Note the large number of facets. </p>
-
-<h3><a href="#2d">»</a><a name="08a">rbox c G0.4 s 500 | qconvex G
-&gt;eg.08a.cube.sphere </a></h3>
-
-<p>The sphere is just barely poking out of the cube. Try the same
-distribution with randomization turned on ('<a
-href="qh-optq.htm#Qr">Qr</a>'). This turns Qhull into a
-randomized incremental algorithm. To compare Qhull and
-randomization, look at the number of hyperplanes created and the
-number of points partitioned. Don't compare CPU times since Qhull's
-implementation of randomization is inefficient. The number of
-hyperplanes and partitionings indicate the dominant costs for
-Qhull. With randomization, you'll notice that the number of
-facets created is larger than before. This is especially true as
-you increase the number of points. It is because the randomized
-algorithm builds most of the sphere before it adds the cube's
-vertices.</p>
-
-<h3><a href="#2d">»</a><a name="08b">rbox d G0.6 s 500 | qconvex G
-&gt;eg.08b.diamond.sphere </a></h3>
-
-<p>This is a combination of the diamond distribution and the
-sphere.</p>
-
-<h3><a href="#2d">»</a><a name="09">rbox 100 L3 G0.5 s | qconvex 
-G &gt;eg.09.lens </a></h3>
-
-<p>Each half of the lens distribution lies on a sphere of radius
-three. A directed search for the furthest facet below a point
-(e.g., qh_findbest in <tt>geom.c</tt>) may fail if started from
-an arbitrary facet. For example, if the first facet is on the
-opposite side of the lens, a directed search will report that the
-point is inside the convex hull even though it is outside. This
-problem occurs whenever the curvature of the convex hull is less
-than a sphere centered at the test point. </p>
-
-<p>To prevent this problem, Qhull does not use directed search
-all the time. When Qhull processes a point on the edge of the
-lens, it partitions the remaining points with an exhaustive
-search instead of a directed search (see qh_findbestnew in <tt>geom2.c</tt>).
-</p>
-
-<h2><a href="#TOC">»</a>How Qhull adds a point</h2>
-
-<h3><a href="#how">»</a><a name="10a">rbox 100 s P0.5,0.5,0.5 |
-qconvex Ga QG0 &gt;eg.10a.sphere.visible</a></h3>
-
-<p>The next 4 examples show how Qhull adds a point. The point
-[0.5,0.5,0.5] is at one corner of the bounding box. Qhull adds a
-point using the beneath-beyond algorithm. First Qhull finds all
-of the facets that are visible from the point. Qhull will replace
-these facets with new facets.</p>
-
-<h3><a href="#how">»</a><a name="10b">rbox 100 s
-P0.5,0.5,0.5|qconvex Ga QG-0 &gt;eg.10b.sphere.beyond </a></h3>
-
-<p>These are the facets that are not visible from the point.
-Qhull will keep these facets.</p>
-
-<h3><a href="#how">»</a><a name="10c">rbox 100 s P0.5,0.5,0.5 |
-qconvex PG Ga QG0 &gt;eg.10c.sphere.horizon </a></h3>
-
-<p>These facets are the horizon facets; they border the visible
-facets. The inside edges are the horizon ridges. Each horizon
-ridge will form the base for a new facet.</p>
-
-<h3><a href="#how">»</a><a name="10d">rbox 100 s P0.5,0.5,0.5 |
-qconvex Ga QV0 PgG &gt;eg.10d.sphere.cone </a></h3>
-
-<p>This is the cone of points from the new point to the horizon
-facets.  Try combining this image with <tt>eg.10c.sphere.horizon</tt>
-and <tt>eg.10a.sphere.visible</tt>.
-</p>
-
-<h3><a href="#how">»</a><a name="10e">rbox 100 s P0.5,0.5,0.5 |
-qconvex Ga &gt;eg.10e.sphere.new</a></h3>
-
-<p>This is the convex hull after [0.5,0.5,0.5] has been added.
-Note that in actual practice, the above sequence would never
-happen. Unlike the randomized algorithms, Qhull always processes
-a point that is furthest in an outside set. A point like
-[0.5,0.5,0.5] would be one of the first points processed.</p>
-
-<h3><a href="#how">»</a><a name="14">rbox 100 s P0.5,0.5,0.5 |
-qhull Ga QV0g Q0 &gt;eg.14.sphere.corner</a></h3>
-
-<p>The '<a href="qh-optq.htm#QVn">QVn</a>', '<a
-href="qh-optq.htm#QGn">QGn </a>' and '<a href="qh-optp.htm#Pdk">Pdk</a>'
-options define good facets for Qhull. In this case '<a
-href="qh-optq.htm#QVn">QV0</a>' defines the 0'th point
-[0.5,0.5,0.5] as the good vertex, and '<a href="qh-optq.htm#Qg">Qg</a>'
-tells Qhull to only build facets that might be part of a good
-facet. This technique reduces output size in low dimensions. It
-does not work with facet merging.</p>
-
-<h2><a href="#TOC">»</a>Triangulated output or joggled input</h2>
-
-<h3><a href="#joggle">»</a><a name="15a">rbox 500 W0 | qconvex QR0 Qc Gvp &gt;eg.15a.surface</a></h3>
-
-<p>This is the convex hull of 500 points on the surface of
-a cube.  Note the large, non-simplicial facet for each face. 
-Qhull merges non-convex facets.
-
-<p>If the facets were not merged, Qhull
-would report precision problems.  For example, turn off facet merging
-with option '<a href="qh-optq.htm#Q0">Q0</a>'.  Qhull may report concave
-facets, flipped facets, or other precision errors:
-<blockquote>
-rbox 500 W0 | qhull QR0 Q0
-</blockquote>
-
-<p>
-<h3><a href="#joggle">»</a><a name="15b">rbox 500 W0 | qconvex QR0 Qt Qc Gvp &gt;eg.15b.triangle</a></h3>
-
-<p>Like the previous examples, this is the convex hull of 500 points on the 
-surface of a cube.  Option '<a href="qh-optq.htm#Qt">Qt</a>' triangulates the
-non-simplicial facets.  Triangulated output is  
-particularly helpful for Delaunay triangulations.
-
-<p>
-<h3><a href="#joggle">»</a><a name="15c">rbox 500 W0 | qconvex QR0 QJ5e-2 Qc Gvp &gt;eg.15c.joggle</a></h3>
-
-<p>This is the convex hull of 500 joggled points on the surface of
-a cube.  The option '<a href="qh-optq.htm#QJn">QJ5e-2</a>'
-sets a very large joggle to make the effect visible.  Notice
-that all of the facets are triangles.  If you rotate the cube,
-you'll see red-yellow lines for coplanar points.
-<p>
-With option '<a href="qh-optq.htm#QJn">QJ</a>', Qhull joggles the
-input to avoid precision problems.  It adds a small random number
-to each input coordinate.  If a precision
-error occurs, it increases the joggle and tries again.  It repeats
-this process until no precision problems occur.
-<p>
-Joggled input is a simple solution to precision problems in
-computational geometry.  Qhull can also merge facets to handle
-precision problems.  See <a href="qh-impre.htm#joggle">Merged facets or joggled input</a>.  
-
-<h2><a href="#TOC">»</a>Delaunay and Voronoi diagrams</h2>
-
-<h3><a href="#delaunay">»</a><a name="17a">qdelaunay Qt
-&lt;eg.data.17 GnraD2 &gt;eg.17a.delaunay.2</a></h3>
-
-<p>
-The input file, <tt>eg.data.17</tt>, consists of a square, 15 random
-points within the outside half of the square, and 6 co-circular
-points centered on the square.
-
-<p>The Delaunay triangulation is the triangulation with empty
-circumcircles.  The input for this example is unusual because it
-includes six co-circular points.  Every triangular subset of these 
-points has the same circumcircle.  Option '<a href="qh-optq.htm#Qt">Qt</a>'
-triangulates the co-circular facet.</p>
-
-<h3><a href="#delaunay">»</a><a name="17b">qdelaunay &lt;eg.data.17
-GnraD2 &gt;eg.17b.delaunay.2i</a></h3>
-
-<p>This is the same example without triangulated output ('<a href="qh-optq.htm#Qt">Qt</a>').  qdelaunay
-merges the non-unique Delaunay triangles into a hexagon.</p>
-
-<h3><a href="#delaunay">»</a><a name="17c">qdelaunay &lt;eg.data.17
-Ga &gt;eg.17c.delaunay.2-3 </a></h3>
-
-<p>This is how Qhull generated both diagrams. Use Geomview's
-'obscure' menu to turn off normalization, and Geomview's
-'cameras' menu to turn off perspective. Then load this <a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html">object</a>
-with one of the previous diagrams.</p>
-
-<p>The points are lifted to a paraboloid by summing the squares
-of each coordinate. These are the light blue points. Then the
-convex hull is taken. That's what you see here. If you look up
-the Z-axis, you'll see that points and edges coincide.</p>
-
-<h3><a href="#delaunay">»</a><a name="17d">qvoronoi QJ
-&lt;eg.data.17 Gna &gt;eg.17d.voronoi.2</a></h3>
-
-<p>The Voronoi diagram is the dual of the Delaunay triangulation.
-Here you see the original sites and the Voronoi vertices.   
-Notice the each
-vertex is equidistant from three sites. The edges indicate the
-Voronoi region for a site. Qhull does not draw the unbounded
-edges. Instead, it draws extra edges to close the unbounded
-Voronoi regions. You may find it helpful to enclose the input
-points in a square.  You can compute the unbounded
-rays from option '<a href="qh-optf.htm#Fo2">Fo</a>'.
-</p>
-
-<p>Instead
-of triangulated output ('<a href="qh-optq.htm#Qt">Qt</a>'), this 
-example uses joggled input ('<a href="qh-optq.htm#QJn">QJ</a>').  
-Normally, you should use neither 'QJ' nor 'Qt' for Voronoi diagrams.
-
-<h3><a href="#delaunay">»</a><a name="17e">qvoronoi &lt;eg.data.17
-Gna &gt;eg.17e.voronoi.2i </a></h3>
-
-<p>This looks the same as the previous diagrams, but take a look
-at the data.  Run 'qvoronoi p &lt;eg/eg.data.17'.  This prints
-the Voronoi vertices.  
-
-<p>With 'QJ', there are four nearly identical Voronoi vertices
-within 10^-11 of the origin.  Option 'QJ' joggled the input.  After the joggle,
-the cocircular 
-input sites are no longer cocircular.  The corresponding Voronoi vertices are 
-similar but not identical.
-
-<p>This example does not use options 'Qt' or 'QJ'.  The cocircular
-input sites define one Voronoi vertex near the origin. </p>
-
-<p>Option 'Qt' would triangulate the corresponding Delaunay region into
-four triangles.  Each triangle is assigned the same Voronoi vertex.</p>
-
-<h3><a href="#delaunay">»</a><a name="17f"> rbox c G0.1 d |
-qdelaunay Gt Qz &lt;eg.17f.delaunay.3 </a></h3>
-
-<p>This is the 3-d Delaunay triangulation of a small cube inside
-a prism. Since the outside ridges are transparent, it shows the
-interior of the outermost facets. If you slice open the
-triangulation with Geomview's ginsu, you will see that the innermost
-facet is a cube. Note the use of '<a href="qh-optq.htm#Qz">Qz</a>'
-to add a point &quot;at infinity&quot;. This avoids a degenerate
-input due to cospherical points.</p>
-
-<h3><a href="#delaunay">»</a><a name="18a">rbox 10 D2 d | qdelaunay
-Qu G &gt;eg.18a.furthest.2-3 </a></h3>
-
-<p>The furthest-site Voronoi diagram contains Voronoi regions for
-points that are <i>furthest </i>from an input site. It is the
-dual of the furthest-site Delaunay triangulation. You can
-determine the furthest-site Delaunay triangulation from the
-convex hull of the lifted points (<a href="#17c">eg.17c.delaunay.2-3</a>).
-The upper convex hull (blue) generates the furthest-site Delaunay
-triangulation. </p>
-
-<h3><a href="#delaunay">»</a><a name="18b">rbox 10 D2 d | qdelaunay
-Qu Pd2 G &gt;eg.18b.furthest-up.2-3</a></h3>
-
-<p>This is the upper convex hull of the preceding example. The
-furthest-site Delaunay triangulation is the projection of the
-upper convex hull back to the input points. The furthest-site
-Voronoi vertices are the circumcenters of the furthest-site
-Delaunay triangles. </p>
-
-<h3><a href="#delaunay">»</a><a name="18c">rbox 10 D2 d | qvoronoi
-Qu Gv &gt;eg.18c.furthest.2</a></h3>
-
-<p>This shows an incomplete furthest-site Voronoi diagram. It
-only shows regions with more than two vertices. The regions are
-artificially truncated. The actual regions are unbounded. You can
-print the regions' vertices with 'qvoronoi Qu <a
-href="qh-opto.htm#o">o</a>'. </p>
-
-<p>Use Geomview's 'obscure' menu to turn off normalization, and
-Geomview's 'cameras' menu to turn off perspective. Then load this
-with the upper convex hull.</p>
-
-<h3><a href="#delaunay">»</a><a name="19">rbox 10 D3 | qvoronoi QV5
-p | qconvex G &gt;eg.19.voronoi.region.3 </a></h3>
-
-<p>This shows the Voronoi region for input site 5 of a 3-d
-Voronoi diagram.</p>
-
-<h2><a href="#TOC">»</a>Facet merging for imprecision</h2>
-
-<h3><a href="#merge">»</a><a name="20">rbox r s 20 Z1 G0.2 |
-qconvex G &gt;eg.20.cone </a></h3>
-
-<p>There are two things unusual about this <a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/cone.html">cone</a>.
-One is the large flat disk at one end and the other is the
-rectangles about the middle. That's how the points were
-generated, and if those points were exact, this is the correct
-hull. But <tt>rbox</tt> used floating point arithmetic to
-generate the data. So the precise convex hull should have been
-triangles instead of rectangles. By requiring convexity, Qhull
-has recovered the original design.</p>
-
-<h3><a href="#merge">»</a><a name="21a">rbox 200 s | qhull Q0
-R0.01 Gav Po &gt;eg.21a.roundoff.errors </a></h3>
-
-<p>This is the convex hull of 200 cospherical points with
-precision errors ignored ('<a href="qh-optq.htm#Q0">Q0</a>'). To
-demonstrate the effect of roundoff error, we've added a random
-perturbation ('<a href="qh-optc.htm#Rn">R0.01</a>') to every
-distance and hyperplane calculation. Qhull, like all other convex
-hull algorithms with floating point arithmetic, makes
-inconsistent decisions and generates wildly wrong results. In
-this case, one or more facets are flipped over. These facets have
-the wrong color. You can also turn on 'normals' in Geomview's
-appearances menu and turn off 'facing normals'. There should be
-some white lines pointing in the wrong direction. These
-correspond to flipped facets. </p>
-
-<p>Different machines may not produce this picture. If your
-machine generated a long error message, decrease the number of
-points or the random perturbation ('<a href="qh-optc.htm#Rn">R0.01</a>').
-If it did not report flipped facets, increase the number of
-points or perturbation.</p>
-
-<h3><a href="#merge">»</a><a name="21b">rbox 200 s | qconvex Qc
-R0.01 Gpav &gt;eg.21b.roundoff.fixed </a></h3>
-
-<p>Qhull handles the random perturbations and returns an
-imprecise <a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/fixed.html">sphere</a>.
-In this case, the output is a weak approximation to the points.
-This is because a random perturbation of '<a
-href="qh-optc.htm#Rn">R0.01 </a>' is equivalent to losing all but
-1.8 digits of precision. The outer planes float above the points
-because Qhull needs to allow for the maximum roundoff error. </p>
-<p> 
-If you start with a smaller random perturbation, you 
-can use joggle ('<a href="qh-optq.htm#QJn">QJn</a>') to avoid
-precision problems.  You need to set <i>n</i> significantly
-larger than the random perturbation.  For example, try 
-'rbox 200 s | qconvex Qc R1e-4 QJ1e-1'.
-
-<h3><a href="#merge">»</a><a name="22a">rbox 1000 s| qconvex C0.01
-Qc Gcrp &gt;eg.22a.merge.sphere.01</a></h3>
-
-<h3><a href="#merge">»</a><a name="22b">rbox 1000 s| qconvex
-C-0.01 Qc Gcrp &gt;eg.22b.merge.sphere.-01</a></h3>
-
-<h3><a href="#merge">»</a><a name="22c">rbox 1000 s| qconvex C0.05
-Qc Gcrpv &gt;eg.22c.merge.sphere.05</a></h3>
-
-<h3><a href="#merge">»</a><a name="22d">rbox 1000 s| qconvex
-C-0.05 Qc Gcrpv &gt;eg.22d.merge.sphere.-05</a></h3>
-
-<p>The next four examples compare post-merging and pre-merging ('<a
-href="qh-optc.htm#Cn2">Cn</a>' vs. '<a href="qh-optc.htm#Cn">C-n</a>').
-Qhull uses '-' as a flag to indicate pre-merging.</p>
-
-<p>Post-merging happens after the convex hull is built. During
-post-merging, Qhull repeatedly merges an independent set of
-non-convex facets. For a given set of parameters, the result is
-about as good as one can hope for.</p>
-
-<p>Pre-merging does the same thing as post-merging, except that
-it happens after adding each point to the convex hull. With
-pre-merging, Qhull guarantees a convex hull, but the facets are
-wider than those from post-merging. If a pre-merge option is not
-specified, Qhull handles machine round-off errors.</p>
-
-<p>You may see coplanar points appearing slightly outside
-the facets of the last example.  This is becomes Geomview moves
-line segments forward toward the viewer.  You can avoid the
-effect by setting 'lines closer' to '0' in Geomview's camera menu.
-
-<h3><a href="#merge">»</a><a name="23">rbox 1000 | qconvex s
-Gcprvah C0.1 Qc &gt;eg.23.merge.cube</a></h3>
-
-<p>Here's the 3-d imprecise cube with all of the Geomview
-options. There's spheres for the vertices, radii for the coplanar
-points, dots for the interior points, hyperplane intersections,
-centrums, and inner and outer planes.  The radii are shorter than
-the spheres because this uses post-merging ('<a href="qh-optc.htm#Cn2">C0.1</a>')
-instead of pre-merging.
-
-<h2><a href="#TOC">»</a>4-d objects</h2>
-
-<p>With Qhull and Geomview you can develop an intuitive sense of
-4-d surfaces. When you get into trouble, think of viewing the
-surface of a 3-d sphere in a 2-d plane.</p>
-
-<h3><a href="#4d">»</a><a name="24">rbox 5000 D4 | qconvex s GD0v
-Pd0:0.5 C-0.02 C0.1 &gt;eg.24.merge.cube.4d-in-3d</a></h3>
-
-<p>Here's one facet of the imprecise cube in 4-d. It's projected
-into 3-d (the '<a href="qh-optg.htm#GDn">GDn</a>' option drops
-dimension n). Each ridge consists of two triangles between this
-facet and the neighboring facet. In this case, Geomview displays
-the topological ridges, i.e., as triangles between three
-vertices. That is why the cube looks lopsided.</p>
-
-<h3><a href="#4d">»</a><a name="30">rbox 5000 D4 | qconvex s
-C-0.02 C0.1 Gh &gt;eg.30.4d.merge.cube </a></h3>
-
-<p><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/4dcube.html">Here</a>
-is the equivalent in 4-d of the imprecise <a href="#06">square</a>
-and imprecise <a href="#23">cube</a>. It's the imprecise convex
-hull of 5000 random points in a hypercube. It's a full 4-d object
-so Geomview's <tt>ginsu </tt>does not work. If you view it in
-Geomview, you'll be inside the hypercube. To view 4-d objects
-directly, either load the <tt>4dview</tt> module or the <tt>ndview
-</tt>module. For <tt>4dview</tt>, you must have started Geomview
-in the same directory as the object. For <tt>ndview</tt>,
-initialize a set of windows with the prefab menu, and load the
-object through Geomview. The <tt>4dview</tt> module includes an
-option for slicing along any hyperplane. If you do this in the x,
-y, or z plane, you'll see the inside of a hypercube.</p>
-
-<p>The '<a href="qh-optg.htm#Gh">Gh</a>' option prints the
-geometric intersections between adjacent facets. Note the strong
-convexity constraint for post-merging ('<a href="qh-optc.htm#Cn2">C0.1</a>').
-It deletes the small facets.</p>
-
-<h3><a href="#4d">»</a><a name="31">rbox 20 D3 | qdelaunay G
-&gt;eg.31.4d.delaunay </a></h3>
-
-<p>The Delaunay triangulation of 3-d sites corresponds to a 4-d
-convex hull. You can't see 4-d directly but each facet is a 3-d
-object that you can project to 3-d. This is exactly the same as
-projecting a 2-d facet of a soccer ball onto a plane.</p>
-
-<p>Here we see all of the facets together. You can use Geomview's
-<tt>ndview</tt> to look at the object from several directions.
-Try turning on edges in the appearance menu. You'll notice that
-some edges seem to disappear. That's because the object is
-actually two sets of overlapping facets.</p>
-
-<p>You can slice the object apart using Geomview's <tt>4dview</tt>.
-With <tt>4dview</tt>, try slicing along the w axis to get a
-single set of facets and then slice along the x axis to look
-inside. Another interesting picture is to slice away the equator
-in the w dimension.</p>
-
-<h3><a href="#4d">»</a><a name="32">rbox 30 s D4 | qconvex s G
-Pd0d1d2D3</a></h3>
-
-<p>This is the positive octant of the convex hull of 30 4-d
-points. When looking at 4-d, it's easier to look at just a few
-facets at once. If you picked a facet that was directly above
-you, then that facet looks exactly the same in 3-d as it looks in
-4-d. If you pick several facets, then you need to imagine that
-the space of a facet is rotated relative to its neighbors. Try
-Geomview's <tt>ndview</tt> on this example.</p>
-
-<h2><a href="#TOC">»</a>Halfspace intersections</h2>
-
-<h3><a href="#half">»</a><a name="33a">rbox 10 r s Z1 G0.3 |
-qconvex G &gt;eg.33a.cone </a></h3>
-
-<h3><a href="#half">»</a><a name="33b">rbox 10 r s Z1 G0.3 |
-qconvex FV n | qhalf G &gt;eg.33b.cone.dual</a></h3>
-
-<h3><a href="#half">»</a><a name="33c">rbox 10 r s Z1 G0.3 |
-qconvex FV n | qhalf Fp | qconvex G &gt;eg.33c.cone.halfspace</a></h3>
-
-<p>These examples illustrate halfspace intersection. The first
-picture is the convex hull of two 20-gons plus an apex. The
-second picture is the dual of the first. Try loading <a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/half.html">both</a>
-at once. Each vertex of the second picture corresponds to a facet
-or halfspace of the first. The vertices with four edges
-correspond to a facet with four neighbors. Similarly the facets
-correspond to vertices. A facet's normal coefficients divided by
-its negative offset is the vertice's coordinates. The coordinates
-are the intersection of the original halfspaces. </p>
-
-<p>The third picture shows how Qhull can go back and forth
-between equivalent representations. It starts with a cone,
-generates the halfspaces that define each facet of the cone, and
-then intersects these halfspaces. Except for roundoff error, the
-third picture is a duplicate of the first. </p>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home
-page for Qhull</a> <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual: Table of Contents</a><br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To: </b><a href="#TOC">Qhull examples: Table of Contents</a> (please wait
-while loading)<br>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-faq.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-faq.htm
deleted file mode 100644
index 5e52d10ab0861651d6e8afecc94aa531884ae64d..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-faq.htm
+++ /dev/null
@@ -1,1503 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
-<title>Qhull FAQ</title>
-<!-- Navigation links 
-NOTE -- verify all links by 'grep href=' 'grep name=' add # 'sort /+7'
-<base href> does not work since #TOC is relative to base instead of doc
--->
-</head>
-
-<body>
-
-<p><a name="TOP"><b>Up:</b></a> <a
- href="http://www.qhull.org">Home page</a> for Qhull
-(http://www.qhull.org)<br>
-<b>Up:</b> <A href="index.htm#TOC">Qhull manual</A>: Table of Contents<br>
-<b>To:</b> <A href="qh-quick.htm#programs">Programs</A>
-&#149; <A href="qh-quick.htm#options">Options</A> 
-&#149; <A href="qh-opto.htm#output">Output</A> 
-&#149; <A href="qh-optf.htm#format">Formats</A> 
-&#149; <A href="qh-optg.htm#geomview">Geomview</A> 
-&#149; <A href="qh-optp.htm#print">Print</A>
-&#149; <A href="qh-optq.htm#qhull">Qhull</A> 
-&#149; <A href="qh-optc.htm#prec">Precision</A> 
-&#149; <A href="qh-optt.htm#trace">Trace</A> <br>
-<b>To:</b> <A href="#TOC">FAQ: Table of Contents</A> (please
-wait while loading) <br>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
- href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/4dcube.html"><IMG
- align=middle alt ="[4-d cube]"
- height=100 src="qh--4d.gif" width=100 ></a> Frequently Asked Questions about Qhull</h1><!--
-<p><i>This is the most recent FAQ. It was updated Sept. 13, 1999.</i>
--->
-<p>If your question does not appear here, see: </p>
-
-<ul>
-    <li><a href="http://www.qhull.org/news">News</a> about Qhull 
-    <li><A href="index.htm#TOC">Qhull manual:</A> table of contents 
-    <li><A href="../README.txt">Installation</A> instructions for Qhull and rbox 
-
-    <li><A href="mailto:qhull@qhull.org">Send e-mail</A> to 
-  qhull@qhull.org 
-    <li><A href="mailto:qhull_bug@qhull.org">Report bugs</A>
-        to qhull_bug@qhull.org </li>
-</ul>
-
-<p>Qhull is a general dimension code for computing convex hulls,
-Delaunay triangulations, halfspace intersections about a point,
-Voronoi diagrams, furthest-site Delaunay triangulations, and
-furthest-site Voronoi diagrams. These structures have
-applications in science, engineering, statistics, and
-mathematics. For a detailed introduction, see O'Rourke [<A
- href="index.htm#orou94" >'94</A>], <i>Computational Geometry in C</i>.
-</p>
-
-<p>There are separate programs for each application of
-Qhull.  These programs disable experimental and inappropriate
-options.  If you prefer, you may use Qhull directly.  All programs
-run the same code.
-
-<p>Version 3.1 added triangulated output ('<A href="qh-optq.htm#Qt">Qt</A>').
-It should be used for Delaunay triangulations instead of
-using joggled input ('<A href="qh-optq.htm#QJn">QJ</A>').
-
-<p><i>Brad Barber, Cambridge MA, 
-2003/12/30 <!--
---> </i></p>
-
-<p><b>Copyright &copy; 1998-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h2><A href="#TOP">»</A><a name="TOC">FAQ: Table of Contents </a></h2>
-
-<p>Within each category, the most recently asked questions are
-first. 
-<ul>
-    <li>Startup questions <ul>
-            <li><A href="#console">How</A> do I run Qhull from Windows? 
-            <li><A href="#input">How</A> do I enter points for Qhull? 
-            <li><A href="#learn">How</A> do I learn to use Qhull?</li>
-        </ul>
-    <li>Convex hull questions<ul>
-        <li><A href="#area">How</A> do I report just the area and volume of a 
-    convex hull? 
-        <li><A href="#extra">Why</A> are there extra points in a 4-d or higher 
-    convex hull? 
-        <li><A href="#dup">How</A> do I report duplicate
-            vertices? </li>
-        </ul>
-    <li>Delaunay and Voronoi diagram questions<ul>
-        <li><a href="#maxsphere">How</a> do I get the radii of the empty
-		spheres for each Voronoi vertex?
-
-		<li><A href="#flat">How</A> do I get rid of nearly flat Delaunay 
-    triangles? 
-    
-		<li><A href="#square">What</A> is the Voronoi diagram of a square? 
-    
-		<li><A href="#vclosest">How</A> do I find the Delaunay triangle or Voronoi 
-    region that is closest to a point? 
-    
-		<li><A href="#mesh">How</A> do I compute the Delaunay triangulation of a 
-    non-convex object? 
-    
-		<li><A href="#mesh">How</A> do I mesh a volume from a set of triangulated 
-    surface points? 
-    
-			<li><A href="#constrained">Can</A> Qhull produce a triangular mesh for an 
-    object? 
-    
-		<li><A href="#dridges">For</A> 3-d Delaunay triangulations, how do I 
-    report the triangles of each tetrahedron? 
-        <li><A href="#vsphere">How</A> do I construct the Voronoi diagram of 
-    cospherical points? 
-        <li><A href="#3dd">How</A> do I construct a 3-d Delaunay triangulation? 
-        <li><A href="#2d">How</A> do I get the triangles for a 2-d Delaunay 
-    triangulation and the vertices of its Voronoi diagram? 
-        <li><A href="#rays">Can</A> Qhull compute the unbounded rays of the 
-    Voronoi diagram? 
-        <li><A href="#big">Can </A>Qhull triangulate a
-            hundred 16-d points?</li>
-        </ul>
-    <li>Approximation questions<ul>
-        <li><A href="#simplex">How</A> do I approximate data
-            with a simplex?</li>
-        </ul>
-    <li>Halfspace questions<ul>
-        <li><A href="#halfspace">How</A> do I compute the
-			intersection of halfspaces with Qhull?</li>
-        </ul>
-    <li><a name="library">Qhull library</a> questions<ul>
-	<li><A href="#math">Is</A> Qhull available for Mathematica, Matlab, or 
-    Maple? 
-    
-	<li><A href="#ridges">Why</A> are there too few ridges? 
-        <li><A href="#call">Can</A> Qhull use coordinates without placing them in 
-    a data file? 
-        <li><A href="#size">How</A> large are Qhull's data structures? 
-        <li><A href="#inc">Can</A> Qhull construct convex hulls and Delaunay 
-    triangulations one point at a time? 
-        <li><A href="#ridges2">How</A> do I visit the ridges of a Delaunay 
-    triangulation? 
-        <li><A href="#listd">How</A> do I visit the Delaunay facets? 
-    <LI><A 
-    href="#outside">When</A> is a point outside or inside a facet? 
-        <li><A href="#closest">How</A> do I find the facet that is closest to a 
-    point? 
-        <li><A href="#vclosest">How</A> do I find the Delaunay triangle or Voronoi 
-    region that is closest to a point? 
-        <li><A href="#vertices">How</A> do I list the vertices? 
-        <li><A href="#test">How</A> do I test code that uses the Qhull library? 
-        <li><A href="#orient">When</A> I compute a plane
-            equation from a facet, I sometimes get an
-            outward-pointing normal and sometimes an
-            inward-pointing normal</li>
-        </ul>
-    </li>
-</ul>
-
-<hr>
-
-<h2><A href="#TOC">»</A><a name="startup">Startup</a> questions</h2>
-
-<h4><A href="#TOC">»</A><a name="console">How</a> do I run Qhull
-from Windows?</h4><blockquote>
-
-<p>Qhull is a console program. You will first need a DOS window
-(i.e., a "DOS prompt"). You can double click on
-'eg\Qhull-go.bat'. It loads 'doskey' to simplify rerunning qhull 
-and rbox. </p>
-
-<blockquote><ul>
-    <li>Type 'qconvex', 'qdelaunay', 'qhalf', 'qvoronoi, 
-      'qhull', and 'rbox' for a synopsis of each program. 
- 
-    <li>Type 'rbox c D2 | qconvex s i' to compute the 
-      convex hull of a square. 
- 
-    <li>Type 'rbox c D2 | qconvex s i TO results.txt' to 
-      write the results to the file 'results.txt'. A summary is still printed on 
-      the the console. 
- 
-    <li>Type 'rbox c D2' to see the input format for 
-      qconvex. 
- 
-    <li>Type 'qconvex &lt; data.txt s i TO results.txt' to 
-      read input data from 'data.txt'. 
- 
-    <li>If you want to enter data by hand, type 'qconvex s i TO
-        results.txt' to read input data from the console. Type in
-        the numbers and end with a ctrl-D. </li>
-</ul></blockquote>
-
-</blockquote><h4><A href="#TOC">»</A><a name="input">How</a> do I enter
-points for Qhull?</h4><blockquote>
-
-<p>Qhull takes its data from standard input. For example, create
-a file named 'data.txt' with the following contents: </p>
-
-<blockquote>
-    <pre>
-2  #sample 2-d input
-5  #number of points
-1 2  #coordinates of points
--1.1 3
-3 2.2
-4 5
--10 -10
-</pre>
-</blockquote>
-
-<p>Then call qconvex with 'qconvex &lt; data.txt'. It will print a
-summary of the convex hull. Use 'qconvex &lt; data.txt o' to print
-the vertices and edges. See also <A href="index.htm#input">input
-format</A>. </p>
-
-<p>You can generate sample data with rbox, e.g., 'rbox 10'
-generates 10 random points in 3-d. Use a pipe ('|') to run rbox
-and qhull together, e.g., </p>
-
-<blockquote>
-    <p>rbox c | qconvex o </p>
-</blockquote>
-
-<p>computes the convex hull of a cube. </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="learn">How</a> do I learn to
-use Qhull?</h4><blockquote>
-
-<p>First read: </p>
-
-<ul>
-    <li><A href="index.htm">Introduction</A> to Qhull 
-    <li><A href="index.htm#when">When</A> to use Qhull 
-    <li><A href="qconvex.htm">qconvex</A> -- convex hull 
-    <li><A href="qdelaun.htm">qdelaunay</A> -- Delaunay triangulation 
-    <li><A href="qhalf.htm">qhalf</A> -- half-space intersection about a point 
-
-    <li><A href="qvoronoi.htm">qvoronoi</A> -- Voronoi diagram 
-    <li><A href="rbox.htm">Rbox</A>, for sample inputs 
-    <li><A href="qh-eg.htm">Examples</A> of Qhull</li>
-</ul>
-
-<p>Look at Qhull's on-line documentation: </p>
-
-<ul>
-    <li>'qconvex' gives a synopsis of qconvex and its options 
-
-    <li>'rbox' lists all of the options for generating point 
-    sets 
-    <li>'qconvex - | more' lists the options for qconvex 
-    <li>'qconvex .' gives a concise list of options 
-    <li>'qdelaunay', 'qhalf', 'qvoronoi', and 'qhull' also have a synopsis and option list</li>
-</ul>
-
-<p>Then try out the Qhull programs on small examples. </p>
-
-<ul>
-    <li>'rbox c' lists the vertices of a cube 
-    <li>'rbox c | qconvex' is the convex hull of a cube 
-    <li>'rbox c | qconvex o' lists the vertices and facets of 
-    a cube 
-    <li>'rbox c | qconvex Qt o' triangulates the cube 
-    <li>'rbox c | qconvex QJ o' joggles the input and 
-    triangulates the cube 
-    <li>'rbox c D2 | qconvex' generates the convex hull of a 
-    square 
-    <li>'rbox c D4 | qconvex' generates the convex hull of a 
-    hypercube 
-    <li>'rbox 6 s D2 | qconvex p Fx' lists 6 random points in 
-    a circle and lists the vertices of their convex hull in order 
-    <li>'rbox c D2 c G2 | qdelaunay' computes the Delaunay 
-    triangulation of two embedded squares. It merges the cospherical facets. 
-    <li>'rbox c D2 c G2 | qdelaunay Qt' computes the Delaunay 
-    triangulation of two embedded squares. It triangulates the cospherical facets. 
-    <li>'rbox c D2 c G2 | qvoronoi o' computes the 
-    corresponding Voronoi vertices and regions. 
-    <li>'rbox c D2 c G2 | qvoronio Fv' shows the Voronoi diagram
-        for the previous example. Each line is one edge of the
-        diagram. The first number is 4, the next two numbers list
-        a pair of input sites, and the last two numbers list the
-        corresponding pair of Voronoi vertices. </li>
-</ul>
-
-<p>Install <a href="http://www.geomview.org">Geomview</a>
-if you are running SGI Irix, Solaris, SunOS, Linux, HP, IBM
-RS/6000, DEC Alpha, or Next. You can then visualize the output of
-Qhull. Qhull comes with Geomview <A href="qh-eg.htm">examples</A>.
-</p>
-
-<p>Then try Qhull with a small example of your application. Work
-out the results by hand. Then experiment with Qhull's options to
-find the ones that you need. </p>
-
-<p>You will need to decide how Qhull should handle precision
-problems. It can triangulate the output ('<A
- href="qh-optq.htm#Qt" >Qt</A>'), joggle the input ('<A
- href="qh-optq.htm#QJn" >QJ</A>'), or merge facets (the default). </p>
-
-<ul>
-    <li>With joggle, Qhull produces simplicial (i.e., 
-    triangular) output by joggling the input.  After joggle,
-    no points are cocircular or cospherical.
-    <li>With facet merging, Qhull produces a better 
-    approximation and does not modify the input. 
-    <li>With triangulated output, Qhull merges facets and triangulates
-    the result.</li>
-    <li>See <A href="qh-impre.htm#joggle">Merged facets or joggled input</A>. </li>
-</ul>
-
-</blockquote>
-<h2><A href="#TOC">»</A><a name="convex">Convex hull questions</a></h2>
-
-<h4><A href="#TOC">»</A><a name="area">How</a> do I report just the area
-			and volume of a convex hull?</h4><blockquote>
-
-Use option 'FS'.  For example,
-
-<blockquote><pre>
-C:\qhull>rbox 10 | qconvex FS
-0
-2 2.192915621644613 0.2027867899638665
-
-C:\qhull>rbox 10 | qconvex FA
-
-Convex hull of 10 points in 3-d:
-
-  Number of vertices: 10
-  Number of facets: 16
-
-Statistics for: RBOX 10 | QCONVEX FA
-
-  Number of points processed: 10
-  Number of hyperplanes created: 28
-  Number of distance tests for qhull: 44
-  CPU seconds to compute hull (after input):  0
-  Total facet area:   2.1929156
-  Total volume:       0.20278679
-</pre></blockquote>
-
-</blockquote><h4><A href="#TOC">»</A><a name="extra">Why</a> are there extra
-points in a 4-d or higher convex hull?</h4><blockquote>
-
-<p>You may see extra points if you use options '<A
- href="qh-opto.htm#i" >i</A>' or '<A href="qh-optf.htm#Ft">Ft</A>'
- without using triangulated output ('<A href="qh-optq.htm#Qt">Qt</A>').
-The extra points occur when a facet is non-simplicial (i.e., a
-facet with more than <i>d</i> vertices). For example, Qhull
-reports the following for one facet of the convex hull of a hypercube. 
-Option 'Pd0:0.5' returns the facet along the positive-x axis: </p>
-
-<blockquote>
-    <pre>
-rbox c D4 | qconvex i Pd0:0.5
-12
-17 13 14 15
-17 13 12 14
-17 11 13 15
-17 14 11 15
-17 10 11 14
-17 14 12 8
-17 12 13 8
-17 10 14 8
-17 11 10 8
-17 13 9 8
-17 9 11 8
-17 11 9 13
-</pre>
-</blockquote>
-
-<p>The 4-d hypercube has 16 vertices; so point "17" was
-added by qconvex. Qhull adds the point in order to report a
-simplicial decomposition of the facet. The point corresponds to
-the "centrum" which Qhull computes to test for
-convexity. </p>
-
-<p>Triangulate the output ('<A href="qh-optq.htm#Qt">Qt</A>') to avoid the extra points.
-Since the hypercube is 4-d, each simplicial facet is a tetrahedron.
-<blockquote>
-<pre>
-C:\qhull3.1>rbox c D4 | qconvex i Pd0:0.5 Qt
-9
-9 13 14 15
-12 9 13 14
-9 11 13 15
-11 9 14 15
-9 10 11 14
-12 9 14 8
-9 12 13 8
-9 10 14 8
-10 9 11 8
-</pre>
-</blockquote>
-
-<p>Use the '<A href="qh-optf.htm#Fv">Fv</A>' option to print the
-vertices of simplicial and non-simplicial facets. For example,
-here is the same hypercube facet with option 'Fv' instead of 'i':
-</p>
-
-<blockquote>
-    <pre>
-C:\qhull&gt;rbox c D4 | qconvex Pd0:0.5 Fv
-1
-8 9 10 12 11 13 14 15 8
-</pre>
-</blockquote>
-
-<p>The coordinates of the extra point are printed with the '<A
- href="qh-optf.htm#Ft" >Ft</A>' option. </p>
-
-<blockquote>
-    <pre>
-rbox c D4 | qconvex Pd0:0.5 Ft
-4
-17 12 3
-  -0.5   -0.5   -0.5   -0.5
-  -0.5   -0.5   -0.5    0.5
-  -0.5   -0.5    0.5   -0.5
-  -0.5   -0.5    0.5    0.5
-  -0.5    0.5   -0.5   -0.5
-  -0.5    0.5   -0.5    0.5
-  -0.5    0.5    0.5   -0.5
-  -0.5    0.5    0.5    0.5
-   0.5   -0.5   -0.5   -0.5
-   0.5   -0.5   -0.5    0.5
-   0.5   -0.5    0.5   -0.5
-   0.5   -0.5    0.5    0.5
-   0.5    0.5   -0.5   -0.5
-   0.5    0.5   -0.5    0.5
-   0.5    0.5    0.5   -0.5
-   0.5    0.5    0.5    0.5
-   0.5      0      0      0
-4 16 13 14 15
-4 16 13 12 14
-4 16 11 13 15
-4 16 14 11 15
-4 16 10 11 14
-4 16 14 12 8
-4 16 12 13 8
-4 16 10 14 8
-4 16 11 10 8
-4 16 13 9 8
-4 16 9 11 8
-4 16 11 9 13
-</pre>
-</blockquote>
-
-</blockquote><h4><A href="#TOC">»</A><a name="dup">How</a> do I report
-duplicate vertices?</h4><blockquote>
-
-<p>There's no direct way. You can use option 
-'<A href="qh-optf.htm#FP">FP</A>' to
-report the distance to the nearest vertex for coplanar input
-points. Select the minimum distance for a duplicated vertex, and
-locate all input sites less than this distance. </p>
-
-<p>For Delaunay triangulations, all coplanar points are nearly
-incident to a vertex. If you want a report of coincident input
-sites, do not use option '<A href="qh-optq.htm#QJn">QJ</A>'. By
-adding a small random quantity to each input coordinate, it
-prevents coincident input sites. </p>
-
-</blockquote>
-<h2><A href="#TOC">»</A><a name="delaunay">Delaunay and Voronoi
-diagram questions</a></h2>
-
-<h4><A href="#TOC">»</A><a name="maxsphere">How</a> do I get the radii of the empty
-		spheres for each Voronoi vertex?</h4><blockquote>
-
-Use option '<A href="qh-optf.htm#Fi">Fi</A>' to list each bisector (i.e. Delaunay ridge).  Then compute the
-minimum distance for each Voronoi vertex.
-
-<p>There's other ways to get the same information.   Let me know if you
-find a better method.
-
-<h4><A href="#TOC">»</A><a name="flat">How</a> do I get rid of 
-nearly flat Delaunay triangles?</h4><blockquote>
-
-<p>Nearly flat triangles occur when boundary points are nearly
-collinear or coplanar.  They also occur for nearly coincident
-points.  Both events can easily occur when using joggle.  For example
-(rbox 10 W0 D2 | qdelaunay QJ Fa) lists the areas of the Delaunay 
-triangles of 10 points on the boundary of a square.  Some of
-these triangles are nearly flat.  This occurs when one point
-is joggled inside of two other points.  In this case, nearly flat
-triangles do not occur with triangulated output (rbox 10 W0 D2 | qdelaunay Qt Fa).
-
-
-<p>Another example, (rbox c P0 P0 D2 | qdelaunay QJ Fa), computes the
-areas of the Delaunay triangles for the unit square and two
-instances of the origin.  Four of the triangles have an area
-of 0.25 while two have an area of 2.0e-11.  The later are due to 
-the duplicated origin.  With triangulated output (rbox c P0 P0 D2 | qdelaunay Qt Fa)
-there are four triangles of equal area.
-
-<p>Nearly flat triangles also occur without using joggle.  For
-example, (rbox c P0 P0,0.4999999999 | qdelaunay Fa), computes
-the areas of the Delaunay triangles for the unit square, 
-a nearly collinear point, and the origin.  One triangle has an
-area of 3.3e-11.
-
-<p>Unfortunately, none of Qhull's merging options remove nearly 
-flat Delaunay triangles due to nearly collinear or coplanar boundary
-points.  
-The merging options concern the empty circumsphere
-property of Delaunay triangles.  This is independent of the area of
-the Delaunay triangles.  Qhull does handle nearly coincident points.   
-
-<p>You can handle collinear or coplanar boundary points by 
-enclosing the points in a box.  For example, 
-(rbox c P0 P0,0.4999999999 c G1 | qdelaunay Fa), surrounds the
-previous points with [(1,1), (1,-1), (-1,-1), (-1, 1)].
-Its Delaunay triangulation does not include a
-nearly flat triangle.  The box also simplifies the graphical
-output from Qhull.
-
-<p>Without joggle, Qhull lists coincident points as "coplanar"
-points.  For example, (rbox c P0 P0 D2 | qdelaunay Fa), ignores
-the duplicated origin and lists four triangles of size 0.25.
-Use 'Fc' to list the coincident points (e.g., 
-rbox c P0 P0 D2 | qdelaunay Fc).
-
-<p>There is no easy way to determine coincident points with joggle.
-Joggle removes all coincident, cocircular, and cospherical points
-before running Qhull.  Instead use facet merging (the default)
-or triangulated output ('<A href="qh-optq.htm#Qt">Qt</A>').
-
-
-</blockquote>
-<h4><A href="#TOC">»</A><a name="square">What</a> is the Voronoi diagram
-			    of a square?</h4><blockquote>
-
-<p>
-Consider a square, 
-<blockquote><pre>
-C:\qhull&gt;rbox c D2 
-2 RBOX c D2
-4
-  -0.5   -0.5
-  -0.5    0.5
-   0.5   -0.5
-   0.5    0.5
-</pre></blockquote>
-
-<p>There's two ways to compute the Voronoi diagram: with facet merging
-or with joggle.  With facet merging, the
-result is:
-
-<blockquote><pre>
-C:\qhull&gt;rbox c D2 | qvoronoi Qz
-
-Voronoi diagram by the convex hull of 5 points in 3-d:
-
-  Number of Voronoi regions and at-infinity: 5
-  Number of Voronoi vertices: 1
-  Number of facets in hull: 5
-
-Statistics for: RBOX c D2 | QVORONOI Qz
-
-  Number of points processed: 5
-  Number of hyperplanes created: 7
-  Number of distance tests for qhull: 8
-  Number of merged facets: 1
-  Number of distance tests for merging: 29
-  CPU seconds to compute hull (after input):  0
-
-C:\qhull&gt;rbox c D2 | qvoronoi Qz o
-2
-2 5 1
--10.101 -10.101
-     0      0
-2 0 1
-2 0 1
-2 0 1
-2 0 1
-0
-
-C:\qhull&gt;rbox c D2 | qvoronoi Qz Fv
-4
-4 0 1 0 1
-4 0 2 0 1
-4 1 3 0 1
-4 2 3 0 1
-</pre></blockquote>
-
-<p>There is one Voronoi vertex at the origin and rays from the origin
-along each of the coordinate axes.  
-The last line '4 2 3 0 1' means that there is
-a ray that bisects input points #2 and #3 from infinity (vertex 0) to
-the origin (vertex 1). 
-Option 'Qz' adds an artificial point since the input is cocircular.
-Coordinates -10.101 indicate the
-vertex at infinity.  
-
-<p>With triangulated output, the Voronoi vertex is 
-duplicated:
-
-<blockquote><pre>
-C:\qhull3.1>rbox c D2 | qvoronoi Qt Qz
-
-Voronoi diagram by the convex hull of 5 points in 3-d:
-
-  Number of Voronoi regions and at-infinity: 5
-  Number of Voronoi vertices: 2
-  Number of triangulated facets: 1
-
-Statistics for: RBOX c D2 | QVORONOI Qt Qz
-
-  Number of points processed: 5
-  Number of hyperplanes created: 7
-  Number of facets in hull: 6
-  Number of distance tests for qhull: 8
-  Number of distance tests for merging: 33
-  Number of distance tests for checking: 30
-  Number of merged facets: 1
-  CPU seconds to compute hull (after input): 0.05
-
-C:\qhull3.1>rbox c D2 | qvoronoi Qt Qz o
-2
-3 5 1
--10.101 -10.101
-     0      0
-     0      0
-3 2 0 1
-2 1 0
-2 2 0
-3 2 0 1
-0
-
-C:\qhull3.1>rbox c D2 | qvoronoi Qt Qz Fv
-4
-4 0 2 0 2
-4 0 1 0 1
-4 1 3 0 1
-4 2 3 0 2
-</pre></blockquote>
-
-
-<p>With joggle, the input is no longer cocircular and the Voronoi vertex is 
-split into two:
-
-<blockquote><pre>
-C:\qhull&gt;rbox c D2 | qvoronoi Qt Qz
-
-C:\qhull&gt;rbox c D2 | qvoronoi QJ o
-2
-3 4 1
--10.101 -10.101
--4.71511718558304e-012 -1.775812830118184e-011
-9.020340030474472e-012 -4.02267108512433e-012
-2 0 1
-3 2 1 0
-3 2 0 1
-2 2 0
-
-C:\qhull&gt;rbox c D2 | qvoronoi QJ Fv
-5
-4 0 2 0 1
-4 0 1 0 1
-4 1 2 1 2
-4 1 3 0 2
-4 2 3 0 2
-</pre></blockquote>
-
-<p>Note that the Voronoi diagram includes the same rays as 
-  before plus a short edge between the two vertices.</p>           
-      
-
-</blockquote><h4><A href="#TOC">»</A><a name="mesh">How</a> do I compute
-the Delaunay triangulation of a non-convex object?</h4><blockquote>
-
-<p>A similar question is 
-"How do I mesh a volume from a set of triangulated surface points?"
-
-<p>This is an instance of the constrained Delaunay Triangulation
-problem.  Qhull does not handle constraints.  The boundary of the
-Delaunay triangulation is always convex.  But if the input set
-contains enough points, the triangulation will include the
-boundary.  The number of points needed depends on the input.
-
-<p>Shewchuk has developed a theory of constrained Delaunay triangulations.
-See his 
-<a href="http://www.cs.cmu.edu/~jrs/jrspapers.html#cdt">paper</a> at the
-1998 Computational Geometry Conference.  Using these ideas, constraints
-could be added to Qhull.  They would have many applications.
-
-<p>There is a large literature on mesh generation and many commercial
-offerings.  For pointers see 
-<a href="http://www.andrew.cmu.edu/user/sowen/mesh.html">Owen's Meshing 
-Research Corner</a> and 
-<a href="http://www-users.informatik.rwth-aachen.de/~roberts/meshgeneration.html">Schneiders' 
-Finite Element Mesh Generation page</a>.</p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="constrained">Can</a> Qhull
-produce a triangular mesh for an object?</h4><blockquote>
-
-<p>Yes for convex objects, no for non-convex objects. For
-non-convex objects, it triangulates the concavities. Unless the
-object has many points on its surface, triangles may cross the
-surface. </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="dridges">For</a> 3-d Delaunay
-triangulations, how do I report the triangles of each
-tetrahedron?</h4><blockquote>
-
-<p>For points in general position, a 3-d Delaunay triangulation
-generates tetrahedron. Each face of a tetrahedron is a triangle.
-For example, the 3-d Delaunay triangulation of random points on
-the surface of a cube, is a cellular structure of tetrahedron. </p>
-
-<p>Use triangulated output ('qdelaunay Qt i') or joggled input ('qdelaunay QJ i') 
-to generate the Delaunay triangulation. 
-Option 'i' reports each tetrahedron. The triangles are
-every combination of 3 vertices. Each triangle is a
-"ridge" of the Delaunay triangulation. </p>
-
-<p>For example, </p>
-
-<pre>
-	rbox 10 | qdelaunay Qt i
-	14
-	9 5 8 7
-	0 9 8 7
-	5 3 8 7
-	3 0 8 7
-	5 4 8 1
-	4 6 8 1
-	2 9 5 8
-	4 2 5 8
-	4 2 9 5
-	6 2 4 8
-	9 2 0 8
-	2 6 0 8
-	2 4 9 1
-	2 6 4 1
-</pre>
-
-<p>is the Delaunay triangulation of 10 random points. Ridge 9-5-8
-occurs twice. Once for tetrahedron 9 5 8 7 and the other for
-tetrahedron 2 9 5 8. </p>
-
-<p>You can also use the Qhull library to generate the triangles.
-See "<A href="#ridges2">How</A> do I visit the ridges of a
-Delaunay triangulation?"</p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="vsphere">How</a> do I construct
-the Voronoi diagram of cospherical points?</h4><blockquote>
-
-<p>Three-d terrain data can be approximated with cospherical
-points. The Delaunay triangulation of cospherical points is the
-same as their convex hull. If the points lie on the unit sphere,
-the facet normals are the Voronoi vertices [via S. Fortune]. </p>
-
-<p>For example, consider the points {[1,0,0], [-1,0,0], [0,1,0],
-...}. Their convex hull is: </p>
-
-<pre>
-rbox d G1 | qconvex o
-3
-6 8 12
-     0      0     -1
-     0      0      1
-     0     -1      0
-     0      1      0
-    -1      0      0
-     1      0      0
-3 3 1 4
-3 1 3 5
-3 0 3 4
-3 3 0 5
-3 2 1 5
-3 1 2 4
-3 2 0 4
-3 0 2 5
-</pre>
-
-<p>The facet normals are: </p>
-
-<pre>
-rbox d G1 | qconvex n
-4
-8
--0.5773502691896258  0.5773502691896258  0.5773502691896258 -0.5773502691896258
- 0.5773502691896258  0.5773502691896258  0.5773502691896258 -0.5773502691896258
--0.5773502691896258  0.5773502691896258 -0.5773502691896258 -0.5773502691896258
- 0.5773502691896258  0.5773502691896258 -0.5773502691896258 -0.5773502691896258
- 0.5773502691896258 -0.5773502691896258  0.5773502691896258 -0.5773502691896258
--0.5773502691896258 -0.5773502691896258  0.5773502691896258 -0.5773502691896258
--0.5773502691896258 -0.5773502691896258 -0.5773502691896258 -0.5773502691896258
- 0.5773502691896258 -0.5773502691896258 -0.5773502691896258 -0.5773502691896258
-</pre>
-
-<p>If you drop the offset from each line (the last number), each
-line is the Voronoi vertex for the corresponding facet. The
-neighboring facets for each point define the Voronoi region for
-each point. For example: </p>
-
-<pre>
-rbox d G1 | qconvex FN
-6
-4 7 3 2 6
-4 5 0 1 4
-4 7 4 5 6
-4 3 1 0 2
-4 6 2 0 5
-4 7 3 1 4
-</pre>
-
-<p>The Voronoi vertices {7, 3, 2, 6} define the Voronoi region
-for point 0. Point 0 is [0,0,-1]. Its Voronoi vertices are </p>
-
-<pre>
--0.5773502691896258  0.5773502691896258 -0.5773502691896258
- 0.5773502691896258  0.5773502691896258 -0.5773502691896258
--0.5773502691896258 -0.5773502691896258 -0.5773502691896258
- 0.5773502691896258 -0.5773502691896258 -0.5773502691896258 
-</pre>
-
-<p>In this case, the Voronoi vertices are oriented, but in
-general they are unordered. </p>
-
-<p>By taking the dual of the Delaunay triangulation, you can
-construct the Voronoi diagram. For cospherical points, the convex
-hull vertices for each facet, define the input sites for each
-Voronoi vertex. In 3-d, the input sites are oriented. For
-example: </p>
-
-<pre>
-rbox d G1 | qconvex i
-8
-3 1 4
-1 3 5
-0 3 4
-3 0 5
-2 1 5
-1 2 4
-2 0 4
-0 2 5
-</pre>
-
-<p>The convex hull vertices for facet 0 are {3, 1, 4}. So Voronoi
-vertex 0 (i.e., [-0.577, 0.577, 0.577]) is the Voronoi vertex for
-input sites {3, 1, 4} (i.e., {[0,1,0], [0,0,1], [-1,0,0]}). </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="3dd">How</a> do I construct a
-3-d Delaunay triangulation?</h4><blockquote>
-
-<p>For 3-d Delaunay triangulations with cospherical input sites, 
-use triangulated output ('<A href="qh-optq.htm#Qt">Qt</A>') or
-joggled input  ('<A href="qh-optq.htm#QJn">QJ</A>').  Otherwise
-option 'i' will
-triangulate non-simplicial facets by adding a point to the facet.
-
-<p>If you want non-simplicial output for cospherical sites, use
-option 
-'<A href="qh-optf.htm#Fv">Fv</A>' or '<A href="qh-opto.htm#o">o</A>'.
-For option 'o', ignore the last coordinate. It is the lifted
-coordinate for the corresponding convex hull in 4-d. 
-
-<p>The following example is a cube
-inside a tetrahedron. The 8-vertex facet is the cube. Ignore the
-last coordinates. </p>
-
-<blockquote>
-    <pre>
-C:\qhull&gt;rbox r y c G0.1 | qdelaunay Fv
-4
-12 20 44
-   0.5      0      0 0.3055555555555555
-   0    0.5      0 0.3055555555555555
-   0      0    0.5 0.3055555555555555
-  -0.5   -0.5   -0.5 0.9999999999999999
-  -0.1   -0.1   -0.1 -6.938893903907228e-018
-  -0.1   -0.1    0.1 -6.938893903907228e-018
-  -0.1    0.1   -0.1 -6.938893903907228e-018
-  -0.1    0.1    0.1 -6.938893903907228e-018
-   0.1   -0.1   -0.1 -6.938893903907228e-018
-   0.1   -0.1    0.1 -6.938893903907228e-018
-   0.1    0.1   -0.1 -6.938893903907228e-018
-   0.1    0.1    0.1 -6.938893903907228e-018
-4 2 11 1 0
-4 10 1 0 3
-4 11 10 1 0
-4 2 9 0 3
-4 9 11 2 0
-4 7 2 1 3
-4 11 7 2 1
-4 8 10 0 3
-4 9 8 0 3
-5 8 9 10 11 0
-4 10 6 1 3
-4 6 7 1 3
-5 6 8 10 4 3
-5 6 7 10 11 1
-4 5 9 2 3
-4 7 5 2 3
-5 5 8 9 4 3
-5 5 6 7 4 3
-8 5 6 8 7 9 10 11 4
-5 5 7 9 11 2
-</pre>
-</blockquote>
-
-<p>If you want simplicial output use options
-'<A href="qh-optq.htm#Qt">Qt</A> <A
- href="qh-optf.htm#Ft" >i</A>' or 
-'<A href="qh-optq.htm#QJn">QJ</A> <A
- href="qh-optf.htm#Ft" >i</A>', e.g.,
-</p>
-
-<blockquote>
-    <pre>
-rbox r y c G0.1 | qdelaunay Qt i
-31
-2 11 1 0
-11 10 1 0
-9 11 2 0
-11 7 2 1
-8 10 0 3
-9 8 0 3
-10 6 1 3
-6 7 1 3
-5 9 2 3
-7 5 2 3
-9 8 10 11
-8 10 11 0
-9 8 11 0
-6 8 10 4
-8 6 10 3
-6 8 4 3
-6 7 10 11
-10 6 11 1
-6 7 11 1
-8 5 4 3
-5 8 9 3
-5 6 4 3
-6 5 7 3
-5 9 10 11
-8 5 9 10
-7 5 10 11
-5 6 7 10
-8 5 10 4
-5 6 10 4
-5 9 11 2
-7 5 11 2
-</pre>
-</blockquote>
-
-</blockquote><h4><A href="#TOC">»</A><a name="2d">How</a> do I get the
-triangles for a 2-d Delaunay triangulation and the vertices of
-its Voronoi diagram?</h4><blockquote>
-
-<p>To compute the Delaunay triangles indexed by the indices of
-the input sites, use </p>
-
-<blockquote>
-    <p>rbox 10 D2 | qdelaunay Qt i </p>
-</blockquote>
-
-<p>To compute the Voronoi vertices and the Voronoi region for
-each input site, use </p>
-
-<blockquote>
-    <p>rbox 10 D2 | qvoronoi o </p>
-</blockquote>
-
-<p>To compute each edge ("ridge") of the Voronoi
-diagram for each pair of adjacent input sites, use</p>
-
-<blockquote>
-    <p>rbox 10 D2 | qvoronoi Fv </p>
-</blockquote>
-
-<p>To compute the area and volume of the Voronoi region for input site 5,
-use </p>
-
-<blockquote>
-    <p>rbox 10 D2 | qvoronoi QV5 p | qconvex s FS </p>
-</blockquote>
-
-<p>To compute the lines ("hyperplanes") that define the
-Voronoi region for input site 5, use </p>
-
-<blockquote>
-    <p>rbox 10 D2 | qvoronoi QV5 p | qconvex n </p>
-</blockquote>
-or
-<blockquote>
-    <p>rbox 10 D2 | qvoronoi QV5 Fi Fo</p>
-</blockquote>
-
-<p>To list the extreme points of the input sites use </p>
-
-<blockquote>
-    <p>rbox 10 D2 | qdelaunay Fx </p>
-</blockquote>
-
-<p>You will get the same point ids with </p>
-
-<blockquote>
-    <p>rbox 10 D2 | qconvex Fx </p>
-</blockquote>
-
-</blockquote><h4><A href="#TOC">»</A><a name="rays">Can</a> Qhull compute the
-unbounded rays of the Voronoi diagram?</h4><blockquote>
-
-<p>Use '<A href="qh-optf.htm#Fo2">Fo</A>' to compute the separating
-hyperplanes for unbounded Voronoi regions. The corresponding ray
-goes to infinity from the Voronoi vertices. If you enclose the
-input sites in a large enough box, the outermost bounded regions
-will represent the unbounded regions of the original points. </p>
-
-<p>If you do not box the input sites, you can identify the
-unbounded regions. They list '0' as a vertex. Vertex 0 represents
-"infinity". Each unbounded ray includes vertex 0 in
-option '<A href="qh-optf.htm#Fv2">Fv</A>. See <A
- href="qvoronoi.htm#graphics" >Voronoi graphics</A> and <A
- href="qvoronoi.htm#notes" >Voronoi notes</A>. </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="big">Can </a>Qhull triangulate
-a hundred 16-d points?</h4><blockquote>
-
-<p>No. This is an immense structure. A triangulation of 19, 16-d
-points has 43 simplices. If you add one point at a time, the
-triangulation increased as follows: 43, 189, 523, 1289, 2830,
-6071, 11410, 20487. The last triangulation for 26 points used 13
-megabytes of memory. When Qhull uses virtual memory, it becomes
-too slow to use. </p>
-
-</blockquote>
-<h2><A href="#TOC">»</A>Approximation questions</h2>
-
-<h4><A href="#TOC">»</A><a name="simplex">How</a> do I
-approximate data with a simplex</h4><blockquote>
-
-<p>Qhull may be used to help select a simplex that approximates a
-data set. It will take experimentation. Geomview will help to
-visualize the results. This task may be difficult to do in 5-d
-and higher. Use rbox options 'x' and 'y' to produce random
-distributions within a simplex. Your methods work if you can
-recover the simplex. </p>
-
-<p>Use Qhull's precision options to get a first approximation to
-the hull, say with 10 to 50 facets. For example, try 'C0.05' to
-remove small facets after constructing the hull. Use 'W0.05' to
-ignore points within 0.05 of a facet. Use 'PA5' to print the five
-largest facets by area. </p>
-
-<p>Then use other methods to fit a simplex to this data. Remove
-outlying vertices with few nearby points. Look for large facets
-in different quadrants. You can use option 'Pd0d1d2' to print all
-the facets in a quadrant. </p>
-
-<p>In 4-d and higher, use the outer planes (option 'Fo' or
-'facet-&gt;maxoutside') since the hyperplane of an approximate
-facet may be below many of the input points. </p>
-
-<p>For example, consider fitting a cube to 1000 uniformly random
-points in the unit cube. In this case, the first try was good: </p>
-
-<blockquote>
-    <pre>
-rbox 1000 | qconvex W0.05 C0.05 PA6 Fo
-4
-6
-0.35715408374381 0.08706467018177928 -0.9299788727015564 -0.5985514741284483
-0.995841591359023 -0.02512604712761577 0.08756829720435189 -0.5258834069202866
-0.02448099521570909 -0.02685210459017302 0.9993396046151313 -0.5158104982631999
--0.9990223929415094 -0.01261133513150079 0.04236994958247349 -0.509218270408407
--0.0128069014364698 -0.9998380680115362 0.01264203427283151 -0.5002512653670584
-0.01120895057872914 0.01803671994177704 -0.9997744926535512 -0.5056824072956361
-</pre>
-</blockquote>
-
-</blockquote>
-<h2><A href="#TOC">»</A>Halfspace questions</h2>
-
-<h4><A href="#TOC">»</A><a name="halfspace">How</a> do I compute the
-			    intersection of halfspaces with Qhull?</h4><blockquote>
-
-<p>Qhull computes the halfspace intersection about a point.  The
-point must be inside all of the halfspaces.  Given a point, a
-duality turns a halfspace intersection problem into a convex
-hull problem.
-
-<p>Use linear programming if you
-do not know a point in the interior of the halfspaces.
-See the <A href="qhalf.htm#notes">manual</A>. You will need 
-  a linear programming code. This may require a fair amount of work to 
-  implement.</p>   
-          
-    
-
-</blockquote>
-<h2><A href="#TOC">»</A><a name="library">Qhull library
-questions</a></h2>
-
-<h4><A href="#TOC">»</A><a name="math">Is</a> Qhull available for Mathematica, Matlab, or Maple?</h4><blockquote>
-
-<p>Z. You of <a href="http://www.mathworks.com">MathWorks</a> added qhull to MATLAB 6.  
-See functions <a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/convhulln.shtml" 
- >convhulln</a>,
-	<a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/delaunayn.shtml" 
- >delaunayn</a>,
-	<a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/griddata3.shtml" 
- >griddata3</a>,
-	<a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/griddatan.shtml" 
- >griddatan</a>,
-	<a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/tsearch.shtml" 
- >tsearch</a>,
-	<a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/tsearchn.shtml" 
- >tsearchn</a>, and
-    <a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/voronoin.shtml" 
- >voronoin</a>.  V. Brumberg update MATLAB R14 for Qhull 2003.1 and triangulated output. 
-
-<p>See <a href="http://www.mathsource.com/Content/Enhancements/Geometry/0211-251" 
- >qh-math</a>
-for a Delaunay interface to Mathematica.  It includes projects for CodeWarrior 
-on the Macintosh and Visual C++ on Win32 PCs.
-
-<p>See  Mathematica ('<a
-href="qh-opto.htm#m">m</a>') and Maple ('<a
-href="qh-optf.htm#FM">FM</a>') output options.
-
-<p></p>
-</blockquote><h4><A href="#TOC">»</A><a name="ridges">Why</a> are there too few ridges?</h4><blockquote>
-
-The following sample code may produce fewer ridges than expected:
-
-<blockquote><pre>
-  facetT *facetp;
-  ridgeT *ridge, **ridgep;
-
-  FORALLfacets {
-    printf("facet f%d\n", facet->id);
-    FOREACHridge_(facet->ridges) { 
-      printf("   ridge r%d between f%d and f%d\n", ridge->id, ridge->top->id, ridge->bottom->id);
-    }
-  }
-</pre></blockquote>
-
-<p>  Qhull does not create ridges for  simplicial facets.
-Instead it computes ridges from  facet-&gt;neighbors. To make ridges for a
-simplicial facet, use qh_makeridges() in  merge.c. Usefacet-&gt;visit_id to visit
-each ridge once (instead of twice).  For example,
-
-<blockquote><pre>
-  facetT *facet, *neighbor;
-  ridgeT *ridge, **ridgep;
-
-  qh visit_id++;
-  FORALLfacets {
-    printf("facet f%d\n", facet->id);
-    qh_makeridges(facet);
-    facet->visitId= qh visit_id;
-    FOREACHridge_(facet->ridges) {
-	neighbor= otherfacet_(ridge, visible);
-	if (neighbor->visitid != qh visit_id)
-            printf("   ridge r%d between f%d and f%d\n", ridge->id, ridge->top->id, ridge->bottom->id);
-    }
-  }
-</pre></blockquote>
-
-</blockquote><h4><A href="#TOC">»</A><a name="call">Can</a> Qhull use coordinates without placing
-			them in a data file?</h4><blockquote>
-
-<p>Use qh_call_qhull().  See user_eg.c for an example.
-See the manual for an introduction to the Qhull library.
-
-<p>Start with a small example for which you know the 
-  answer.</p>         
-
-
-</blockquote><h4><A href="#TOC">»</A><a name="size">How</a> large are Qhull's data structures?</h4><blockquote>
-
-<p>Qhull uses a general-dimension data structure.  
-The size depends on the dimension.  Use option 'Ts' to print
-out the memory statistics [e.g., 'rbox D2 10 | qconvex Ts'].
-
-
-</blockquote><h4><A href="#TOC">»</A><a name="inc">Can</a> Qhull construct
-convex hulls and Delaunay triangulations one point at a time?</h4><blockquote>
-
-<p>The Qhull library may be used to construct convex hulls and
-Delaunay triangulations one point at a time. It may not be used
-for deleting points or moving points. </p>
-
-<p>Qhull is designed for batch processing. Neither Clarkson's
-randomized incremental algorithm nor Qhull are designed for
-on-line operation. For many applications, it is better to
-reconstruct the convex hull or Delaunay triangulation from
-scratch for each new point. </p>
-
-<p>With random point sets and on-line processing, Clarkson's
-algorithm should run faster than Qhull. Clarkson uses the
-intermediate facets to reject new, interior points, while Qhull,
-when used on-line, visits every facet to reject such points. If
-used on-line for n points, Clarkson may take O(n) times as much
-memory as the average off-line case, while Qhull's space
-requirement does not change. </p>
-
-<p>If you triangulate the output before adding all the points
-(option 'Qt' and procedure qh_triangulate), you must set
-option '<A href="qh-optq.htm#Q11">Q11</A>'.  It duplicates the
-normals of triangulated facets and recomputes the centrums.
-This should be avoided for regular use since triangulated facets
-are not clearly convex with their neighbors.  It appears to
-work most of the time, but fails for cases that Qhull normally
-handles well [see the test call to qh_triangulate in qh_addpoint].
-
-</blockquote><h4><A href="#TOC">»</A><a name="ridges2">How</a> do I visit the
-ridges of a Delaunay triangulation?</h4><blockquote>
-
-<p>To visit the ridges of a Delaunay triangulation, visit each
-facet. Each ridge will appear twice since it belongs to two
-facets. In pseudo-code: </p>
-
-<pre>
-    for each facet of the triangulation
-	if the facet is Delaunay (i.e., part of the lower convex hull)
-	    for each ridge of the facet
-		if the ridge's neighboring facet has not been visited
-		    ... process a ridge of the Delaunay triangulation ...
-</pre>
-
-<p>In undebugged, C code: </p>
-
-<pre>
-    qh visit_id++;
-    FORALLfacets_(facetlist)
-	if (!facet-&gt;upperdelaunay) {
-	    facet-&gt;visitid= qh visit_id;
-	    qh_makeridges(facet);
-	    FOREACHridge_(facet-&gt;ridges) {
-		neighbor= otherfacet_(ridge, facet);
-		if (neighbor-&gt;visitid != qh visit_id) {
-		    /* Print ridge here with facet-id and neighbor-id */
-		    /*fprintf(fp, "f%d\tf%d\t",facet-&gt;id,neighbor-&gt;ID);*/
-		    FOREACHvertex_(ridge-&gt;vertices)
-			fprintf(fp,"%d ",qh_pointid (vertex-&gt;point) );
-		    qh_printfacetNvertex_simplicial (fp, facet, format);
-		    fprintf(fp," ");
-		    if(neighbor-&gt;upperdelaunay)
-			fprintf(fp," -1 -1 -1 -1 ");
-		    else
-			qh_printfacetNvertex_simplicial (fp, neighbor, format);
-		    fprintf(fp,"\n");
-		}
-	    }
-	}
-    }
-</pre>
-
-<p>Qhull should be redesigned as a class library, or at least as
-an API. It currently provides everything needed, but the
-programmer has to do a lot of work. Hopefully someone will write
-C++ wrapper classes or a Python module for Qhull. </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="listd">How</a> do I visit the
-Delaunay regions?</h4><blockquote>
-
-<p>Qhull constructs a Delaunay triangulation by lifting the
-input sites to a paraboloid. The Delaunay triangulation
-corresponds to the lower convex hull of the lifted points. To
-visit each facet of the lower convex hull, use: </p>
-
-<pre>
-    facetT *facet;
-
-    ...
-    FORALLfacets {
-	if (!facet-&gt;upperdelaunay) {
-	    ... only facets for Delaunay regions ...
-	}
-    }
-</pre>
-
-</blockquote><h4><A href="#TOC">»</A><a name="outside">When</a> is a point
-outside or inside a facet?</h4><blockquote>
-
-<p>A point is outside of a facet if it is clearly outside the
-facet's outer plane. The outer plane is defined by an offset
-(facet-&gt;maxoutside) from the facet's hyperplane. </p>
-
-<pre>
-    facetT *facet;
-    pointT *point;
-    realT dist;
-
-    ...
-    qh_distplane(point, facet, &amp;dist);
-    if (dist &gt; facet-&gt;maxoutside + 2 * qh DISTround) {
-        /* point is clearly outside of facet */
-    }
-</pre>
-
-<p>A point is inside of a facet if it is clearly inside the
-facet's inner plane. The inner plane is computed as the maximum
-distance of a vertex to the facet. It may be computed for an
-individual facet, or you may use the maximum over all facets. For
-example: </p>
-
-<pre>
-    facetT *facet;
-    pointT *point;
-    realT dist;
-
-    ...
-    qh_distplane(point, facet, &amp;dist);
-    if (dist &lt; qh min_vertex - 2 * qh DISTround) {
-        /* point is clearly inside of facet */
-    }
-</pre>
-
-<p>Both tests include two qh.DISTrounds because the computation
-of the furthest point from a facet may be off by qh.DISTround and
-the computation of the current distance to the facet may be off
-by qh.DISTround. </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="closest">How</a> do I find the
-facet that is closest to a point?</h4><blockquote>
-
-<p>Use qh_findbestfacet(). For example, </p>
-
-<pre>
-    coordT point[ DIM ];
-    boolT isoutside;
-    realT bestdist;
-    facetT *facet;
-
-    ... set coordinates for point ...
-
-    facet= qh_findbestfacet (point, qh_ALL, &amp;bestdist, &amp;isoutside);
-
-    /* 'facet' is the closest facet to 'point' */
-</pre>
-
-<p>qh_findbestfacet() performs a directed search for the facet
-furthest below the point. If the point lies inside this facet,
-qh_findbestfacet() performs an exhaustive search of all facets.
-An exhaustive search may be needed because a facet on the far
-side of a lens-shaped distribution may be closer to a point than
-all of the facet's neighbors. The exhaustive search may be
-skipped for spherical distributions. </p>
-
-<p>Also see, "<A href="#vclosest">How</A> do I find the
-Delaunay triangle that is closest to a
-point?" </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="vclosest">How</a> do I find the
-Delaunay triangle or Voronoi region that is closest to a point?</h4><blockquote>
-
-<p>A Delaunay triangulation subdivides the plane, or in general
-dimension, subdivides space.  Given a point, how do you determine
-the subdivision containing the point?  Or, given a set of points,
-how do you determine the subdivision containing each point of the set?
-Efficiency is important -- an exhaustive search of the subdivision
-is too slow.
-
-<p>First compute the Delaunay triangle with qh_call_qhull().
-Lift the point to the paraboloid by summing the squares of the
-coordinates. Use qh_findbestfacet() [poly2.c] to find the closest Delaunay
-triangle. Determine the closest vertex to find the corresponding
-Voronoi region.  Do not use options
-'<A href="qh-optq.htm#Qbb">Qbb</A>', '<A href="qh-optq.htm#QbB">QbB</A>',
-'<A href="qh-optq.htm#Qbk">Qbk:n</A>', or '<A
- href="qh-optq.htm#QBk" >QBk:n</A>' since these scale the last
-coordinate.  Optimizations of qh_findbestfacet() should 
-be possible for Delaunay triangulations.</p>
-
-<p>You first need to lift the point to the paraboloid (i.e., the 
-last coordinate is the sum of the squares of the point's coordinates). 
-The
-routine, qh_setdelaunay() [geom2.c], lifts an array of points to the
-paraboloid. The following excerpt is from findclosest() in
-user_eg.c. </p>
-
-<pre>
-    coordT point[ DIM + 1];  /* one extra coordinate for lifting the point */
-    boolT isoutside;
-    realT bestdist;
-    facetT *facet;
-
-    ... set coordinates for point[] ...
-
-    qh_setdelaunay (DIM+1, 1, point);
-    facet= qh_findbestfacet (point, qh_ALL, &amp;bestdist, &amp;isoutside);
-    /* 'facet' is the closest Delaunay triangle to 'point' */
-</pre>
-
-<p>The returned facet either contains the point or it is the
-closest Delaunay triangle along the convex hull of the input set.
-
-<p>Point location is an active research area in Computational 
-Geometry.  For a practical approach, see Mucke, et al, "Fast randomized
-point location without preprocessing in two- and
-three-dimensional Delaunay triangulations," <i>Computational
-Geometry '96</i>, p. 274-283, May 1996.  
-For an introduction to planar point location see [O'Rourke '93].  
-Also see, "<A
- href="#closest" >How</A> do I find the facet that is closest to a
-point?" </p>
-
-<p>To locate the closest Voronoi region, determine the closest
-vertex of the closest Delaunay triangle. </p>
-
-<pre>
-    realT dist, bestdist= REALmax;
-	vertexT *bestvertex= NULL, *vertex, **vertexp;
-
-    /* 'facet' is the closest Delaunay triangle to 'point' */
-
-    FOREACHvertex_( facet-&gt;vertices ) {
-        dist= qh_pointdist( point, vertex-&gt;point, DIM );
-        if (dist &lt; bestdist) {
-            bestdist= dist;
-            bestvertex= vertex;
-        }
-    }
-    /* 'bestvertex' represents the Voronoi region closest to 'point'.  The corresponding
-       input site is 'bestvertex-&gt;point' */
-</pre>
-
-</blockquote><h4><A href="#TOC">»</A><a name="vertices">How</a> do I list the
-vertices?</h4><blockquote>
-
-<p>To list the vertices (i.e., extreme points) of the convex hull
-use </p>
-
-<blockquote>
-    <pre>
-    vertexT *vertex;
-    
-    FORALLvertices {
-      ...
-      // vertex-&gt;point is the coordinates of the vertex
-      // qh_pointid (vertex-&gt;point) is the point ID of the vertex
-      ...
-    }
-    </pre>
-</blockquote>
-
-</blockquote><h4><A href="#TOC">»</A><a name="test">How</a> do I test code
-that uses the Qhull library?</h4><blockquote>
-
-<p>Compare the output from your program with the output from the
-Qhull program. Use option 'T1' or 'T4' to trace what Qhull is
-doing. Prepare a <i>small</i> example for which you know the
-output. Run the example through the Qhull program and your code.
-Compare the trace outputs. If you do everything right, the two
-trace outputs should be almost the same. The trace output will
-also guide you to the functions that you need to review. </p>
-
-</blockquote><h4><A href="#TOC">»</A><a name="orient">When</a> I compute a
-plane equation from a facet, I sometimes get an outward-pointing
-normal and sometimes an inward-pointing normal</h4><blockquote>
-
-<p>Qhull orients simplicial facets, and prints oriented output
-for 'i', 'Ft', and other options. The orientation depends on <i>both</i>
-the vertex order and the flag facet-&gt;toporient.</p>
-
-<p>Qhull does not orient 
-  non-simplicial facets. Instead it orients the facet's ridges. These are 
-  printed with the 'Qt' and 'Ft' option. The facet's hyperplane is oriented.  </p>
-
-</blockquote>
-<hr><!-- Navigation links -->
-
-<p><a><b>Up:</b> </a><a
- href="http://www.qhull.org">Home page for Qhull</a><br>
-<b>Up:</b> <A href="index.htm#TOC">Qhull manual</A>: Table of Contents <br>
-<b>To:</b> <A href="qh-quick.htm#programs">Programs</A>
-&#149; <A href="qh-quick.htm#options">Options</A> 
-&#149; <A href="qh-opto.htm#output">Output</A> 
-&#149; <A href="qh-optf.htm#format">Formats</A> 
-&#149; <A href="qh-optg.htm#geomview">Geomview</A> 
-&#149; <A href="qh-optp.htm#print">Print</A>
-&#149; <A href="qh-optq.htm#qhull">Qhull</A> 
-&#149; <A href="qh-optc.htm#prec">Precision</A> 
-&#149; <A href="qh-optt.htm#trace">Trace</A> <br>
-<b>To:</b> <A href="#TOC">FAQ: Table of Contents</A><br><!-- GC common information -->
-
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><IMG align=middle
- height=40 src="qh--geom.gif" width=40 ></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: 
-Sept. 25, 1995 --- <!-- hhmts start -->Last modified: see top 
-<!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-get.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-get.htm
deleted file mode 100644
index 2fd374e69272ddbaedd4234c39cdc88c2bbe87bb..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-get.htm
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull Downloads</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b>Up:</b> <a href="http://www.geom.uiuc.edu/software/download"><i>Downloadable Software from the
-Geometry Center </i></a><br>
-</p>
-
-<hr>
-
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/cone.html"><img
-src="../html/qh--cone.gif" alt="[CONE]" align="middle"
-width="100" height="100"></a> Qhull Downloads</h1>
-
-<ul>
-    <li><a href="http://www.qhull.org">Qhull Home Page</a> <p>Qhull
-        computes convex hulls, Delaunay triangulations, halfspace
-        intersections about a point, Voronoi diagrams, furthest-site Delaunay
-        triangulations, and furthest-site Voronoi diagrams. It
-        runs in 2-d, 3-d, 4-d, and higher dimensions. It
-        implements the Quickhull algorithm for computing the
-        convex hull. Qhull handles roundoff errors from floating
-        point arithmetic. It can approximate a convex hull. </p>
-
-	<p>Visit <a href="http://www.qhull.org/news">Qhull News</a>
-	for news, bug reports, change history, and users.</p>
-	</li>
-    <li><a
-        href="http://www.qhull.org/download/qhull-2003.1.zip">Download:
-        Qhull 2003.1 for Windows</a> (1.2 Mbytes) <p>Type: console programs for
-        Windows 95, 98, ME, 2000, NT, XP</p>
-        <p>Includes executables, documentation, sources files, and a cygwin Makefile. It runs in a
-        DOS window.</p>
-    </li>
-    <li><a href="http://www.qhull.org/download/qhull-2003.1-src.tgz">Download:
-        source for Qhull 2003.1</a> (600K) <p>Type: C source code for
-        32-bit and 64-bit architectures </p>
-        <p>Includes documentation, source files, and a simple Makefile</p>
-    </li>
-    <li><a href=http://savannah.nongnu.org/files/?group=qhull>Download: Qhull 2002.1 for Unix</a> 
-	<p>Type: C source code for Unix systems (Debian configure)</b>
-	
-	<p>Includes documentation, source files, and a configure Makefile.  
-	Includes Debian configuration files.  Includes downloads of Qhull's current and previous
-	versions.</p>
-
-	<!---
-	<p>B. Pearlmutter created a 
-<a href=http://packages.debian.org/stable/math/qhull-bin.html>Debian build</a> of Qhull 3.1
-and upgraded it to 2002.1. 
-	-->
-
-    </li>
-    <li><a href="http://www.qhull.org/download/qhull-2002.1-1mdk.i686.rpm">Download:
-        Qhull version 2002.1 i686 rpm</a> (643K) <p>Type: rpm build for Mandrake 8.2 and RedHat 7.3</p>
- 
-        <p>For other Linux systems, use the <a href="http://www.qhull.org/download/qhull-2002.1-1mdk.src.rpm">src rpm</a> [L. Mazet]
-    </li>
-
-    <li><a href=http://savannah.gnu.org/projects/qhull/>Qhull@Savannah</a> 
-	<p>Type: CVS repository</b>
-
-	<p>CVS repositiory of Qhull sources, documentation, and Makefiles.
-	</p>
-    </li>
-    <li><a href=http://www6.uniovi.es/ftp/pub/mirrors/geom.umn.edu/software/ghindex.html>Spanish
-	    mirror site</a> <p>Download Qhull's current and
-		previous versions from <a href=http://www.etsimo.uniovi.es/derechos.html>Servidor 
-		WWW de la Escuela de Minas</a> of the Universidad de Oviedo.</p>
-    </li>
-    <li><a
-        href="http://citeseer.nj.nec.com/83502.html">Download:
-        Article about Qhull</a> (210K) <p>Type: various formats on CiteSeer</p>
-        <p>Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T.,
-        &quot;The Quickhull algorithm for convex hulls,&quot; <i>ACM
-        Transactions on Mathematical Software</i>, vol. 22, pp.
-        469-483, Dec 1996 [<a
-        href="http://www.acm.org/pubs/citations/journals/toms/1996-22-4/p469-barber/">abstract</a>].</p>
-    </li>
-    <li><a
-        href="http://www.qhull.org/download/qhull-1.0.tar.gz">Download:
-        Qhull version 1.0</a> (92K) <p>Type: C source code for
-        32-bit architectures </p>
-        <p>Version 1.0 is a fifth the size of version 2.4. It
-        computes convex hulls and Delaunay triangulations. If a
-        precision error occurs, it stops with an error message.
-        It reports an initialization error for inputs made with
-        0/1 coordinates. </p>
-        <p>Version 1.0 compiles on a PC with Borland C++ 4.02 for
-        Win32 and DOS Power Pack. The options for rbox are
-        &quot;bcc32 -WX -w- -O2-e -erbox -lc rbox.c&quot;. The
-        options for qhull are the same. [D. Zwick] </p>
-    </li>
-    <li><a
-        href="http://www.qhull.org/download/qhull-1.0.sit.hqx">Download:
-        Qhull version 1.0 (Mac)</a> (180K) <p>Type: C source
-        code, packaged for Macintosh w/68881 </p>
-        <p>The Macintosh implementation of Qhull 1.0 reads input
-        from a file and returns the results to a file. The code
-        is compiled for a 68881 floating point coprocessor. The
-        package includes Think C projects for Qhull and the rbox
-        input generator. </p>
-    </li>
-</ul>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.geom.uiuc.edu/software/download"><i>Downloadable Software from the
-Geometry Center </i></a><br>
-<!-- GC common information --></p>
-
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="../html/qh--geom.gif" alt="[HOME]"
-align="middle"></a> <i>The Geometry Center Home Page</i> </p>
-
-<p>Comments to: <a href="mailto:qhull@qhull.org">qhull@qhull.org</a><br>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-impre.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-impre.htm
deleted file mode 100644
index 5f1ef5bd8021fa93047d1b8f4c59a75406676f31..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-impre.htm
+++ /dev/null
@@ -1,778 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Imprecision in Qhull</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a href="http://www.qhull.org">Home
-page</a> for Qhull <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of
-Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To: </b><a href="#TOC">Qhull imprecision</a>: Table of Contents
-(please wait while loading)
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/4dcube.html"><img
-src="qh--4d.gif" alt="[4-d cube]" align="middle" width="100"
-height="100"></a> Imprecision in Qhull</h1>
-
-<p>This section of the Qhull manual discusses the problems caused
-by coplanar points and why Qhull uses options '<a
-href="qh-optc.htm#C0">C-0</a>' or '<a href="qh-optq.htm#Qx">Qx</a>'
-by default. If you ignore precision issues with option '<a
-href="qh-optq.htm#Q0">Q0</a>', the output from Qhull can be
-arbitrarily bad. Qhull avoids precision problems if you merge facets (the default) or joggle
-the input ('<a
-href="qh-optq.htm#QJn">QJ</a>'). </p>
-
-<p>Use option '<a href="qh-optt.htm#Tv">Tv</a>' to verify the
-output from Qhull. It verifies that adjacent facets are clearly
-convex. It verifies that all points are on or below all facets. </p>
-
-<p>Qhull automatically tests for convexity if it detects
-precision errors while constructing the hull. </p>
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h2><a href="#TOP">»</a><a name="TOC">Qhull
-imprecision: Table of Contents </a></h2>
-
-<ul>
-    <li><a href="#prec">Precision problems</a></li>
-    <li><a href="#joggle">Merged facets or joggled input</a></li>
-    <li><a href="#delaunay">Delaunay triangulations</a></li>
-    <li><a href="#imprecise">Merged facets</a></li>
-    <li><a href="#how">How Qhull merges facets</a></li>
-    <li><a href="#limit">Limitations of merged facets</a></li>
-    <li><a href="#injoggle">Joggled input</a></li>
-    <li><a href="#exact">Exact arithmetic</a></li>
-    <li><a href="#approximate">Approximating a convex hull</a></li>
-</ul>
-
-<hr>
-
-<h2><a href="#TOC">»</a><a name="prec">Precision problems</a></h2>
-
-<p>Since Qhull uses floating point arithmetic, roundoff error
-occurs with each calculation. This causes problems for 
-geometric algorithms. Other floating point codes for convex
-hulls, Delaunay triangulations, and Voronoi diagrams also suffer
-from these problems.  Qhull handles most of them.</p>
-
-<p>There are several kinds of precision errors:</p>
-
-<ul>
-    <li>Representation error occurs when there are not enough
-        digits to represent a number, e.g., 1/3.</li>
-    <li>Measurement error occurs when the input coordinates are
-        from measurements. </li>
-    <li>Roundoff error occurs when a calculation is rounded to a
-        fixed number of digits, e.g., a floating point
-        calculation.</li>
-    <li>Approximation error occurs when the user wants an
-        approximate result because the exact result contains too
-        much detail.</li>
-</ul>
-
-<p>Under imprecision, calculations may return erroneous results.
-For example, roundoff error can turn a small, positive number
-into a small, negative number. See Milenkovic [<a
-href="index.htm#mile93">'93</a>] for a discussion of <em>strict
-robust geometry</em>. Qhull does not meet Milenkovic's criterion
-for accuracy. Qhull's error bound is empirical instead of
-theoretical.</p>
-
-<p>Qhull 1.0 checked for precision errors but did not handle
-them. The output could contain concave facets, facets with
-inverted orientation (&quot;flipped&quot; facets), more than two
-facets adjacent to a ridge, and two facets with exactly the same
-set of vertices.</p>
-
-<p>Qhull 2.4 and later automatically handles errors due to
-machine round-off. Option '<a href="qh-optc.htm#C0">C-0</a>' or '<a
-href="qh-optq.htm#Qx">Qx</a>' is set by default. In 5-d and
-higher, the output is clearly convex but an input point could be
-outside of the hull. This may be corrected by using option '<a
-href="qh-optc.htm#C0">C-0</a>', but then the output may contain
-wide facets.</p>
-
-<p>Qhull 2.5 and later provides option '<a href="qh-optq.htm#QJn">QJ</a>'
-to joggled input. Each input coordinate is modified by a
-small, random quantity. If a precision error occurs, a larger
-modification is tried. When no precision errors occur, Qhull is
-done. </p>
-
-<p>Qhull 3.1 and later provides option '<a href="qh-optq.htm#Qt">Qt</a>'
-for triangulated output.  This removes the need for 
-joggled input ('<a href="qh-optq.htm#QJn">QJ</a>').  
-Non-simplicial facets are triangulated.
-The facets may have zero area.
-Triangulated output is particularly useful for Delaunay triangulations.</p>
-
-<p>By handling round-off errors, Qhull can provide a variety of
-output formats. For example, it can return the halfspace that
-defines each facet ('<a href="qh-opto.htm#n">n</a>'). The
-halfspaces include roundoff error. If the halfspaces were exact,
-their intersection would return the original extreme points. With
-imprecise halfspaces and exact arithmetic, nearly incident points
-may be returned for an original extreme point. By handling
-roundoff error, Qhull returns one intersection point for each of
-the original extreme points. Qhull may split or merge an extreme
-point, but this appears to be unlikely.</p>
-
-<p>The following pipe implements the identity function for
-extreme points (with roundoff):
-<blockquote>
-    qconvex <a href="qh-optf.htm#FV">FV</a> <a
-    href="qh-opto.htm#n">n</a> | qhalf <a href="qh-optf.htm#Fp">Fp</a>
-</blockquote>
-
-<p>Bernd Gartner published his 
-<a href=http://www.inf.ethz.ch/personal/gaertner/miniball.html>Miniball</a>
-algorithm ["Fast and robust smallest enclosing balls", <i>Algorithms - ESA '99</i>, LNCS 1643].
-It uses floating point arithmetic and a carefully designed primitive operation.
-It is practical to 20-D or higher, and identifies at least two points on the
-convex hull of the input set.  Like Qhull, it is an incremental algorithm that
-processes points furthest from the intermediate result and ignores 
-points that are close to the intermediate result.
-
-<h2><a href="#TOC">»</a><a name="joggle">Merged facets or joggled input</a></h2>
-
-<p>This section discusses the choice between merged facets and joggled input. 
-By default, Qhull uses merged facets to handle
-precision problems. With option '<a href="qh-optq.htm#QJn">QJ</a>',
-the input is joggled. See <a href="qh-eg.htm#joggle">examples</a>
-of joggled input and triangulated output.
-<ul>
-<li>Use merged facets (the default)
-when you want non-simplicial output (e.g., the faces of a cube). 
-<li>Use merged facets and triangulated output ('<a href="qh-optq.htm#Qt">Qt</a>') when
-you want simplicial output and coplanar facets (e.g., triangles for a Delaunay triangulation).
-<li>Use joggled input ('<a href="qh-optq.htm#QJn">QJ</a>') when you need clearly-convex, 
-simplicial output. 
-</ul>
-
-<p>The choice between merged facets and joggled input depends on
-the application. Both run about the same speed. Joggled input may
-be faster if the initial joggle is sufficiently large to avoid
-precision errors. 
-
-<p>Most applications should used merged facets
-with triangulated output. </p>
-
-<p>Use merged facets (the
-default, '<a href="qh-optc.htm#C0">C-0</a>') 
-or triangulated output ('<a href="qh-optq.htm#Qt">Qt</a>') if </p>
-
-<ul>
-    <li>Your application supports non-simplicial facets, or
-    it allows degenerate, simplicial facets (option '<a href="qh-optq.htm#Qt">Qt</a>'). </li>
-    <li>You do not want the input modified. </li>
-    <li>You want to set additional options for approximating the
-        hull. </li>
-    <li>You use single precision arithmetic (<a href="../src/user.h#realT">realT</a>).
-    </li>
-</ul>
-
-<p>Use joggled input ('<a href="qh-optq.htm#QJn">QJ</a>') if </p>
-
-<ul>
-    <li>Your application needs clearly convex, simplicial output</li>
-    <li>Your application supports perturbed input points and narrow triangles.</li>
-    <li>Seven significant digits is sufficient accuracy.</li>
-</ul>
-
-<p>You may use both techniques or combine joggle with
-post-merging ('<a href="qh-optc.htm#Cn2">Cn</a>'). </p>
-
-<p>Other researchers have used techniques similar to joggled
-input. Sullivan and Beichel [ref?] randomly perturb the input
-before computing the Delaunay triangulation. Corkum and Wyllie
-[news://comp.graphics, 1990] randomly rotate a polytope before
-testing point inclusion. Edelsbrunner and Mucke [Symp. Comp.
-Geo., 1988] and Yap [J. Comp. Sys. Sci., 1990] symbolically
-perturb the input to remove singularities. </p>
-
-<p>Merged facets ('<a href="qh-optc.htm#C0">C-0</a>') handles
-precision problems directly. If a precision problem occurs, Qhull
-merges one of the offending facets into one of its neighbors.
-Since all precision problems in Qhull are associated with one or
-more facets, Qhull will either fix the problem or attempt to merge the
-last remaining facets. </p>
-
-<h2><a href="#TOC">»</a><a name="delaunay">Delaunay
-triangulations </a></h2>
-
-<p>Programs that use Delaunay triangulations traditionally assume
-a triangulated input. By default, <a href=qdelaun.htm>qdelaunay</a>
-merges regions with cocircular or cospherical input sites.
-If you want a simplicial triangulation
-use triangulated output ('<a href="qh-optq.htm#Qt">Qt</a>') or joggled
-input ('<a href="qh-optq.htm#QJn">QJ</a>'). 
-
-<p>For Delaunay triangulations, triangulated
-output should produce good results.  All points are within roundoff error of
-a paraboloid.  If two points are nearly incident, one will be a
-coplanar point.  So all points are clearly separated and convex.  
-If qhull reports deleted vertices, the triangulation
-may contain serious precision faults.  Deleted vertices are reported
-in the summary ('<a href="qh-opto.htm#s">s</a>', '<a href="qh-optf.htm#Fs">Fs</a>'</p>
-
-<p>You should use option '<a href="qh-optq.htm#Qbb">Qbb</a>' with Delaunay
-triangulations. It scales the last coordinate and may reduce
-roundoff error. It is automatically set for <a href=qdelaun.htm>qdelaunay</a>, 
-<a href=qvoronoi.htm>qvoronoi</a>, and option '<a
-href="qh-optq.htm#QJn">QJ</a>'.</p>
-
-<p>Edelsbrunner, H, <i>Geometry and Topology for Mesh Generation</i>, Cambridge University Press, 2001.
-Good mathematical treatise on Delaunay triangulation and mesh generation for 2-d 
-and 3-d surfaces.  The chapter on surface simplification is 
-particularly interesting.  It is similar to facet merging in Qhull.
-
-<p>Veron and Leon published an algorithm for shape preserving polyhedral
-simplification with bounded error [<i>Computers and Graphics</i>, 22.5:565-585, 1998].
-It remove nodes using front propagation and multiple remeshing.
-
-<h2><a href="#TOC">»</a><a name="imprecise">Merged facets </a></h2>
-
-<p>Qhull detects precision
-problems when computing distances. A precision problem occurs if
-the distance computation is less than the maximum roundoff error.
-Qhull treats the result of a hyperplane computation as if it
-were exact.</p>
-
-<p>Qhull handles precision problems by merging non-convex facets.
-The result of merging two facets is a thick facet defined by an <i>inner
-plane</i> and an <i>outer plane</i>. The inner and outer planes
-are offsets from the facet's hyperplane. The inner plane is
-clearly below the facet's vertices. At the end of Qhull, the
-outer planes are clearly above all input points. Any exact convex
-hull must lie between the inner and outer planes.</p>
-
-<p>Qhull tests for convexity by computing a point for each facet.
-This point is called the facet's <i>centrum</i>. It is the
-arithmetic center of the facet's vertices projected to the
-facet's hyperplane. For simplicial facets with <em>d</em>
-vertices, the centrum is equivalent to the centroid or center of
-gravity. </p>
-
-<p>Two neighboring facets are convex if each centrum is clearly
-below the other hyperplane. The '<a href="qh-optc.htm#Cn2">Cn</a>'
-or '<a href="qh-optc.htm#Cn">C-n</a>' options sets the centrum's
-radius to <i>n </i>. A centrum is clearly below a hyperplane if
-the computed distance from the centrum to the hyperplane is
-greater than the centrum's radius plus two maximum roundoff
-errors. Two are required because the centrum can be the maximum
-roundoff error above its hyperplane and the distance computation
-can be high by the maximum roundoff error.</p>
-
-<p>With the '<a href="qh-optc.htm#Cn">C-n</a>' or '<a
-href="qh-optc.htm#An">A-n </a>' options, Qhull merges non-convex
-facets while constructing the hull. The remaining facets are
-clearly convex. With the '<a href="qh-optq.htm#Qx">Qx </a>'
-option, Qhull merges coplanar facets after constructing the hull.
-While constructing the hull, it merges coplanar horizon facets,
-flipped facets, concave facets and duplicated ridges. With '<a
-href="qh-optq.htm#Qx">Qx</a>', coplanar points may be missed, but
-it appears to be unlikely.</p>
-
-<p>If the user sets the '<a href="qh-optc.htm#An2">An</a>' or '<a
-href="qh-optc.htm#An">A-n</a>' option, then all neighboring
-facets are clearly convex and the maximum (exact) cosine of an
-angle is <i>n</i>.</p>
-
-<p>If '<a href="qh-optc.htm#C0">C-0</a>' or '<a
-href="qh-optq.htm#Qx">Qx</a>' is used without other precision
-options (default), Qhull tests vertices instead of centrums for
-adjacent simplices. In 3-d, if simplex <i>abc</i> is adjacent to
-simplex <i>bcd</i>, Qhull tests that vertex <i>a</i> is clearly
-below simplex <i>bcd </i>, and vertex <i>d</i> is clearly below
-simplex <i>abc</i>. When building the hull, Qhull tests vertices
-if the horizon is simplicial and no merges occur. </p>
-
-<h2><a href="#TOC">»</a><a name="how">How Qhull merges facets</a></h2>
-
-<p>If two facets are not clearly convex, then Qhull removes one
-or the other facet by merging the facet into a neighbor. It
-selects the merge which minimizes the distance from the
-neighboring hyperplane to the facet's vertices. Qhull also
-performs merges when a facet has fewer than <i>d</i> neighbors (called a
-degenerate facet), when a facet's vertices are included in a
-neighboring facet's vertices (called a redundant facet), when a
-facet's orientation is flipped, or when a ridge occurs between
-more than two facets.</p>
-
-<p>Qhull performs merges in a series of passes sorted by merge
-angle. Each pass merges those facets which haven't already been
-merged in that pass. After a pass, Qhull checks for redundant
-vertices. For example, if a vertex has only two neighbors in 3-d,
-the vertex is redundant and Qhull merges it into an adjacent
-vertex.</p>
-
-<p>Merging two simplicial facets creates a non-simplicial facet
-of <em>d+1</em> vertices. Additional merges create larger facets.
-When merging facet A into facet B, Qhull retains facet B's
-hyperplane. It merges the vertices, neighbors, and ridges of both
-facets. It recomputes the centrum if a wide merge has not
-occurred (qh_WIDEcoplanar) and the number of extra vertices is
-smaller than a constant (qh_MAXnewcentrum).</p>
-
-
-<h2><a href="#TOC">»</a><a name="limit">Limitations of merged
-facets</a></h2>
-
-<ul>
-<li><b>Uneven dimensions</b> --
-If one coordinate has a larger absolute value than other
-coordinates, it may dominate the effect of roundoff errors on
-distance computations. You may use option '<a
-href="qh-optq.htm#QbB">QbB</a>' to scale points to the unit cube.
-For Delaunay triangulations and Voronoi diagrams, <a href=qdelaun.htm>qdelaunay</a>
-and <a href=qvoronoi.htm>qvoronoi</a> always set
-option '<a href="qh-optq.htm#Qbb">Qbb</a>'.  It scales the last
-coordinate to [0,m] where <i>m</i> is the maximum width of the
-other coordinates.  Option '<a href="qh-optq.htm#Qbb">Qbb</a>' is
-needed for Delaunay triangulations of integer coordinates
-and nearly cocircular points.
-
-<p>For example, compare
-<pre>
-	rbox 1000 W0 t | qconvex Qb2:-1e-14B2:1e-14
-</pre>
-with
-<pre>
-	rbox 1000 W0 t | qconvex
-</pre>
-The distributions are the same but the first is compressed to a 2e-14 slab.
-<p>
-<li><b>Post-merging of coplanar facets</b> -- In 5-d and higher, option '<a href="qh-optq.htm#Qx">Qx</a>'
-(default) delays merging of coplanar facets until post-merging.
-This may allow &quot;dents&quot; to occur in the intermediate
-convex hulls. A point may be poorly partitioned and force a poor
-approximation. See option '<a href="qh-optq.htm#Qx">Qx</a>' for
-further discussion.</p>
-
-<p>This is difficult to produce in 5-d and higher.  Option '<a href="qh-optq.htm#Q6">Q6</a>' turns off merging of concave
-facets.  This is similar to 'Qx'.  It may lead to serious precision errors,
-for example,
-<pre>
-	rbox 10000 W1e-13  | qhull Q6  Tv
-</pre>
-
-<p>
-<li><b>Maximum facet width</b> --
-Qhull reports the maximum outer plane and inner planes (if
-more than roundoff error apart). There is no upper bound
-for either figure. This is an area for further research. Qhull
-does a good job of post-merging in all dimensions. Qhull does a
-good job of pre-merging in 2-d, 3-d, and 4-d. With the '<a
-href="qh-optq.htm#Qx">Qx</a>' option, it does a good job in
-higher dimensions. In 5-d and higher, Qhull does poorly at
-detecting redundant vertices. </p>
-
-<p>In the summary ('<a href="qh-opto.htm#s">s</a>'), look at the
-ratio between the maximum facet width and the maximum width of a
-single merge, e.g., &quot;(3.4x)&quot;. Qhull usually reports a
-ratio of four or lower in 3-d and six or lower in 4-d. If it
-reports a ratio greater than 10, this may indicate an
-implementation error.  Narrow distributions (see following) may
-produce wide facets.
-
-<p>For example, if special processing for narrow distributions is
-turned off ('<a href="qh-optq.htm#Q10">Q10</a>'), qhull may produce
-a wide facet:</p>
-<pre>
-	 RBOX 1000 L100000 s G1e-16 t1002074964 | QHULL Tv Q10
-</pre>
-
-<p>
-<li><b>Narrow distribution</b> -- In 3-d, a narrow distribution may result in a poor
-approximation. For example, if you do not use qdelaunay nor option 
-'<a href="qh-optq.htm#Qbb">Qbb</a>', the furthest-site
-Delaunay triangulation of nearly cocircular points may produce a poor
-approximation:
-<pre>
-	 RBOX s 5000 W1e-13 D2 t1002151341 | QHULL d Qt
-	 RBOX 1000 s W1e-13 t1002231672 | QHULL d Tv
-</pre>
-
-<p>During
-construction of the hull, a point may be above two
-facets with opposite orientations that span the input
-set.  Even though the point may be nearly coplanar with both
-facets, and can be distant from the precise convex
-hull of the input sites.  Additional facets leave the point distant from
-a facet.  To fix this problem, add option '<a href="qh-optq.htm#Qbb">Qbb</a>'
-(it scales the last coordinate).  Option '<a href="qh-optq.htm#Qbb">Qbb</a>'
-is automatically set for <a href=qdelaun.htm>qdelaunay</a> and <a href=qvoronoi.htm>qvoronoi</a>.
-
-<p>Qhull generates a warning if the initial simplex is narrow.
-For narrow distributions, Qhull changes how it processes coplanar
-points -- it does not make a point coplanar until the hull is
-finished.  
-Use option '<a href="qh-optq.htm#Q10">Q10</a>' to try Qhull without
-special processing for narrow distributions.
-For example, special processing is needed for:
-<pre>
-	 RBOX 1000 L100000 s G1e-16 t1002074964 | QHULL Tv Q10
-</pre>
-
-<p>You may turn off the warning message by reducing
-qh_WARNnarrow in <tt>user.h</tt> or by setting option 
-'<a href="qh-optp.htm#Pp">Pp</a>'. </p>
-
-<p>Similar problems occur for distributions with a large flat facet surrounded
-with many small facet at a sharp angle to the large facet.  
-Qhull 3.1 fixes most of these problems, but a poor approximation can occur.
-A point may be left outside of the convex hull ('<a href="qh-optt.htm#Tv">Tv</a>').
-Examples include
-the furthest-site Delaunay triangulation of nearly cocircular points plus the origin, and the convex hull of a cone of nearly cocircular points. The width of the band is 10^-13.
-<pre>
-	rbox s 1000 W1e-13 P0 D2 t996799242 | qhull d Tv
-	rbox 1000 s Z1 G1e-13 t1002152123 | qhull Tv
-	RBOX 1000 s Z1 G1e-13 t1002231668 | QHULL Tv
-</pre>
-
-<p>
-<li><b>Quadratic running time</b> -- If the output contains large, non-simplicial
-facets, the running time for Qhull may be quadratic in the size of the triangulated
-output.   For example, <tt>RBOX 1000 s W1e-13 c G2 | QHULL d</tt> is 4 times 
-faster for 500 points.  The convex hull contains two large nearly spherical facets and
-many nearly coplanar facets.  Each new point retriangulates the spherical facet and repartitions the remaining points into all of the nearly coplanar facets.
-In this case, quadratic running time is avoided if you use qdelaunay, 
-add option '<a href="qh-optq.htm#Qbb">Qbb</a>',
-or add the origin ('P0') to the input.
-<p>
-<li><b>Facet with zero-area</b> --
-It is possible for a zero-area facet to be convex with its
-neighbors. This can occur if the hyperplanes of neighboring
-facets are above the facet's centrum, and the facet's hyperplane
-is above the neighboring centrums. Qhull computes the facet's
-hyperplane so that it passes through the facet's vertices. The
-vertices can be collinear. </p>
-
-<p>
-<li><b>No more facets</b> -- Qhull reports an error if there are <em>d+1</em> facets left
-and two of the facets are not clearly convex. This typically
-occurs when the convexity constraints are too strong or the input
-points are degenerate. The former is more likely in 5-d and
-higher -- especially with option '<a href="qh-optc.htm#Cn">C-n</a>'.</p>
-
-<p>
-<li><b>Deleted cone</b> -- Lots of merging can end up deleting all
-of the new facets for a point.  This is a rare event that has
-only been seen while debugging the code.
-
-<p>
-<li><b>Triangulated output leads to precision problems</b> -- With sufficient
-merging, the ridges of a non-simplicial facet may have serious topological
-and geometric problems.  A ridge may be between more than two 
-neighboring facets.  If so, their triangulation ('<a href="qh-optq.htm#Qt">Qt</a>')
-will fail since two facets have the same vertex set.  Furthermore,
-a triangulated facet may have flipped orientation compared to its
-neighbors.</li>
-
-<p>The triangulation process detects degenerate facets with
-only two neighbors.  These are marked degenerate.  They have
-zero area.
-
-<p>
-<li><b>Coplanar points</b> --
-Option '<a href="qh-optq.htm#Qc">Qc</a>' is determined by
-qh_check_maxout() after constructing the hull. Qhull needs to
-retain all possible coplanar points in the facets' coplanar sets.
-This depends on qh_RATIOnearInside in <tt>user.h.</tt>
-Furthermore, the cutoff for a coplanar point is arbitrarily set
-at the minimum vertex. If coplanar points are important to your
-application, remove the interior points by hand (set '<a
-href="qh-optq.htm#Qc">Qc</a> <a href="qh-optq.htm#Qi">Qi</a>') or
-make qh_RATIOnearInside sufficiently large.</p>
-
-<p>
-<li><b>Maximum roundoff error</b> -- Qhull computes the maximum roundoff error from the maximum
-coordinates of the point set. Usually the maximum roundoff error
-is a reasonable choice for all distance computations. The maximum
-roundoff error could be computed separately for each point or for
-each distance computation. This is expensive and it conflicts
-with option '<a href="qh-optc.htm#Cn">C-n</a>'.
-
-<p>
-<li><b>All flipped or upper Delaunay</b> -- When a lot of merging occurs for 
-Delaunay triangulations, a new point may lead to no good facets.  For example,
-try a strong convexity constraint:
-<pre>
-	rbox 1000 s t993602376 | qdelaunay C-1e-3
-</pre>
-
-</ul>
-
-<h2><a href="#TOC">»</a><a name="injoggle">Joggled input</a></h2>
-
-<p>Joggled input is a simple work-around for precision problems
-in computational geometry [&quot;joggle: to shake or jar
-slightly,&quot; Amer. Heritage Dictionary].  Other names are
-<i>jostled input</i> or <i>random perturbation</i>.  
-Qhull joggles the
-input by modifying each coordinate by a small random quantity. If
-a precision problem occurs, Qhull joggles the input with a larger
-quantity and the algorithm is restarted. This process continues
-until no precision problems occur. Unless all inputs incur
-precision problems, Qhull will terminate. Qhull adjusts the inner
-and outer planes to account for the joggled input. </p>
-
-<p>Neither joggle nor merged facets has an upper bound for the width of the output
-facets, but both methods work well in practice. Joggled input is
-easier to justify. Precision errors occur when the points are
-nearly singular. For example, four points may be coplanar or
-three points may be collinear. Consider a line and an incident
-point. A precision error occurs if the point is within some
-epsilon of the line. Now joggle the point away from the line by a
-small, uniformly distributed, random quantity. If the point is
-changed by more than epsilon, the precision error is avoided. The
-probability of this event depends on the maximum joggle. Once the
-maximum joggle is larger than epsilon, doubling the maximum
-joggle will halve the probability of a precision error. </p>
-
-<p>With actual data, an analysis would need to account for each
-point changing independently and other computations. It is easier
-to determine the probabilities empirically ('<a href="qh-optt.htm#TRn">TRn</a>') . For example, consider
-computing the convex hull of the unit cube centered on the
-origin. The arithmetic has 16 significant decimal digits. </p>
-
-<blockquote>
-    <p><b>Convex hull of unit cube</b> </p>
-    <table border="1">
-        <tr>
-            <th align="left">joggle</th>
-            <th align="right">error prob. </th>
-        </tr>
-        <tr>
-            <td align="right">1.0e-15</td>
-            <td align="center">0.983 </td>
-        </tr>
-        <tr>
-            <td align="right">2.0e-15</td>
-            <td align="center">0.830 </td>
-        </tr>
-        <tr>
-            <td align="right">4.0e-15</td>
-            <td align="center">0.561 </td>
-        </tr>
-        <tr>
-            <td align="right">8.0e-15</td>
-            <td align="center">0.325 </td>
-        </tr>
-        <tr>
-            <td align="right">1.6e-14</td>
-            <td align="center">0.185 </td>
-        </tr>
-        <tr>
-            <td align="right">3.2e-14</td>
-            <td align="center">0.099 </td>
-        </tr>
-        <tr>
-            <td align="right">6.4e-14</td>
-            <td align="center">0.051 </td>
-        </tr>
-        <tr>
-            <td align="right">1.3e-13</td>
-            <td align="center">0.025 </td>
-        </tr>
-        <tr>
-            <td align="right">2.6e-13</td>
-            <td align="center">0.010 </td>
-        </tr>
-        <tr>
-            <td align="right">5.1e-13</td>
-            <td align="center">0.004 </td>
-        </tr>
-        <tr>
-            <td align="right">1.0e-12</td>
-            <td align="center">0.002 </td>
-        </tr>
-        <tr>
-            <td align="right">2.0e-12</td>
-            <td align="center">0.001 </td>
-        </tr>
-    </table>
-</blockquote>
-
-<p>A larger joggle is needed for multiple points. Since the
-number of potential singularities increases, the probability of
-one or more precision errors increases. Here is an example. </p>
-
-<blockquote>
-    <p><b>Convex hull of 1000 points on unit cube</b> </p>
-    <table border="1">
-        <tr>
-            <th align="left">joggle</th>
-            <th align="right">error prob. </th>
-        </tr>
-        <tr>
-            <td align="right">1.0e-12</td>
-            <td align="center">0.870 </td>
-        </tr>
-        <tr>
-            <td align="right">2.0e-12</td>
-            <td align="center">0.700 </td>
-        </tr>
-        <tr>
-            <td align="right">4.0e-12</td>
-            <td align="center">0.450 </td>
-        </tr>
-        <tr>
-            <td align="right">8.0e-12</td>
-            <td align="center">0.250 </td>
-        </tr>
-        <tr>
-            <td align="right">1.6e-11</td>
-            <td align="center">0.110 </td>
-        </tr>
-        <tr>
-            <td align="right">3.2e-11</td>
-            <td align="center">0.065 </td>
-        </tr>
-        <tr>
-            <td align="right">6.4e-11</td>
-            <td align="center">0.030 </td>
-        </tr>
-        <tr>
-            <td align="right">1.3e-10</td>
-            <td align="center">0.010 </td>
-        </tr>
-        <tr>
-            <td align="right">2.6e-10</td>
-            <td align="center">0.008 </td>
-        </tr>
-        <tr>
-            <td align="right">5.1e-09</td>
-            <td align="center">0.003 </td>
-        </tr>
-    </table>
-</blockquote>
-
-<p>Other distributions behave similarly. No distribution should
-behave significantly worse. In Euclidean space, the probability
-measure of all singularities is zero. With floating point
-numbers, the probability of a singularity is non-zero. With
-sufficient digits, the probability of a singularity is extremely
-small for random data. For a sufficiently large joggle, all data
-is nearly random data. </p>
-
-<p>Qhull uses an initial joggle of 30,000 times the maximum
-roundoff error for a distance computation. This avoids most
-potential singularities. If a failure occurs, Qhull retries at
-the initial joggle (in case bad luck occurred). If it occurs
-again, Qhull increases the joggle by ten-fold and tries again.
-This process repeats until the joggle is a hundredth of the width
-of the input points. Qhull reports an error after 100 attempts.
-This should never happen with double-precision arithmetic. Once
-the probability of success is non-zero, the probability of
-success increases about ten-fold at each iteration. The
-probability of repeated failures becomes extremely small. </p>
-
-<p>Merged facets produces a significantly better approximation.
-Empirically, the maximum separation between inner and outer
-facets is about 30 times the maximum roundoff error for a
-distance computation. This is about 2,000 times better than
-joggled input. Most applications though will not notice the
-difference. </p>
-
-<h2><a href="#TOC">»</a><a name="exact">Exact arithmetic</a></h2>
-
-<p>Exact arithmetic may be used instead of floating point.
-Singularities such as coplanar points can either be handled
-directly or the input can be symbolically perturbed. Using exact
-arithmetic is slower than using floating point arithmetic and the
-output may take more space. Chaining a sequence of operations
-increases the time and space required. Some operations are
-difficult to do.</p>
-
-<p>Clarkson's <a
-href="http://netlib.bell-labs.com/netlib/voronoi/hull.html">hull
-program</a> and Shewchuk's <a
-href="http://www.cs.cmu.edu/~quake/triangle.html">triangle
-program</a> are practical implementations of exact arithmetic.</p>
-
-<p>Clarkson limits the input precision to about fifteen digits.
-This reduces the number of nearly singular computations. When a
-determinant is nearly singular, he uses exact arithmetic to
-compute a precise result.</p>
-
-<h2><a href="#TOC">»</a><a name="approximate">Approximating a
-convex hull</a></h2>
-
-<p>Qhull may be used for approximating a convex hull. This is
-particularly valuable in 5-d and higher where hulls can be
-immense. You can use '<a href="qh-optq.htm#Qx">Qx</a> <a
-href="qh-optc.htm#Cn">C-n</a>' to merge facets as the hull is
-being constructed. Then use '<a href="qh-optc.htm#Cn2">Cn</a>'
-and/or '<a href="qh-optc.htm#An2">An</a>' to merge small facets
-during post-processing. You can print the <i>n</i> largest facets
-with option '<a href="qh-optp.htm#PAn">PAn</a>'. You can print
-facets whose area is at least <i>n</i> with option '<a
-href="qh-optp.htm#PFn">PFn</a>'. You can output the outer planes
-and an interior point with '<a href="qh-optf.htm#FV">FV</a> <a
-href="qh-optf.htm#Fo">Fo</a>' and then compute their intersection
-with 'qhalf'. </p>
-
-<p>To approximate a convex hull in 6-d and higher, use
-post-merging with '<a href="qh-optc.htm#Wn">Wn</a>' (e.g., qhull
-W1e-1 C1e-2 TF2000). Pre-merging with a convexity constraint
-(e.g., qhull Qx C-1e-2) often produces a poor approximation or
-terminates with a simplex. Option '<a href="qh-optq.htm#QbB">QbB</a>'
-may help to spread out the data.</p>
-
-<p>You will need to experiment to determine a satisfactory set of
-options. Use <a href="rbox.htm">rbox</a> to generate test sets
-quickly and <a href="index.htm#geomview">Geomview</a> to view
-the results. You will probably want to write your own driver for
-Qhull using the Qhull library. For example, you could select the
-largest facet in each quadrant.</p>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home
-page</a> for Qhull <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of
-Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#TOC">Qhull imprecision: Table of Contents</a>
-
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-in.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-in.htm
deleted file mode 100644
index 482c82b73263e96a3c25e481d26c075205dc09d5..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-in.htm
+++ /dev/null
@@ -1,620 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull internals</title>
-<!-- Navigation links -->
-</head>
-
-<body>
-
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page for Qhull</a>
-<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual: Table of
-Contents</a><br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#TOC">Qhull internals</a>: Table of Contents
-(please wait while loading) <br>
-<b>Dn:</b> <a href="../src/index.htm">Qhull functions</a>, macros, and data
-structures
-</p>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/4dcube.html"><img
-src="qh--4d.gif" alt="[4-d cube]" align="middle" width="100"
-height="100"></a> Qhull internals</h1>
-
-<p>This section discusses the internals of Qhull. </p>
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h2><a href="#TOP">»</a><a name="TOC">Qhull internals: Table of
-Contents </a></h2>
-
-<ul>
-    <li><a href="#performance">Performance</a> of Qhull</li>
-    <li><a href="#library">Calling Qhull</a> from your program
-    <ul>
-            <li><a href="#constrained">Constrained Delaunay</a>
-                triangulation</li>
-            <li><a href="#dids">Delaunay triangulations</a> and point indices</li>
-            <li><a href="#findfacet">Locate facet</a> with
-                qh_findbestfacet()</li>
-            <li><a href="#inc">On-line construction</a> with
-                qh_addpoint()</li>
-            <li><a href="#mem">Sets and quick memory</a> allocation</li>
-	<li><a href="#tricoplanar">Tricoplanar facets</a> and option 'Qt'</li>
-            <li><a href="#vneighbor">Vertex neighbors</a> of a vertex</li>
-            <li><a href="#vertices">Voronoi vertices</a> of a region</li>
-            <li><a href="#ridge">Voronoi vertices</a> of a ridge</li>
-        </ul>
-    </li>
-    <li><a href="#enhance">Enhancements</a> to Qhull</li>
-    <li><a href="../src/index.htm">Qhull functions</a>, macros, and data
-        structures </li>
-</ul>
-
-<hr>
-
-<h2><a href="#TOC">»</a><a name="performance">Performance of
-Qhull </a></h2>
-
-<p>Empirically, Qhull's performance is balanced in the sense that
-the average case happens on average. This may always be true if
-the precision of the input is limited to at most <i>O(log n)</i>
-bits. Empirically, the maximum number of vertices occurs at the
-end of constructing the hull. </p>
-
-<p>Let <i>n</i> be the number of input points, <i>v</i> be the
-number of output vertices, and <i>f_v </i>be the maximum number
-of facets for a convex hull of <i>v</i> vertices. If both
-conditions hold, Qhull runs in <i>O(n log v)</i> in 2-d and 3-d
-and <i>O(n f_v/v)</i> otherwise. The function <i>f_v</i>
-increases rapidly with dimension. It is <em>O(v^floor(d/2) /
-floor(d/2)!)</em>.</p>
-
-<p>The time complexity for merging is unknown. Options '<a
-href="qh-optc.htm#C0">C-0</a>' and '<a href="qh-optq.htm#Qx">Qx</a>'
-(defaults) handle precision problems due to floating-point
-arithmetic. They are optimized for simplicial outputs. </p>
-
-<p>When running large data sets, you should monitor Qhull's
-performance with the '<a href="qh-optt.htm#TFn">TFn</a>' option.
-The time per facet is approximately constant. In high-d with many
-merged facets, the size of the ridge sets grows rapidly. For
-example the product of 8-d simplices contains 18 facets and
-500,000 ridges. This will increase the time needed per facet. </p>
-
-<p>As dimension increases, the number of facets and ridges in a
-convex hull grows rapidly for the same number of vertices. For
-example, the convex hull of 300 cospherical points in 6-d has
-30,000 facets. </p>
-
-<p>If Qhull appears to stop processing facets, check the memory
-usage of Qhull. If more than 5-10% of Qhull is in virtual memory,
-its performance will degrade rapidly. </p>
-
-<p>When building hulls in 20-d and higher, you can follow the
-progress of Qhull with option '<a href="qh-optt.htm#Tn">T1</a>'.
-It reports each major event in processing a point. </p>
-
-<p>To reduce memory requirements, recompile Qhull for
-single-precision reals (REALfloat in <tt>user.h</tt>).
-Single-precision does not work with joggle ('<a
-href="qh-optq.htm#QJn">QJ</a>'). Check qh_MEMalign in <tt>user.h</tt>
-and the match between free list sizes and data structure sizes
-(see the end of the statistics report from '<a
-href="qh-optt.htm#Ts">Ts</a>'). If free list sizes do not match,
-you may be able to use a smaller qh_MEMalign. Setting
-qh_COMPUTEfurthest saves a small amount of memory, as does
-clearing qh_MAXoutside (both in <tt>user.h</tt>).</p>
-
-<p>Shewchuk is working on a 3-d version of his triangle
-program.  It is optimized for 3-d simplicial Delaunay triangulation
-and uses less memory than Qhull.</p>
-
-<p>To reduce the size of the Qhull executable, consider
-qh_NOtrace and qh_KEEPstatistics 0 in <tt>user.h</tt>. By
-changing <tt>user.c </tt>you can also remove the input/output
-code in <tt>io.c</tt>. If you don't need facet merging, then
-version 1.01 of Qhull is much smaller. It contains some bugs that
-prevent Qhull from initializing in simple test cases. It is
-slower in high dimensions.</p>
-
-<p>The precision options, '<a href="qh-optc.htm#Vn">Vn</a>', '<a
-href="qh-optc.htm#Wn">Wn</a>', '<a href="qh-optc.htm#Un">Un</a>'.
-'<a href="qh-optc.htm#An">A-n</a>', '<a href="qh-optc.htm#Cn">C-n</a>',
-'<a href="qh-optc.htm#An2">An</a>', '<a href="qh-optc.htm#Cn2">Cn</a>',
-and '<a href="qh-optq.htm#Qx">Qx</a>', may have large effects on
-Qhull performance. You will need to experiment to find the best
-combination for your application. </p>
-
-<p>The verify option ('<a href="qh-optt.htm#Tv">Tv</a>') checks
-every point after the hull is complete. If facet merging is used,
-it checks that every point is inside every facet. This can take a
-very long time if there are many points and many facets. You can
-interrupt the verify without losing your output. If facet merging
-is not used and there are many points and facets, Qhull uses a
-directed search instead of an exhaustive search. This should be
-fast enough for most point sets. Directed search is not used for
-facet merging because directed search was already used for
-updating the facets' outer planes.</p>
-
-<p>The check-frequently option ('<a href="qh-optt.htm#Tc">Tc</a>')
-becomes expensive as the dimension increases. The verify option
-('<a href="qh-optt.htm#Tv">Tv</a>') performs many of the same
-checks before outputting the results.</p>
-
-<p>Options '<a href="qh-optq.htm#Q0">Q0</a>' (no pre-merging), '<a
-href="qh-optq.htm#Q3">Q3</a>' (no checks for redundant vertices),
-'<a href="qh-optq.htm#Q5">Q5</a>' (no updates for outer planes),
-and '<a href="qh-optq.htm#Q8">Q8</a>' (no near-interior points)
-increase Qhull's speed. The corresponding operations may not be
-needed in your application.</p>
-
-<p>In 2-d and 3-d, a partial hull may be faster to produce.
-Option '<a href="qh-optq.htm#QGn">QgGn</a>' only builds facets
-visible to point n. Option '<a href="qh-optq.htm#QVn">QgVn</a>'
-only builds facets that contain point n. In higher-dimensions,
-this does not reduce the number of facets.</p>
-
-<p><tt>User.h</tt> includes a number of performance-related
-constants. Changes may improve Qhull performance on your data
-sets. To understand their effect on performance, you will need to
-read the corresponding code. </p>
-
-<p>GNU <tt>gprof</tt> reports that the dominate cost for 3-d
-convex hull of cosperical points is qh_distplane(), mainly called
-from qh_findbestnew().  The dominate cost for 3-d Delaunay triangulation
-is creating new facets in qh_addpoint(), while qh_distplane() remains
-the most expensive function.
-
-</p>
-<h2><a href="#TOC">»</a><a name="library">Calling Qhull from
-your program</a></h2>
-
-<p><b>Warning:</b>  Qhull was not designed for calling from other
-programs.  There is neither API nor Qhull classes.  
-It can be done, but it takes work and head scratching.
-You will need to understand the data structures and read the code.
-Most users will find it easier to call Qhull as an external
-command.
-
-<p>For examples of calling Qhull, see GNU Octave's 
-<a href=http://octave.sourceforge.net/index/analysis.html#Geometry>computational geometry code</a>,
-and Qhull's
-<a href=../src/user_eg.c>user_eg.c</a>,
-<a href=../src/user_eg2.c>user_eg2.c</a>,
-<a href=../src/user.c>user.c</a>, and
-<a href=../src/qhull_interface.cpp>qhull_interface.cpp</a>.  
-Qhull's programs use the same library:
-<a href=../src/unix.c>unix.c</a>,
-<a href=../src/qconvex.c>qconvex.c</a>,
-<a href=../src/qdelaun.c>qdelaun.c</a>,
-<a href=../src/qhalf.c>qhalf.c</a>, and
-<a href=../src/qvoronoi.c>qvoronoi.c</a>.
-
-<p>The <a href=http://www.boost.org/libs/graph/doc/table_of_contents.html>BGL</a>
-Boost Graph Library [aka GGCL] provides C++ classes for graph data structures
-and algorithms [Dr. Dobb's 9/00 p. 29-38; OOPSLA '99 p. 399-414].  It is modelled after the
-Standard Template Library.  It would provide a good interface to Qhull.
-If you are interested in adapting BGL to Qhull, please contact 
-<a href="mailto:bradb@qhull.org">bradb@qhull.org</a>.
-
-<p>See <a href="../src/index.htm">Qhull functions, macros, and data
-structures</a> for internal documentation of Qhull. The
-documentation provides an overview and index. To use the library
-you will need to read and understand the code. For most users, it
-is better to write data to a file, call the qhull program, and
-read the results from the output file.</p>
-
-<p>When you read the code, be aware of the macros &quot;qh&quot;
-and &quot;qhstat&quot;, e.g., &quot;qh hull_dim&quot;. They are
-defined in <tt>qhull.h</tt>. They allow the global data
-structures to be pre-allocated (faster access) or dynamically
-allocated (allows multiple copies). </p>
-
-<p>Qhull's <tt>Makefile</tt> produces a library, <tt>libqhull.a</tt>,
-for inclusion in your programs. First review <tt>qhull.h</tt>.
-This defines the data structures used by Qhull and provides
-prototypes for the top-level functions. 
-Most users will only need qhull.h in their programs. For
-example, the Qhull program is defined with <tt>qhull.h</tt> and <tt>unix.c</tt>.
-To access all functions, use <tt>qhull_a.h</tt>. Include the file
-with &quot;<tt>#include &lt;qhull/qhull_a.h&gt;&quot;.</tt> This
-avoids potential name conflicts.</p>
-
-<p>If you use the Qhull library, you are on your own as far as
-bugs go. Start with small examples for which you know the output.
-If you get a bug, try to duplicate it with the Qhull program. The
-'<a href="qh-optt.htm#Tc">Tc</a>' option will catch many problems
-as they occur. When an error occurs, use '<a
-href="qh-optt.htm#Tn">T4</a> <a href="qh-optt.htm#TPn">TPn</a>'
-to trace from the last point added to the hull. Compare your
-trace with the trace output from the Qhull program.</p>
-
-<p>Errors in the Qhull library are more likely than errors in the
-Qhull program. These are usually due to feature interactions that
-do not occur in the Qhull program. Please report all errors that
-you find in the Qhull library. Please include suggestions for
-improvement. </p>
-
-<h3><a href="#TOC">»</a><a name="mem">sets and quick memory
-allocation</a></h3>
-
-<p>You can use <tt>mem.c</tt> and<tt> qset.c</tt> individually. <tt>Mem.c
-</tt>implements quick-fit memory allocation. It is faster than
-malloc/free in applications that allocate and deallocate lots of
-memory. </p>
-
-<p><tt>Qset.c</tt> implements sets and related collections. It's
-the inner loop of Qhull, so speed is more important than
-abstraction. Set iteration is particularly fast. <tt>qset.c</tt>
-just includes the functions needed for Qhull. </p>
-
-<h3><a href="#TOC">»</a><a name="dids">Delaunay triangulations
-and point indices</a></h3>
-
-<p>Here some unchecked code to print the point indices of each
-Delaunay triangle. Use option 'QJ' if you want to avoid
-non-simplicial facets. Note that upper Delaunay regions are
-skipped. These facets correspond to the furthest-site Delaunay
-triangulation. </p>
-
-<blockquote>
-    <pre>
-  facetT *facet;
-  vertexT *vertex, **vertexp;
-  
-  FORALLfacets {
-    if (!facet-&gt;upperdelaunay) {
-      printf (&quot;%d&quot;, qh_setsize (facet-&gt;vertices);
-      FOREACHvertex_(facet-&gt;vertices)
-        printf (&quot; %d&quot;, qh_pointid (vertex-&gt;point));
-      printf (&quot;\n&quot;);
-    }
-  }
-
-</pre>
-</blockquote>
-
-<h3><a href="#TOC">»</a><a name="findfacet">locate a facet with
-qh_findbestfacet()</a></h3>
-
-<p>The routine qh_findbestfacet in <tt>poly2.c</tt> is
-particularly useful. It uses a directed search to locate the
-facet that is furthest below a point. For Delaunay
-triangulations, this facet is the Delaunay triangle that contains
-the lifted point. For convex hulls, the distance of a point to
-the convex hull is either the distance to this facet or the
-distance to a subface of the facet.</p>
-
-<blockquote>
-<p><b>Warning:</b> If triangulated output ('<a href=qh-optq.htm#Qt>Qt</a>') and
-the best facet is triangulated, qh_findbestfacet() returns one of 
-the corresponding 'tricoplanar' facets.  The actual best facet may be a different
-tricoplanar facet.
-<p>
-See qh_nearvertex() in poly2.c for sample code to visit each 
-tricoplanar facet.  To identify the correct tricoplanar facet,
-see Devillers, et. al., [<a href="index.htm#devi01">'01</a>]
-and Mucke, et al [<a href="index.htm#muck96">'96</a>].  If you 
-implement this test in general dimension, please notify 
-<a href="mailto:qhull@qhull.org">qhull@qhull.org</a>.
-</blockquote>
-
-<p>qh_findbestfacet performs an exhaustive search if its directed
-search returns a facet that is above the point. This occurs when
-the point is inside the hull or if the curvature of the convex
-hull is less than the curvature of a sphere centered at the point
-(e.g., a point near a lens-shaped convex hull). When the later
-occurs, the distance function is bimodal and a directed search
-may return a facet on the far side of the convex hull. </p>
-
-<p>Algorithms that retain the previously constructed hulls
-usually avoid an exhaustive search for the best facet. You may
-use a hierarchical decomposition of the convex hull [Dobkin and
-Kirkpatrick <a href="index.htm#dob-kir90">'90</a>]. </p>
-
-<p>To use qh_findbestfacet with Delaunay triangulations, lift the
-point to a paraboloid by summing the squares of its coordinates
-(see qh_setdelaunay in geom2.c). Do not scale the input with
-options 'Qbk', 'QBk', 'QbB' or 'Qbb'. See Mucke, et al [<a
-href="index.htm#muck96">'96</a>] for a good point location
-algorithm.</p>
-
-<p>The intersection of a ray with the convex hull may be found by
-locating the facet closest to a distant point on the ray.
-Intersecting the ray with the facet's hyperplane gives a new
-point to test. </p>
-
-<h3><a href="#TOC">»</a><a name="inc">on-line construction with
-qh_addpoint()</a></h3>
-
-<p>The Qhull library may be used for the on-line construction of
-convex hulls, Delaunay triangulations, and halfspace
-intersections about a point. It may be slower than implementations that retain
-intermediate convex hulls (e.g., Clarkson's <a
-href="http://netlib.bell-labs.com/netlib/voronoi/hull.html">hull
-program</a>). These implementations always use a directed search.
-For the on-line construction of convex hulls and halfspace
-intersections, Qhull may use an exhaustive search
-(qh_findbestfacet). </p>
-
-<p>You may use qh_findbestfacet and qh_addpoint (<tt>qhull.c</tt>) to add a point to
-a convex hull. Do not modify the point's coordinates since
-qh_addpoint does not make a copy of the coordinates. For Delaunay
-triangulations, you need to lift the point to a paraboloid by
-summing the squares of the coordinates (see qh_setdelaunay in
-geom2.c). Do not scale the input with options 'Qbk', 'QBk', 'QbB'
-or 'Qbb'. Do not deallocate the point's coordinates. You need to
-provide a facet that is below the point (<a href="#findfacet">qh_findbestfacet</a>).
-</p>
-
-<p>You can not delete points. Another limitation is that Qhull
-uses the initial set of points to determine the maximum roundoff
-error (via the upper and lower bounds for each coordinate). </p>
-
-<p>For many applications, it is better to rebuild the hull from
-scratch for each new point. This is especially true if the point
-set is small or if many points are added at a time.</p>
-
-<p>Calling qh_addpoint from your program may be slower than
-recomputing the convex hull with qh_qhull. This is especially
-true if the added points are not appended to the qh first_point
-array. In this case, Qhull must search a set to determine a
-point's ID. [R. Weber] </p>
-
-<p>See user_eg.c for examples of the on-line construction of
-convex hulls, Delaunay triangulations, and halfspace
-intersections. The outline is: </p>
-
-<blockquote>
-    <pre>
-initialize qhull with an initial set of points
-qh_qhull(); 
-
-for each additional point p
-   append p to the end of the point array or allocate p separately
-   lift p to the paraboloid by calling qh_setdelaunay
-   facet= qh_findbestfacet (p, !qh_ALL, &amp;bestdist, &amp;isoutside);
-   if (isoutside) 
-      if (!qh_addpoint (point, facet, False))
-         break;  /* user requested an early exit with 'TVn' or 'TCn' */
-   
-call qh_check_maxout() to compute outer planes
-terminate qhull</pre>
-</blockquote>
-
-<h3><a href="#TOC">»</a><a name="constrained">Constrained
-Delaunay triangulation </a></h3>
-
-<p>With a fair amount of work, Qhull is suitable for constrained
-Delaunay triangulation. See Shewchuk, ACM Symposium on
-Computational Geometry, Minneapolis 1998.</p>
-
-<p>Here's a quick way to add a constraint to a Delaunay
-triangulation: subdivide the constraint into pieces shorter than
-the minimum feature separation. You will need an independent
-check of the constraint in the output since the minimum feature
-separation may be incorrect. [H. Geron] </p>
-
-<h3><A href="#TOC">»</A><a name="tricoplanar">Tricoplanar facets and option 'Qt'</h3>
-
-<p>Option '<a href=qh-optq.htm#Qt>Qt</a>' triangulates non-simplicial
-facets (e.g., a square facet in 3-d or a cubical facet in 4-d).  
-All facets share the same apex (i.e., the first vertex in facet->vertices).
-For each triangulated facet, Qhull
-sets facet->tricoplanar true and copies facet->center, facet->normal, facet->offset, and facet->maxoutside.  One of
-the facets owns facet->normal; its facet->keepcentrum is true.
-If facet->isarea is false, facet->triowner points to the owning
-facet.
-
-<p>Qhull sets facet->degenerate if the facet's vertices belong
-to the same ridge of the non-simplicial facet.
-
-<p>To visit each tricoplanar facet of a non-simplicial facet,
-either visit all neighbors of the apex or recursively visit
-all neighbors of a tricoplanar facet.  The tricoplanar facets
-will have the same facet->center.</p>
-
-<p>See <a href=../src/io.c#detvridge>qh_detvridge</a> for an example of ignoring tricoplanar facets.</p>
-
-<h3><a href="#TOC">»</a><a name="vertices">Voronoi vertices of a
-region</a></h3>
-
-<p>The following code iterates over all Voronoi vertices for each
-Voronoi region. Qhull computes Voronoi vertices from the convex
-hull that corresponds to a Delaunay triangulation. An input site
-corresponds to a vertex of the convex hull and a Voronoi vertex
-corresponds to an adjacent facet. A facet is
-&quot;upperdelaunay&quot; if it corresponds to a Voronoi vertex
-&quot;at-infinity&quot;. Qhull uses qh_printvoronoi in <tt>io.c</tt>
-for '<a href=qvoronoi.htm>qvoronoi</a> <a href="qh-opto.htm#o">o'</a> </p>
-
-<blockquote>
-    <pre>
-/* please review this code for correctness */
-qh_setvoronoi_all(); 
-FORALLvertices {
-   site_id = qh_pointid (vertex-&gt;point);
-   if (qh hull_dim == 3)
-      qh_order_vertexneighbors(vertex);
-   infinity_seen = 0;
-   FOREACHneighbor_(vertex) {
-      if (neighbor-&gt;upperdelaunay) {
-        if (!infinity_seen) {
-          infinity_seen = 1;
-          ... process a Voronoi vertex &quot;at infinity&quot; ...
-        }
-      }else {
-        voronoi_vertex = neighbor-&gt;center;
-        ... your code goes here ...
-      }
-   }
-}
-</pre>
-</blockquote>
-
-<h3><a href="#TOC">»</a><a name="ridge">Voronoi vertices of a
-ridge</a></h3>
-
-<p>Qhull uses qh_printvdiagram() in io.c to print the ridges of a
-Voronoi diagram for option '<a href="qh-optf.htm#Fv2">Fv</a>'.
-The helper function qh_eachvoronoi() does the real work. It calls
-the callback 'printvridge' for each ridge of the Voronoi diagram.
-</p>
-
-<p>You may call qh_printvdiagram2(), qh_eachvoronoi(), or
-qh_eachvoronoi_all() with your own function. If you do not need
-the total number of ridges, you can skip the first call to
-qh_printvdiagram2(). See qh_printvridge() and qh_printvnorm() in
-io.c for examples. </p>
-
-<h3><a href="#TOC">»</a><a name="vneighbor">vertex neighbors of
-a vertex</a></h3>
-
-<p>To visit all of the vertices that share an edge with a vertex:
-</p>
-
-<ul>
-    <li>Generate neighbors for each vertex with
-        qh_vertexneighbors in <tt>poly2.c</tt>. </li>
-    <li>For simplicial facets, visit the vertices of each
-        neighbor </li>
-    <li>For non-simplicial facets, <ul>
-            <li>Generate ridges for neighbors with qh_makeridges
-                in <tt>merge.c</tt>. </li>
-            <li>Generate ridges for a vertex with qh_vertexridges
-                in <tt>merge.c</tt>. </li>
-            <li>Visit the vertices of these ridges. </li>
-        </ul>
-    </li>
-</ul>
-
-<p>For non-simplicial facets, the ridges form a simplicial
-decomposition of the (d-2)-faces between each pair of facets --
-if you need 1-faces, you probably need to generate the full face
-graph of the convex hull. </p>
-
-<h2><a href="#TOC">»</a><a name="enhance">Enhancements to Qhull </a></h2>
-
-<p>There are many ways in which Qhull can be improved. </p>
-
-<pre>Here is a partial list:
- - fix finddelaunay() in user_eg.c for tricoplanar facets
- - write a BGL, C++ interface to Qhull 
-     http://www.boost.org/libs/graph/doc/table_of_contents.html
- - change qh_save_qhull to swap the qhT structure instead of using pointers
- - change error handling and tracing to be independent of 'qh ferr'
- - determine the maximum width for a given set of parameters
- - prove that directed search locates all coplanar facets
- - in high-d merging, can a loop of facets become disconnected?
- - find a way to improve inner hulls in 5-d and higher
- - determine the best policy for facet visibility ('<a
-href="qh-optc.htm#Vn">Vn</a>')
- - determine the limitations of '<a href="qh-optq.htm#Qg">Qg</a>'
-
-Precision improvements:
- - For 'Qt', resolve cross-linked, butterfly ridges.  
-     May allow retriangulation in qh_addpoint().
- - for Delaunay triangulations ('d' or 'v') under joggled input ('QJ'),
-     remove vertical facets whose lowest vertex may be coplanar with convex hull 
- - review use of 'Qbb' with 'd QJ'.  Is MAXabs_coord better than MAXwidth?
- - check Sugihara and Iri's better in-sphere test [Canadian 
-     Conf. on Comp. Geo., 1989; Univ. of Tokyo RMI 89-05]
- - replace centrum with center of mass and facet area
- - handle numeric overflow in qh_normalize and elsewhere
- - merge flipped facets into non-flipped neighbors.
-     currently they merge into best neighbor (appears ok)
- - determine min norm for Cramer's rule (qh_sethyperplane_det).  It looks high.
- - improve facet width for very narrow distributions
-
-New features:
- - implement Matlab's tsearch() using Qhull
- - compute volume of Voronoi regions.  You need to determine the dual face
-   graph in all dimensions [see Clarkson's hull program]
- - compute alpha shapes [see Clarkson's hull program]
- - implement deletion of Delaunay vertices 
-      see Devillers, ACM Symposium on Computational Geometry, Minneapolis 1999.
- - compute largest empty circle [see O'Rourke, chapter 5.5.3] [Hase]
- - list redundant (i.e., coincident) vertices [Spitz]
- - implement Mucke, et al, ['96] for point location in Delaunay triangulations
- - implement convex hull of moving points
- - implement constrained Delaunay diagrams
-      see Shewchuk, ACM Symposium on Computational Geometry, Minneapolis 1998.
- - estimate outer volume of hull 
- - automatically determine lower dimensional hulls
- - allow &quot;color&quot; data for input points
-      need to insert a coordinate for Delaunay triangulations
-
-Input/output improvements:
- - Support the VTK Visualization Toolkit, http://www.kitware.com/vtk.html
- - generate output data array for Qhull library [Gautier]
- - need improved DOS window with screen fonts, scrollbar, cut/paste
- - generate Geomview output for Voronoi ridges and unbounded rays
- - generate Geomview output for halfspace intersection
- - generate Geomview display of furthest-site Voronoi diagram
- - use '<a href="qh-optg.htm#GDn">GDn</a>' to view 5-d facets in 4-d
- - convert Geomview output for other 3-d viewers
- - add interactive output option to avoid recomputing a hull
- - orient vertex neighbors for '<a href="qh-optf.htm#Fv">Fv</a>' in 3-d and 2-d
- - track total number of ridges for summary and logging
-
-Performance improvements:
- - optimize Qhull for 2-d Delaunay triangulations
- -   use O'Rourke's <a href="index.htm#orou94">'94</a> vertex-&gt;duplicate_edge
- -   add bucketing 
- -   better to specialize all of the code (ca. 2-3x faster w/o merging)
- - use updated LU decomposition to speed up hyperplane construction
- -        [Gill et al. 1974, Math. Comp. 28:505-35]
- - construct hyperplanes from the corresponding horizon/visible facets
- - for merging in high d, do not use vertex-&gt;neighbors
-
-</pre>
-
-<p>Please let us know about your applications and improvements. </p>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home
-page for Qhull</a> <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual: Table of
-Contents</a><br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#TOC">Qhull internals</a>: Table of Contents <br>
-<b>Dn:</b> <a href="../src/index.htm">Qhull functions</a>, macros, and data
-structures <!-- GC common information --> 
-
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see changes.txt <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optc.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optc.htm
deleted file mode 100644
index ce22064ea09bb1c18c3860e0e1fe2910e7e44500..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optc.htm
+++ /dev/null
@@ -1,289 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull precision options</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a> Qhull precision options</h1>
-
-This section lists the precision options for Qhull. These options are
-indicated by an upper-case letter followed by a number.
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<p><a href="index.htm#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-<a name="prec">&#149;</a> <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<h2>Precision options</h2>
-
-<p>Most users will not need to set these options. They are best
-used for <a href="qh-impre.htm#approximate">approximating</a> a
-convex hull. They may also be used for testing Qhull's handling
-of precision errors.</p>
-
-<p>By default, Qhull uses options '<a href="#C0">C-0</a>' for
-2-d, 3-d and 4-d, and '<a href="qh-optq.htm#Qx">Qx</a>' for 5-d
-and higher. These options use facet merging to handle precision
-errors.  You may also use joggled input '<a href="qh-optq.htm#QJn">QJ</a>' 
-to avoid precision problems.  
-For more information see <a
-href="qh-impre.htm">Imprecision in Qhull</a>.</p>
-
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="#Cn2">Cn</a></dt>
-    <dd>centrum radius for post-merging</dd>
-    <dt><a href="#Cn">C-n</a></dt>
-    <dd>centrum radius for pre-merging</dd>
-    <dt><a href="#An2">An</a></dt>
-    <dd>cosine of maximum angle for post-merging</dd>
-    <dt><a href="#An">A-n</a></dt>
-    <dd>cosine of maximum angle for pre-merging</dd>
-    <dt><a href="qh-optq.htm#Qx">Qx</a></dt>
-    <dd>exact pre-merges (allows coplanar facets)</dd>
-    <dt><a href="#C0">C-0</a></dt>
-    <dd>handle all precision errors</dd>
-    <dt><a href="#Wn">Wn</a></dt>
-    <dd>min distance above plane for outside points</dd>
-</dl>
-
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>Experimental</b></dd>
-    <dt><a href="#Un">Un</a></dt>
-    <dd>max distance below plane for a new, coplanar point</dd>
-    <dt><a href="#En">En</a></dt>
-    <dd>max roundoff error for distance computation</dd>
-    <dt><a href="#Vn">Vn</a></dt>
-    <dd>min distance above plane for a visible facet</dd>
-    <dt><a href="#Rn">Rn</a></dt>
-    <dd>randomly perturb computations by a factor of [1-n,1+n]</dd>
-</dl>
-
-<dl compact>
-</dl>
-
-<hr>
-
-<h3><a href="#prec">»</a><a name="An">A-n - cosine of maximum
-angle for pre-merging.</a></h3>
-
-<p>Pre-merging occurs while Qhull constructs the hull. It is
-indicated by '<a href="#Cn">C-n</a>', 'A-n', or '<a
-href="qh-optq.htm#Qx">Qx</a>'.</p>
-
-<p>If the angle between a pair of facet normals is greater than <i>n</i>,
-Qhull merges one of the facets into a neighbor. It selects the
-facet that is closest to a neighboring facet.</p>
-
-<p>For example, option 'A-0.99' merges facets during the
-construction of the hull. If the cosine of the angle between
-facets is greater than 0.99, one or the other facet is merged.
-Qhull accounts for the maximum roundoff error.</p>
-
-<p>If 'A-n' is set without '<a href="#Cn">C-n</a>', then '<a
-href="#C0">C-0</a>' is automatically set. </p>
-
-<p>In 5-d and higher, you should set '<a href="qh-optq.htm#Qx">Qx</a>'
-along with 'A-n'. It skips merges of coplanar facets until after
-the hull is constructed and before '<a href="#An2">An</a>' and '<a
-href="#Cn2">Cn</a>' are checked. </p>
-
-<h3><a href="#prec">»</a><a name="An2">An - cosine of maximum angle for
-post-merging.</a></h3>
-
-<p>Post merging occurs after the hull is constructed. For
-example, option 'A0.99' merges a facet if the cosine of the angle
-between facets is greater than 0.99. Qhull accounts for the
-maximum roundoff error.</p>
-
-<p>If 'An' is set without '<a href="#Cn2">Cn</a>', then '<a
-href="#Cn2">C0</a>' is automatically set. </p>
-
-<h3><a href="#prec">»</a><a name="C0">C-0 - handle all precision
-errors </a></h3>
-
-<p>Qhull handles precision errors by merging facets. The 'C-0'
-option handles all precision errors in 2-d, 3-d, and 4-d. It is
-set by default. It may be used in higher dimensions, but
-sometimes the facet width grows rapidly. It is usually better to
-use '<a href="qh-optq.htm#Qx">Qx</a>' in 5-d and higher. 
-Use '<a href="qh-optq.htm#QJn">QJ</a>' to joggle the input
-instead of merging facets. 
-Use '<a
-href="qh-optq.htm#Q0">Q0</a>' to turn both options off.</p>
-
-<p>Qhull optimizes 'C-0' (&quot;_zero-centrum&quot;) by testing
-vertices instead of centrums for adjacent simplices. This may be
-slower in higher dimensions if merges decrease the number of
-processed points. The optimization may be turned off by setting a
-small value such as 'C-1e-30'. See <a href="qh-impre.htm">How
-Qhull handles imprecision</a>.</p>
-
-<h3><a href="#prec">»</a><a name="Cn">C-n - centrum radius for
-pre-merging</a></h3>
-
-<p>Pre-merging occurs while Qhull constructs the hull. It is
-indicated by 'C-n', '<a href="#An">A-n</a>', or '<a
-href="qh-optq.htm#Qx">Qx</a>'.</p>
-
-<p>The <i>centrum</i> of a facet is a point on the facet for
-testing facet convexity. It is the average of the vertices
-projected to the facet's hyperplane. Two adjacent facets are
-convex if each centrum is clearly below the other facet. </p>
-
-<p>If adjacent facets are non-convex, one of the facets is merged
-into a neighboring facet. Qhull merges the facet that is closest
-to a neighboring facet. </p>
-
-<p>For option 'C-n', <i>n</i> is the centrum radius. For example,
-'C-0.001' merges facets whenever the centrum is less than 0.001
-from a neighboring hyperplane. Qhull accounts for roundoff error
-when testing the centrum.</p>
-
-<p>In 5-d and higher, you should set '<a href="qh-optq.htm#Qx">Qx</a>'
-along with 'C-n'. It skips merges of coplanar facets until after
-the hull is constructed and before '<a href="#An2">An</a>' and '<a
-href="#Cn2">Cn</a>' are checked. </p>
-
-<h3><a href="#prec">»</a><a name="Cn2">Cn - centrum radius for
-post-merging</a></h3>
-
-<p>Post-merging occurs after Qhull constructs the hull. It is
-indicated by '<a href="#Cn2">Cn</a>' or '<a href="#An2">An</a>'. </p>
-
-<p>For option '<a href="#Cn2">Cn</a>', <i>n</i> is the centrum
-radius. For example, 'C0.001' merges facets when the centrum is
-less than 0.001 from a neighboring hyperplane. Qhull accounts for
-roundoff error when testing the centrum.</p>
-
-<p>Both pre-merging and post-merging may be defined. If only
-post-merging is used ('<a href="qh-optq.htm#Q0">Q0</a>' with
-'Cn'), Qhull may fail to produce a hull due to precision errors
-during the hull's construction.</p>
-
-<h3><a href="#prec">»</a><a name="En">En - max roundoff error
-for distance computations</a></h3>
-
-<p>This allows the user to change the maximum roundoff error
-computed by Qhull. The value computed by Qhull may be overly
-pessimistic. If 'En' is set too small, then the output may not be
-convex. The statistic &quot;max. distance of a new vertex to a
-facet&quot; (from option '<a href="qh-optt.htm#Ts">Ts</a>') is a
-reasonable upper bound for the actual roundoff error. </p>
-
-<h3><a href="#prec">»</a><a name="Rn">Rn - randomly perturb
-computations </a></h3>
-
-<p>This option perturbs every distance, hyperplane, and angle
-computation by up to <i>(+/- n * max_coord)</i>. It simulates the
-effect of roundoff errors. Unless '<a href="#En">En</a>' is
-explicitly set, it is adjusted for 'Rn'. The command 'qhull Rn'
-will generate a convex hull despite the perturbations. See the <a
-href="qh-eg.htm#merge">Examples </a>section for an example.</p>
-
-<p>Options 'Rn C-n' have the effect of '<a href="#Wn">W2n</a>'
-and '<a href="#Cn">C-2n</a>'. To use time as the random number
-seed, use option '<a href="qh-optq.htm#QRn">QR-1</a>'.</p>
-
-<h3><a href="#prec">»</a><a name="Un">Un - max distance for a
-new, coplanar point </a></h3>
-
-<p>This allows the user to set coplanarity. When pre-merging ('<a
-href="#Cn">C-n </a>', '<a href="#An">A-n</a>' or '<a
-href="qh-optq.htm#Qx">Qx</a>'), Qhull merges a new point into any
-coplanar facets. The default value for 'Un' is '<a href="#Vn">Vn</a>'.</p>
-
-<h3><a href="#prec">»</a><a name="Vn">Vn - min distance for a
-visible facet </a></h3>
-
-<p>This allows the user to set facet visibility. When adding a
-point to the convex hull, Qhull determines all facets that are
-visible from the point. A facet is visible if the distance from
-the point to the facet is greater than 'Vn'.</p>
-
-<p>Without merging, the default value for 'Vn' is the roundoff
-error ('<a href="#En">En</a>'). With merging, the default value
-is the pre-merge centrum ('<a href="#Cn">C-n</a>') in 2-d or 3-d,
-or three times that in other dimensions. If the outside width is
-specified with option '<a href="#Wn">Wn </a>', the maximum,
-default value for 'Vn' is '<a href="#Wn">Wn</a>'.</p>
-
-<p>Qhull warns if 'Vn' is greater than '<a href="#Wn">Wn</a>' and
-furthest outside ('<a href="qh-optq.htm#Qf">Qf</a>') is not
-selected; this combination usually results in flipped facets
-(i.e., reversed normals).</p>
-
-<h3><a href="#prec">»</a><a name="Wn">Wn - min distance above
-plane for outside points</a></h3>
-
-<p>Points are added to the convex hull only if they are clearly
-outside of a facet. A point is outside of a facet if its distance
-to the facet is greater than 'Wn'. Without pre-merging, the
-default value for 'Wn' is '<a href="#En">En </a>'. If the user
-specifies pre-merging and does not set 'Wn', than 'Wn' is set to
-the maximum of '<a href="#Cn">C-n</a>' and <i>maxcoord*(1 - </i><a
-href="#An"><i>A-n</i></a><i>)</i>.</p>
-
-<p>This option is good for <a href="qh-impre.htm#approximate">approximating</a>
-a convex hull.</p>
-
-<p>Options '<a href="qh-optq.htm#Qc">Qc</a>' and '<a
-href="qh-optq.htm#Qi">Qi</a>' use the minimum vertex to
-distinguish coplanar points from interior points.</p>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optf.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optf.htm
deleted file mode 100644
index 887ef4f67613cfcee7164ad668e8c185c7ee68d7..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optf.htm
+++ /dev/null
@@ -1,719 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull format options (F)</title>
-</head>
-
-<body><!-- Navigation links -->
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <A href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <A href="qh-quick.htm#programs">Programs</a>
-&#149; <A href="qh-quick.htm#options">Options</a> 
-&#149; <A href="qh-opto.htm#output">Output</a> 
-&#149; <A href="qh-optf.htm#format">Formats</a> 
-&#149; <A href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <A href="qh-optp.htm#print">Print</a>
-&#149; <A href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <A href="qh-optc.htm#prec">Precision</a> 
-&#149; <A href="qh-optt.htm#trace">Trace</a></p>
-<hr>
-<!-- Main text of document -->
-<h1><a
- href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><IMG
- align=middle alt=[delaunay] height=100
- src="qh--dt.gif" width=100 ></a> Qhull format options (F)</h1>
-
-<p>This section lists the format options for Qhull. These options
-are indicated by 'F' followed by a letter. See <A
- href="qh-opto.htm#output" >Output</a>, <A href="qh-optp.htm#print">Print</a>,
-and <A href="qh-optg.htm#geomview">Geomview</a> for other output
-options. </p>
-
-<p><b>Copyright © 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<p><A href="index.htm#TOC">»</a> <A href="qh-quick.htm#programs">Programs</a>
-<a name="format">&#149;</a> <A href="qh-quick.htm#options">Options</a> 
-&#149; <A href="qh-opto.htm#output">Output</a> 
-&#149; <A href="qh-optf.htm#format">Formats</a> 
-&#149; <A href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <A href="qh-optp.htm#print">Print</a>
-&#149; <A href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <A href="qh-optc.htm#prec">Precision</a> 
-&#149; <A href="qh-optt.htm#trace">Trace</a></p>
-
-<h2>Additional input &amp; output formats</h2>
-
-<p>These options allow for automatic processing of Qhull output.
-Options '<A href="qh-opto.htm#i">i</a>', '<A href="qh-opto.htm#o">o</a>',
-'<A href="qh-opto.htm#n">n</a>', and '<A href="qh-opto.htm#p">p</a>'
-may also be used.</p>
-
-<dl compact>
-    <dt>
-    <dd><b>Summary and control</b>
-    <dt><A href="#FA">FA</a>
-    <dd>compute total area and volume for option '<A
-        href="qh-opto.htm#s">s</a>' 
-
-    <dt><A href="#FV">FV</a>
-    <dd>print average vertex (interior point for '<A
-        href="qhalf.htm">qhalf</a>') 
-    <dt><A href="#FQ">FQ</a>
-    <dd>print command for qhull and input 
-    <dt><A href="#FO">FO</a>
-    <dd>print options to stderr or stdout 
-    <dt><A href="#FS">FS</a>
-    <dd>print sizes: total area and volume 
-    <dt><A href="#Fs">Fs</a>
-    <dd>print summary: dim, #points, total vertices and 
-  facets, #vertices, #facets, max outer and inner plane 
-    <dt><A href="#Fd">Fd</a>
-    <dd>use  format for input (offset first) 
-    <dt><A href="#FD">FD</a>
-    <dd>use cdd format for normals (offset first) 
-    <dt><a href="#FM">FM</a>
-    <dd>print Maple output (2-d and 3-d)
-    <dt>
-    <dt>
-    <dd><b>Facets, points, and vertices</b>
-    <dt><A href="#Fa">Fa</a>
-    <dd>print area for each facet 
-    <dt><A href="#FC">FC</a>
-    <dd>print centrum for each facet 
-    <dt><A href="#Fc">Fc</a>
-    <dd>print coplanar points for each facet 
-    <dt><A href="#Fx">Fx</a>
-    <dd>print extreme points (i.e., vertices) of convex hull. 
-
-    <dt><A href="#FF">FF</a>
-    <dd>print facets w/o ridges 
-    <dt><A href="#FI">FI</a>
-    <dd>print ID for each facet 
-    <dt><A href="#Fi">Fi</a>
-    <dd>print inner planes for each facet 
-    <dt><A href="#Fm">Fm</a>
-    <dd>print merge count for each facet (511 max) 
-    <dt><A href="#FP">FP</a>
-    <dd>print nearest vertex for coplanar points 
-    <dt><A href="#Fn">Fn</a>
-    <dd>print neighboring facets for each facet 
-    <dt><A href="#FN">FN</a>
-    <dd>print neighboring facets for each point 
-    <dt><A href="#Fo">Fo</a>
-    <dd>print outer planes for each facet 
-    <dt><A href="#Ft">Ft</a>
-    <dd>print triangulation with added points 
-    <dt><A href="#Fv">Fv</a>
-    <dd>print vertices for each facet 
-    <dt>
-    <dt>
-    <dd><b>Delaunay, Voronoi, and halfspace</b>
-    <dt><A href="#Fx">Fx</a>
-    <dd>print extreme input sites of Delaunay triangulation 
-  or Voronoi diagram. 
-    <dt><A href="#Fp">Fp</a>
-    <dd>print points at halfspace intersections 
-    <dt><A href="#Fi2">Fi</a>
-    <dd>print separating hyperplanes for inner, bounded 
-  Voronoi regions 
-    <dt><A href="#Fo2">Fo</a>
-    <dd>print separating hyperplanes for outer, unbounded 
-  Voronoi regions 
-    <dt><A href="#Fv2">Fv</a>
-    <dd>print Voronoi diagram as ridges for each input pair 
-    <dt><A href="#FC">FC</a>
-    <dd>print Voronoi vertex ("center") for each facet</dd>
-</dl>
-
-<hr>
-
-<h3><A href="#format">»</a><a name="Fa">Fa - print area for each
-facet </a></h3>
-
-<p>The first line is the number of facets. The remaining lines
-are the area for each facet, one facet per line. See '<A
- href="#FA" >FA</a>' for computing the total area and volume.</p>
-
-<p>Use '<A href="qh-optp.htm#PAn">PAn</a>' for printing the n
-largest facets. Use option '<A href="qh-optp.htm#PFn">PFn</a>'
-for printing facets larger than <i>n</i>.</p>
-
-<p>For Delaunay triangulations, the area is the area of each
-Delaunay triangle. For Voronoi vertices, the area is the area of
-the dual facet to each vertex. </p>
-
-<p>Qhull uses the centrum and ridges to triangulate
-non-simplicial facets. The area for non-simplicial facets is the
-sum of the areas for each triangle. It is an approximation of the
-actual area. The ridge's vertices are projected to the facet's
-hyperplane. If a vertex is far below a facet (qh_WIDEcoplanar in <tt>user.h</tt>),
-the corresponding triangles are ignored.</p>
-
-<p>For non-simplicial facets, vertices are often below the
-facet's hyperplane. If so, the approximation is less than the
-actual value and it may be significantly less. </p>
-
-<h3><A href="#format">»</a><a name="FA">FA - compute total area
-and volume for option 's' </a></h3>
-
-<p>With option 'FA', Qhull includes the total area and volume in
-the summary ('<A href="qh-opto.htm#s">s</a>'). If facets are
-merged, the area and volume are approximations. Option 'FA' is
-automatically set for options '<A href="#Fa">Fa </a>', '<A
- href="qh-optp.htm#PAn" >PAn</a>', and '<A href="qh-optp.htm#PFn">PFn</a>'.
-</p>
-
-<p>With '<A href="qdelaun.htm">qdelaunay</a> <A
- href="qh-opto.htm#s" >s</a> FA', Qhull computes the total area of
-the Delaunay triangulation. This equals the volume of the convex
-hull of the data points. With options '<A href="qdelau_f.htm">qdelaunay Qu</a> 
-<A href="qh-opto.htm#s">s</a> FA', Qhull computes the
-total area of the furthest-site Delaunay triangulation. This
-equals of the total area of the Delaunay triangulation. </p>
-
-<p>See '<A href="#Fa">Fa</a>' for further details. </p>
-
-<h3><A href="#format">»</a><a name="Fc">Fc - print coplanar
-points for each facet </a></h3>
-
-<p>The output starts with the number of facets. Then each facet
-is printed one per line. Each line is the number of coplanar
-points followed by the point ids. </p>
-
-<p>By default, option 'Fc' reports coplanar points 
-('<A href="qh-optq.htm#Qc">Qc</a>').  You may also use
-option '<A href="qh-optq.htm#Qi">Qi</a>'. Options 'Qi Fc' prints
-interior points while 'Qci Fc' prints both coplanar and interior
-points.
-
-<p>Each coplanar point or interior point is assigned to the
-facet it is furthest above (resp., least below). </p>
-
-<p>Use 'Qc <A href="qh-opto.htm#p">p</a>' to print vertex and
-coplanar point coordinates. Use '<A href="qh-optf.htm#Fv">Fv</a>'
-to print vertices. </p>
-
-<h3><A href="#format">»</a><a name="FC">FC - print centrum or
-Voronoi vertex for each facet </a></h3>
-
-<p>The output starts with the dimension followed by the number of
-facets. Then each facet centrum is printed, one per line. For
-<A href="qvoronoi.htm">qvoronoi</a>, Voronoi vertices are
-printed instead. </p>
-
-<h3><A href="#format">»</a><a name="Fd">Fd - use cdd format for
-input </a></h3>
-
-<p>The input starts with comments. The first comment is reported
-in the summary. Data starts after a "begin" line. The
-next line is the number of points followed by the dimension plus
-one and "real" or "integer". Then the points
-are listed with a leading "1" or "1.0". The
-data ends with an "end" line.</p>
-
-<p>For halfspaces ('<A href="qhalf.htm">qhalf</a> Fd'),
-the input format is the same. Each halfspace starts with its
-offset. The signs of the offset and coefficients are the 
-opposite of Qhull's
-convention. The first two lines of the input may be an interior
-point in '<A href="#FV">FV</a>' format.</p>
-
-<h3><A href="#format">»</a><a name="FD">FD - use cdd format for
-normals </a></h3>
-
-<p>Option 'FD' prints normals ('<A href="qh-opto.htm#n">n</a>', '<A
- href="#Fo" >Fo</a>', '<A href="#Fi">Fi</a>') or points ('<A
- href="qh-opto.htm#p" >p</a>') in cdd format. The first line is the
-command line that invoked Qhull. Data starts with a
-"begin" line. The next line is the number of normals or
-points followed by the dimension plus one and "real".
-Then the normals or points are listed with the offset before the
-coefficients. The offset for points is 1.0. For normals,
-the offset and coefficients use the opposite sign from Qhull.
-The data ends with an "end" line.</p>
-
-<h3><A href="#format">»</a><a name="FF">FF - print facets w/o
-ridges </a></h3>
-
-<p>Option 'FF' prints all fields of all facets (as in '<A
- href="qh-opto.htm#f" >f</a>') without printing the ridges. This is
-useful in higher dimensions where a facet may have many ridges.
-For simplicial facets, options 'FF' and '<A href="qh-opto.htm#f">f
-</a>' are equivalent.</p>
-
-<h3><A href="#format">»</a><a name="Fi">Fi - print inner planes
-for each facet </a></h3>
-
-<p>The first line is the dimension plus one. The second line is
-the number of facets. The remainder is one inner plane per line.
-The format is the same as option '<A href="qh-opto.htm#n">n</a>'.</p>
-
-<p>The inner plane is a plane that is below the facet's vertices.
-It is an offset from the facet's hyperplane. It includes a
-roundoff error for computing the vertex distance.</p>
-
-<p>Note that the inner planes for Geomview output ('<A
- href="qh-optg.htm#Gi" >Gi</a>') include an additional offset for
-vertex visualization and roundoff error. </p>
-
-<h3><A href="#format">»</a><a name="Fi2">Fi - print separating
-hyperplanes for inner, bounded Voronoi regions</a></h3>
-
-<p>With <A href="qvoronoi.htm" >qvoronoi</a>, 'Fi' prints the
-separating hyperplanes for inner, bounded regions of the Voronoi
-diagram. The first line is the number of ridges. Then each
-hyperplane is printed, one per line. A line starts with the
-number of indices and floats. The first pair of indices indicates
-an adjacent pair of input sites. The next <i>d</i> floats are the
-normalized coefficients for the hyperplane, and the last float is
-the offset. The hyperplane is oriented toward '<A
- href="qh-optq.htm#QVn" >QVn</a>' (if defined), or the first input
-site of the pair. </p>
-
-<p>Use '<A href="qh-optf.htm#Fo2">Fo</a>' for unbounded regions,
-and '<A href="qh-optf.htm#Fv2">Fv</a>' for the corresponding
-Voronoi vertices. </p>
-
-<p>Use '<A href="qh-optt.htm#Tv">Tv</a>' to verify that the
-hyperplanes are perpendicular bisectors. It will list relevant
-statistics to stderr. The hyperplane is a perpendicular bisector
-if the midpoint of the input sites lies on the plane, all Voronoi
-vertices in the ridge lie on the plane, and the angle between the
-input sites and the plane is ninety degrees. This is true if all
-statistics are zero. Roundoff and computation errors make these
-non-zero. The deviations appear to be largest when the
-corresponding Delaunay triangles are large and thin; for example,
-the Voronoi diagram of nearly cospherical points. </p>
-
-<h3><A href="#format">»</a><a name="FI">FI - print ID for each
-facet </a></h3>
-
-<p>Print facet identifiers. These are used internally and listed
-with options '<A href="qh-opto.htm#f">f</a>' and '<A href="#FF">FF</a>'.
-Options '<A href="#Fn">Fn </a>' and '<A href="#FN">FN</a>' use
-facet identifiers for negative indices. </p>
-
-<h3><A href="#format">»</a><a name="Fm">Fm - print merge count
-for each facet </a></h3>
-
-<p>The first line is the number of facets. The remainder is the
-number of merges for each facet, one per line. At most 511 merges
-are reported for a facet. See '<A href="qh-optp.htm#PMn">PMn</a>'
-for printing the facets with the most merges. </p>
-
-<h3><a href="#format">»</a><a name="FM">FM - print Maple
-output </a></h3>
-
-<p>Qhull writes a Maple file for 2-d and 3-d convex hulls,
-2-d and 3-d halfspace intersections,
-and 2-d Delaunay triangulations. Qhull produces a 2-d
-or 3-d plot. 
-
-<p><i>Warning</i>: This option has not been tested in Maple.
-
-<p>[From T. K. Abraham with help from M. R. Feinberg and N. Platinova.]
-The following steps apply while working within the 
-Maple worksheet environment : 
-<ol>
-<li>Generate the data and store it as an array . For example, in 3-d, data generated 
-in Maple is of the form : x[i],y[i],z[i]
-<p>
-<li>Create a single variable and assign the entire array of data points to this variable. 
-Use the "seq" command within square brackets as shown in the following example.
-(The square brackets are essential for the rest of the steps to work.) 
-<p>
->data:=[seq([x[i],y[i],z[i]],i=1..n)]:# here n is the number of data points
-
-<li>Next we need to write the data to a file to be read by qhull. Before 
-writing the data to a file, make sure that the qhull executable files and 
-the data file lie in   the same subdirectory. If the executable files are 
-stored in the "C:\qhull3.1\" subdirectory, then save the file in the same 
-subdirectory, say "C:\qhull3.1\datafile.txt". For the sake of integrity of 
-the data file , it is best to first ensure that the data file does not 
-exist before writing into the data file. This can be done by running a 
-delete command first . To write the data to the file, use the "writedata" 
-and the "writedata[APPEND]" commands as illustrated in the following example : 
-<p>
->system("del c:\\qhull3.1\\datafile.txt");#To erase any previous versions of the file
-<br>>writedata("c:\\qhull3.1\\datafile.txt ",[3, nops(data)]);#writing in qhull format
-<br>>writedata[APPEND]("c:\\ qhull3.1\\datafile.txt ",   data);#writing the data points
-<li>
-Use the 'FM' option to produce Maple output.  Store the output as a ".mpl" file.
-For example, using the file we created above, we type the following (in DOS environment) 
-<p>
-qconvex s FM &lt;datafile.txt >dataplot.mpl
-
-<li>
-To read 3-d output in Maple, we use the 'read'  command followed by 
-a 'display3d' command.  For example (in Maple environment):
-<p>
->with(plots):
-<br>>read `c:\\qhull3.1\\dataplot.mpl`:#IMPORTANT - Note that the punctuation mark used is ' and NOT '. The correct punctuation   mark is the one next to the key for "1" (not the punctuation mark near the enter key)
-<br>> qhullplot:=%:
-<br>> display3d(qhullplot);
-</ol>
-
-<p>For Delaunay triangulation orthogonal projection is better.
-
-<p>For halfspace intersections, Qhull produces the dual
-convex hull.
-
-<p>See <a href="qh-faq.htm#math">Is Qhull available for Maple?</a>
-for other URLs.
- 
-<h3><A href="#format">»</a><a name="Fn">Fn - print neighboring
-facets for each facet </a></h3>
-
-<p>The output starts with the number of facets. Then each facet
-is printed one per line. Each line is the number of neighbors
-followed by an index for each neighbor. The indices match the
-other facet output formats.</p>
-
-<p>A negative index indicates an unprinted facet due to printing
-only good facets ('<A href="qh-optp.htm#Pg">Pg</a>', <A href="qdelaun.htm" >qdelaunay</a>, 
-<A href="qvoronoi.htm" >qvoronoi</a>). It
-is the negation of the facet's ID (option '<A href="#FI">FI</a>').
-For example, negative indices are used for facets "at
-infinity" in the Delaunay triangulation.</p>
-
-<h3><A href="#format">»</a><a name="FN">FN - print neighboring
-facets for each point </a></h3>
-
-<p>The first line is the number of points. Then each point is
-printed, one per line. For unassigned points (either interior or
-coplanar), the line is "0". For assigned coplanar
-points ('<A href="qh-optq.htm#Qc">Qc</a>'), the line is
-"1" followed by the index of the facet that is furthest
-below the point. For assigned interior points ('<A
- href="qh-optq.htm#Qi" >Qi</a>'), the line is "1"
-followed by the index of the facet that is least above the point.
-For vertices that do not belong to good facet, the line is
-"0"</p>
-
-<p>For vertices of good facets, the line is the number of
-neighboring facets followed by the facet indices. The indices
-correspond to the other '<A href="#format">F</a>' formats. In 4-d
-and higher, the facets are sorted by index. In 3-d, the facets
-are in adjacency order (not oriented).</p>
-
-<p>A negative index indicates an unprinted facet due to printing
-only good facets (<A href="qdelaun.htm" >qdelaunay</a>, 
-<A href="qvoronoi.htm" >qvoronoi</a>, '<A href="qh-optp.htm#Pdk">Pdk</a>',
-'<A href="qh-optp.htm#Pg">Pg</a>'). It is the negation of the
-facet's ID ('<A href="#FI"> FI</a>'). For example, negative
-indices are used for facets "at infinity" in the
-Delaunay triangulation.</p>
-
-<p>For Voronoi vertices, option 'FN' lists the vertices of the
-Voronoi region for each input site. Option 'FN' lists the regions
-in site ID order. Option 'FN' corresponds to the second half of
-option '<A href="qh-opto.htm#o">o</a>'. To convert from 'FN' to '<A
- href="qh-opto.htm#o" >o</a>', replace negative indices with zero
-and increment non-negative indices by one. </p>
-
-<p>If you are using the <A href="qh-in.htm#library">Qhull
-library</a>, option 'FN' has the side effect of reordering the
-neighbors for a vertex </p>
-
-<h3><A href="#format">»</a><a name="Fo">Fo - print outer planes
-for each facet </a></h3>
-
-<p>The first line is the dimension plus one. The second line is
-the number of facets. The remainder is one outer plane per line.
-The format is the same as option '<A href="qh-opto.htm#n">n</a>'.</p>
-
-<p>The outer plane is a plane that is above all points. It is an
-offset from the facet's hyperplane. It includes a roundoff error
-for computing the point distance. When testing the outer plane
-(e.g., '<A href="qh-optt.htm#Tv">Tv</a>'), another roundoff error
-should be added for the tested point.</p>
-
-<p>If outer planes are not checked ('<A href="qh-optq.htm#Q5">Q5</a>')
-or not computed (!qh_MAXoutside), the maximum, computed outside
-distance is used instead. This can be much larger than the actual
-outer planes.</p>
-
-<p>Note that the outer planes for Geomview output ('<A
- href="qh-optg.htm#G" >G</a>') include an additional offset for
-vertex/point visualization, 'lines closer,' and roundoff error.</p>
-
-<h3><A href="#format">»</a><a name="Fo2">Fo - print separating
-hyperplanes for outer, unbounded Voronoi regions</a></h3>
-
-<p>With <A href="qvoronoi.htm" >qvoronoi</a>, 'Fo' prints the
-separating hyperplanes for outer, unbounded regions of the
-Voronoi diagram. The first line is the number of ridges. Then
-each hyperplane is printed, one per line. A line starts with the
-number of indices and floats. The first pair of indices indicates
-an adjacent pair of input sites. The next <i>d</i> floats are the
-normalized coefficients for the hyperplane, and the last float is
-the offset. The hyperplane is oriented toward '<A
- href="qh-optq.htm#QVn" >QVn</a>' (if defined), or the first input
-site of the pair. </p>
-
-<p>Option 'Fo' gives the hyperplanes for the unbounded rays of
-the unbounded regions of the Voronoi diagram. Each hyperplane
-goes through the midpoint of the corresponding input sites. The
-rays are directed away from the input sites. </p>
-
-<p>Use '<A href="qh-optf.htm#Fi2">Fi</a>' for bounded regions,
-and '<A href="qh-optf.htm#Fv2">Fv</a>' for the corresponding
-Voronoi vertices. Use '<A href="qh-optt.htm#Tv">Tv</a>' to verify
-that the corresponding Voronoi vertices lie on the hyperplane. </p>
-
-<h3><A href="#format">»</a><a name="FO">FO - print list of
-selected options </a></h3>
-
-<p>Lists selected options and default values to stderr.
-Additional 'FO's are printed to stdout. </p>
-
-<h3><A href="#format">»</a><a name="Fp">Fp - print points at
-halfspace intersections</a></h3>
-
-<p>The first line is the number of intersection points. The
-remainder is one intersection point per line. A intersection
-point is the intersection of <i>d</i> or more halfspaces from
-'<A href="qhalf.htm">qhalf</a>'. It corresponds to a
-facet of the dual polytope. The "infinity" point
-[-10.101,-10.101,...] indicates an unbounded intersection.</p>
-
-<p>If [x,y,z] are the dual facet's normal coefficients and <i>b&lt;0</i>
-is its offset, the halfspace intersection occurs at
-[x/-b,y/-b,z/-b] plus the interior point. If <i>b&gt;=0</i>, the
-halfspace intersection is unbounded. </p>
-
-<h3><A href="#format">»</a><a name="FP">FP - print nearest
-vertex for coplanar points </a></h3>
-
-<p>The output starts with the number of coplanar points. Then
-each coplanar point is printed one per line. Each line is the
-point ID of the closest vertex, the point ID of the coplanar
-point, the corresponding facet ID, and the distance. Sort the
-lines to list the coplanar points nearest to each vertex. </p>
-
-<p>Use options '<A href="qh-optq.htm#Qc">Qc</a>' and/or '<A
- href="qh-optq.htm#Qi" >Qi</a>' with 'FP'. Options 'Qc FP' prints
-coplanar points while 'Qci FP' prints coplanar and interior
-points.  Option 'Qc' is automatically selected if 'Qi' is not
-selected.
-
-<p>For Delaunay triangulations (<A href="qdelaun.htm" >qdelaunay</a>
-or <A href="qvoronoi.htm" >qvoronoi</a>), a coplanar point is nearly
-incident to a vertex. The distance is the distance in the
-original point set.</p>
-
-<p>If imprecision problems are severe, Qhull will delete input
-sites when constructing the Delaunay triangulation.  Option 'FP' will
-list these points along with coincident points.</p>
-
-<p>If there are many coplanar or coincident points and non-simplicial 
-facets are triangulated ('<A href="qh-optq.htm#Qt">Qt</a>'), option
-'FP' may be inefficient.  It redetermines the original vertex set
-for each coplanar point.</p>
-
-<h3><A href="#format">»</a><a name="FQ">FQ - print command for
-qhull and input </a></h3>
-
-<p>Prints qhull and input command, e.g., "rbox 10 s | qhull
-FQ".   Option 'FQ' may be repeated multiple times.</p>
-
-<h3><A href="#format">»</a><a name="Fs">Fs - print summary</a></h3>
-
-<p>The first line consists of number of integers ("10")
-followed by the:
-<ul>
-<li>dimension
-<li>number of points
-<li>number of vertices
-<li>number of facets
-<li>number of vertices selected for output
-<li>number of facets selected for output
-<li>number of coplanar points for selected facets
-<li>number of nonsimplicial or merged facets selected for 
-  output 
-<LI>number of deleted vertices</LI>        
-<LI>number of triangulated facets ('<A href="qh-optq.htm#Qt">Qt</a>')</LI>        
-</ul>
-
-<p>The second line consists of the number of reals
-("2") followed by the:
-<ul>
-<li>maximum offset to an outer plane
-<li>minimum offset to an inner plane.</li>      
-</ul>
-Roundoff and joggle are included.
-<P></P>
-
-<p>For Delaunay triangulations and Voronoi diagrams, the 
-number of deleted vertices should be zero. If greater than zero, then the 
-input is highly degenerate and coplanar points are not necessarily coincident
-points.  For example, <tt>'RBOX 1000 s W1e-13 t995138628 | QHULL d Qbb'</tt> reports
-deleted vertices; the input is nearly cospherical.</p>
-
-<P>Later versions of Qhull may produce additional integers or reals.</P>
-
-<h3><A href="#format">»</a><a name="FS">FS - print sizes</a></h3>
-
-<p>The first line consists of the number of integers
-("0"). The second line consists of the number of reals
-("2"), followed by the total facet area, and the total
-volume. Later versions of Qhull may produce additional integers
-or reals.</p>
-
-<p>The total volume measures the volume of the intersection of
-the halfspaces defined by each facet. It is computed from the
-facet area. Both area and volume are approximations for
-non-simplicial facets. See option '<A href="#Fa">Fa </a>' for
-further notes. </p>
-
-<h3><A href="#format">»</a><a name="Ft">Ft - print triangulation</a></h3>
-
-<p>Prints a triangulation with added points for non-simplicial
-facets. The output is </p>
-
-<ul>
-    <li>The first line is the dimension 
-    <li>The second line is the number of points, the number 
-  of facets, and the number of ridges. 
-    <li>All of the input points follow, one per line. 
-    <li>The centrums follow, one per non-simplicial facet 
-    <li>Then the facets follow as a list of point indices
-        preceded by the number of points. The simplices are
-        oriented. </li>
-</ul>
-
-<p>For convex hulls with simplicial facets, the output is the
-same as option '<A href="qh-opto.htm#o">o</a>'.</p>
-
-<p>The added points are the centrums of the non-simplicial
-facets. Except for large facets, the centrum is the average
-vertex coordinate projected to the facet's hyperplane. Large
-facets may use an old centrum to avoid recomputing the centrum
-after each merge. In either case, the centrum is clearly below
-neighboring facets. See <A href="qh-impre.htm">Precision issues</a>.
-</p>
-
-<p>The new simplices will not be clearly convex with their
-neighbors and they will not satisfy the Delaunay property. They
-may even have a flipped orientation. Use triangulated input ('<A
- href="qh-optq.htm#Qt">Qt</a>') for Delaunay triangulations.
-
-<p>For Delaunay triangulations with simplicial facets, the output is the
-same as option '<A href="qh-opto.htm#o">o</a>' without the lifted
-coordinate.  Since 'Ft' is invalid for merged Delaunay facets, option 
-'Ft' is not available for qdelaunay or qvoronoi.  It may be used with
-joggled input ('<A  href="qh-optq.htm#QJn" >QJ</a>') or triangulated output ('<A
- href="qh-optq.htm#Qt" >Qt</a>'), for example, rbox 10 c G 0.01 | qhull d QJ Ft</p>
-
-<p>If you add a point-at-infinity with '<A href="qh-optq.htm#Qz">Qz</a>',
-it is printed after the input sites and before any centrums. It
-will not be used in a Delaunay facet.</p>
-
-<h3><A href="#format">»</a><a name="Fv">Fv - print vertices for
-each facet</a></h3>
-
-<p>The first line is the number of facets. Then each facet is
-printed, one per line. Each line is the number of vertices
-followed by the corresponding point ids. Vertices are listed in
-the order they were added to the hull (the last one added is the
-first listed). Similar to option '<A href="qh-opto.htm#i">i</a>'.</p>
-
-<h3><A href="#format">»</a><a name="Fv2">Fv - print Voronoi
-diagram</a></h3>
-
-<p>With <A href="qvoronoi.htm" >qvoronoi</a>, 'Fv' prints the
-Voronoi diagram or furthest-site Voronoi diagram. The first line
-is the number of ridges. Then each ridge is printed, one per
-line. The first number is the count of indices. The second pair
-of indices indicates a pair of input sites. The remaining indices
-list the corresponding ridge of Voronoi vertices. Vertex 0 is the
-vertex-at-infinity. It indicates an unbounded ray. </p>
-
-<p>All vertices of a ridge are coplanar. If the ridge is
-unbounded, add the midpoint of the pair of input sites. The
-unbounded ray is directed from the Voronoi vertices to infinity. </p>
-
-<p>Use '<A href="qh-optf.htm#Fo2">Fo</a>' for separating
-hyperplanes of outer, unbounded regions. Use '<A
- href="qh-optf.htm#Fi2" >Fi</a>' for separating hyperplanes of
-inner, bounded regions. </p>
-
-<p>Option 'Fv' does not list ridges that require more than one
-midpoint. For example, the Voronoi diagram of cospherical points
-lists zero ridges (e.g., 'rbox 10 s | qvoronoi Fv Qz').  
-Other examples are the Voronoi diagrams of a rectangular mesh  
-(e.g., 'rbox 27 M1,0 | qvoronoi Fv') or a point set with
-a rectangular corner (e.g., 
-'rbox P4,4,4 P4,2,4 P2,4,4 P4,4,2 10 | qvoronoi Fv').
-Both cases miss unbounded rays at the corners.
-To determine these ridges, surround the points with a 
-large cube (e.g., 'rbox 10 s c G2.0 | qvoronoi Fv Qz').
-Please report any other cases that are missed. If you
-can formally describe these cases or 
-write code to handle them, please send email to <A
- href="mailto:qhull@qhull.org" >qhull@qhull.org</a>. </p>
-
-<h3><A href="#format">»</a><a name="FV">FV - print average
-vertex </a></h3>
-
-<p>The average vertex is the average of all vertex coordinates.
-It is an interior point for halfspace intersection. The first
-line is the dimension and "1"; the second line is the
-coordinates. For example,</p>
-
-<blockquote>
-    <p>qconvex FV <A
-    href="qh-opto.htm#n">n</a> | qhalf <A href="#Fp">Fp</a></p>
-</blockquote>
-
-<p>prints the extreme points of the original point set (roundoff
-included). </p>
-
-<h3><A href="#format">»</a><a name="Fx">Fx - print extreme
-points (vertices) of convex hulls and Delaunay triangulations</a></h3>
-
-<p>The first line is the number of points. The following lines
-give the index of the corresponding points. The first point is
-'0'. </p>
-
-<p>In 2-d, the extreme points (vertices) are listed in
-counterclockwise order (by qh_ORIENTclock in user.h). </p>
-
-<p>In 3-d and higher convex hulls, the extreme points (vertices)
-are sorted by index. This is the same order as option '<A
- href="qh-opto.htm#p" >p</a>' when it doesn't include coplanar or
-interior points. </p>
-
-<p>For Delaunay triangulations, 'Fx' lists the extreme 
-points of the input sites (i.e., the vertices of their convex hull). The points 
-are unordered. <!-- Navigation links --> </p>
-
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <A href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <A href="qh-quick.htm#programs">Programs</a>
-&#149; <A href="qh-quick.htm#options">Options</a> 
-&#149; <A href="qh-opto.htm#output">Output</a> 
-&#149; <A href="qh-optf.htm#format">Formats</a> 
-&#149; <A href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <A href="qh-optp.htm#print">Print</a>
-&#149; <A href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <A href="qh-optc.htm#prec">Precision</a> 
-&#149; <A href="qh-optt.htm#trace">Trace</a></p><!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><IMG align=middle
- height=40 src="qh--geom.gif" width=40 ></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: 
-Sept. 25, 1995 --- <!-- hhmts start -->Last modified: see top 
-<!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optg.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optg.htm
deleted file mode 100644
index c4fc5a77e67009c6dbdb5d4eb3f4f12d0e81b0b5..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optg.htm
+++ /dev/null
@@ -1,271 +0,0 @@
-<html>
-
-<head>
-<title>Qhull Geomview options (G)</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<hr>
-<!-- Main text of document -->
-
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a> Qhull Geomview options (G)</h1>
-
-This section lists the Geomview options for Qhull. These options are
-indicated by 'G' followed by a letter.  See 
-<a href="qh-opto.htm#output">Output</a>, <a href="qh-optp.htm#print">Print</a>,
-and <a href="qh-optf.htm#format">Format</a> for other output options.
-
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<p><a href="index.htm#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-<a name="geomview">&#149;</a> <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<h2>Geomview output options</h2>
-
-<p><a href="http://www.geomview.org">Geomview</a> is the graphical
-viewer for visualizing Qhull output in 2-d, 3-d and 4-d.</p>
-
-<p>Geomview displays each facet of the convex hull. The color of
-a facet is determined by the coefficients of the facet's normal
-equation. For imprecise hulls, Geomview displays the inner and
-outer hull. Geomview can also display points, ridges, vertices,
-coplanar points, and facet intersections. </p>
-
-<p>For 2-d Delaunay triangulations, Geomview displays the
-corresponding paraboloid.  Geomview displays the 2-d Voronoi
-diagram. For halfspace intersections, it displays the
-dual convex hull. </p>
-
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="#G">G</a></dt>
-    <dd>display Geomview output</dd>
-    <dt><a href="#Gt">Gt</a></dt>
-    <dd>display transparent 3-d Delaunay triangulation</dd>
-    <dt><a href="#GDn">GDn</a></dt>
-    <dd>drop dimension n in 3-d and 4-d output </dd>
- 
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Specific</b></dd>
-    <dt><a href="#Ga">Ga</a></dt>
-    <dd>display all points as dots</dd>
-    <dt><a href="#Gc">Gc</a></dt>
-    <dd>display centrums (2-d, 3-d)</dd>
-    <dt><a href="#Gp">Gp</a></dt>
-    <dd>display coplanar points and vertices as radii</dd>
-    <dt><a href="#Gh">Gh</a></dt>
-    <dd>display hyperplane intersections</dd>
-    <dt><a href="#Gi">Gi</a></dt>
-    <dd>display inner planes only (2-d, 3-d)</dd>
-    <dt><a href="#Go">Go</a></dt>
-    <dd>display outer planes only (2-d, 3-d)</dd>
-    <dt><a href="#Gr">Gr</a></dt>
-    <dd>display ridges (3-d)</dd>
-    <dt><a href="#Gv">Gv</a></dt>
-    <dd>display vertices as spheres</dd>
-    <dt><a href="#Gn">Gn</a></dt>
-    <dd>do not display planes</dd>
-
-</dl>
-
-<hr>
-
-<h3><a href="#geomview">»</a><a name="G">G - produce output for
-viewing with Geomview</a></h3>
-
-<p>By default, option 'G' displays edges in 2-d, outer planes in
-3-d, and ridges in 4-d.</p>
-
-<p>A ridge can be explicit or implicit. An explicit ridge is a <i>(d-1)</i>-dimensional
-simplex between two facets. In 4-d, the explicit ridges are
-triangles. An implicit ridge is the topological intersection of
-two neighboring facets. It is the union of explicit ridges.</p>
-
-<p>For non-simplicial 4-d facets, the explicit ridges can be
-quite complex. When displaying a ridge in 4-d, Qhull projects the
-ridge's vertices to one of its facets' hyperplanes. Use '<a
-href="#Gh">Gh</a>' to project ridges to the intersection of both
-hyperplanes. This usually results in a cleaner display. </p>
-
-<p>For 2-d Delaunay triangulations, Geomview displays the
-corresponding paraboloid.  Geomview displays the 2-d Voronoi
-diagram. For halfspace intersections, it displays the
-dual convex hull.
-
-<h3><a href="#geomview">»</a><a name="Ga">Ga - display all
-points as dots </a></h3>
-
-<p>Each input point is displayed as a green dot.</p>
-
-<h3><a href="#geomview">»</a><a name="Gc">Gc - display centrums
-(3-d) </a></h3>
-
-<p>The centrum is defined by a green radius sitting on a blue
-plane. The plane corresponds to the facet's hyperplane. If you
-sight along a facet's hyperplane, you will see that all
-neighboring centrums are below the facet. The radius is defined
-by '<a href="qh-optc.htm#Cn">C-n</a>' or '<a
-href="qh-optc.htm#Cn2">Cn</a>'.</p>
-
-<h3><a href="#geomview">»</a><a name="GDn">GDn - drop dimension
-n in 3-d and 4-d output </a></h3>
-
-<p>The result is a 2-d or 3-d object. In 4-d, this corresponds to
-viewing the 4-d object from the nth axis without perspective.
-It's best to view 4-d objects in pieces. Use the '<a
-href="qh-optp.htm#Pdk">Pdk</a>' '<a href="qh-optp.htm#Pg">Pg</a>'
-'<a href="qh-optp.htm#PG">PG</a>' '<a href="qh-optq.htm#QGn">QGn</a>'
-and '<a href="qh-optq.htm#QVn">QVn</a>' options to select a few
-facets. If one of the facets is perpendicular to an axis, then
-projecting along that axis will show the facet exactly as it is
-in 4-d. If you generate many facets, use Geomview's <tt>ginsu</tt>
-module to view the interior</p>
-
-<p>To view multiple 4-d dimensions at once, output the object
-without 'GDn' and read it with Geomview's <tt>ndview</tt>. As you
-rotate the object in one set of dimensions, you can see how it
-changes in other sets of dimensions.</p>
-
-<p>For additional control over 4-d objects, output the object
-without 'GDn' and read it with Geomview's <tt>4dview</tt>. You
-can slice the object along any 4-d plane. You can also flip the
-halfspace that's deleted when slicing. By combining these
-features, you can get some interesting cross sections.</p>
-
-<h3><a href="#geomview">»</a><a name="Gh">Gh - display
-hyperplane intersections (3-d, 4-d)</a></h3>
-
-<p>In 3-d, the intersection is a black line. It lies on two
-neighboring hyperplanes, c.f., the blue squares associated with
-centrums ('<a href="#Gc">Gc </a>'). In 4-d, the ridges are
-projected to the intersection of both hyperplanes. If you turn on
-edges (Geomview's 'appearances' menu), each triangle corresponds
-to one ridge. The ridges may overlap each other.</p>
-
-<h3><a href="#geomview">»</a><a name="Gi">Gi - display inner
-planes only (2-d, 3-d)</a></h3>
-
-<p>The inner plane of a facet is below all of its vertices. It is
-parallel to the facet's hyperplane. The inner plane's color is
-the opposite of the outer plane's color, i.e., <i>[1-r,1-g,1-b] </i>.
-Its edges are determined by the vertices.</p>
-
-<h3><a href="#geomview">»</a><a name="Gn">Gn - do not display
-planes </a></h3>
-
-<p>By default, Geomview displays the precise plane (no merging)
-or both inner and output planes (if merging). If merging,
-Geomview does not display the inner plane if the the difference
-between inner and outer is too small.</p>
-
-<h3><a href="#geomview">»</a><a name="Go">Go - display outer
-planes only (2-d, 3-d)</a></h3>
-
-<p>The outer plane of a facet is above all input points. It is
-parallel to the facet's hyperplane. Its color is determined by
-the facet's normal, and its edges are determined by the vertices.</p>
-
-<h3><a href="#geomview">»</a><a name="Gp">Gp - display coplanar
-points and vertices as radii </a></h3>
-
-<p>Coplanar points ('<a href="qh-optq.htm#Qc">Qc</a>'), interior
-points ('<a href="qh-optq.htm#Qi">Qi</a>'), outside points ('<a
-href="qh-optt.htm#TCn">TCn</a>' or '<a href="qh-optt.htm#TVn">TVn</a>'),
-and vertices are displayed as red and yellow radii. The radii are
-perpendicular to the corresponding facet. Vertices are aligned
-with an interior point. The radii define a ball which corresponds
-to the imprecision of the point. The imprecision is the maximum
-of the roundoff error, the centrum radius, and <i>maxcoord * (1 -
-</i><a href="qh-optc.htm#An"><i>A-n</i></a><i>)</i>. It is at
-least 1/20'th of the maximum coordinate, and ignores post merging
-if pre-merging is done.</p>
-
-<p>If '<a href="qh-optg.htm#Gv">Gv</a>' (print vertices as
-spheres) is also selected, option 'Gp' displays coplanar 
-points as radii.  Select options <a href="qh-optq.htm#Qc">Qc</a>' 
-and/or '<a href="qh-optq.htm#Qi">Qi</a>'. Options 'Qc Gpv' displays
-coplanar points while 'Qci Gpv' displays coplanar and interior
-points.  Option 'Qc' is automatically selected if 'Qi' is not
-selected with options 'Gpv'.
-
-<h3><a href="#geomview">»</a><a name="Gr">Gr - display ridges
-(3-d) </a></h3>
-
-<p>A ridge connects the two vertices that are shared by
-neighboring facets. It is displayed in green. A ridge is the
-topological edge between two facets while the hyperplane
-intersection is the geometric edge between two facets. Ridges are
-always displayed in 4-d.</p>
-
-<h3><a href="#geomview">»</a><a name="Gt">Gt - transparent 3-d
-Delaunay </a></h3>
-
-<p>A 3-d Delaunay triangulation looks like a convex hull with
-interior facets. Option 'Gt' removes the outside ridges to reveal
-the outermost facets. It automatically sets options '<a
-href="#Gr">Gr</a>' and '<a href="#GDn">GDn</a>'. See example <a
-href="qh-eg.htm#17f">eg.17f.delaunay.3</a>.</p>
-
-<h3><a href="#geomview">»</a><a name="Gv">Gv - display vertices
-as spheres (2-d, 3-d)</a></h3>
-
-<p>The radius of the sphere corresponds to the imprecision of the
-data. See '<a href="#Gp">Gp</a>' for determining the radius.</p>
-
-<!-- Navigation links -->
-
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-<!-- GC common information -->
-
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-opto.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-opto.htm
deleted file mode 100644
index 128bbcdb5adc5d5391c5f768e82c5089ebfec965..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-opto.htm
+++ /dev/null
@@ -1,343 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull output options</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a> Qhull output options</h1>
-
-<p>This section lists the output options for Qhull. These options
-are indicated by lower case characters. See <a
-href="qh-optf.htm#format">Formats</a>, <a
-href="qh-optp.htm#print">Print</a>, and <a
-href="qh-optg.htm#geomview">Geomview</a> for other output
-options. </p>
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<p><a href="index.htm#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-<a name="output">&#149;</a> <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<h2>Output options</h2>
-
-<p>Qhull prints its output to standard out. All output is printed
-text. The default output is a summary (option '<a href="#s">s</a>').
-Other outputs may be specified as follows. </p>
-
-<dl compact>
-    <dt><a href="#f">f</a></dt>
-    <dd>print all fields of all facets</dd>
-    <dt><a href="#n">n</a></dt>
-    <dd>print hyperplane normals with offsets</dd>
-    <dt><a href="#m">m</a></dt>
-    <dd>print Mathematica output (2-d and 3-d)</dd>
-    <dt><a href="#o">o</a></dt>
-    <dd>print OFF file format (dim, points and facets)</dd>
-    <dt><a href="#s">s</a></dt>
-    <dd>print summary to stderr</dd>
-    <dt><a href="#p">p</a></dt>
-    <dd>print vertex and point coordinates</dd>
-    <dt><a href="#i">i</a></dt>
-    <dd>print vertices incident to each facet </dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Related options</b></dd>
-    <dt><a href="qh-optf.htm#format">F</a></dt>
-    <dd>additional input/output formats</dd>
-    <dt><a href="qh-optg.htm#geomview">G</a></dt>
-    <dd>Geomview output</dd>
-    <dt><a href="qh-optp.htm#print">P</a></dt>
-    <dd>Print options</dd>
-    <dt><a href="qh-optf.htm#Ft">Ft</a></dt>
-    <dd>print triangulation with added points</dd>
-    <dt>&nbsp;</dt>
-</dl>
-
-<hr>
-
-<h3><a href="#output">»</a><a name="f">f - print all fields of
-all facets </a></h3>
-
-<p>Print <a href=../src/qhull.h#facetT>all fields</a> of all facets.
-The facet is the primary <a href=index.htm#structure>data structure</a> for
-Qhull.  
-
-<p>Option 'f' is for
-debugging. Most of the fields are available via the '<a
-href="qh-optf.htm#format">F</a>' options. If you need specialized
-information from Qhull, you can use the <a
-href="qh-in.htm#library">Qhull library</a>.</p>
-
-<p>Use the '<a href="qh-optf.htm#FF">FF</a>' option to print the
-facets but not the ridges. </p>
-
-<h3><a href="#output">»</a><a name="i">i - print vertices
-incident to each facet </a></h3>
-
-<p>The first line is the number of facets. The remaining lines
-list the vertices for each facet, one facet per line. The indices
-are 0-relative indices of the corresponding input points. The
-facets are oriented. Option '<a href="qh-optf.htm#Fv">Fv</a>'
-displays an unoriented list of vertices with a vertex count per
-line. Options '<a href="qh-opto.htm#o">o</a>' and '<a
-href="qh-optf.htm#Ft">Ft</a>' displays coordinates for each
-vertex prior to the vertices for each facet. </p>
-
-<p>Simplicial facets (e.g., triangles in 3-d) consist of <i>d</i>
-vertices. Non-simplicial facets in 3-d consist of 4 or more
-vertices. For example, a facet of a cube consists of 4 vertices.</p>
-
-<p>For 4-d and higher convex hulls and 3-d and higher Delaunay
-triangulations, <i>d</i> vertices are listed for all facets. A
-non-simplicial facet is triangulated with its centrum and each
-ridge. The index of the centrum is higher than any input point.
-Use option '<a href="qh-optf.htm#Fv">Fv</a>' to list the vertices
-of non-simplicial facets as is. Use option '<a
-href="qh-optf.htm#Ft">Ft</a>' to print the coordinates of the
-centrums as well as those of the input points. </p>
-
-<h3><a href="#output">»</a><a name="m">m - print Mathematica
-output </a></h3>
-
-<p>Qhull writes a Mathematica file for 2-d and 3-d convex hulls,
-2-d and 3-d halfspace intersections,
-and 2-d Delaunay triangulations. Qhull produces a list of
-objects that you can assign to a variable in Mathematica, for
-example: &quot;<tt>list= &lt;&lt; &lt;outputfilename&gt; </tt>&quot;.
-If the object is 2-d, it can be visualized by &quot;<tt>Show[Graphics[list]]
-</tt>&quot;. For 3-d objects the command is &quot;<tt>Show[Graphics3D[list]]
-</tt>&quot;. Now the object can be manipulated by commands of the
-form <tt>&quot;Show[%, &lt;parametername&gt; -&gt;
-&lt;newvalue&gt;]</tt>&quot;. </p>
-
-<p>For Delaunay triangulation orthogonal projection is better.
-This can be specified, for example, by &quot;<tt>BoxRatios:
-Show[%, BoxRatios -&gt; {1, 1, 1e-8}]</tt>&quot;. To see the
-meaningful side of the 3-d object used to visualize 2-d Delaunay,
-you need to change the viewpoint: &quot;<tt>Show[%, ViewPoint
--&gt; {0, 0, -1}]</tt>&quot;. By specifying different viewpoints
-you can slowly rotate objects. </p>
-
-<p>For halfspace intersections, Qhull produces the dual
-convex hull.
-
-<p>See <a href="qh-faq.htm#math">Is Qhull available for Mathematica?</a>
-for URLs.
- 
-<h3><a href="#output">»</a><a name="n">n - print hyperplane
-normals with offsets </a></h3>
-
-<p>The first line is the dimension plus one. The second line is
-the number of facets. The remaining lines are the normals for
-each facet, one normal per line. The facet's offset follows its
-normal coefficients.</p>
-
-<p>The normals point outward, i.e., the convex hull satisfies <i>Ax
-&lt;= -b </i>where <i>A</i> is the matrix of coefficients and <i>b</i>
-is the vector of offsets.</p>
-
-<p>If cdd output is specified ('<a href="qh-optf.htm#FD">FD</a>'),
-Qhull prints the command line, the keyword &quot;begin&quot;, the
-number of facets, the dimension (plus one), the keyword
-&quot;real&quot;, and the normals for each facet. The facet's
-negative offset precedes its normal coefficients (i.e., if the
-origin is an interior point, the offset is positive). Qhull ends
-the output with the keyword &quot;end&quot;. </p>
-
-<h3><a href="#output">»</a><a name="o">o - print OFF file format
-</a></h3>
-
-<p>The output is: </p>
-
-<ul>
-    <li>The first line is the dimension </li>
-    <li>The second line is the number of points, the number of
-        facets, and the number of ridges. </li>
-    <li>All of the input points follow, one per line. </li>
-    <li>Then Qhull prints the vertices for each facet. Each facet
-        is on a separate line. The first number is the number of
-        vertices. The remainder is the indices of the
-        corresponding points. The vertices are oriented in 2-d,
-        3-d, and in simplicial facets. </li>
-</ul>
-
-<p>Option '<a href="qh-optf.htm#Ft">Ft</a>' prints the same
-information with added points for non-simplicial facets.</p>
-
-<p>Option '<a href="qh-opto.htm#i">i</a>' displays vertices
-without the point coordinates. Option '<a href="qh-opto.htm#p">p</a>'
-displays the point coordinates without vertex and facet information.</p>
-
-<p>In 3-d, Geomview can load the file directly if you delete the
-first line (e.g., by piping through '<tt>tail +2</tt>').</p>
-
-<p>For Voronoi diagrams (<a href=qvoronoi.htm>qvoronoi</a>), option
-'o' prints Voronoi vertices and Voronoi regions instead of input
-points and facets. The first vertex is the infinity vertex
-[-10.101, -10.101, ...]. Then, option 'o' lists the vertices in
-the Voronoi region for each input site. The regions appear in
-site ID order. In 2-d, the vertices of a Voronoi region are
-sorted by adjacency (non-oriented). In 3-d and higher, the
-Voronoi vertices are sorted by index. See the '<a
-href="qh-optf.htm#FN">FN</a>' option for listing Voronoi regions
-without listing Voronoi vertices.</p>
-
-<p>If you are using the Qhull library, options 'v o' have the
-side effect of reordering the neighbors for a vertex.</p>
-
-<h3><a href="#output">»</a><a name="p">p - print vertex and
-point coordinates </a></h3>
-
-<p>The first line is the dimension. The second line is the number
-of vertices. The remaining lines are the vertices, one vertex per
-line. A vertex consists of its point coordinates</p>
-
-<p>With the '<a href="qh-optg.htm#Gc">Gc</a>' and '<a
-href="qh-optg.htm#Gi">Gi</a>' options, option 'p' also prints
-coplanar and interior points respectively.</p>
-
-<p>For <a href=qvoronoi.htm>qvoronoi</a>, it prints the
-coordinates of each Voronoi vertex.</p>
-
-<p>For <a href=qdelaun.htm>qdelaunay</a>, it prints the
-input sites as lifted to a paraboloid.  For <a href=qhalf.htm>qhalf</a>
-it prints the dual points.  For both, option 'p' is the same as the first 
-section of option '<a href="qh-opto.htm#o">o</a>'.</p>
-
-<p>Use '<a href="qh-optf.htm#Fx">Fx</a>' to list the point ids of
-the extreme points (i.e., vertices). </p>
-
-<p>If a subset of the facets is selected ('<a
-href="qh-optp.htm#Pdk">Pdk</a>', '<a href="qh-optp.htm#PDk">PDk</a>',
-'<a href="qh-optp.htm#Pg">Pg</a>' options), option 'p' only
-prints vertices and points associated with those facets.</p>
-
-<p>If cdd-output format is selected ('<a href="qh-optf.htm#FD">FD</a>'),
-the first line is &quot;begin&quot;. The second line is the
-number of vertices, the dimension plus one, and &quot;real&quot;.
-The vertices follow with a leading &quot;1&quot;. Output ends
-with &quot;end&quot;. </p>
-
-<h3><a href="#output">»</a><a name="s">s - print summary to
-stderr </a></h3>
-
-<p>The default output of Qhull is a summary to stderr. Options '<a
-href="qh-optf.htm#FS">FS</a>' and '<a href="qh-optf.htm#Fs">Fs</a>'
-produce the same information for programs.  <b>Note</b>: Windows 95 and 98
-treats stderr the same as stdout.  Use option '<a href="qh-optt.htm#TO">TO file</a>' to separate
-stderr and stdout.</p>
-
-<p>The summary lists the number of input points, the dimension,
-the number of vertices in the convex hull, and the number of
-facets in the convex hull. It lists the number of selected
-(&quot;good&quot;) facets for options '<a href="qh-optp.htm#Pg">Pg</a>',
-'<a href="qh-optp.htm#Pdk">Pdk</a>', <a href=qdelaun.htm>qdelaunay</a>,
-or <a href=qvoronoi.htm>qvoronoi</a> (Delaunay triangulations only
-use the lower half of a convex hull). It lists the number of
-coplanar points. For Delaunay triangulations without '<a
-href="qh-optq.htm#Qc">Qc</a>', it lists the total number of
-coplanar points. It lists the number of simplicial facets in
-the output.</p>
-
-<p>The terminology depends on the output structure. </p>
-
-<p>The summary lists these statistics:</p>
-
-<ul>
-    <li>number of points processed by Qhull </li>
-    <li>number of hyperplanes created</li>
-    <li>number of distance tests (not counting statistics,
-        summary, and checking) </li>
-    <li>number of merged facets (if any)</li>
-    <li>number of distance tests for merging (if any)</li>
-    <li>CPU seconds to compute the hull</li>
-    <li>the maximum joggle for '<a href="qh-optq.htm#QJn">QJ</a>'<br>
-        or, the probability of precision errors for '<a
-        href="qh-optq.htm#QJn">QJ</a> <a href="qh-optt.htm#TRn">TRn</a>'
-    </li>
-    <li>total area and volume (if computed, see '<a
-        href="qh-optf.htm#FS">FS</a>' '<a href="qh-optf.htm#FA">FA</a>'
-        '<a href="qh-optf.htm#Fa">Fa</a>' '<a
-        href="qh-optp.htm#PAn">PAn</a>')</li>
-    <li>max. distance of a point above a facet (if non-zero)</li>
-    <li>max. distance of a vertex below a facet (if non-zero)</li>
-</ul>
-
-<p>The statistics include intermediate hulls. For example 'rbox d
-D4 | qhull' reports merged facets even though the final hull is
-simplicial. </p>
-
-<p>Qhull starts counting CPU seconds after it has read and
-projected the input points. It stops counting before producing
-output. In the code, CPU seconds measures the execution time of
-function qhull() in <tt>qhull.c</tt>. If the number of CPU
-seconds is clearly wrong, check qh_SECticks in <tt>user.h</tt>. </p>
-
-<p>The last two figures measure the maximum distance from a point
-or vertex to a facet. They are not printed if less than roundoff
-or if not merging. They account for roundoff error in computing
-the distance (c.f., option '<a href="qh-optc.htm#Rn">Rn</a>').
-Use '<a href="qh-optf.htm#Fs">Fs</a>' to report the maximum outer
-and inner plane. </p>
-
-<p>A number may appear in parentheses after the maximum distance
-(e.g., 2.1x). It is the ratio between the maximum distance and
-the worst-case distance due to merging two simplicial facets. It
-should be small for 2-d, 3-d, and 4-d, and for higher dimensions
-with '<a href="qh-optq.htm#Qx">Qx</a>'. It is not printed if less
-than 0.05. </p>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optp.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optp.htm
deleted file mode 100644
index fccb87bccb1f2f621048d8e6c111ab41c88fd35b..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optp.htm
+++ /dev/null
@@ -1,249 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull print options (P)</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a> Qhull print options (P)</h1>
-
-This section lists the print options for Qhull. These options are
-indicated by 'P' followed by a letter.  See 
-<a href="qh-opto.htm#output">Output</a>, <a href="qh-optg.htm#geomview">Geomview</a>,
-and <a href="qh-optf.htm#format">Format</a> for other output options.
-
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<p><a href="index.htm#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-<a name="print">&#149;</a> <a href="qh-quick.htm#options">Options</a> &#149; <a
-href="qh-opto.htm#output">Output</a> &#149; <a
-href="qh-optf.htm#format">Formats</a> &#149; <a
-href="qh-optg.htm#geomview">Geomview</a> &#149; <a href="#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> &#149; <a
-href="qh-optc.htm#prec">Precision</a> &#149; <a
-href="qh-optt.htm#trace">Trace</a></p>
-
-<h2>Print options</h2>
-<blockquote>
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="#Pp">Pp</a></dt>
-    <dd>do not report precision problems </dd>
-    <dt><a href="#Po">Po</a></dt>
-    <dd>force output despite precision problems</dd>
-    <dt><a href="#Po2">Po</a></dt>
-    <dd>if error, output neighborhood of facet</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Select</b></dd>
-    <dt><a href="#Pdk">Pdk:n</a></dt>
-    <dd>print facets with normal[k] &gt;= n (default 0.0)</dd>
-    <dt><a href="#PDk">PDk:n</a></dt>
-    <dd>print facets with normal[k] &lt;= n </dd>
-    <dt><a href="#PFn">PFn</a></dt>
-    <dd>print facets whose area is at least n</dd>
-    <dt><a href="#Pg">Pg</a></dt>
-    <dd>print good facets only (needs '<a href="qh-optq.htm#QGn">QGn</a>'
-        or '<a href="qh-optq.htm#QVn">QVn </a>')</dd>
-    <dt><a href="#PMn">PMn</a></dt>
-    <dd>print n facets with most merges</dd>
-    <dt><a href="#PAn">PAn</a></dt>
-    <dd>print n largest facets by area</dd>
-    <dt><a href="#PG">PG</a></dt>
-    <dd>print neighbors of good facets</dd>
-</dl>
-</blockquote>
-<hr>
-
-<h3><a href="#print">»</a><a name="PAn">PAn - keep n largest
-facets by area</a></h3>
-
-<p>The <i>n</i> largest facets are marked good for printing. This
-may be useful for <a href="qh-impre.htm#approximate">approximating
-a hull</a>. Unless '<a href="#PG">PG</a>' is set, '<a href="#Pg">Pg</a>'
-is automatically set. </p>
-
-<h3><a href="#print">»</a><a name="Pdk">Pdk:n - print facet if
-normal[k] &gt;= n </a></h3>
-
-<p>For a given output, print only those facets with <i>normal[k] &gt;= n</i>
-and <i>drop</i> the others.  For example, 'Pd0:0.5' prints facets with <i>normal[0]
-&gt;= 0.5 </i>. The default value of <i>n</i> is zero. For
-example in 3-d, 'Pd0d1d2' prints facets in the positive octant.
-<p>
-If no facets match, the closest facet is returned.</p>
-<p>
-On Windows 95, do not combine multiple options.  A 'd' is considered
-part of a number.  For example, use 'Pd0:0.5 Pd1:0.5' instead of
-'Pd0:0.5d1:0.5'.
-
-<h3><a href="#print">»</a><a name="PDk">PDk:n - print facet if
-normal[k] &lt;= n</a></h3>
-
-<p>For a given output, print only those facets with <i>normal[k] &lt;= n</i>
-and <i>drop</i> the others.  
-For example, 'PD0:0.5' prints facets with <i>normal[0]
-&lt;= 0.5 </i>. The default value of <i>n</i> is zero. For
-example in 3-d, 'PD0D1D2' displays facets in the negative octant.
-<p>
-If no facets match, the closest facet is returned.</p>
-
-<p>In 2-d, 'd G PD2' displays the Delaunay triangulation instead
-of the corresponding paraboloid. </p>
-
-<p>Be careful of placing 'Dk' or 'dk' immediately after a real
-number. Some compilers treat the 'D' as a double precision
-exponent. </p>
-
-<h3><a href="#print">»</a><a name="PFn">PFn - keep facets whose
-area is at least n</a></h3>
-
-<p>The facets with area at least <i>n</i> are marked good for
-printing. This may be useful for <a
-href="qh-impre.htm#approximate">approximating a hull</a>. Unless
-'<a href="#PG">PG</a>' is set, '<a href="#Pg">Pg</a>' is
-automatically set. </p>
-
-<h3><a href="#print">»</a><a name="Pg">Pg - print good facets </a></h3>
-
-<p>Qhull can mark facets as &quot;good&quot;. This is used to</p>
-
-<ul>
-    <li>mark the lower convex hull for Delaunay triangulations
-        and Voronoi diagrams</li>
-    <li>mark the facets that are visible from a point (the '<a
-        href="qh-optq.htm#QGn">QGn </a>' option)</li>
-    <li>mark the facets that contain a point (the '<a
-        href="qh-optq.htm#QVn">QVn</a>' option).</li>
-    <li>indicate facets with a large enough area (options '<a
-        href="#PAn">PAn</a>' and '<a href="#PFn">PFn</a>')</li>
-</ul>
-
-<p>Option '<a href="#Pg">Pg</a>' only prints good facets that
-also meet '<a href="#Pdk">Pdk</a>' and '<a href="#PDk">PDk</a>'
-options. It is automatically set for options '<a href="#PAn">PAn</a>',
-'<a href="#PFn">PFn </a>', '<a href="qh-optq.htm#QGn">QGn</a>',
-and '<a href="qh-optq.htm#QVn">QVn</a>'.</p>
-
-<h3><a href="#print">»</a><a name="PG">PG - print neighbors of
-good facets</a></h3>
-
-<p>Option 'PG' can be used with or without option '<a href="#Pg">Pg</a>'
-to print the neighbors of good facets. For example, options '<a
-href="qh-optq.htm#QGn">QGn</a>' and '<a href="qh-optq.htm#QVn">QVn</a>'
-print the horizon facets for point <i>n. </i></p>
-
-<h3><a href="#print">»</a><a name="PMn">PMn - keep n facets with
-most merges</a></h3>
-
-<p>The n facets with the most merges are marked good for
-printing. This may be useful for <a
-href="qh-impre.htm#approximate">approximating a hull</a>. Unless
-'<a href="#PG">PG</a>' is set, '<a href="#Pg">Pg</a>' is
-automatically set. </p>
-
-<p>Use option '<a href="qh-optf.htm#Fm">Fm</a>' to print merges
-per facet.
-
-<h3><a href="#print">»</a><a name="Po">Po - force output despite
-precision problems</a></h3>
-
-<p>Use options 'Po' and '<a href="qh-optq.htm#Q0">Q0</a>' if you
-can not merge facets, triangulate the output ('<a href="qh-optq.htm#Qt">Qt</a>'), 
-or joggle the input (<a href="qh-optq.htm#QJn">QJ</a>). 
-
-<p>Option 'Po' can not force output when
-duplicate ridges or duplicate facets occur. It may produce
-erroneous results. For these reasons, merged facets, joggled input, or <a
-href="qh-impre.htm#exact">exact arithmetic</a> are better.</p>
-
-<p>If you need a simplicial Delaunay triangulation, use 
-joggled input '<a href="qh-optq.htm#QJn">QJ</a>' or triangulated
-output '<a
-href="qh-optf.htm#Ft">Ft</a>'. 
-
-<p>Option 'Po' may be used without '<a href="qh-optq.htm#Q0">Q0</a>'
-to remove some steps from Qhull or to output the neighborhood of
-an error.</p>
-
-<p>Option 'Po' may be used with option '<a href="qh-optq.htm#Q5">Q5</a>')
-to skip qh_check_maxout (i.e., do not determine the maximum outside distance).
-This can save a significant amount of time.
-
-<p>If option 'Po' is used,</p>
-
-<ul>
-    <li>most precision errors allow Qhull to continue. </li>
-    <li>verify ('<a href="qh-optt.htm#Tv">Tv</a>') does not check
-        coplanar points.</li>
-    <li>points are not partitioned into flipped facets and a
-        flipped facet is always visible to a point. This may
-        delete flipped facets from the output. </li>
-</ul>
-
-<h3><a href="#print">»</a><a name="Po2">Po - if error, output
-neighborhood of facet</a></h3>
-
-<p>If an error occurs before the completion of Qhull and tracing
-is not active, 'Po' outputs a neighborhood of the erroneous
-facets (if any). It uses the current output options.</p>
-
-<p>See '<a href="qh-optp.htm#Po">Po</a>' - force output despite
-precision problems.
-
-<h3><a href="#print">»</a><a name="Pp">Pp - do not report
-precision problems </a></h3>
-
-<p>With option 'Pp', Qhull does not print statistics about
-precision problems, and it removes some of the warnings.  It
-removes the narrow hull warning.</p>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optq.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optq.htm
deleted file mode 100644
index 69dbc0a4a941b76b890d85bc2c97974e24c8fea4..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optq.htm
+++ /dev/null
@@ -1,696 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull control options (Q)</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a> Qhull control options (Q)</h1>
-
-<p>This section lists the control options for Qhull. These
-options are indicated by 'Q' followed by a letter. </p>
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<p><a href="index.htm#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-<a name="qhull">&#149;</a> <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<h2>Qhull control options</h2>
-
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="#Qu">Qu</a></dt>
-    <dd>compute upper hull for furthest-site Delaunay
-        triangulation </dd>
-    <dt><a href="#Qc">Qc</a></dt>
-    <dd>keep coplanar points with nearest facet</dd>
-    <dt><a href="#Qi">Qi</a></dt>
-    <dd>keep interior points with nearest facet</dd>
-    <dt><a href="#QJn">QJ</a></dt>
-    <dd>joggled input to avoid precision problems</dd>
-    <dt><a href="#Qt">Qt</a></dt>
-    <dd>triangulated output</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Precision handling</b></dd>
-    <dt><a href="#Qz">Qz</a></dt>
-    <dd>add a point-at-infinity for Delaunay triangulations</dd>
-    <dt><a href="#Qx">Qx</a></dt>
-    <dd>exact pre-merges (allows coplanar facets)</dd>
-    <dt><a href="#Qs">Qs</a></dt>
-    <dd>search all points for the initial simplex</dd>
-    <dt><a href="#Qbb">Qbb</a></dt>
-    <dd>scale last coordinate to [0,m] for Delaunay</dd>
-    <dt><a href="#Qv">Qv</a></dt>
-    <dd>test vertex neighbors for convexity</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Transform input</b></dd>
-    <dt><a href="#Qb0">Qbk:0Bk:0</a></dt>
-    <dd>drop dimension k from input</dd>
-    <dt><a href="#QRn">QRn</a></dt>
-    <dd>random rotation (n=seed, n=0 time, n=-1 time/no rotate)</dd>
-    <dt><a href="#Qbk">Qbk:n</a></dt>
-    <dd>scale coord[k] to low bound of n (default -0.5)</dd>
-    <dt><a href="#QBk">QBk:n</a></dt>
-    <dd>scale coord[k] to upper bound of n (default 0.5)</dd>
-    <dt><a href="#QbB">QbB</a></dt>
-    <dd>scale input to fit the unit cube</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Select facets</b></dd>
-    <dt><a href="#QVn">QVn</a></dt>
-    <dd>good facet if it includes point n, -n if not</dd>
-    <dt><a href="#QGn">QGn</a></dt>
-    <dd>good facet if visible from point n, -n for not visible</dd>
-    <dt><a href="#Qg">Qg</a></dt>
-    <dd>only build good facets (needs '<a href="#QGn">QGn</a>', '<a
-        href="#QVn">QVn </a>', or '<a href="qh-optp.htm#Pdk">Pdk</a>')</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Experimental</b></dd>
-    <dt><a href="#Q4">Q4</a></dt>
-    <dd>avoid merging old facets into new facets</dd>
-    <dt><a href="#Q5">Q5</a></dt>
-    <dd>do not correct outer planes at end of qhull</dd>
-    <dt><a href="#Q3">Q3</a></dt>
-    <dd>do not merge redundant vertices</dd>
-    <dt><a href="#Q6">Q6</a></dt>
-    <dd>do not pre-merge concave or coplanar facets</dd>
-    <dt><a href="#Q0">Q0</a></dt>
-    <dd>do not pre-merge facets with 'C-0' or 'Qx'</dd>
-    <dt><a href="#Q8">Q8</a></dt>
-    <dd>ignore near-interior points</dd>
-    <dt><a href="#Q2">Q2</a></dt>
-    <dd>merge all non-convex at once instead of independent sets</dd>
-    <dt><a href="#Qf">Qf</a></dt>
-    <dd>partition point to furthest outside facet</dd>
-    <dt><a href="#Q7">Q7</a></dt>
-    <dd>process facets depth-first instead of breadth-first</dd>
-    <dt><a href="#Q9">Q9</a></dt>
-    <dd>process furthest of furthest points</dd>
-    <dt><a href="#Q10">Q10</a></dt>
-    <dd>no special processing for narrow distributions</dd>
-    <dt><a href="#Q11">Q11</a></dt>
-    <dd>copy normals and recompute centrums for tricoplanar facets</dd>
-    <dt><a href="#Qm">Qm</a></dt>
-    <dd>process points only if they would increase the max. outer
-        plane </dd>
-    <dt><a href="#Qr">Qr</a></dt>
-    <dd>process random outside points instead of furthest one</dd>
-    <dt><a href="#Q1">Q1</a></dt>
-    <dd>sort merges by type instead of angle</dd>
-</dl>
-
-<hr>
-
-<h3><a href="#qhull">»</a><a name="Qbb">Qbb - scale the last
-coordinate to [0,m] for Delaunay</a></h3>
-
-<p>After scaling with option 'Qbb', the lower bound of the last
-coordinate will be 0 and the upper bound will be the maximum
-width of the other coordinates. Scaling happens after projecting
-the points to a paraboloid and scaling other coordinates. </p>
-
-<p>Option 'Qbb' is automatically set for <a href=qdelaun.htm>qdelaunay</a>
-and <a href=qvoronoi.htm>qvoronoi</a>.  Option 'Qbb' is automatically set for joggled input '<a
-href="qh-optq.htm#QJn">QJ</a>'. </p>
-
-<p>Option 'Qbb' should be used for Delaunay triangulations with
-integer coordinates. Since the last coordinate is the sum of
-squares, it may be much larger than the other coordinates. For
-example, <tt>rbox 10000 D2 B1e8 | qhull d</tt> has precision
-problems while <tt>rbox 10000 D2 B1e8 | qhull d Qbb</tt> is OK. </p>
-
-<h3><a href="#qhull">»</a><a name="QbB">QbB - scale the input to
-fit the unit cube</a></h3>
-
-<p>After scaling with option 'QbB', the lower bound will be -0.5
-and the upper bound +0.5 in all dimensions. For different bounds
-change qh_DEFAULTbox in <tt>user.h</tt> (0.5 is best for <a
-href="index.htm#geomview">Geomview</a>).</p>
-
-<p>For Delaunay and Voronoi diagrams, scaling happens after
-projection to the paraboloid. Under precise arithmetic, scaling
-does not change the topology of the convex hull. Scaling may
-reduce precision errors if coordinate values vary widely.</p>
-
-<h3><a href="#qhull">»</a><a name="Qbk">Qbk:n - scale coord[k]
-to low bound</a></h3>
-
-<p>After scaling, the lower bound for dimension k of the input
-points will be n. 'Qbk' scales coord[k] to -0.5. </p>
-
-<h3><a href="#qhull">»</a><a name="QBk">QBk:n - scale coord[k]
-to upper bound </a></h3>
-
-<p>After scaling, the upper bound for dimension k of the input
-points will be n. 'QBk' scales coord[k] to 0.5. </p>
-
-<h3><a href="#qhull">»</a><a name="Qb0">Qbk:0Bk:0 - drop
-dimension k from the input points</a></h3>
-
-<p>Drop dimension<em> k </em>from the input points. For example,
-'Qb1:0B1:0' deletes the y-coordinate from all input points. This
-allows the user to take convex hulls of sub-dimensional objects.
-It happens before the Delaunay and Voronoi transformation.
-It happens after the halfspace transformation for both the data
-and the feasible point.</p>
-
-<h3><a href="#qhull">»</a><a name="Qc">Qc - keep coplanar points
-with nearest facet </a></h3>
-
-<p>During construction of the hull, a point is coplanar if it is
-between '<a href="qh-optc.htm#Wn">Wn</a>' above and '<a
-href="qh-optc.htm#Un">Un</a>' below a facet's hyperplane. A
-different definition is used for output from Qhull. </p>
-
-<p>For output, a coplanar point is above the minimum vertex
-(i.e., above the inner plane). With joggle ('<a
-href="qh-optq.htm#QJn">QJ</a>'), a coplanar point includes points
-within one joggle of the inner plane. </p>
-
-<p>With option 'Qc', output formats '<a href="qh-opto.htm#p">p </a>',
-'<a href="qh-opto.htm#f">f</a>', '<a href="qh-optg.htm#Gp">Gp</a>',
-'<a href="qh-optf.htm#Fc">Fc</a>', '<a href="qh-optf.htm#FN">FN</a>',
-and '<a href="qh-optf.htm#FP">FP</a>' will print the coplanar
-points. With options 'Qc <a href="#Qi">Qi</a>' these outputs
-include the interior points.</p>
-
-<p>For Delaunay triangulations (<a href=qdelaun.htm>qdelaunay</a>
-or <a href=qvoronoi.htm>qvoronoi</a>), a coplanar point is a point
-that is nearly incident to a vertex. All input points are either
-vertices of the triangulation or coplanar.</p>
-
-<p>Qhull stores coplanar points with a facet. While constructing
-the hull, it retains all points within qh_RATIOnearInside
-(user.h) of a facet. In qh_check_maxout(), it uses these points
-to determine the outer plane for each facet. With option 'Qc',
-qh_check_maxout() retains points above the minimum vertex for the
-hull. Other points are removed. If qh_RATIOnearInside is wrong or
-if options '<a href="#Q5">Q5</a> <a href="#Q8">Q8</a>' are set, a
-coplanar point may be missed in the output (see <a
-href="qh-impre.htm#limit">Qhull limitations</a>).</p>
-
-<h3><a href="#qhull">»</a><a name="Qf">Qf - partition point to
-furthest outside facet </a></h3>
-
-<p>After adding a new point to the convex hull, Qhull partitions
-the outside points and coplanar points of the old, visible
-facets. Without the '<a href="qh-opto.htm#f">f </a>' option and
-merging, it assigns a point to the first facet that it is outside
-('<a href="qh-optc.htm#Wn">Wn</a>'). When merging, it assigns a
-point to the first facet that is more than several times outside
-(see qh_DISToutside in user.h).</p>
-
-<p>If option 'Qf' is selected, Qhull performs a directed search
-(no merging) or an exhaustive search (merging) of new facets.
-Option 'Qf' may reduce precision errors if pre-merging does not
-occur.</p>
-
-<p>Option '<a href="#Q9">Q9</a>' processes the furthest of all
-furthest points.</p>
-
-<h3><a href="#qhull">»</a><a name="Qg">Qg - only build good
-facets (needs 'QGn' 'QVn' or 'Pdk') </a></h3>
-
-<p>Qhull has several options for defining and printing good
-facets. With the '<a href="#Qg">Qg</a>' option, Qhull will only
-build those facets that it needs to determine the good facets in
-the output. This may speed up Qhull in 2-d and 3-d. It is
-useful for furthest-site Delaunay 
-triangulations (<a href=qdelau_f.htm>qdelaunay Qu</a>, 
-invoke with 'qhull d Qbb <a href="#Qu">Qu</a> Qg'). 
-It is not effective in higher
-dimensions because many facets see a given point and contain a
-given vertex. It is not guaranteed to work for all combinations.</p>
-
-<p>See '<a href="#QGn">QGn</a>', '<a href="#QVn">QVn</a>', and '<a
-href="qh-optp.htm#Pdk">Pdk</a>' for defining good facets, and '<a
-href="qh-optp.htm#Pg">Pg</a>' and '<a href="qh-optp.htm#PG">PG</a>'
-for printing good facets and their neighbors. If pre-merging ('<a
-href="qh-optc.htm#Cn">C-n</a>') is not used and there are
-coplanar facets, then 'Qg Pg' may produce a different result than
-'<a href="qh-optp.htm#Pg">Pg</a>'. </p>
-
-<h3><a href="#qhull">»</a><a name="QGn">QGn - good facet if
-visible from point n, -n for not visible </a></h3>
-
-<p>With option 'QGn', a facet is good (see '<a href="#Qg">Qg</a>'
-and '<a href="qh-optp.htm#Pg">Pg</a>') if it is visible from
-point n. If <i>n &lt; 0</i>, a facet is good if it is not visible
-from point n. Point n is not added to the hull (unless '<a
-href="qh-optt.htm#TCn">TCn</a>' or '<a href="qh-optt.htm#TPn">TPn</a>').</p>
-
-<p>With <a href="rbox.htm">rbox</a>, use the 'Pn,m,r' option
-to define your point; it will be point 0 ('QG0'). </p>
-
-<h3><a href="#qhull">»</a><a name="Qi">Qi - keep interior points
-with nearest facet </a></h3>
-
-<p>Normally Qhull ignores points that are clearly interior to the
-convex hull. With option 'Qi', Qhull treats interior points the
-same as coplanar points. Option 'Qi' does not retain coplanar
-points. You will probably want '<a href="#Qc">Qc </a>' as well. </p>
-
-<p>Option 'Qi' is automatically set for '<a href=qdelaun.htm>qdelaunay</a>
-<a href="#Qc">Qc</a>' and '<a href=qvoronoi.htm>qvoronoi</a>
-<a href="#Qc">Qc</a>'. If you use 
-'<a href=qdelaun.htm>qdelaunay</a> Qi' or '<a href=qvoronoi.htm>qvoronoi</a>
-Qi', option '<a href="qh-opto.htm#s">s</a>' reports all nearly
-incident points while option '<a href="qh-optf.htm#Fs">Fs</a>'
-reports the number of interior points (should always be zero).</p>
-
-<p>With option 'Qi', output formats '<a href="qh-opto.htm#p">p</a>',
-'<a href="qh-opto.htm#f">f</a>','<a href="qh-optg.htm#Gp">Gp</a>',
-'<a href="qh-optf.htm#Fc">Fc</a>', '<a href="qh-optf.htm#FN">FN</a>',
-and '<a href="qh-optf.htm#FP">FP</a>' include interior points. </p>
-
-<h3><a href="#qhull">»</a><a name="QJ">QJ</a> or <a name="QJn">QJn</a> - joggled
-input to avoid precision errors</a></h3>
-
-<p>Option 'QJ' or 'QJn' joggles each input coordinate by adding a
-random number in the range [-n,n]. If a precision error occurs,
-It tries again. If precision errors still occur, Qhull increases <i>n</i>
-ten-fold and tries again. The maximum value for increasing <i>n</i>
-is 0.01 times the maximum width of the input. Option 'QJ' selects
-a default value for <i>n</i>. <a href="../src/user.h#JOGGLEdefault">User.h</a>
-defines these parameters and a maximum number of retries. See <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>Option 'QJ' also sets '<a href="qh-optq.htm#Qbb">Qbb</a>' for
-Delaunay triangulations and Voronoi diagrams. It does not set
-'Qbb' if '<a href="qh-optq.htm#Qbk">Qbk:n</a>' or '<a
-href="qh-optq.htm#QBk">QBk:n</a>' are set. </p>
-
-<p>If 'QJn' is set, Qhull does not merge facets unless requested
-to. All facets are simplicial (triangular in 2-d). This may be
-important for your application.  You may also use triangulated output
-('<a href="qh-optq.htm#Qt">Qt</a>') or Option '<a href="qh-optf.htm#Ft">Ft</a>'.
-
-<p>Qhull adjusts the outer and inner planes for 'QJn' ('<a
-href="qh-optf.htm#Fs">Fs</a>'). They are increased by <i>sqrt(d)*n</i>
-to account for the maximum distance between a joggled point and
-the corresponding input point. Coplanar points ('<a
-href="qh-optq.htm#Qc">Qc</a>') require an additional <i>sqrt(d)*n</i>
-since vertices and coplanar points may be joggled in opposite
-directions. </p>
-
-<p>For Delaunay triangulations (<a href=qdelaun.htm>qdelaunay</a>)
-and Voronoi diagrams (<a href=qvoronoi.htm>qvoronoi</a>), joggle
-happens before lifting the input sites to a paraboloid.  Instead of
-'QJ', you may use triangulated output ('<a
-href="qh-optq.htm#Qt">Qt</a>')</p>
-
-<p>By default, 'QJn' uses a fixed random number seed. To use time
-as the random number seed, select '<a href="qh-optq.htm#QRn">QR-1</a>'.
-The summary ('<a href="qh-opto.htm#s">s</a>') will show the
-selected seed as 'QR-n'.  
-
-<p>With 'QJn', Qhull does not error on degenerate hyperplane
-computations. Except for Delaunay and Voronoi computations, Qhull
-does not error on coplanar points. </p>
-
-<p>Use option '<a href="qh-optf.htm#FO">FO</a>' to display the
-selected options. Option 'FO' displays the joggle and the joggle
-seed. If Qhull restarts, it will redisplay the options. </p>
-
-<p>Use option '<a href="qh-optt.htm#TRn">TRn</a>' to estimate the
-probability that Qhull will fail for a given 'QJn'.  
-
-<h3><a href="#qhull">»</a><a name="Qm">Qm - only process points
-that increase the maximum outer plane </a></h3>
-
-<p>Qhull reports the maximum outer plane in its summary ('<a
-href="qh-opto.htm#s">s</a>'). With option 'Qm', Qhull does not
-process points that are below the current, maximum outer plane.
-This is equivalent to always adjusting '<a href="qh-optc.htm#Wn">Wn
-</a>' to the maximum distance of a coplanar point to a facet. It
-is ignored for points above the upper convex hull of a Delaunay
-triangulation. Option 'Qm' is no longer important for merging.</p>
-
-<h3><a href="#qhull">»</a><a name="Qr">Qr - process random
-outside points instead of furthest ones </a></h3>
-
-<p>Normally, Qhull processes the furthest point of a facet's
-outside points. Option 'Qr' instead selects a random outside
-point for processing. This makes Qhull equivalent to the
-randomized incremental algorithms.</p>
-
-<p>The original randomization algorithm by Clarkson and Shor [<a
-href="index.htm#cla-sho89">'89</a>] used a conflict list which
-is equivalent to Qhull's outside set. Later randomized algorithms
-retained the previously constructed facets. </p>
-
-<p>To compare Qhull to the randomized algorithms with option
-'Qr', compare &quot;hyperplanes constructed&quot; and
-&quot;distance tests&quot;. Qhull does not report CPU time
-because the randomization is inefficient. </p>
-
-<h3><a href="#qhull">»</a><a name="QRn">QRn - random rotation </a></h3>
-
-<p>Option 'QRn' randomly rotates the input. For Delaunay
-triangulations (<a href=qdelaun.htm>qdelaunay</a> or <a href=qvoronoi.htm>qvoronoi</a>), 
-it rotates the lifted points about
-the last axis. </p>
-
-<p>If <em>n=0</em>, use time as the random number seed. If <em>n&gt;0</em>,
-use n as the random number seed. If <em>n=-1</em>, don't rotate
-but use time as the random number seed. If <em>n&lt;-1</em>,
-don't rotate but use <em>n</em> as the random number seed. </p>
-
-<h3><a href="#qhull">»</a><a name="Qs">Qs - search all points
-for the initial simplex </a></h3>
-
-<p>Qhull constructs an initial simplex from <i>d+1</i> points. It
-selects points with the maximum and minimum coordinates and
-non-zero determinants. If this fails, it searches all other
-points. In 8-d and higher, Qhull selects points with the minimum
-x or maximum coordinate (see qh_initialvertices in <tt>poly2.c </tt>).
-It rejects points with nearly zero determinants. This should work
-for almost all input sets.</p>
-
-<p>If Qhull can not construct an initial simplex, it reports a
-descriptive message. Usually, the point set is degenerate and one
-or more dimensions should be removed ('<a href="#Qb0">Qbk:0Bk:0</a>').
-If not, use option 'Qs'. It performs an exhaustive search for the
-best initial simplex. This is expensive is high dimensions. </p>
-
-<h3><a href="#qhull">»</a><a name="Qt">Qt - triangulated output</a></h3>
-
-<p>By default, qhull merges facets to handle precision errors.  This
-produces non-simplicial facets (e.g., the convex hull of a cube has 6 square
-facets).  Each facet is non-simplicial because it has four vertices.
-
-<p>Use option 'Qt' to triangulate all non-simplicial facets before generating
-results.  Alternatively, use joggled input ('<a href="#QJn">QJ</a>') to
-prevent non-simplical facets.  Unless '<a href="qh-optp.htm#Pp">Pp</a>' is set,
-qhull produces a warning if 'QJ' and 'Qt' are used together.
-
-<p>Option 'Qt' may produce degenerate facets with zero area.</p>
-
-<p>Facet area and hull volumes may differ with and without
-'Qt'.  The triangulations are different and different triangles
-may be ignored due to precision errors.
-
-<p>With sufficient merging, the ridges of a non-simplicial facet may share more than two neighboring facets. If so, their triangulation ('<a href="#Qt">Qt</a>') will fail since two facets have the same vertex set. </p>
-
-<h3><a href="#qhull">»</a><a name="Qu">Qu - compute upper hull
-for furthest-site Delaunay triangulation </a></h3>
-
-<p>When computing a Delaunay triangulation (<a href=qdelaun.htm>qdelaunay</a> 
-or <a href=qvoronoi.htm>qvoronoi</a>),
-Qhull computes both the the convex hull of points on a
-paraboloid. It normally prints facets of the lower hull. These
-correspond to the Delaunay triangulation. With option 'Qu', Qhull
-prints facets of the upper hull. These correspond to the <a
-href="qdelau_f.htm">furthest-site Delaunay triangulation</a>
-and the <a href="qvoron_f.htm">furthest-site Voronoi diagram</a>.</p>
-
-<p>Option 'qhull d Qbb Qu <a href="#Qg">Qg</a>' may improve the speed of option
-'Qu'. If you use the Qhull library, a faster method is 1) use
-Qhull to compute the convex hull of the input sites; 2) take the
-extreme points (vertices) of the convex hull; 3) add one interior
-point (e.g., 
-'<a href="qh-optf.htm#FV">FV</a>', the average of <em>d</em> extreme points); 4) run 
-'qhull d Qbb Qu' or 'qhull v Qbb Qu' on these points.</p>
-
-<h3><a href="#qhull">»</a><a name="Qv">Qv - test vertex
-neighbors for convexity </a></h3>
-
-<p>Normally, Qhull tests all facet neighbors for convexity.
-Non-neighboring facets which share a vertex may not satisfy the
-convexity constraint. This occurs when a facet undercuts the
-centrum of another facet. They should still be convex. Option
-'Qv' extends Qhull's convexity testing to all neighboring facets
-of each vertex. The extra testing occurs after the hull is
-constructed.. </p>
-
-<h3><a href="#qhull">»</a><a name="QVn">QVn - good facet if it
-includes point n, -n if not </a></h3>
-
-<p>With option 'QVn', a facet is good ('<a href="#Qg">Qg</a>',
-'<a href="qh-optp.htm#Pg">Pg</a>') if one of its vertices is
-point n. If <i>n&lt;0</i>, a good facet does not include point n.
-
-<p>If options '<a href="qh-optp.htm#PG">PG</a>' 
-and '<a href="#Qg">Qg</a>' are not set, option '<a href="qh-optp.htm#Pg">Pg</a>'
-(print only good) 
-is automatically set.
-</p>
-
-<p>Option 'QVn' behaves oddly with options '<a href="qh-optf.htm#Fx">Fx</a>'
-and '<a href=qvoronoi.htm>qvoronoi</a> <a href="qh-optf.htm#Fv2">Fv</a>'.
-
-<p>If used with option '<a href="#Qg">Qg</a>' (only process good facets), point n is 
-either in the initial simplex or it is the first
-point added to the hull. Options 'QVn Qg' require either '<a href="#QJn">QJ</a>' or 
-'<a href="#Q0">Q0</a>' (no merging).</p>
-
-<h3><a href="#qhull">»</a><a name="Qx">Qx - exact pre-merges
-(allows coplanar facets) </a></h3>
-
-<p>Option 'Qx' performs exact merges while building the hull.
-Option 'Qx' is set by default in 5-d and higher. Use option '<a
-href="#Q0">Q0</a>' to not use 'Qx' by default. Unless otherwise
-specified, option 'Qx' sets option '<a href="qh-optc.htm#C0">C-0</a>'.
-</p>
-
-<p>The &quot;exact&quot; merges are merging a point into a
-coplanar facet (defined by '<a href="qh-optc.htm#Vn">Vn </a>', '<a
-href="qh-optc.htm#Un">Un</a>', and '<a href="qh-optc.htm#Cn">C-n</a>'),
-merging concave facets, merging duplicate ridges, and merging
-flipped facets. Coplanar merges and angle coplanar merges ('<a
-href="qh-optc.htm#An">A-n</a>') are not performed. Concavity
-testing is delayed until a merge occurs.</p>
-
-<p>After the hull is built, all coplanar merges are performed
-(defined by '<a href="qh-optc.htm#Cn">C-n</a>' and '<a
-href="qh-optc.htm#An">A-n</a>'), then post-merges are performed
-(defined by '<a href="qh-optc.htm#Cn2">Cn</a>' and '<a
-href="qh-optc.htm#An2">An</a>'). If facet progress is logged ('<a
-href="qh-optt.htm#TFn">TFn</a>'), Qhull reports each phase and
-prints intermediate summaries and statistics ('<a
-href="qh-optt.htm#Ts">Ts</a>'). </p>
-
-<p>Without 'Qx' in 5-d and higher, options '<a
-href="qh-optc.htm#Cn">C-n</a>' and '<a href="qh-optc.htm#An">A-n</a>'
-may merge too many facets. Since redundant vertices are not
-removed effectively, facets become increasingly wide. </p>
-
-<p>Option 'Qx' may report a wide facet. With 'Qx', coplanar
-facets are not merged. This can produce a &quot;dent&quot; in an
-intermediate hull. If a point is partitioned into a dent and it
-is below the surrounding facets but above other facets, one or
-more wide facets will occur. In practice, this is unlikely. To
-observe this effect, run Qhull with option '<a href="#Q6">Q6</a>'
-which doesn't pre-merge concave facets. A concave facet makes a
-large dent in the intermediate hull.</p>
-
-<p>Option 'Qx' may set an outer plane below one of the input
-points. A coplanar point may be assigned to the wrong facet
-because of a &quot;dent&quot; in an intermediate hull. After
-constructing the hull, Qhull double checks all outer planes with
-qh_check_maxout in <tt>poly2.c </tt>. If a coplanar point is
-assigned to the wrong facet, qh_check_maxout may reach a local
-maximum instead of locating all coplanar facets. This appears to
-be unlikely.</p>
-
-<h3><a href="#qhull">»</a><a name="Qz">Qz - add a
-point-at-infinity for Delaunay triangulations</a></h3>
-
-<p>Option 'Qz' adds a point above the paraboloid of lifted sites
-for a Delaunay triangulation. It allows the Delaunay
-triangulation of cospherical sites. It reduces precision errors
-for nearly cospherical sites.</p>
-
-<h3><a href="#qhull">»</a><a name="Q0">Q0 - no merging with C-0
-and Qx</a></h3>
-
-<p>Turn off default merge options '<a href="qh-optc.htm#C0">C-0</a>'
-and '<a href="#Qx">Qx</a>'. </p>
-
-<p>With 'Q0' and without other pre-merge options, Qhull ignores
-precision issues while constructing the convex hull. This may
-lead to precision errors. If so, a descriptive warning is
-generated. See <a href="qh-impre.htm">Precision issues</a>.</p>
-
-<h3><a href="#qhull">»</a><a name="Q1">Q1 - sort merges by type
-instead of angle </a></h3>
-
-<p>Qhull sorts the coplanar facets before picking a subset of the
-facets to merge. It merges concave and flipped facets first. Then
-it merges facets that meet at a steep angle. With 'Q1', Qhull
-sorts merges by type (coplanar, angle coplanar, concave) instead
-of by angle. This may make the facets wider. </p>
-
-<h3><a href="#qhull">»</a><a name="Q2">Q2 - merge all non-convex
-at once instead of independent sets </a></h3>
-
-<p>With 'Q2', Qhull merges all facets at once instead of
-performing merges in independent sets. This may make the facets
-wider. </p>
-
-<h3><a href="#qhull">»</a><a name="Q3">Q3 - do not merge
-redundant vertices </a></h3>
-
-<p>With 'Q3', Qhull does not remove redundant vertices. In 6-d
-and higher, Qhull never removes redundant vertices (since
-vertices are highly interconnected). Option 'Q3' may be faster,
-but it may result in wider facets. Its effect is easiest to see
-in 3-d and 4-d.</p>
-
-<h3><a href="#qhull">»</a><a name="Q4">Q4 - avoid merging </a>old
-facets into new facets</h3>
-
-<p>With 'Q4', Qhull avoids merges of an old facet into a new
-facet. This sometimes improves facet width and sometimes makes it
-worse. </p>
-
-<h3><a href="#qhull">»</a><a name="Q5">Q5 - do not correct outer
-planes at end of qhull </a></h3>
-
-<p>When merging facets or approximating a hull, Qhull tests
-coplanar points and outer planes after constructing the hull. It
-does this by performing a directed search (qh_findbest in <tt>geom.c</tt>).
-It includes points that are just inside the hull. </p>
-
-<p>With options 'Q5' or '<a href="qh-optp.htm#Po">Po</a>', Qhull
-does not test outer planes. The maximum outer plane is used
-instead. Coplanar points ('<a href="#Qc">Qc</a>') are defined by
-'<a href="qh-optc.htm#Un">Un</a>'. An input point may be outside
-of the maximum outer plane (this appears to be unlikely). An
-interior point may be above '<a href="qh-optc.htm#Un">Un</a>'
-from a hyperplane.</p>
-
-<p>Option 'Q5' may be used if outer planes are not needed. Outer
-planes are needed for options '<a href="qh-opto.htm#s">s</a>', '<a
-href="qh-optg.htm#G">G</a>', '<a href="qh-optg.htm#Go">Go </a>',
-'<a href="qh-optf.htm#Fs">Fs</a>', '<a href="qh-optf.htm#Fo">Fo</a>',
-'<a href="qh-optf.htm#FF">FF</a>', and '<a href="qh-opto.htm#f">f</a>'.</p>
-
-<h3><a href="#qhull">»</a><a name="Q6">Q6 - do not pre-merge
-concave or coplanar facets </a></h3>
-
-<p>With 'Q6', Qhull does not pre-merge concave or coplanar
-facets. This demonstrates the effect of &quot;dents&quot; when
-using '<a href="#Qx">Qx</a>'. </p>
-
-<h3><a href="#qhull">»</a><a name="Q7">Q7 - depth-first
-processing instead of breadth-first </a></h3>
-
-<p>With 'Q7', Qhull processes facets in depth-first order instead
-of breadth-first order. This may increase the locality of
-reference in low dimensions. If so, Qhull may be able to use
-virtual memory effectively. </p>
-
-<p>In 5-d and higher, many facets are visible from each
-unprocessed point. So each iteration may access a large
-proportion of allocated memory. This makes virtual memory
-ineffectual. Once real memory is used up, Qhull will spend most
-of its time waiting for I/O.</p>
-
-<p>Under 'Q7', Qhull runs slower and the facets may be wider. </p>
-
-<h3><a href="#qhull">»</a><a name="Q8">Q8 - ignore near-interior
-points </a></h3>
-
-<p>With 'Q8' and merging, Qhull does not process interior points
-that are near to a facet (as defined by qh_RATIOnearInside in
-user.h). This avoids partitioning steps. It may miss a coplanar
-point when adjusting outer hulls in qh_check_maxout(). The best
-value for qh_RATIOnearInside is not known. Options 'Q8 <a
-href="#Qc">Qc</a>' may be sufficient. </p>
-
-<h3><a href="#qhull">»</a><a name="Q9">Q9 - process furthest of
-furthest points </a></h3>
-
-<p>With 'Q9', Qhull processes the furthest point of all outside
-sets. This may reduce precision problems. The furthest point of
-all outside sets is not necessarily the furthest point from the
-convex hull.</p>
-
-<h3><a href="#qhull">»</a><a name="Q10">Q10 - no special processing
-for narrow distributions</a></h3>
-
-<p>With 'Q10', Qhull does not special-case narrow distributions.
-See <a href=qh-impre.htm#limit>Limitations of merged facets</a> for
-more information.
-
-<h3><a href="#qhull">»</a><a name="Q11">Q11 - copy normals and recompute
-centrums for
-tricoplanar facets</a></h3>
-
-Option '<a href="#Qt">Qt</a>' triangulates non-simplicial facets
-into "tricoplanar" facets.
-Normally tricoplanar facets share the same normal, centrum, and
-Voronoi vertex.  They can not be merged or replaced.  With
-option 'Q11', Qhull duplicates the normal and Voronoi vertex.  
-It recomputes the centrum.  
-
-<p>Use 'Q11' if you use the Qhull library to add points
-incrementally and call qh_triangulate() after each point.  
-Otherwise, Qhull will report an error when it tries to
-merge and replace a tricoplanar facet.
-
-<p>With sufficient merging and new points, option 'Q11' may 
-lead to precision problems such
-as duplicate ridges and concave facets.  For example, if qh_triangulate()
-is added to qh_addpoint(), RBOX 1000 s W1e-12 t1001813667 P0 | QHULL d Q11 Tv,
-reports an error due to a duplicate ridge.
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optt.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optt.htm
deleted file mode 100644
index 8deed94527aa45253bb235dddb1ccbe4915e6d05..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-optt.htm
+++ /dev/null
@@ -1,275 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull trace options (T)</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a> Qhull trace options (T)</h1>
-
-This section lists the trace options for Qhull. These options are
-indicated by 'T' followed by a letter.
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<p><a href="index.htm#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-<a name="trace">&#149;</a> <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<h2>Trace options</h2>
-
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="#Tz">Tz</a></dt>
-    <dd>output error information to stdout instead of stderr</dd>
-    <dt><a href="#TI">TI file</a></dt>
-    <dd>input data from a file</dd>
-    <dt><a href="#TO">TO file</a></dt>
-    <dd>output results to a file</dd>
-    <dt><a href="#Ts">Ts</a></dt>
-    <dd>print statistics</dd>
-    <dt><a href="#TFn">TFn</a></dt>
-    <dd>report progress whenever n or more facets created</dd>
-    <dt><a href="#TRn">TRn</a></dt>
-    <dd>rerun qhull n times</dd>
-    <dt><a href="#Tv">Tv</a></dt>
-    <dd>verify result: structure, convexity, and point inclusion</dd>
- 
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Debugging</b></dd>
-    <dt><a href="#Tc">Tc</a></dt>
-    <dd>check frequently during execution</dd>
-    <dt><a href="#TVn2">TVn</a></dt>
-    <dd>stop qhull after adding point n </dd>
-    <dt><a href="#TCn">TCn</a></dt>
-    <dd>stop qhull after building cone for point n</dd>
-    <dt><a href="#TVn">TV-n</a></dt>
-    <dd>stop qhull before adding point n</dd>
-    <dt><a href="#Tn">T4</a></dt>
-    <dd>trace at level n, 4=all, 5=mem/gauss, -1= events</dd>
-    <dt><a href="#TWn">TWn</a></dt>
-    <dd>trace merge facets when width &gt; n</dd>
-    <dt><a href="#TMn">TMn</a></dt>
-    <dd>turn on tracing at merge n</dd>
-    <dt><a href="#TPn">TPn</a></dt>
-    <dd>turn on tracing when point n added to hull</dd>
-</dl>
-
-<hr>
-
-<h3><a href="#trace">»</a><a name="Tc">Tc - check frequently
-during execution </a></h3>
-
-<p>Qhull includes frequent checks of its data structures. Option
-'Tc' will catch most inconsistency errors. It is slow and should
-not be used for production runs. Option '<a href="#Tv">Tv</a>'
-performs the same checks after the hull is constructed.</p>
-
-<h3><a href="#trace">»</a><a name="TCn">TCn - stop qhull after
-building cone for point n</a></h3>
-
-<p>Qhull builds a cone from the point to its horizon facets.
-Option 'TCn' stops Qhull just after building the cone. The output
-for '<a href="qh-opto.htm#f">f</a>' includes the cone and the old
-hull.'. </p>
-
-<h3><a href="#trace">»</a><a name="TFn">TFn - report summary
-whenever n or more facets created </a></h3>
-
-<p>Option 'TFn' reports progress whenever more than n facets are
-created. The test occurs just before adding a new point to the
-hull. During post-merging, 'TFn' reports progress after more than
-<i>n/2</i> merges. </p>
-
-<h3><a href="#trace">»</a><a name="TI">TI file - input data from file</a></h3>
-
-<p>Input data from 'file' instead of stdin.  The filename may not
-contain spaces or use single quotes.  
-You may use I/O redirection
-instead (e.g., 'rbox 10 | qdelaunay >results').</P>
-
-<h3><a href="#trace">»</a><a name="TMn">TMn - turn on tracing at
-merge n </a></h3>
-
-<p>Turn on tracing at n'th merge. </p>
-
-<h3><a href="#trace">»</a><a name="Tn">Tn - trace at level n</a></h3>
-
-<p>Qhull includes full execution tracing. 'T-1' traces events.
-'T1' traces the overall execution of the program. 'T2' and 'T3'
-trace overall execution and geometric and topological events.
-'T4' traces the algorithm. 'T5' includes information about memory
-allocation and Gaussian elimination. 'T1' is useful for logging
-progress of Qhull in high dimensions.</p>
-
-<p>Option 'Tn' can produce large amounts of output. Use options '<a
-href="#TPn">TPn</a>', '<a href="#TWn">TWn</a>', and '<a href="#TMn">TMn</a>' to selectively
-turn on tracing. Since all errors report the last processed
-point, option '<a href="#TPn">TPn</a>' is particularly useful.</p>
-
-<p>Different executions of the same program may produce different
-traces and different results.  The reason is that Qhull uses hashing
-to match ridges of non-simplicial facets.  For performance reasons,
-the hash computation uses
-memory addresses which may change across executions.
-
-<h3><a href="#trace">»</a><a name="TO">TO file - output results to file</a></h3>
-
-<p>Redirect stdout to 'file'.  The filename may be enclosed in
-single quotes.  Unix and Windows NT users may use I/O redirection
-instead (e.g., 'rbox 10 | qdelaunay >results').</P>
-<p>
-Windows95 users should always use 'TO file'.  If they use I/O redirection, 
-error output is not sent to the console.  Qhull uses single quotes instead
-of double quotes because a missing double quote can 
-freeze Windows95 (e.g., do not run, rbox 10 | qhull TO &quot;x)</p>
-<p>
-
-<h3><a href="#trace">»</a><a name="TPn">TPn - turn on tracing
-when point n added to hull </a></h3>
-
-<p>Option 'TPn' turns on tracing when point n is added to
-the hull.  It also traces partitions of point n.  This option 
-reduces the output size when tracing.  It is the normal
-method to determine the cause of a Qhull error. All Qhull errors
-report the last point added. 
-
-<p>Use options 'TPn <a href="qh-optt.htm#TVn">TVn</a>' to 
-trace the addition of point n to the convex hull and stop when done.</p>
-
-<p>If used with option '<a href="qh-optt.htm#TWn">TWn</a>', 
-'TPn' turns off tracing after adding point n to the hull.
-Use options 'TPn TWn' to 
-trace the addition of point n to the convex hull, partitions
-of point n, and wide merges.</p>
-
-<h3><a href="#trace">»</a><a name="TRn">TRn - rerun qhull n times</a></h3>
-
-<p>Option 'TRn' reruns Qhull n times.  It is usually used 
-with '<a href="qh-optq.htm#QJn">QJn</a>' to determine the probability
-that a given joggle will fail.  The summary 
-('<a href="qh-opto.htm#s">s</a>') lists the failure
-rate and the precision errors that occurred.
-Option '<a href="#Ts">Ts</a>' will report statistics for
-all of the runs.  Trace and output options only apply to the last
-run.  An event trace, '<a href="#Tn">T-1</a>' reports events for all runs.
-
-<p>Tracing applies to the last run of Qhull.  If an error
-is reported, the options list the run number as "_run".  
-To trace this run, set 'TRn' to the same value.</p>
-
-<h3><a href="#trace">»</a><a name="Ts">Ts - print statistics </a></h3>
-
-<p>Option 'Ts' collects statistics and prints them to stderr. For
-Delaunay triangulations, the angle statistics are restricted to
-the lower or upper envelope.</p>
-
-<h3><a href="#trace">»</a><a name="Tv">Tv - verify result:
-structure, convexity, and point inclusion </a></h3>
-
-<p>Option 'Tv' checks the topological structure, convexity, and
-point inclusion. If precision problems occurred, facet convexity
-is tested whether or not 'Tv' is selected. Option 'Tv' does not
-check point inclusion if forcing output with '<a
-href="qh-optp.htm#Po">Po</a>', or if '<a href="qh-optq.htm#Q5">Q5</a>'
-is set. </p>
-
-<p>The convex hull of a set of points is the smallest polytope
-that includes the points. Option 'Tv' tests point inclusion.
-Qhull verifies that all points are below all outer planes
-(facet-&gt;maxoutside). Point inclusion is exhaustive if merging
-or if the facet-point product is small enough; otherwise Qhull
-verifies each point with a directed search (qh_findbest). To
-force an exhaustive test when using option '<a
-href="qh-optc.htm#C0">C-0</a>' (default), use 'C-1e-30' instead. </p>
-
-<p>Point inclusion testing occurs after producing output. It
-prints a message to stderr unless option '<a
-href="qh-optp.htm#Pp">Pp</a>' is used. This allows the user to
-interrupt Qhull without changing the output. </p>
-
-<p>With '<a href=qvoronoi.htm>qvoronoi</a> <a href="qh-optf.htm#Fi2">Fi</a>' 
-and '<a href=qvoronoi.htm>qvoronoi</a> <a href="qh-optf.htm#Fo2">Fo</a>',
-option 'Tv' collects statistics that verify all Voronoi vertices lie
-on the separating hyperplane, and for bounded regions, all 
-separating hyperplanes are perpendicular bisectors.
- 
-<h3><a href="#trace">»</a><a name="TVn">TV-n - stop qhull before
-adding point n</a></h3>
-
-<p>Qhull adds one point at a time to the convex hull. See <a
-href="qh-eg.htm#how">how Qhull adds a point</a>. Option 'TV-n'
-stops Qhull just before adding a new point. Output shows the hull
-at this time.</p>
-
-<h3><a href="#trace">»</a><a name="TVn2">TVn - stop qhull after
-adding point n</a></h3>
-
-<p>Option 'TVn' stops Qhull after it has added point n. Output
-shows the hull at this time.</p>
-
-<h3><a href="#trace">»</a><a name="TWn">TWn - trace merge facets
-when width &gt; n </a></h3>
-
-<p>Along with TMn, this option allows the user to determine the
-cause of a wide merge.</p>
-<h3><a href="#trace">»</a><a name="Tz">Tz - send all output to
-stdout </a></h3>
-
-<p>Redirect stderr to stdout. </p>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-quick.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-quick.htm
deleted file mode 100644
index 6d8d1104cbeacf78fb905d34157330b4b9dd3060..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qh-quick.htm
+++ /dev/null
@@ -1,491 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull quick reference</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOC"><b>Up:</b></a> <a href="http://www.qhull.org">Home
-page for Qhull</a> <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a> <br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a> <br>
-<b>To:</b> <a href="qh-in.htm#TOC">Qhull internals</a><br>
-<b>To:</b> <a href="../src/index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="../src/index.htm#TOC">Qhull files</a><br>
-<b>To:</b> <a href="../src/qh-geom.htm">Geom</a> &#149; <a href="../src/qh-globa.htm">Global</a>
-&#149; <a href="../src/qh-io.htm">Io</a> &#149; <a href="../src/qh-mem.htm">Mem</a>
-&#149; <a href="../src/qh-merge.htm">Merge</a> &#149; <a href="../src/qh-poly.htm">Poly</a>
-&#149; <a href="../src/qh-qhull.htm">Qhull</a> &#149; <a href="../src/qh-set.htm">Set</a>
-&#149; <a href="../src/qh-stat.htm">Stat</a> &#149; <a href="../src/qh-user.htm">User</a>
-</p>
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/cone.html"><img
-src="qh--cone.gif" alt="[cone]" align="middle" width="100"
-height="100"></a> Qhull quick reference</h1>
-
-This section lists all programs and options in Qhull.
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<p>
-<a name="programs">&nbsp;</a>
-<hr>
-<b>Qhull programs</b>
-<p><a href="#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<dl>
-    <dt><a href="qconvex.htm">qconvex</a> -- convex hull</dt>
-    <dd><a href="qconvex.htm#synopsis">sy</a>nopsis &#149; <a
-	    href="qconvex.htm#input">in</a>put &#149; <a
-        href="qconvex.htm#outputs">ou</a>tputs &#149; <a
-        href="qconvex.htm#controls">co</a>ntrols &#149; <a
-        href="qconvex.htm#graphics">gr</a>aphics &#149; <a 
-        href="qconvex.htm#notes">no</a>tes &#149; <a 
-        href="qconvex.htm#conventions">co</a>nventions &#149; <a
-		href="qconvex.htm#options">op</a>tions</dd>
-    <dt>&nbsp;</dt>
-    <dt><a href="qdelaun.htm">qdelaunay</a> -- Delaunay triangulation</dt>
-    <dd><a href="qdelaun.htm#synopsis">sy</a>nopsis &#149; <a
-	    href="qdelaun.htm#input">in</a>put &#149; <a
-        href="qdelaun.htm#outputs">ou</a>tputs &#149; <a 
-		 href="qdelaun.htm#controls">co</a>ntrols &#149; <a
-        href="qdelaun.htm#graphics">gr</a>aphics &#149; <a
-        href="qdelaun.htm#notes">no</a>tes &#149; <a
-		href="qdelaun.htm#conventions">co</a>nventions &#149; <a 
-	    href="qdelaun.htm#options">op</a>tions</dd>
-    <dt>&nbsp;</dt>
-    <dt><a href="qdelau_f.htm">qdelaunay Qu</a> -- furthest-site Delaunay triangulation</dt>
-    <dd><a href="qdelau_f.htm#synopsis">sy</a>nopsis &#149; <a
-	    href="qdelau_f.htm#input">in</a>put &#149; <a
-        href="qdelau_f.htm#outputs">ou</a>tputs &#149; <a 
-		 href="qdelau_f.htm#controls">co</a>ntrols &#149; <a
-        href="qdelau_f.htm#graphics">gr</a>aphics &#149; <a
-        href="qdelau_f.htm#notes">no</a>tes &#149; <a
-		href="qdelau_f.htm#conventions">co</a>nventions &#149; <a 
-	    href="qdelau_f.htm#options">op</a>tions</dd>
-    <dt>&nbsp;</dt>
-    <dt><a href="qhalf.htm">qhalf</a> -- halfspace intersection about a point</dt>
-    <dd><a href="qhalf.htm#synopsis">sy</a>nopsis &#149; <a
-	    href="qhalf.htm#input">in</a>put &#149; <a
-        href="qhalf.htm#outputs">ou</a>tputs &#149; <a
-        href="qhalf.htm#controls">co</a>ntrols &#149; <a
-        href="qhalf.htm#graphics">gr</a>aphics &#149; <a 
-        href="qhalf.htm#notes">no</a>tes &#149; <a 
-        href="qhalf.htm#conventions">co</a>nventions &#149; <a
-		href="qhalf.htm#options">op</a>tions</dd>
-    <dt>&nbsp;</dt>
-    <dt><a href="qvoronoi.htm">qvoronoi</a> -- Voronoi diagram</dt>
-    <dd><a href="qvoronoi.htm#synopsis">sy</a>nopsis &#149; <a
-	    href="qvoronoi.htm#input">in</a>put &#149; <a
-  	    href="qvoronoi.htm#outputs">ou</a>tputs &#149;
-        <a href="qvoronoi.htm#controls">co</a>ntrols &#149; <a
-        href="qvoronoi.htm#graphics">gr</a>aphics &#149; <a
-        href="qvoronoi.htm#notes">no</a>tes  &#149; <a
-	    href="qvoronoi.htm#conventions">co</a>nventions &#149; <a 
-	    href="qvoronoi.htm#options">op</a>tions</dd>
-    <dt>&nbsp;</dt>
-    <dt><a href="qvoron_f.htm">qvoronoi Qu</a> -- furthest-site Voronoi diagram</dt>
-    <dd><a href="qvoron_f.htm#synopsis">sy</a>nopsis &#149; <a
-	    href="qvoron_f.htm#input">in</a>put &#149; <a
-        href="qvoron_f.htm#outputs">ou</a>tputs &#149; <a 
-		 href="qvoron_f.htm#controls">co</a>ntrols &#149; <a
-        href="qvoron_f.htm#graphics">gr</a>aphics &#149; <a
-        href="qvoron_f.htm#notes">no</a>tes &#149; <a
-		href="qvoron_f.htm#conventions">co</a>nventions &#149; <a 
-	    href="qvoron_f.htm#options">op</a>tions</dd>
-    <dt>&nbsp;</dt>
-    <dt><a href="rbox.htm">rbox</a> -- generate point distributions for qhull</dt>
-    <dd><a href="rbox.htm#synopsis">sy</a>nopsis &#149; <a
-		href="rbox.htm#outputs">ou</a>tputs &#149; <a
-        href="rbox.htm#examples">ex</a>amples &#149; <a
-        href="rbox.htm#notes">no</a>tes &#149; <a 
-		href="rbox.htm#options">op</a>tions</dd>
-    <dt>&nbsp;</dt>
-    <dt><a href="qhull.htm">qhull</a> -- convex hull and related structures</dt>
-    <dd><a href="qhull.htm#synopsis">sy</a>nopsis &#149; <a
-	    href="qhull.htm#input">in</a>put &#149; <a
-        href="qhull.htm#outputs">ou</a>tputs &#149; <a
-        href="qhull.htm#controls">co</a>ntrols &#149; <a
-		href="qhull.htm#options">op</a>tions</dd>
-    </dl>
-<a name="options">&nbsp;</a>
-<hr>
-<b>Qhull options</b>
-
-<p><a href="#TOC">»</a> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a></p>
-
-<p><table>
-<!-- Note: keep all lines the same for easy reorganization -->
-<tr>
-<td><nobr>'<a href=qh-optf.htm#Fa>Fa</a>'
-Farea
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FA>FA</a>'
-FArea-total
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fc>Fc</a>'
-Fcoplanars
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FC>FC</a>'
-FCentrums
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optf.htm#Fd>Fd</a>'
-Fd-cdd-in
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FD>FD</a>'
-FD-cdd-out
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FF>FF</a>'
-FF-dump-xridge
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fi>Fi</a>'
-Finner
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optf.htm#Fi2>Fi</a>'
-Finner_bounded
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FI>FI</a>'
-FIDs
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fm>Fm</a>'
-Fmerges
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FM>FM</a>'
-FMaple
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optf.htm#Fn>Fn</a>'
-Fneighbors
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FN>FN</a>'
-FNeigh-vertex
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fo>Fo</a>'
-Fouter
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fo2>Fo</a>'
-Fouter_unbounded
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optf.htm#FO>FO</a>'
-FOptions
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fp>Fp</a>'
-Fpoint-intersect
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FP>FP</a>'
-FPoint_near
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FQ>FQ</a>'
-FQhull
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optf.htm#Fs>Fs</a>'
-Fsummary
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FS>FS</a>'
-FSize
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Ft>Ft</a>'
-Ftriangles
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fv>Fv</a>'
-Fvertices
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optf.htm#Fv2>Fv</a>'
-Fvoronoi
-</nobr></td><td><nobr>'<a href=qh-optf.htm#FV>FV</a>'
-FVertex-ave
-</nobr></td><td><nobr>'<a href=qh-optf.htm#Fx>Fx</a>'
-Fxtremes
-</nobr></td><td colspan=2><nobr>
-<a href=qh-impre.htm#joggle>Merged facets or joggled input</a>
-
-</nobr></td></tr>
-<tr><td>&nbsp;</td></tr><tr>
-<td><nobr>'<a href=qh-optp.htm#PAn>PAn</a>'
-PArea-keep
-</nobr></td><td><nobr>'<a href=qh-optp.htm#Pdk>Pdk:n</a>'
-Pdrop_low 
-</nobr></td><td><nobr>'<a href=qh-optp.htm#PDk>PDk:n</a>'
-Pdrop_high
-</nobr></td><td><nobr>'<a href=qh-optp.htm#Pg>Pg</a>'
-Pgood
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optp.htm#PFn>PFn</a>'
-PFacet_area_keep
-</nobr></td><td><nobr>'<a href=qh-optp.htm#PG>PG</a>'
-PGood_neighbors
-</nobr></td><td><nobr>'<a href=qh-optp.htm#PMn>PMn</a>'
-PMerge-keep
-</nobr></td><td><nobr>'<a href=qh-optp.htm#Po>Po</a>'
-Poutput_forced
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optp.htm#Po2>Po</a>'
-Poutput_error
-</nobr></td><td><nobr>'<a href=qh-optp.htm#Pp>Pp</a>'
-Pprecision_not
-
-</nobr></td></tr>
-<tr><td>&nbsp;</td></tr><tr>
-<td><nobr>'<a href=qhull.htm#outputs>d</a>'
-delaunay
-</nobr></td><td><nobr>'<a href=qhull.htm#outputs>v</a>'
-voronoi
-</nobr></td><td><nobr>'<a href=qh-optg.htm>G</a>'
-Geomview
-</nobr></td><td><nobr>'<a href=qhull.htm#outputs>H</a>'
-Halfspace
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-opto.htm#f>f</a>'
-facet_dump
-</nobr></td><td><nobr>'<a href=qh-opto.htm#i>i</a>'
-incidences
-</nobr></td><td><nobr>'<a href=qh-opto.htm#m>m</a>'
-mathematica
-</nobr></td><td><nobr>'<a href=qh-opto.htm#n>n</a>'
-normals
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-opto.htm#o>o</a>'
-OFF_format
-</nobr></td><td><nobr>'<a href=qh-opto.htm#p>p</a>'
-points
-</nobr></td><td><nobr>'<a href=qh-opto.htm#s>s</a>'
-summary
-
-</nobr></td></tr>
-<tr><td>&nbsp;</td></tr><tr>
-<td><nobr>'<a href=qh-optg.htm#Gv>Gv</a>'
-Gvertices
-</nobr></td><td><nobr>'<a href=qh-optg.htm#Gp>Gp</a>'
-Gpoints
-</nobr></td><td><nobr>'<a href=qh-optg.htm#Ga>Ga</a>'
-Gall_points
-</nobr></td><td><nobr>'<a href=qh-optg.htm#Gn>Gn</a>'
-Gno_planes
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optg.htm#Gi>Gi</a>'
-Ginner
-</nobr></td><td><nobr>'<a href=qh-optg.htm#Gc>Gc</a>'
-Gcentrums
-</nobr></td><td><nobr>'<a href=qh-optg.htm#Gh>Gh</a>'
-Ghyperplanes
-</nobr></td><td><nobr>'<a href=qh-optg.htm#Gr>Gr</a>'
-Gridges
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optg.htm#Go>Go</a>'
-Gouter
-</nobr></td><td><nobr>'<a href=qh-optg.htm#GDn>GDn</a>'
-GDrop_dim
-</nobr></td><td><nobr>'<a href=qh-optg.htm#Gt>Gt</a>'
-Gtransparent
-
-</nobr></td></tr>
-<tr><td>&nbsp;</td></tr><tr>
-<td><nobr>'<a href=qh-optt.htm#Tn>T4</a>'
-T4_trace
-</nobr></td><td><nobr>'<a href=qh-optt.htm#Tc>Tc</a>'
-Tcheck_often
-</nobr></td><td><nobr>'<a href=qh-optt.htm#Ts>Ts</a>'
-Tstatistics
-</nobr></td><td><nobr>'<a href=qh-optt.htm#Tv>Tv</a>'
-Tverify
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optt.htm#Tz>Tz</a>'
-Tz_stdout
-</nobr></td><td><nobr>'<a href=qh-optt.htm#TFn>TFn</a>'
-TFacet_log
-<td><nobr>'<a href=qh-optt.htm#TI>TI file</a>'
-TInput_file
-</nobr></td><td><nobr>'<a href=qh-optt.htm#TPn>TPn</a>'
-TPoint_trace
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optt.htm#TMn>TMn</a>'
-TMerge_trace
-</nobr></td><td><nobr>'<a href=qh-optt.htm#TO>TO file</a>'
-TOutput_file
-</nobr></td><td><nobr>'<a href=qh-optt.htm#TRn>TRn</a>'
-TRerun
-</nobr></td><td><nobr>'<a href=qh-optt.htm#TWn>TWn</a>'
-TWide_trace
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optt.htm#TVn>TV-n</a>'
-TVertex_stop_before
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optt.htm#TVn2>TVn</a>'
-TVertex_stop_after
-</nobr></td><td><nobr>'<a href=qh-optt.htm#TCn>TCn</a>'
-TCone_stop_after
-
-</nobr></td></tr>
-<tr><td>&nbsp;</td></tr><tr>
-<td><nobr>'<a href=qh-optc.htm#An>A-n</a>'
-Angle_max_pre
-</nobr></td><td><nobr>'<a href=qh-optc.htm#An2>An</a>'
-Angle_max_post
-</nobr></td><td><nobr>'<a href=qh-optc.htm#C0>C-0</a>'
-Centrum_roundoff
-</nobr></td><td><nobr>'<a href=qh-optc.htm#Cn>C-n</a>'
-Centrum_size_pre
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optc.htm#Cn2>Cn</a>'
-Centrum_size_post
-</nobr></td><td><nobr>'<a href=qh-optc.htm#En>En</a>'
-Error_round
-</nobr></td><td><nobr>'<a href=qh-optc.htm#Rn>Rn</a>'
-Random_dist
-</nobr></td><td><nobr>'<a href=qh-optc.htm#Vn>Vn</a>'
-Visible_min
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optc.htm#Un>Un</a>'
-Ucoplanar_max
-</nobr></td><td><nobr>'<a href=qh-optc.htm#Wn>Wn</a>'
-Wide_outside
-
-</nobr></td></tr>
-<tr><td>&nbsp;</td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Qbk>Qbk:n</a>'
-Qbound_low
-</nobr></td><td><nobr>'<a href=qh-optq.htm#QBk>QBk:n</a>'
-QBound_high
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qb0>Qbk:0Bk:0</a>'
-Qbound_drop
-</nobr></td><td><nobr>'<a href=qh-optq.htm#QbB>QbB</a>'
-QbB-scale-box
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Qbb>Qbb</a>'
-Qbb-scale-last
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qc>Qc</a>'
-Qcoplanar
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qf>Qf</a>'
-Qfurthest
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qg>Qg</a>'
-Qgood_only
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#QGn>QGn</a>'
-QGood_point
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qi>Qi</a>'
-Qinterior
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qm>Qm</a>'
-Qmax_out
-</nobr></td><td><nobr>'<a href=qh-optq.htm#QJn>QJn</a>'
-QJoggle
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Qr>Qr</a>'
-Qrandom
-</nobr></td><td><nobr>'<a href=qh-optq.htm#QRn>QRn</a>'
-QRotate
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qs>Qs</a>'
-Qsearch_1st
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qt>Qt</a>'
-Qtriangulate
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Qu>Qu</a>'
-QupperDelaunay
-</nobr><td><nobr>'<a href=qh-optq.htm#QVn>QVn</a>'
-QVertex_good
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qv>Qv</a>'
-Qvneighbors
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Qx>Qx</a>'
-Qxact_merge
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Qz>Qz</a>'
-Qzinfinite
-
-</nobr></td></tr>
-<tr><td>&nbsp;</td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Q0>Q0</a>'
-Q0_no_premerge
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q1>Q1</a>'
-Q1_no_angle
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q2>Q2</a>'
-Q2_no_independ
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q3>Q3</a>'
-Q3_no_redundant
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Q4>Q4</a>'
-Q4_no_old
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q5>Q5</a>'
-Q5_no_check_out
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q6>Q6</a>'
-Q6_no_concave
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q7>Q7</a>'
-Q7_depth_first
-
-</nobr></td></tr><tr>
-<td><nobr>'<a href=qh-optq.htm#Q8>Q8</a>'
-Q8_no_near_in
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q9>Q9</a>'
-Q9_pick_furthest
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q10>Q10</a>'
-Q10_no_narrow
-</nobr></td><td><nobr>'<a href=qh-optq.htm#Q11>Q11</a>'
-Q11_trinormals
-</td></tr></table>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home
-page for Qhull</a> <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a> <br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="qh-in.htm#TOC">Qhull internals</a><br>
-<b>To:</b> <a href="../src/index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="../src/index.htm#TOC">Qhull files</a><br>
-<b>To:</b> <a href="../src/qh-geom.htm">Geom</a> &#149; <a href="../src/qh-globa.htm">Global</a>
-&#149; <a href="../src/qh-io.htm">Io</a> &#149; <a href="../src/qh-mem.htm">Mem</a>
-&#149; <a href="../src/qh-merge.htm">Merge</a> &#149; <a href="../src/qh-poly.htm">Poly</a>
-&#149; <a href="../src/qh-qhull.htm">Qhull</a> &#149; <a href="../src/qh-set.htm">Set</a>
-&#149; <a href="../src/qh-stat.htm">Stat</a> &#149; <a href="../src/qh-user.htm">User</a><br>
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhalf.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhalf.htm
deleted file mode 100644
index 4d02879d9a3d1e0a1ecb60b35704aeb99fb61fd8..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhalf.htm
+++ /dev/null
@@ -1,594 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>qhalf -- halfspace intersection about a point</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up</b></a><b>:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/half.html"><img
-src="qh--half.gif" alt="[halfspace]" align="middle" width="100"
-height="100"></a>qhalf -- halfspace intersection about a point</h1>
-
-<p>The intersection of a set of halfspaces is a polytope. The
-polytope may be unbounded. See Preparata &amp; Shamos [<a
-href="index.htm#pre-sha85">'85</a>] for a discussion. In low
-dimensions, halfspace intersection may be used for linear
-programming. </p>
-
-<blockquote>
-<dl compact>
-    <dt><b>Example:</b> rbox c | qconvex <a href="qh-optf.htm#FQ">FQ</a> <a href="qh-optf.htm#FV">FV</a>
-        <a href="qh-opto.htm#n">n</a> | qhalf <a
-        href="qh-optf.htm#Fp">Fp</a></dt>
-    <dd>Print the intersection of the facets of a cube.  <tt>rbox c</tt> 
-	generates the vertices of a cube.  <tt>qconvex FV n</tt> returns of average
-	of the cube's vertices (in this case, the origin) and the halfspaces
-	that define the cube.  <tt>qhalf Fp</tt> computes the intersection of
-	the halfspaces about the origin.  The intersection is the vertices
-	of the original cube.</dd>
-
-    <dt><p><b>Example:</b> rbox c d G0.55 | qconvex <a href="qh-optf.htm#FQ">FQ</a> <a href="qh-optf.htm#FV">FV</a>
-        <a href="qh-opto.htm#n">n</a> | qhalf <a
-        href="qh-optf.htm#Fp">Fp</a></dt>
-    <dd>Print the intersection of the facets of a cube and a diamond.  There
-	are 24 facets and 14 intersection points.  Four facets define each diamond
-	vertext.  Six facets define each cube vertex.
-	</dd>
-
-    <dt><p><b>Example:</b> rbox c d G0.55 | qconvex <a href="qh-optf.htm#FQ">FQ</a> <a href="qh-optf.htm#FV">FV</a>
-        <a href="qh-opto.htm#n">n</a> | qhalf <a
-        href="qh-optf.htm#Fp">Fp</a>
-		<a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>Same as above except triangulate before computing
-	the intersection points.  Three facets define each intersection 
-	point.  There are two duplicates of the diamond and four duplicates of the cube.
-	</dd>
-</dl>
-</blockquote>
-
-<p>Qhull computes a halfspace intersection by the geometric
-duality between points and halfspaces. 
-See <a href="qh-eg.htm#half">halfspace examples</a>, 
-<a href="#notes">qhalf notes</a>, and
-option 'p' of <a href="#outputs">qhalf outputs</a>. </p>
-
-<p>By default, halfspace intersections may be defined by more than
-<i>d</i> halfspaces.  See the previous cube and diamond example.
-This is the expected output for halfspace intersection.  
-
-<p>You can try triangulated output and joggled input.  It demonstrates
-that triangulated output is more accurate than joggled input.
-
-<p>If you use '<a href="qh-optq.htm#Qt">Qt</a>' (triangulated output), all
-halfspace intersections are simplicial (e.g., three halfspaces per 
-intersection in 3-d).  In 3-d, if more than three halfspaces intersect
-at the same point, triangulated output will produce 
-duplicate intersections, one for each additional halfspace.  See the previous
-cube and diamond example.</p>
-
-<p>If you use '<a href="qh-optq.htm#QJn">QJ</a>' (joggled input), all halfspace 
-intersections are simplicial.  This may lead to nearly identical
-intersections.  For example, replace 'Qt' with 'QJ' above and
-compare the duplicated intersections.
-See <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>The 'qhalf' program is equivalent to 
-'<a href=qhull.htm#outputs>qhull H</a>' in 2-d to 4-d, and
-'<a href=qhull.htm#outputs>qhull H</a> <a href=qh-optq.htm#Qx>Qx</a>' 
-in 5-d and higher.  It disables the following Qhull
-<a href=qh-quick.htm#options>options</a>: <i>d n v Qbb QbB Qf Qg Qm 
-Qr QR Qv Qx Qz TR E V Fa FA FC FD FS Ft FV Gt Q0,etc</i>.
-
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-
-<h3><a href="#TOP">»</a><a name="synopsis">qhalf synopsis</a></h3>
-<pre>
-qhalf- halfspace intersection about a point.
-    input (stdin): [dim, 1, interior point]
-                   dim+1, n 
-                   halfspace coefficients + offset
-    comments start with a non-numeric character
-
-options (qhalf.htm):
-    Hn,n - specify coordinates of interior point
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Tv   - verify result: structure, convexity, and redundancy
-    .    - concise list of all options
-    -    - one-line description of all options
-
-output options (subset):
-    s    - summary of results (default)
-    Fp   - intersection coordinates
-    Fv   - non-redundant halfspaces incident to each intersection
-    Fx   - non-redundant halfspaces
-    o    - OFF file format (dual convex hull)
-    G    - Geomview output (dual convex hull)
-    m    - Mathematica output (dual convex hull)
-    QVn  - print intersections for halfspace n, -n if not
-    TO file - output results to file, may be enclosed in single quotes
-
-examples:
-    rbox d | qconvex n | qhalf s H0,0,0 Fp
-    rbox c | qconvex FV n | qhalf s i
-    rbox c | qconvex FV n | qhalf s o
-</pre>
-
-<h3><a href="#TOP">»</a><a name="input">qhalf input</a></h3>
-
-<blockquote>
-<p>The input data on <tt>stdin</tt> consists of:</p>
-<ul>
-    <li>[optional] interior point
-	   <ul>
-	   <li>dimension
-	   <li>1
-	   <li>coordinates of interior point
-	   </ul>
-    <li>dimension + 1
-    <li>number of halfspaces</li>
-    <li>halfspace coefficients followed by offset</li>
-</ul>
-
-<p>Use I/O redirection (e.g., qhalf &lt; data.txt), a pipe (e.g., rbox c | qconvex FV n | qhalf),
-or the '<a href=qh-optt.htm#TI>TI</a>' option (e.g., qhalf TI data.txt).  
-
-<p>Qhull needs an interior point to compute the halfspace
-intersection. An interior point is inside all of the halfspaces <i>Hx+b
-&lt;= 0</i>. The interior point may be in the input.  If not, option 
-'Hn,n' defines the interior point as
-[n,n,0,...] where <em>0</em> is the default coordinate (e.g.,
-'H0' is the origin).  Use linear programming if you do not know
-the interior point (see <a href="#notes">halfspace notes</a>),</p>
-
-<p>The input to qhalf is a set of halfspaces. Each halfspace is defined by
-<em>d</em> coefficients followed by a signed offset. This defines
-a linear inequality. The coefficients define a vector that is
-normal to the halfspace. The vector may have any length. If it
-has length one, the offset is the distance from the origin to the
-halfspace's boundary. </p>
-
-<p>This is the same format used for output options '<a
-href="qh-opto.htm#n">n</a>', '<a href="qh-optf.htm#Fo">Fo</a>',
-and '<a href="qh-optf.htm#Fi">Fi</a>'. Use option '<a
-href="qh-optf.htm#Fd">Fd</a>' to use cdd format for the
-halfspaces.</p>
-
-<p>For example, here is the input for computing the intersection
-of halfplanes that form a cube.</p>
-
-<blockquote>
-    <p>rbox c | qconvex FQ FV n TO data </p>
-    <pre>
-RBOX c | QCONVEX FQ FV n
-3 1
-     0      0      0
-4
-6
-     0      0     -1   -0.5
-     0     -1      0   -0.5
-     1      0      0   -0.5
-    -1      0      0   -0.5
-     0      1      0   -0.5
-     0      0      1   -0.5
-</pre>
-    <p>qhalf s Fp &lt; data </p>
-    <pre>
-
-Halfspace intersection by the convex hull of 6 points in 3-d:
-
-  Number of halfspaces: 6
-  Number of non-redundant halfspaces: 6
-  Number of intersection points: 8
-
-Statistics for: RBOX c | QCONVEX FQ FV n | QHALF s Fp
-
-  Number of points processed: 6
-  Number of hyperplanes created: 11
-  Number of distance tests for qhull: 11
-  Number of merged facets: 1
-  Number of distance tests for merging: 45
-  CPU seconds to compute hull (after input):  0
-
-3
-3
-8
-  -0.5    0.5    0.5
-   0.5    0.5    0.5
-  -0.5    0.5   -0.5
-   0.5    0.5   -0.5
-   0.5   -0.5    0.5
-  -0.5   -0.5    0.5
-  -0.5   -0.5   -0.5
-   0.5   -0.5   -0.5
-</pre>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="outputs">qhalf outputs</a></h3>
-<blockquote>
-
-<p>The following options control the output for halfspace
-intersection.</p>
-<blockquote>
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>Intersections</b></dd>
-    <dt><a href="qh-optf.htm#FN">FN</a></dt>
-    <dd>list intersection points for each non-redundant
-        halfspace.  The first line
-	    is the number of non-redundant halfspaces.  Each remaining
-		lines starts with the number of intersection points.  For the cube
-		example, each halfspace has four intersection points.</dd>
-    <dt><a href="qh-optf.htm#Fn">Fn</a></dt>
-    <dd>list neighboring intersections for each intersection point.  The first line
-	    is the number of intersection points.  Each remaining line
-		starts with the number of neighboring intersections.  For the cube
-		example, each intersection point has three neighboring intersections.
-		In 3-d, a non-simplicial intersection has more than three neighboring
-		intersections.  Use option '<a href="qh-optq.htm#QJn">QJ</a>' to 
-		avoid non-simplicial intersections.
-	     </dd>
-    <dt><a href="qh-optf.htm#Fp">Fp</a></dt>
-    <dd>print intersection coordinates.  The first line is the dimension and the
-	second line is the number of intersection points.  The following lines are the
-	coordinates of each intersection.</dd>
-    <dt><a href="qh-optf.htm#FI">FI</a></dt>
-    <dd>list intersection IDs.  The first line is the number of 
-	intersections.  The IDs follow, one per line.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Halfspaces</b></dd>
-    <dt><a href="qh-optf.htm#Fx">Fx</a></dt>
-    <dd>list non-redundant halfspaces.  The first line is the number of 
-	non-redundant halfspaces.  The other lines list one halfspace per line.
-	A halfspace is <i>non-redundant</i> if it 
-	defines a facet of the intersection.  Redundant halfspaces are ignored.  For
-	the cube example, all of the halfspaces are non-redundant.
-	</dd>
-    <dt><a href="qh-optf.htm#Fv">Fv</a></dt>
-    <dd>list non-redundant halfspaces incident to each intersection point. 
-	The first line is the number of 
-	non-redundant halfspaces.  Each remaining line starts with the number
-	of non-redundant halfspaces.  For the
-	 cube example, each intersection is incident to three halfspaces.</dd>
-    <dt><a href="qh-opto.htm#i">i</a></dt>
-    <dd>list non-redundant halfspaces incident to each intersection point.  The first
-	  line is the number of intersection points.  Each remaining line
-	  lists the incident, non-redundant halfspaces.  For the
-	 cube example, each intersection is incident to three halfspaces.
-       </dd>
-    <dt><a href="qh-optf.htm#Fc">Fc</a></dt>
-    <dd>list coplanar halfspaces for each intersection point. The first line is 
-	   the number of intersection points.  Each remaining line starts with
-	   the number of coplanar halfspaces.  A coplanar halfspace is listed for
-	   one intersection point even though it is coplanar to multiple intersection
-	   points.</dd>
-  <dt><a href="qh-optq.htm#Qc">Qi</a> <a href="qh-optf.htm#Fc">Fc</a></dt>
-    <dd>list redundant halfspaces for each intersection point.  The first line is 
-	   the number of intersection points.  Each remaining line starts with
-	   the number of redundant halfspaces.  Use options '<a href="qh-optq.htm#Qc">Qc</a> Qi Fc' to list
-	   coplanar and redundant halfspaces.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="qh-opto.htm#s">s</a></dt>
-    <dd>print summary for the halfspace intersection. Use '<a
-        href="qh-optf.htm#Fs">Fs</a>' if you need numeric data.</dd>
-    <dt><a href="qh-opto.htm#o">o</a></dt>
-    <dd>print vertices and facets of the dual convex hull.    The
-	   first line is the dimension.  The second line is the number of
-	   vertices, facets, and ridges.  The vertex
-	   coordinates are next, followed by the facets, one per line.</dd>
-    <dt><a href="qh-opto.htm#p">p</a></dt>
-    <dd>print vertex coordinates of the dual convex hull.  Each vertex corresponds
-	   to a non-redundant halfspace.  Its coordinates are the negative of the hyperplane's coefficients
-	   divided by the offset plus the inner product of the coefficients and 
-	   the interior point (-c/(b+a.p).  
-	   Options 'p <a href="qh-optq.htm#Qc">Qc</a>' includes coplanar halfspaces.
-	   Options 'p <a href="qh-optq.htm#Qi">Qi</a>' includes redundant halfspaces.</dd>
-    <dt><a href="qh-opto.htm#m">m</a></dt>
-    <dd>Mathematica output for the dual convex hull in 2-d or 3-d.</dd>
-    <dt><a href="qh-optf.htm#FM">FM</a></dt>
-    <dd>Maple output for the dual convex hull in 2-d or 3-d.</dd>
-    <dt><a href="qh-optg.htm#G">G</a></dt>
-    <dd>Geomview output for the dual convex hull in 2-d, 3-d, or 4-d.</dd>
- </dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="controls">qhalf controls</a></h3>
-<blockquote>
-
-<p>These options provide additional control:</p>
-
-<blockquote>
-<dl compact>
-    <dt><a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>triangulated output.  If a 3-d intersection is defined by more than
-      three hyperplanes, Qhull produces duplicate intersections -- one for
-      each extra hyperplane.</dd>
-    <dt><a href="qh-optq.htm#QJn">QJ</a></dt>
-    <dd>joggle the input instead of merging facets.  In 3-d, this guarantees that
-	each intersection is defined by three hyperplanes.</dd>
-    <dt><a href="qh-opto.htm#f">f </a></dt>
-    <dd>facet dump.  Print the data structure for each intersection (i.e.,
-        facet)</dd>
-    <dt><a href="qh-optt.htm#TFn">TFn</a></dt>
-    <dd>report summary after constructing <em>n</em>
-        intersections</dd>
-    <dt><a href="qh-optq.htm#QVn">QVn</a></dt>
-    <dd>select intersection points for halfspace <em>n</em>
-        (marked 'good')</dd>
-    <dt><a href="qh-optq.htm#QGn">QGn</a></dt>
-    <dd>select intersection points that are visible to halfspace <em>n</em>
-        (marked 'good').  Use <em>-n</em> for the remainder.</dd>
-	<dt><a href="qh-optq.htm#Qb0">Qbk:0Bk:0</a></dt>
-    <dd>remove the k-th coordinate from the input.  This computes the
-	halfspace intersection in one lower dimension.</dd>
-    <dt><a href="qh-optt.htm#Tv">Tv</a></dt>
-    <dd>verify result</dd>
-    <dt><a href="qh-optt.htm#TO">TI file</a></dt>
-    <dd>input data from file.  The filename may not use spaces or quotes.</dd>
-    <dt><a href="qh-optt.htm#TO">TO file</a></dt>
-    <dd>output results to file.  Use single quotes if the filename
-	contains spaces (e.g., <tt>TO 'file with spaces.txt'</tt></dd>
-    <dt><a href="qh-optq.htm#Qs">Qs</a></dt>
-    <dd>search all points for the initial simplex.  If Qhull can 
-	not construct an initial simplex, it reports a
-descriptive message. Usually, the point set is degenerate and one
-or more dimensions should be removed ('<a href="qh-optq.htm#Qb0">Qbk:0Bk:0</a>').
-If not, use option 'Qs'. It performs an exhaustive search for the
-best initial simplex. This is expensive is high dimensions.</dd>
-</dl>
-</blockquote>
-
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="graphics">qhalf graphics</a></h3>
-<blockquote>
-
-<p>To view the results with Geomview, compute the convex hull of
-the intersection points ('qhull FQ H0 Fp | qhull G'). See <a
-href="qh-eg.htm#half">Halfspace examples</a>.</p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="notes">qhalf notes</a></h3>
-<blockquote>
-
-<p>If you do not know an interior point for the halfspaces, use
-linear programming to find one. Assume, <em>n</em> halfspaces
-defined by: <em>aj*x1+bj*x2+cj*x3+dj&gt;=0, j=1..n</em>. Perform
-the following linear program: </p>
-
-<blockquote>
-    <p>max(x5) aj*x1+bj*x2+cj*x3+dj*x4-x5&gt;=0, j=1..n</p>
-</blockquote>
-
-<p>Then, if <em>[x1,x2,x3,x4,x5]</em> is an optimal solution with
-<em>x4,x5&gt;0</em> we get: </p>
-
-<blockquote>
-    <p>aj*(x1/x4)+bj*(x2/x4)+cj*(x3/x4)+dj&gt;=(x5/x4)&gt;0,
-    j=1..n </p>
-</blockquote>
-
-<p>and conclude that the point <em>[x1/x4,x2/x4,x3/x4]</em> is in
-the interior of all the halfspaces. Note that <em>x5</em> is
-optimal, so this point is &quot;way in&quot; the interior (good
-for precision errors).</p>
-
-<p>After finding an interior point, the rest of the intersection
-algorithm is from Preparata &amp; Shamos [<a
-href="index.htm#pre-sha85">'85</a>, p. 316, &quot;A simple case
-...&quot;]. Translate the halfspaces so that the interior point
-is the origin. Calculate the dual polytope. The dual polytope is
-the convex hull of the vertices dual to the original faces in
-regard to the unit sphere (i.e., halfspaces at distance <em>d</em>
-from the origin are dual to vertices at distance <em>1/d</em>).
-Then calculate the resulting polytope, which is the dual of the
-dual polytope, and translate the origin back to the interior
-point [S. Spitz and S. Teller].</p>
-
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="conventions">qhalf
-conventions</a></h3>
-<blockquote>
-
-<p>The following terminology is used for halfspace intersection
-in Qhull. This is the hardest structure to understand. The
-underlying structure is a convex hull with one vertex per
-non-redundant halfspace. See <a href="#conventions">convex hull
-conventions</a> and <a href="index.htm#structure">Qhull's data structures</a>.</p>
-
-<ul>
-    <li><em>interior point</em> - a point in the intersection of
-        the halfspaces. Qhull needs an interior point to compute
-        the intersection. See <a href="#input">halfspace input</a>.</li>
-    <li><em>halfspace</em> - <em>d</em> coordinates for the
-        normal and a signed offset. The distance to an interior
-        point is negative.</li>
-    <li><em>non-redundant halfspace</em> - a halfspace that
-        defines an output facet</li>
-    <li><em>vertex</em> - a dual vertex in the convex hull
-        corresponding to a non-redundant halfspace</li>
-    <li><em>coplanar point</em> - the dual point corresponding to
-        a similar halfspace</li>
-    <li><em>interior point</em> - the dual point corresponding to
-        a redundant halfspace</li>
-    <li><em>intersection point</em>- the intersection of <em>d</em>
-        or more non-redundant halfspaces</li>
-    <li><em>facet</em> - a dual facet in the convex hull
-        corresponding to an intersection point</li>
-    <li><em>non-simplicial facet</em> - more than <em>d</em>
-        halfspaces intersect at a point</li>
-    <li><em>good facet</em> - an intersection point that
-        satisfies restriction '<a href="qh-optq.htm#QVn">QVn</a>',
-        etc.</li>
-</ul>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">qhalf options</a></h3>
-
-<pre>
-qhalf- compute the intersection of halfspaces about a point
-    http://www.qhull.org
-
-input (stdin):
-    optional interior point: dimension, 1, coordinates
-    first lines: dimension+1 and number of halfspaces
-    other lines: halfspace coefficients followed by offset
-    comments:    start with a non-numeric character
-
-options:
-    Hn,n - specify coordinates of interior point
-    Qt   - triangulated ouput
-    QJ   - joggle input instead of merging facets
-    Qc   - keep coplanar halfspaces
-    Qi   - keep other redundant halfspaces
-
-Qhull control options:
-    QJn  - randomly joggle input in range [-n,n]
-    Qbk:0Bk:0 - remove k-th coordinate from input
-    Qs   - search all halfspaces for the initial simplex
-    QGn  - print intersection if redundant to halfspace n, -n for not
-    QVn  - print intersections for halfspace n, -n if not
-
-Trace options:
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events
-    Tc   - check frequently during execution
-    Ts   - print statistics
-    Tv   - verify result: structure, convexity, and redundancy
-    Tz   - send all output to stdout
-    TFn  - report summary when n or more facets created
-    TI file - input data from file, no spaces or single quotes
-    TO file - output results to file, may be enclosed in single quotes
-    TPn  - turn on tracing when halfspace n added to intersection
-    TMn  - turn on tracing at merge n
-    TWn  - trace merge facets when width > n
-    TVn  - stop qhull after adding halfspace n, -n for before (see TCn)
-    TCn  - stop qhull after building cone for halfspace n (see TVn)
-
-Precision options:
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]
-    Un   - max distance below plane for a new, coplanar halfspace
-    Wn   - min facet width for outside halfspace (before roundoff)
-
-Output formats (may be combined; if none, produces a summary to stdout):
-    f    - facet dump
-    G    - Geomview output (dual convex hull)
-    i    - non-redundant halfspaces incident to each intersection
-    m    - Mathematica output (dual convex hull)
-    o    - OFF format (dual convex hull: dimension, points, and facets)
-    p    - vertex coordinates of dual convex hull (coplanars if 'Qc' or 'Qi')
-    s    - summary (stderr)
-
-More formats:
-    Fc   - count plus redundant halfspaces for each intersection
-         -   Qc (default) for coplanar and Qi for other redundant
-    Fd   - use cdd format for input (homogeneous with offset first)
-    FF   - facet dump without ridges
-    FI   - ID of each intersection
-    Fm   - merge count for each intersection (511 max)
-    FM   - Maple output (dual convex hull)
-    Fn   - count plus neighboring intersections for each intersection
-    FN   - count plus intersections for each non-redundant halfspace
-    FO   - options and precision constants
-    Fp   - dim, count, and intersection coordinates
-    FP   - nearest halfspace and distance for each redundant halfspace
-    FQ   - command used for qhalf
-    Fs   - summary: #int (8), dim, #halfspaces, #non-redundant, #intersections
-                      for output: #non-redundant, #intersections, #coplanar
-                                  halfspaces, #non-simplicial intersections
-                    #real (2), max outer plane, min vertex
-    Fv   - count plus non-redundant halfspaces for each intersection
-    Fx   - non-redundant halfspaces
-
-Geomview output (2-d, 3-d and 4-d; dual convex hull)
-    Ga   - all points (i.e., transformed halfspaces) as dots
-     Gp  -  coplanar points and vertices as radii
-     Gv  -  vertices (i.e., non-redundant halfspaces) as spheres
-    Gi   - inner planes (i.e., halfspace intersections) only
-     Gn  -  no planes
-     Go  -  outer planes only
-    Gc	 - centrums
-    Gh   - hyperplane intersections
-    Gr   - ridges
-    GDn  - drop dimension n in 3-d and 4-d output
-
-Print options:
-    PAn  - keep n largest facets (i.e., intersections) by area
-    Pdk:n- drop facet if normal[k] &lt;= n (default 0.0)
-    PDk:n- drop facet if normal[k] >= n
-    Pg   - print good facets (needs 'QGn' or 'QVn')
-    PFn  - keep facets whose area is at least n
-    PG   - print neighbors of good facets
-    PMn  - keep n facets with most merges
-    Po   - force output.  If error, output neighborhood of facet
-    Pp   - do not report precision problems
-
-    .    - list of all options
-    -    - one line descriptions of all options
-</pre>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.htm
deleted file mode 100644
index dd8afb1b6aecadbc45e1ba33c589994f1d33c328..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.htm
+++ /dev/null
@@ -1,469 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>qhull -- convex hull and related structures</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b><a name="TOP">Up</a></b><b>:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis &#149; <a href="#input">in</a>put 
-&#149; <a href="#outputs">ou</a>tputs &#149; <a href="#controls">co</a>ntrols 
-&#149; <a href="#options">op</a>tions
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/cone.html"><img
-src="qh--cone.gif" alt="[cone]" align="middle" width="100"
-height="100"></a>qhull -- convex hull and related structures</h1>
-
-<p>The convex hull of a set of points is the smallest convex set
-containing the points.  The Delaunay triangulation and furthest-site
-Delaunay triangulation are equivalent to a convex hull in one
-higher dimension.  Halfspace intersection about a point is 
-equivalent to a convex hull by polar duality.
-
-<p>The <tt>qhull</tt> program provides options to build these
-structures and to experiment with the process.  Use the 
-<a href=qconvex.htm>qconvex</a>,
-<a href=qdelaun.htm>qdelaunay</a>, <a href=qhalf.htm>qhalf</a>, 
-and <a href=qvoronoi.htm>qvoronoi</a> programs
-to build specific structures.  You may use <tt>qhull</tt> instead.
-It takes the same options and uses the same code.  
-<blockquote>
-<dl>
-    <dt><b>Example:</b> rbox 1000 D3 | qhull 
-	 <a href="qh-optc.htm#Cn">C-1e-4</a> 
-	 <a href="qh-optf.htm#FO">FO</a>
-	 <a href="qh-optt.htm#Ts">Ts</a>
-	 </dt>
-    <dd>Compute the 3-d convex hull of 1000 random
-	     points.  
-		 Centrums must be 10^-4 below neighboring
-		 hyperplanes.  Print the options and precision constants.
-		 When done, print statistics.  These options may be
-		 used with any of the Qhull programs.</dd>
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox 1000 D3 | qhull <a href=qhull.htm#outputs>d</a>
-	 <a href="qh-optq.htm#Qbb">Qbb</a>
-	 <a href="qh-optc.htm#Rn">R1e-4</a> 
-	 <a href="qh-optq.htm#Q0">Q0</a></dt>
-    <dd>Compute the 3-d Delaunay triangulation of 1000 random
-	     points.  Randomly perturb all calculations by
-		 [0.9999,1.0001].  Do not correct precision problems.
-		 This leads to serious precision errors.</dd>
-</dl>
-</blockquote>
-<p>Use the following equivalences when calling <tt>qhull</tt> in 2-d to 4-d (a 3-d
-Delaunay triangulation is a 4-d convex hull):
-<blockquote>
-<ul>
-<li>
-<a href="qconvex.htm">qconvex</a> == qhull
-<li>
-<a href=qdelaun.htm>qdelaunay</a> == qhull d <a href="qh-optq.htm#Qbb">Qbb</a>
-<li>
-<a href=qhalf.htm>qhalf</a> == qhull H
-<li>
-<a href=qvoronoi.htm>qvoronoi</a> == qhull v <a href="qh-optq.htm#Qbb">Qbb</a>
-</ul>
-</blockquote>
-
-<p>Use the following equivalences when calling <tt>qhull</tt> in 5-d and higher (a 4-d
-Delaunay triangulation is a 5-d convex hull):
-<blockquote>
-<ul>
-<li>
-<a href="qconvex.htm">qconvex</a> == qhull <a href="qh-optq.htm#Qx">Qx</a>
-<li>
-<a href=qdelaun.htm>qdelaunay</a> == qhull d <a href="qh-optq.htm#Qbb">Qbb</a> <a href="qh-optq.htm#Qx">Qx</a>
-<li>
-<a href=qhalf.htm>qhalf</a> == qhull H <a href="qh-optq.htm#Qx">Qx</a>
-<li>
-<a href=qvoronoi.htm>qvoronoi</a> == qhull v <a href="qh-optq.htm#Qbb">Qbb</a> <a href="qh-optq.htm#Qx">Qx</a>
-</ul>
-</blockquote>
-
-
-<p>By default, Qhull merges coplanar facets.  For example, the convex
-hull of a cube's vertices has six facets.
-
-<p>If you use '<a href="qh-optq.htm#Qt">Qt</a>' (triangulated output), 
-all facets will be simplicial (e.g., triangles in 2-d).  For the cube 
-example, it will have 12 facets.  Some facets may be
-degenerate and have zero area. 
-
-<p>If you use '<a href="qh-optq.htm#QJn">QJ</a>' (joggled input), 
-all facets will be simplicial.  The corresponding vertices will be
-slightly perturbed.  Joggled input is less accurate that triangulated
-output.See <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>The output for 4-d convex hulls may be confusing if the convex
-hull contains non-simplicial facets (e.g., a hypercube). See
-<a href=qh-faq.htm#extra>Why
-are there extra points in a 4-d or higher convex hull?</a><br>
-</p>
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h3><a href="#TOP">»</a><a name="synopsis">qhull synopsis</a></h3>
-<pre>
-qhull- compute convex hulls and related structures. 
-    input (stdin): dimension, n, point coordinates
-    comments start with a non-numeric character
-    halfspace: use dim+1 and put offsets after coefficients
-
-options (qh-quick.htm):
-    d    - Delaunay triangulation by lifting points to a paraboloid
-    d Qu - furthest-site Delaunay triangulation (upper convex hull)
-    v    - Voronoi diagram as the dual of the Delaunay triangulation
-    v Qu - furthest-site Voronoi diagram
-    H1,1 - Halfspace intersection about [1,1,0,...] via polar duality
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Tv   - verify result: structure, convexity, and point inclusion
-    .    - concise list of all options
-    -    - one-line description of all options
-
-Output options (subset):
-    s    - summary of results (default)
-    i    - vertices incident to each facet
-    n    - normals with offsets
-    p    - vertex coordinates (if 'Qc', includes coplanar points)
-           if 'v', Voronoi vertices
-    Fp   - halfspace intersections
-    Fx   - extreme points (convex hull vertices)
-    FA   - compute total area and volume
-    o    - OFF format (if 'v', outputs Voronoi regions)
-    G    - Geomview output (2-d, 3-d and 4-d)
-    m    - Mathematica output (2-d and 3-d)
-    QVn  - print facets that include point n, -n if not
-    TO file- output results to file, may be enclosed in single quotes
-
-examples:
-    rbox c d D2 | qhull Qc s f Fx | more      rbox 1000 s | qhull Tv s FA
-    rbox 10 D2 | qhull d QJ s i TO result     rbox 10 D2 | qhull v Qbb Qt p
-    rbox 10 D2 | qhull d Qu QJ m              rbox 10 D2 | qhull v Qu QJ o
-    rbox c | qhull n                          rbox c | qhull FV n | qhull H Fp
-    rbox d D12 | qhull QR0 FA                 rbox c D7 | qhull FA TF1000
-    rbox y 1000 W0 | qhull                    rbox 10 | qhull v QJ o Fv
-</pre>
-
-<h3><a href="#TOP">»</a><a name="input">qhull input</a></h3>
-<blockquote>
-
-<p>The input data on <tt>stdin</tt> consists of:</p>
-<ul>
-    <li>dimension
-    <li>number of points</li>
-    <li>point coordinates</li>
-</ul>
-
-<p>Use I/O redirection (e.g., qhull &lt; data.txt), a pipe (e.g., rbox 10 | qhull),
-or the '<a href=qh-optt.htm#TI>TI</a>' option (e.g., qhull TI data.txt).  
-
-<p>Comments start with a non-numeric character.  Error reporting is
-simpler if there is one point per line.  Dimension
-and number of points may be reversed.  For halfspace intersection,
-an interior point may be prepended (see <a href=qhalf.htm#input>qhalf input</a>).
-
-<p>Here is the input for computing the convex
-hull of the unit cube.  The output is the normals, one
-per facet.</p>
-
-<blockquote>
-    <p>rbox c &gt; data </p>
-    <pre>
-3 RBOX c
-8
-  -0.5   -0.5   -0.5
-  -0.5   -0.5    0.5
-  -0.5    0.5   -0.5
-  -0.5    0.5    0.5
-   0.5   -0.5   -0.5
-   0.5   -0.5    0.5
-   0.5    0.5   -0.5
-   0.5    0.5    0.5
-</pre>
-    <p>qhull s n &lt; data</p>
-    <pre>
-
-Convex hull of 8 points in 3-d:
-
-  Number of vertices: 8
-  Number of facets: 6
-  Number of non-simplicial facets: 6
-
-Statistics for: RBOX c | QHULL s n
-
-  Number of points processed: 8
-  Number of hyperplanes created: 11
-  Number of distance tests for qhull: 35
-  Number of merged facets: 6
-  Number of distance tests for merging: 84
-  CPU seconds to compute hull (after input): 0.081
-
-4
-6
-     0      0     -1   -0.5
-     0     -1      0   -0.5
-     1      0      0   -0.5
-    -1      0      0   -0.5
-     0      1      0   -0.5
-     0      0      1   -0.5
-</pre>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="outputs">qhull outputs</a></h3>
-<blockquote>
-
-<p>These options control the output of qhull. They may be used
-individually or together.</p>
-<blockquote>
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a name="d">qhull d</a></dt>
-    <dd>compute the convex hull of the input points.
-	See <a href=qconvex.htm>qconvex</a>.</dd>
-    <dt><a name="d">qhull d Qbb</a></dt>
-    <dd>compute the Delaunay triangulation by lifting the points
-	to a paraboloid.  Use option '<a href="qh-optq.htm#Qbb">Qbb</a>'
-	to scale the paraboloid and improve numeric precision.
-	See <a href=qdelaun.htm>qdelaunay</a>.</dd>
-    <dt><a name="v">qhull v Qbb</a></dt>
-    <dd>compute the Voronoi diagram by computing the Delaunay
-	triangulation.    Use option '<a href="qh-optq.htm#Qbb">Qbb</a>'
-	to scale the paraboloid and improve numeric precision.
-	See <a href=qvoronoi.htm>qvoronoi</a>.</dd>
-    <dt><a name="H">qhull H</a></dt>
-    <dd>compute the halfspace intersection about a point via polar
-	duality.  See <a href=qhalf.htm>qhalf</a>.</dd>
-</dl>
-</blockquote>
-
-<p>For a full list of output options see
-<blockquote>
-<ul>
-            <li><a href="qh-opto.htm#output">Output</a> formats</li>
-            <li><a href="qh-optf.htm#format">Additional</a> I/O
-                formats</li>
-            <li><a href="qh-optg.htm#geomview">Geomview</a>
-                output options</li>
-            <li><a href="qh-optp.htm#print">Print</a> options</li>
-</ul>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="controls">qhull controls</a></h3>
-<blockquote>
-
-<p>For a full list of control options see
-<blockquote>
-<ul>
-            <li><a href="qh-optq.htm#qhull">Qhull</a> control
-                options</li>
-            <li><a href="qh-optc.htm#prec">Precision</a> options</li>
-            <li><a href="qh-optt.htm#trace">Trace</a> options</li>
-</ul>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">qhull options</a></h3>
-
-<pre>
-qhull- compute convex hulls and related structures.
-    http://www.qhull.org 
-
-input (stdin):
-    first lines: dimension and number of points (or vice-versa).
-    other lines: point coordinates, best if one point per line
-    comments:    start with a non-numeric character
-    halfspaces:  use dim plus one and put offset after coefficients.
-                 May be preceded by a single interior point ('H').
-
-options:
-    d    - Delaunay triangulation by lifting points to a paraboloid
-    d Qu - furthest-site Delaunay triangulation (upper convex hull)
-    v    - Voronoi diagram (dual of the Delaunay triangulation)
-    v Qu - furthest-site Voronoi diagram
-    Hn,n,... - halfspace intersection about point [n,n,0,...]
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Qc   - keep coplanar points with nearest facet
-    Qi   - keep interior points with nearest facet
-
-Qhull control options:
-    Qbk:n   - scale coord k so that low bound is n
-      QBk:n - scale coord k so that upper bound is n (QBk is 0.5)
-    QbB  - scale input to unit cube centered at the origin
-    Qbb  - scale last coordinate to [0,m] for Delaunay triangulations
-    Qbk:0Bk:0 - remove k-th coordinate from input
-    QJn  - randomly joggle input in range [-n,n]
-    QRn  - random rotation (n=seed, n=0 time, n=-1 time/no rotate)
-    Qf   - partition point to furthest outside facet
-    Qg   - only build good facets (needs 'QGn', 'QVn', or 'PdD')
-    Qm   - only process points that would increase max_outside
-    Qr   - process random outside points instead of furthest ones
-    Qs   - search all points for the initial simplex
-    Qu   - for 'd' or 'v', compute upper hull without point at-infinity
-              returns furthest-site Delaunay triangulation
-    Qv   - test vertex neighbors for convexity
-    Qx   - exact pre-merges (skips coplanar and anglomaniacs facets)
-    Qz   - add point-at-infinity to Delaunay triangulation
-    QGn  - good facet if visible from point n, -n for not visible
-    QVn  - good facet if it includes point n, -n if not
-    Q0   - turn off default p remerge with 'C-0'/'Qx'
-    Q1	   - sort merges by type instead of angle
-    Q2   - merge all non-convex at once instead of independent sets
-    Q3   - do not merge redundant vertices
-    Q4   - avoid old>new merges
-    Q5   - do not correct outer planes at end of qhull
-    Q6   - do not pre-merge concave or coplanar facets
-    Q7   - depth-first processing instead of breadth-first
-    Q8   - do not process near-inside points
-    Q9   - process furthest of furthest points
-    Q10  - no special processing for narrow distributions
-	Q11  - copy normals and recompute centrums for tricoplanar facets
-
-Towpaths Trace options:
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events
-    Tc   - check frequently during execution
-    Ts   - print statistics
-    Tv   - verify result: structure, convexity, and point inclusion
-    Tz   - send all output to stdout
-    TFn  - report summary when n or more facets created
-    TI file - input data from file, no spaces or single quotes
-    TO file - output results to file, may be enclosed in single quotes
-    TPn  - turn on tracing when point n added to hull
-     TMn - turn on tracing at merge n
-     TWn - trace merge facets when width > n
-    TRn  - rerun qhull n times.  Use with 'QJn'
-    TVn  - stop qhull after adding point n, -n for before (see TCn)
-     TCn - stop qhull after building cone for point n (see TVn)
-
-Precision options:
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge
-    En   - max roundoff error for distance computation
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]
-    Vn   - min distance above plane for a visible facet (default 3C-n or En)
-    Un   - max distance below plane for a new, coplanar point (default Vn)
-    Wn   - min facet width for outside point (before roundoff, default 2Vn)
-
-Output formats (may be combined; if none, produces a summary to stdout):
-    f    - facet dump
-    G    - Geomview output (see below)
-    i    - vertices incident to each facet
-    m    - Mathematica output (2-d and 3-d)
-    o    - OFF format (dim, points and facets; Voronoi regions)
-    n    - normals with offsets
-    p    - vertex coordinates or Voronoi vertices (coplanar points if 'Qc')
-    s    - summary (stderr)
-
-More formats:
-    Fa   - area for each facet
-    FA   - compute total area and volume for option 's'
-    Fc   - count plus coplanar points for each facet
-           use 'Qc' (default) for coplanar and 'Qi' for interior
-    FC   - centrum or Voronoi center for each facet
-    Fd   - use cdd format for input (homogeneous with offset first)
-    FD   - use cdd format for numeric output (offset first)
-    FF   - facet dump without ridges
-    Fi   - inner plane for each facet
-           for 'v', separating hyperplanes for bounded Voronoi regions
-    FI   - ID of each facet
-    Fm   - merge count for each facet (511 max)
-    FM   - Maple output (2-d and 3-d)
-    Fn   - count plus neighboring facets for each facet
-    FN   - count plus neighboring facets for each point
-    Fo   - outer plane (or max_outside) for each facet
-           for 'v', separating hyperplanes for unbounded Voronoi regions
-    FO   - options and precision constants
-    Fp   - dim, count, and intersection coordinates (halfspace only)
-    FP   - nearest vertex and distance for each coplanar point
-    FQ   - command used for qhull
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,
-                      output: #vertices, #facets, #coplanars, #nonsimplicial
-                    #real (2), max outer plane, min vertex
-    FS   - sizes:   #int (0)
-                    #real(2) tot area, tot volume
-    Ft   - triangulation with centrums for non-simplicial facets (OFF format)
-    Fv   - count plus vertices for each facet
-           for 'v', Voronoi diagram as Voronoi vertices for pairs of sites
-    FV   - average of vertices (a feasible point for 'H')
-    Fx   - extreme points (in order for 2-d)
-
-Geomview options (2-d, 3-d, and 4-d; 2-d Voronoi)
-    Ga   - all points as dots
-     Gp  -  coplanar points and vertices as radii
-     Gv  -  vertices as spheres
-    Gi   - inner planes only
-     Gn  -  no planes
-     Go  -  outer planes only
-    Gc   - centrums
-    Gh   - hyperplane intersections
-    Gr   - ridges
-    GDn  - drop dimension n in 3-d and 4-d output
-    Gt   - for 3-d 'd', transparent outer ridges
-
-Print options:
-    PAn  - keep n largest facets by area
-    Pdk:n - drop facet if normal[k] &lt;= n (default 0.0)
-    PDk:n - drop facet if normal[k] >= n
-    Pg   - print good facets (needs 'QGn' or 'QVn')
-    PFn  - keep facets whose area is at least n
-    PG   - print neighbors of good facets
-    PMn  - keep n facets with most merges
-    Po   - force output.  If error, output neighborhood of facet
-    Pp   - do not report precision problems
-
-    .    - list of all options
-    -    - one line descriptions of all options
-</pre>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis &#149; <a href="#input">in</a>put 
-&#149; <a href="#outputs">ou</a>tputs &#149; <a href="#controls">co</a>ntrols 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.man b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.man
deleted file mode 100644
index dc29c179544d2e008c13022bfa8d37c9ff99fb14..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.man
+++ /dev/null
@@ -1,1006 +0,0 @@
-./"  This is the Unix manual page for qhull, written in nroff, the standard
-./"  manual formatter for Unix systems.  To format it, type
-./"
-./"  nroff -man qhull.man
-./"
-./"  This will print a formatted copy to standard output.  If you want
-./"  to ensure that the output is plain ASCII, free of any control
-./"  characters that nroff uses for underlining etc, pipe the output
-./"  through "col -b":
-./"
-./"  nroff -man qhull.man | col -b
-./"
-./"  Warning: a leading quote "'" or dot "." will not format correctly
-./"
-.TH qhull 1 "2003/12/30" "Geometry Center"
-.SH NAME
-qhull \- convex hull, Delaunay triangulation, Voronoi diagram, 
-halfspace intersection about a point, hull volume, facet area
-.SH SYNOPSIS
-.nf
-qhull- compute convex hulls and related structures
-    input (stdin): dimension, #points, point coordinates
-    first comment (non-numeric) is listed in the summary
-    halfspace: use dim plus one with offsets after coefficients
-    
-options (qh-quick.htm):
-    d      - Delaunay triangulation by lifting points to a paraboloid
-    v      - Voronoi diagram via the Delaunay triangulation
-    H1,1   - Halfspace intersection about [1,1,0,...]
-    d Qu   - Furthest-site Delaunay triangulation (upper convex hull)
-    v Qu   - Furthest-site Voronoi diagram
-    Qt     - triangulated output
-    QJ     - Joggle the input to avoid precision problems
-    .      - concise list of all options
-    -      - one-line description of all options
-    
-Output options (subset):
-    FA     - compute total area and volume
-    Fx     - extreme points (convex hull vertices)
-    G      - Geomview output (2-d, 3-d and 4-d)
-    Fp     - halfspace intersection coordinates
-    m      - Mathematica output (2-d and 3-d)
-    n      - normals with offsets
-    o      - OFF file format (if Voronoi, outputs regions)
-    TO file- output results to file, may be enclosed in single quotes
-    f      - print all fields of all facets
-    s      - summary of results (default)
-    Tv     - verify result: structure, convexity, and point inclusion
-    p      - vertex coordinates (centers for Voronoi)
-    i      - vertices incident to each facet
-    
-example:
-    rbox 1000 s | qhull Tv s FA
-.fi
-
- - html manual:    index.htm
- - installation:   README.txt
- - see also:       COPYING.txt, REGISTER.txt, Changes.txt
- - WWW:  <http://www.qhull.org>
- - CVS:  <http://savannah.gnu.org/projects/qhull/>
- - mirror: <http://www6.uniovi.es/ftp/pub/mirrors/geom.umn.edu/software/ghindex.html>
- - news: <http://www.qhull.org/news>
- - Geomview:  <http://www.geomview.org>
- - news group:     <news:comp.graphics.algorithms>
- - FAQ:       <http://exaflop.org/docs/cgafaq/cga6.html>
- - email:          qhull@qhull.org
- - bug reports:    qhull_bug@qhull.org
- 
-The sections are:
- - INTRODUCTION
- - DESCRIPTION, a description of Qhull
- - IMPRECISION, how Qhull handles imprecision
- - OPTIONS
- -    Input and output options
- -    Additional input/output formats
- -    Precision options
- -    Geomview options
- -    Print options
- -    Qhull options
- -    Trace options
- - BUGS
- - E-MAIL
- - SEE ALSO
- - AUTHORS
- - ACKNOWLEGEMENTS
-
-This man page briefly describes all Qhull options.  Please report
-any mismatches with Qhull's html manual (index.htm).
-
-.PP
-.SH INTRODUCTION
-Qhull is a general dimension code for computing convex hulls, Delaunay
-triangulations, Voronoi diagram, furthest-site Voronoi diagram, 
-furthest-site Delaunay triangulations, and 
-halfspace intersections about a point.  It implements the Quickhull algorithm for 
-computing the convex hull.  Qhull handles round-off errors from floating 
-point arithmetic.  It can approximate a convex hull.
-
-The program includes options for hull volume, facet area, partial hulls,
-input transformations, randomization, tracing, multiple output formats, and
-execution statistics.  The program can be called from within your application.
-You can view the results in 2-d, 3-d and 4-d with Geomview.
-.PP
-.SH DESCRIPTION
-.PP
-The format of input is the following: first line contains the dimension,
-second line contains the number of input points, and point coordinates follow.
-The dimension and number of points can be reversed.
-Comments and line breaks are ignored.  A comment starts with a
-non-numeric character and continues to the end of line.  The first comment 
-is reported in summaries and statistics.
-Error reporting is
-better if there is one point per line.
-.PP
-The default printout option is a short summary. There are many
-other output formats.
-.PP
-Qhull implements the Quickhull algorithm for convex hull. This algorithm combines
-the 2-d Quickhull algorithm with the n-d beneath-beyond algorithm
-[c.f., Preparata & Shamos '85].
-It is similar to the randomized algorithms of Clarkson and 
-others [Clarkson et al. '93].  The main 
-advantages of Quickhull are output sensitive performance, reduced
-space requirements, and automatic handling of precision problems.
-.PP
-The data structure produced by Qhull consists of vertices, ridges, and facets.
-A vertex is a point of the input set.  A ridge is a set of d vertices
-and two neighboring facets.  For example in 3-d, a ridge is an edge of the
-polyhedron.  A facet is a set of ridges, a set of neighboring facets, a set
-of incident vertices, and a hyperplane equation.  For simplicial facets, the 
-ridges are defined by the vertices and neighboring facets.  When Qhull 
-merges two facets, it produces a non-simplicial
-facet.  A non-simplicial facet has more than d neighbors and may share more than 
-one ridge with a neighbor.
-.PP
-.SH IMPRECISION 
-.PP
-Since Qhull uses floating point arithmetic, roundoff error may occur for each
-calculation.  This causes  problems
-for most geometric algorithms.
-.PP
-Qhull automatically sets option 'C-0' in 2-d, 3-d, and 4-d, or 
-option 'Qx' in 5-d and higher.  These options handle precision problems 
-by merging facets.  Alternatively, use option 'QJ' to joggle the
-input.
-.PP
-With 'C-0', Qhull merges non-convex
-facets while constructing the hull. The remaining facets are
-clearly convex. With 'Qx', Qhull merges 
-coplanar horizon facets, flipped facets, concave facets and
-duplicated ridges.  It merges coplanar facets after constructing
-the hull.
-With 'Qx', coplanar points may be missed, but it
-appears to be unlikely.
-.PP
-To guarantee triangular output, joggle the input with option 'QJ'.  Facet
-merging will not occur. 
-.SH OPTIONS
-.PP
-To get a list of the most important options, execute 'qhull' by itself.
-To get a complete list of options, 
-execute 'qhull -'.  
-To get a complete, concise list of options, execute 'qhull .'.
-
-Options can be in any order.
-Capitalized options take an argument (except 'PG' and 'F' options).
-Single letters are used for output formats and precision constants.  The
-other options are grouped into menus for other output formats ('F'),
-Geomview output ('G'),
-printing ('P'), Qhull control ('Q'), and tracing ('T').
-.TP
-Main options:
-.TP
-default
-Compute the convex hull of the input points.  Report a summary of
-the result.
-.TP
-d
-Compute the Delaunay triangulation by lifting the input points to a 
-paraboloid.  The 'o' option prints the input points and facets.  
-The 'QJ' option guarantees triangular output.  The 'Ft' 
-option prints a triangulation.  It adds points (the centrums) to non-simplicial
-facets.  
-.TP
-v
-Compute the Voronoi diagram from the Delaunay triangulation.  
-The 'p' option prints the Voronoi vertices.  
-The 'o' option prints the Voronoi vertices and the
-vertices in each Voronoi region.  It lists regions in
-site ID order.
-The 'Fv' option prints each ridge of the Voronoi diagram.
-The first or zero'th vertex
-indicates the infinity vertex.  Its coordinates are 
-qh_INFINITE (-10.101).  It indicates unbounded Voronoi
-regions or degenerate Delaunay triangles.
-.TP
-Hn,n,...
-Compute halfspace intersection about [n,n,0,...].  
-The input is a set of halfspaces
-defined in the same format as 'n', 'Fo', and 'Fi'.
-Use 'Fp' to print the intersection points.  Use 'Fv'
-to list the intersection points for each halfspace.  The
-other output formats display the dual convex hull.
-
-The point [n,n,n,...] is a feasible point for the halfspaces, i.e.,   
-a point that is inside all
-of the halfspaces (Hx+b <= 0).  The default coordinate value is 0.
-
-The input may start with a feasible point.  If so, use 'H' by itself.
-The input starts with a feasible point when the first number is the dimension,
-the second number is "1", and the coordinates complete a line.  The 'FV'
-option produces a feasible point for a convex hull.
-.TP
-d Qu
-Compute the furthest-site Delaunay triangulation from the upper
-convex hull.  The 'o' option prints the input points and facets.  
-The 'QJ' option guarantees triangular otuput.  You can also use
-'Ft' to triangulate via the centrums of non-simplicial
-facets.  
-.TP
-v Qu
-Compute the furthest-site Voronoi diagram.
-The 'p' option prints the Voronoi vertices.  
-The 'o' option prints the Voronoi vertices and the
-vertices in each Voronoi region.
-The 'Fv' option prints each ridge of the Voronoi diagram.
-The first or zero'th vertex
-indicates the infinity vertex at infinity.  Its coordinates are 
-qh_INFINITE (-10.101).  It indicates unbounded Voronoi regions
-and degenerate Delaunay triangles.
-.PP
-.TP
-Input/Output options:
-.TP
-f
-Print out all facets and all fields of each facet.
-.TP
-G
-Output the hull in Geomview format.  For imprecise hulls,
-Geomview displays the inner and outer hull.  Geomview can also 
-display points, ridges, vertices, coplanar points, and
-facet intersections.  See below for a list of options.
-
-For Delaunay triangulations, 'G' displays the
-corresponding paraboloid.  For halfspace intersection, 'G' displays the
-dual polytope.
-.TP
-i
-Output the incident vertices for each facet.  
-Qhull prints the number of facets followed by the
-vertices of each facet.  One facet is printed per line.  The numbers 
-are the 0-relative indices of the corresponding input points.
-The facets
-are oriented.  
-
-In 4-d and higher, 
-Qhull triangulates non-simplicial facets.  Each apex (the first vertex) is
-a created point that corresponds to the facet's centrum.  Its index is greater
-than the indices of the input points.  Each base
-corresponds to a simplicial ridge between two facets.
-To print the vertices without triangulation, use option 'Fv'.
-.TP
-m
-Output the hull in Mathematica format.  Qhull writes a Mathematica file for 2-d and 3-d
-convex hulls and for 2-d Delaunay triangulations.   Qhull produces a list of objects
-that you can assign to a variable in Mathematica, for example:
-"list= << <outputfilename> ". If the object is 2-d, it can be
-visualized by "Show[Graphics[list]] ". For 3-d objects the command is
-"Show[Graphics3D[list]]".
-.TP
-n
-Output the normal equation for each facet.  
-Qhull prints the dimension (plus one), the number of facets,
-and the normals for each facet.  The facet's offset follows its
-normal coefficients.
-.TP
-o
-Output the facets in OFF file format.  
-Qhull prints the dimension, number of points, number
-of facets, and number of ridges.  Then it prints the coordinates of
-the input points and the vertices for each facet.  Each facet is on
-a separate line.  The first number is the number of vertices.  The
-remainder are the indices of the corresponding points.  The vertices are
-oriented in 2-d, 3-d, and in simplicial facets.
-
-For 2-d Voronoi diagrams,
-the vertices are sorted by adjacency, but not oriented.  In 3-d and higher,
-the Voronoi vertices are sorted by index.  
-See the 'v' option for more information.
-.TP
-p
-Output the coordinates of each vertex point.  
-Qhull prints the dimension, the number of points,
-and the coordinates for each vertex.  
-With the 'Gc' and 'Gi' options, it also prints coplanar
-and interior points.  For Voronoi diagrams, it prints the coordinates
-of each Voronoi vertex.  
-.TP
-s
-Print a summary to stderr.  If no output options
-are specified at all, a summary goes to stdout.  The summary lists 
-the number of input points, the dimension, the number of vertices
-in the convex hull, the number of facets in the convex hull, the 
-number of good facets (if 'Pg'), and statistics.
-
-The last two statistics (if needed) measure the maximum distance 
-from a point or vertex to a
-facet.  The number in parenthesis (e.g., 2.1x) is the ratio between the 
-maximum distance and the worst-case distance due to merging
-two simplicial facets.
-.PP
-.TP
-Precision options
-.TP
-An
-Maximum angle given as a cosine.  If the angle between a pair of facet
-normals
-is greater than n, Qhull merges one of the facets into a neighbor.
-If 'n' is negative, Qhull tests angles after adding
-each point to the hull (pre-merging).  
-If 'n' is positive, Qhull tests angles after
-constructing the hull (post-merging).  
-Both pre- and post-merging can be defined.
-
-Option 'C0' or 'C-0' is set if the corresponding 'Cn' or 'C-n'
-is not set.  If 'Qx'
-is set, then 'A-n' and 'C-n' are checked after the hull is constructed
-and before 'An' and 'Cn' are checked.
-.TP
-Cn
-Centrum radius.
-If a centrum is less than n below a neighboring facet, Qhull merges one
-of the facets.
-If 'n' is negative or '-0', Qhull tests and merges facets after adding
-each point to the hull.  This is called "pre-merging".  If 'n' is positive,
-Qhull tests for convexity after constructing the hull ("post-merging").
-Both pre- and post-merging can be defined.
-
-For 5-d and higher, 'Qx' should be used
-instead of 'C-n'.  Otherwise, most or all facets may be merged
-together.
-.TP
-En
-Maximum roundoff error for distance computations.
-.TP
-Rn
-Randomly perturb distance computations up to +/- n * max_coord.
-This option perturbs every distance, hyperplane, and angle computation.
-To use time as the random number seed, use option 'QR-1'.
-.TP
-Vn
-Minimum distance for a facet to be visible.
-A facet is visible if the distance from the point to the
-facet is greater than 'Vn'.  
-
-Without merging, the default value for 'Vn' is the round-off error ('En'). 
-With merging, the default value is the pre-merge centrum ('C-n') in 2-d or
-3--d, or three times that in other dimensions.  If the outside width
-is specified ('Wn'), the maximum, default value for 'Vn' is 'Wn'.
-.TP
-Un
-Maximum distance below a facet for a point to be coplanar to the facet.  The
-default value is 'Vn'.
-.TP
-Wn
-Minimum outside width of the hull.  Points are added to the convex hull
-only if they are clearly outside of a facet.  A point is outside of a 
-facet if its distance to the facet is greater than 'Wn'.  The normal
-value for 'Wn' is 'En'.  If the user specifies pre-merging and
-does not set 'Wn', than 'Wn' is set
-to the premerge 'Cn' and maxcoord*(1-An).
-.PP
-.TP
-Additional input/output formats
-.TP
-Fa
-Print area for each facet.  
-For Delaunay triangulations, the area is the area of the triangle.
-For Voronoi diagrams, the area is the area of the dual facet.   
-Use 'PAn' for printing the n largest facets, and option 'PFn' for
-printing facets larger than 'n'.
-
-The area for non-simplicial facets is the sum of the
-areas for each ridge to the centrum.   Vertices far below
-the facet's hyperplane are ignored.  
-The reported area may be significantly less than the actual area.
-.TP
-FA
-Compute the total area and volume for option 's'.  It is an approximation
-for non-simplicial facets (see 'Fa').
-.TP
-Fc
-Print coplanar points for each facet.  The output starts with the
-number of facets.  Then each facet is printed one per line.  Each line 
-is the number of coplanar points followed by the point ids. 
-Option 'Qi' includes the interior points.  Each coplanar point (interior point) is
-assigned to the facet it is furthest above (resp., least below). 
-.TP
-FC
-Print centrums for each facet.  The output starts with the
-dimension followed by the number of facets.  
-Then each facet centrum is printed, one per line.
-.TP
-Fd
-Read input in cdd format with homogeneous points.
-The input starts with comments.  The first comment is reported in
-the summary.  
-Data starts after a "begin" line.  The next line is the number of points
-followed by the dimension+1 and "real" or "integer".  Then the points
-are listed  with a leading "1" or "1.0".  The data ends with an "end" line.
-
-For halfspaces ('Fd Hn,n,...'), the input format is the same.  Each halfspace
-starts with its offset.  The sign of the offset is the opposite of Qhull's
-convention.
-.TP
-FD
-Print normals ('n', 'Fo', 'Fi') or points ('p') in cdd format.
-The first line is the command line that invoked Qhull.
-Data starts with a "begin" line.  The next line is the number of normals or points
-followed by the dimension+1 and "real".  Then the normals or points
-are listed  with the offset before the coefficients.  The offset for points is
-1.0.  The offset for normals has the opposite sign.  
-The data ends with an "end" line.
-.TP
-FF
-Print facets (as in 'f') without printing the ridges.
-.TP
-Fi
-Print inner planes for each facet.  The inner plane is below all vertices.
-.TP
-Fi
-Print separating hyperplanes for bounded, inner regions of the Voronoi 
-diagram.  The first line is the number
-of ridges.  Then each hyperplane is printed, one per line.  A line starts
-with the number of indices and floats.  The first pair lists 
-adjacent input
-sites, the next d floats are the normalized coefficients for the hyperplane,
-and the last float is the offset.  The hyperplane is oriented toward 
-'QVn' (if defined), or the first input site of the pair.  Use 'Tv' to
-verify that the hyperplanes are perpendicular bisectors.  Use 'Fo' for 
-unbounded regions, and 'Fv' for the corresponding Voronoi vertices.
-.TP
-FI
-Print facet identifiers.
-.TP
-Fm
-Print number of merges for each facet.  At most 511 merges are reported for
-a facet.  See 'PMn' for printing the facets with the most merges.
-.TP
-FM
-Output the hull in Maple format.  Qhull writes a Maple
-file for 2-d and 3-d
-convex hulls and for 2-d Delaunay triangulations.   Qhull produces a '.mpl'
-file for displaying with display3d().
-.TP
-Fn
-Print neighbors for each facet.  The output starts with the number of facets.  
-Then each facet is printed one per line.  Each line 
-is the number of neighbors followed by an index for each neighbor.  The indices
-match the other facet output formats.  
-
-A negative index indicates an unprinted
-facet due to printing only good facets ('Pg').  It is the negation of the facet's
-ID (option 'FI').   
-For example, negative indices are used for facets
-"at infinity" in the Delaunay triangulation.
-.TP
-FN
-Print vertex neighbors or coplanar facet for each point.  
-The first line is the number
-of points.  Then each point is printed, one per line.  If the
-point is coplanar, the line is "1" followed by the facet's ID.
-If the point is
-not a selected vertex, the line is "0".
-Otherwise, each line is the number of
-neighbors followed by the corresponding facet indices (see 'Fn').
-.TP
-Fo
-Print outer planes for each facet in the same format as 'n'.  
-The outer plane is above all points.
-.TP
-Fo
-Print separating hyperplanes for unbounded, outer regions of the Voronoi 
-diagram.  The first line is the number
-of ridges.  Then each hyperplane is printed, one per line.  A line starts
-with the number of indices and floats.  The first pair lists 
-adjacent input
-sites, the next d floats are the normalized coefficients for the hyperplane,
-and the last float is the offset.  The hyperplane is oriented toward 
-'QVn' (if defined), or the first input site of the pair.  Use 'Tv' to
-verify that the hyperplanes are perpendicular bisectors.  Use 'Fi' for 
-bounded regions, and 'Fv' for the corresponding Voronoi vertices.
-.TP
-FO
-List all options to stderr, including the default values.  Additional 'FO's
-are printed to stdout.
-.TP
-Fp
-Print points for halfspace intersections (option 'Hn,n,...').  Each
-intersection corresponds to a facet of the dual polytope.
-The "infinity" point [-10.101,-10.101,...]
-indicates an unbounded intersection.
-.TP
-FP
-For each coplanar point ('Qc') print the point ID of the nearest vertex,
-the point ID, the facet ID, and the distance.
-.TP
-FQ
-Print command used for qhull and input.
-.TP
-Fs
-Print a summary.  The first line consists of the number of integers ("8"), 
-followed by the dimension, the number of points, the number of vertices, 
-the number of facets, the number of vertices selected for output, the
-number of facets selected for output, the number of coplanar points selected
-for output, number of simplicial, unmerged facets in output
-
-The second line consists of the number of reals ("2"),
-followed by the maxmimum offset to an outer plane and and minimum offset to 
-an inner plane.  Roundoff is included.  Later
-versions of Qhull may produce additional integers or reals.
-.TP
-FS
-Print the size of the hull.  The first line consists of the number of integers ("0").  
-The second line consists of the number of reals ("2"),
-followed by the total facet area, and the total volume.  
-Later
-versions of Qhull may produce additional integers or reals.
-
-The total volume measures the volume
-of the intersection of the halfspaces defined by each facet.   
-Both area and volume are
-approximations for non-simplicial facets.  See option 'Fa'.
-.TP
-Ft
-Print a triangulation with added points for non-simplicial
-facets.  The first line is the dimension and the second line is the
-number of points and the number of facets.  The points follow, one
-per line, then the facets follow as a list of point indices.  With option
-'Qz', the
-points include the point-at-infinity.
-.TP
-Fv
-Print vertices for each facet.  The first line is the number
-of facets.  Then each facet is printed, one per line.  Each line is
-the number of vertices followed by the corresponding point ids.  Vertices
-are listed in the order they were added to the hull (the last one is first).
-.TP
-Fv
-Print all ridges of a Voronoi diagram.  The first line is the number
-of ridges.  Then each ridge is printed, one per line.  A line starts
-with the number of indices.  The first pair lists adjacent input
-sites, the remaining indices list Voronoi vertices.  Vertex '0' indicates
-the vertex-at-infinity (i.e., an unbounded ray).  In 3-d, the vertices
-are listed in order.  See 'Fi' and 'Fo' for separating hyperplanes.
-.TP
-FV
-Print average vertex.  The average vertex is a feasible point 
-for halfspace intersection. 
-.TP
-Fx
-List extreme points (vertices) of the convex hull.  The first line
-is the number of points.  The other lines give the indices of the
-corresponding points.  The first point is '0'.  In 2-d, the points
-occur in counter-clockwise order; otherwise they occur in input order.
-For Delaunay triangulations, 'Fx' lists the extreme points of the
-input sites.  The points are unordered.
-.PP
-.TP
-Geomview options
-.TP
-G
-Produce a file for viewing with Geomview.  Without other options,
-Qhull displays edges in 2-d, outer planes in 3-d, and ridges in 4-d.
-A ridge can be 
-explicit or implicit.  An explicit ridge is a dim-1 dimensional simplex
-between two facets.  
-In 4-d, the explicit ridges are triangles.
-When displaying a ridge in 4-d, Qhull projects the ridge's vertices to
-one of its facets' hyperplanes.
-Use 'Gh' to
-project ridges to the intersection of both hyperplanes.
-.TP
-Ga
-Display all input points as dots.
-.TP
-Gc
-Display the centrum for each facet in 3-d.  The centrum is defined by a
-green radius sitting on a blue plane.  The plane corresponds to the
-facet's hyperplane.  
-The radius is defined by 'C-n' or 'Cn'.
-.TP
-GDn
-Drop dimension n in 3-d or 4-d.  The result is a 2-d or 3-d object.  
-.TP
-Gh
-Display hyperplane intersections in 3-d and 4-d.   In 3-d, the
-intersection is a black line.  It lies on two neighboring hyperplanes
-(c.f., the blue squares associated with centrums ('Gc')).  In 4-d,
-the ridges are projected to the intersection of both hyperplanes.
-.TP
-Gi
-Display inner planes in 2-d and 3-d.  The inner plane of a facet
-is below all of its vertices.  It is parallel to the facet's hyperplane.
-The inner plane's color is the opposite (1-r,1-g,1-b) of the outer
-plane.  Its edges are determined by the vertices.
-.TP
-Gn
-Do not display inner or outer planes.  By default, 
-Geomview displays the precise plane (no merging) or both
-inner and output planes (merging).  Under merging, Geomview does
-not display the inner plane if the
-the difference between inner and outer is too small.
-.TP
-Go
-Display outer planes in 2-d and 3-d.  The outer plane of a facet
-is above all input points.  It is parallel to the facet's hyperplane.
-Its color is determined by the facet's normal, and its 
-edges are determined by the vertices.
-.TP
-Gp
-Display coplanar points and vertices as radii.  A radius defines a ball
-which corresponds to the imprecision of the point.  The imprecision is 
-the maximum of the roundoff error, the centrum radius, and maxcoord *
-(1-An).  It is at least 1/20'th of the maximum coordinate, 
-and ignores post-merging if pre-merging is done.
-.TP
-Gr
-Display ridges in 3-d.  A ridge connects the two vertices that are shared
-by neighboring facets.  Ridges are always displayed in 4-d.
-.TP
-Gt
-A 3-d Delaunay triangulation looks like a convex hull with interior
-facets.  Option 'Gt' removes the outside ridges to reveal the outermost
-facets.  It automatically sets options 'Gr' and 'GDn'.
-.TP
-Gv
-Display vertices as spheres.  The radius of the sphere corresponds to
-the imprecision of the data.  See 'Gp' for determining the radius.
-.PP
-.TP
-Print options
-.TP
-PAn
-Only the n largest facets are marked good for printing.  
-Unless 'PG' is set, 'Pg' is automatically set. 
-.TP
-Pdk:n
-Drop facet from output if normal[k] <= n.  The option 'Pdk' uses the
-default value of 0 for n.
-.TP
-PDk:n
-Drop facet from output if normal[k] >= n.  The option 'PDk' uses the
-default value of 0 for n.
-.TP
-PFn
-Only facets with area at least 'n' are marked good for printing.  
-Unless 'PG' is set, 'Pg' is automatically set. 
-.TP
-Pg
-Print only good facets.  A good facet is either visible from a point
-(the 'QGn' option) or includes a point (the 'QVn' option).  It also meets the
-requirements of 'Pdk' and 'PDk' options.  Option 'Pg' is automatically
-set for options 'PAn' and 'PFn'.
-.TP
-PG
-Print neighbors of good facets.
-.TP
-PMn
-Only the n facets with the most merges are marked good for printing.
-Unless 'PG' is set, 'Pg' is automatically set. 
-.TP
-Po
-Force output despite precision problems.  Verify ('Tv') does not check
-coplanar points.
-Flipped facets are reported and concave facets are counted.  
-If 'Po' is used, points are not 
-partitioned into flipped facets and a flipped facet is always visible
-to a point.
-Also, if an error occurs before the completion of Qhull and tracing is
-not active, 'Po' outputs a neighborhood of the erroneous facets
-(if any).
-.TP
-Pp
-Do not report precision problems.
-.PP
-.TP
-Qhull control options
-.TP
-Qbk:0Bk:0
-Drop dimension k from the input points.  This allows the user to 
-take convex hulls of sub-dimensional objects.  It happens before
-the Delaunay and Voronoi transformation.
-.TP
-QbB
-Scale the input points to fit the unit cube.  After scaling, the lower
-bound will be -0.5 and the upper bound +0.5 in all dimensions.
-For Delaunay and
-Voronoi diagrams, scaling happens after projection to the paraboloid.
-Under precise
-arithmetic, scaling does not change the topology of the convex hull.  
-.TP
-Qbb
-Scale the last coordinate to [0, m] where m is the maximum absolute
-value of the other coordinates.  For Delaunay and
-Voronoi diagrams, scaling happens after projection to the paraboloid.
-It reduces roundoff error for inputs with integer coordinates.
-Under precise
-arithmetic, scaling does not change the topology of the convex hull.  
-.TP
-Qbk:n
-Scale the k'th coordinate of the input points.  After scaling, the lower
-bound of the input points will be n.  'Qbk' scales to -0.5.  
-.TP
-QBk:n
-Scale the k'th coordinate of the input points.  After scaling, the upper
-bound will be n.  'QBk' scales to +0.5.
-.TP
-Qc
-Keep coplanar points with the nearest facet.  Output 
-formats 'p', 'f', 'Gp', 'Fc', 'FN', and 'FP' will print the points.  
-.TP
-Qf
-Partition points to the furthest outside facet.
-.TP
-Qg
-Only build good facets.  With the 'Qg' option, Qhull will only build 
-those facets that it needs to determine the good facets in the output.
-See 'QGn', 'QVn', and 'PdD' for defining good facets, and 'Pg' and 'PG' 
-for printing good facets and their neighbors.
-.TP
-QGn
-A facet is good (see 'Qg' and 'Pg') if it is visible from point n.  If n < 0, a facet is
-good if it is not visible from point n.  Point n is not added to the
-hull (unless 'TCn' or 'TPn').  
-With rbox, use the 'Pn,m,r' option to define your point; it
-will be point 0 (QG0).  
-.TP
-Qi
-Keep interior points with the nearest facet.  
-Output formats 'p', 'f', 'Gp', 'FN', 'FP', and 'Fc' will print the points.
-.TP
-QJn
-Joggle each input coordinate by adding a random number in [-n,n].  If a
-precision error occurs, then qhull increases n and tries again.  It does
-not increase n beyond a certain value, and it stops after a certain number
-of attempts [see user.h].  Option 'QJ'
-selects a default value for n.  The output will be simplicial.  For
-Delaunay triangulations, 'QJn' sets 'Qbb' to scale the last coordinate
-(not if 'Qbk:n' or 'QBk:n' is set).  See also 'Qt'.
-.TP
-Qm
-Only process points that would otherwise increase max_outside.  Other
-points are treated as coplanar or interior points.
-.TP
-Qr 
-Process random outside points instead of furthest ones.  This makes
-Qhull equivalent to the randomized incremental algorithms.  CPU time
-is not reported since the randomization is inefficient.
-.TP
-QRn
-Randomly rotate the input points.  If n=0, use time as the random number seed.
-If n>0, use n as the random number seed.  If n=-1, don't rotate but use
-time as the random number seed.  For Delaunay triangulations ('d' and 'v'),
-rotate about the last axis.
-.TP
-Qs
-Search all points for the initial simplex.
-.TP
-Qt
-Triangulated output.  Triangulate all non-simplicial facets.  See also 'QJ'.
-.TP
-Qv
-Test vertex neighbors for convexity after post-merging.
-To use the 'Qv' option, you also need to set a merge option
-(e.g., 'Qx' or 'C-0').
-.TP
-QVn
-A good facet (see 'Qg' and 'Pg') includes point n.  If n<0, then a good facet does not
-include point n.  The point is either in the initial simplex or it
-is the first point added to the hull.  Option 'QVn' may not be used with merging.
-.TP
-Qx
-Perform exact merges while building the hull.  The "exact" merges
-are merging a point into a coplanar facet (defined by 'Vn', 'Un',
-and 'C-n'), merging concave facets, merging duplicate ridges, and
-merging flipped facets.  Coplanar merges and angle coplanar merges ('A-n')
-are not performed.  Concavity testing is delayed until a merge occurs.
-
-After
-the hull is built, all coplanar merges are performed (defined by 'C-n'
-and 'A-n'), then post-merges are performed 
-(defined by 'Cn' and 'An').
-.TP
-Qz
-Add a point "at infinity" that is above the paraboloid for Delaunay triangulations
-and Voronoi diagrams.  This reduces precision problems and allows the triangulation
-of cospherical points.
-.PP
-.TP 
-Qhull experiments and speedups
-.TP
-Q0
-Turn off pre-merging as a default option.  
-With 'Q0'/'Qx' and without explicit pre-merge options, Qhull 
-ignores precision issues while constructing the convex hull.  This
-may lead to precision errors.  If so, a descriptive warning is
-generated.  
-.TP
-Q1
-With 'Q1', Qhull sorts merges by type (coplanar, angle coplanar, concave)
-instead of by angle.
-.TP
-Q2
-With 'Q2', Qhull merges all facets at once instead of using
-independent sets of merges and then retesting.
-.TP
-Q3
-With 'Q3', Qhull does not remove redundant vertices.
-.TP
-Q4
-With 'Q4', Qhull avoids merges of an old facet into a new facet.
-.TP
-Q5
-With 'Q5', Qhull does not correct outer planes at the end.  The
-maximum outer plane is used instead.
-.TP
-Q6
-With 'Q6', Qhull does not pre-merge concave or coplanar facets.
-.TP
-Q7
-With 'Q7', Qhull processes facets in depth-first order instead of
-breadth-first order.
-.TP
-Q8
-With 'Q8' and merging, Qhull does not retain near-interior points for adjusting
-outer planes.  'Qc' will probably retain
-all points that adjust outer planes.
-.TP
-Q9
-With 'Q9', Qhull processes the furthest of all outside sets at each iteration.
-.TP
-Q10
-With 'Q10', Qhull does not use special processing for narrow distributions.
-.TP
-Q11
-With 'Q11', Qhull copies normals and recompute centrums for tricoplanar facets.
-.PP
-.TP
-Trace options
-.TP
-Tn
-Trace at level n.  Qhull includes full execution tracing.  'T-1'
-traces events.  'T1' traces
-the overall execution of the program.  'T2' and 'T3' trace overall
-execution and geometric and topological events.  'T4' traces the
-algorithm.  'T5' includes information about memory allocation and
-Gaussian elimination.
-.TP
-Tc
-Check frequently during execution.  This will catch most inconsistency
-errors.
-.TP
-TCn
-Stop Qhull after building the cone of new facets for point n.  The
-output for 'f' includes the cone and the old hull.  
-See also 'TVn'.
-.TP
-TFn
-Report progress whenever more than n facets are created
-During post-merging, 'TFn' 
-reports progress after more than n/2 merges.
-.TP
-TI file
-Input data from 'file'.  The filename may not include spaces or
-quotes.
-.TP
-TO file
-Output results to 'file'.  The name may be enclosed in single
-quotes.
-.TP
-TPn
-Turn on tracing when point n is added to the hull.  Trace
-partitions of point n.  If used with TWn, turn off
-tracing after adding point n to the hull.
-.TP
-TRn
-Rerun qhull n times.  Usually used with 'QJn' to determine the
-probability that a given joggle will fail.
-.TP
-Ts
-Collect statistics and print to stderr at the end of execution.
-.TP
-Tv
-Verify the convex hull.  This checks the topological structure, facet
-convexity, and point inclusion.  
-If precision problems occurred, facet convexity is tested whether or 
-not 'Tv' is selected.
-Option 'Tv' does not check point inclusion if forcing output with 'Po',
-or if 'Q5' is set.
-
-For point inclusion testing, Qhull verifies that all points are below
-all outer planes (facet->maxoutside).  Point inclusion is exhaustive
-if merging or if the facet-point product is small enough;
-otherwise Qhull verifies each point with a directed
-search (qh_findbest).  
-
-Point inclusion testing occurs after producing output.  It prints 
-a message to stderr unless option 'Pp' is used.  This
-allows the user to interrupt Qhull without changing the output.
-.TP
-TVn
-Stop Qhull after adding point n.  If n < 0, stop Qhull before adding
-point n.  Output shows the hull at this time.  See also 'TCn'
-.TP
-TMn
-Turn on tracing at n'th merge.
-.TP
-TWn
-Trace merge facets when the width is greater than n.
-.TP
-Tz
-Redirect stderr to stdout.
-.PP
-.SH BUGS
-Please report bugs to Brad Barber at qhull_bug@qhull.org.  
-
-If Qhull does not compile, it is due to an incompatibility between your
-system and ours.  The first thing to check is that your compiler is
-ANSI standard.  If it is, check the man page for the best options, or
-find someone to help you.  If you locate the cause of your problem,
-please send email since it might help others.
-
-If Qhull compiles but crashes on the test case (rbox D4), there's
-still incompatibility between your system and ours.  Typically it's
-been due to mem.c and memory alignment.  You can use qh_NOmem in mem.h
-to turn off memory management.  Please let us know if you figure out 
-how to fix these problems.
-
-If you do find a problem, try to simplify it before reporting the
-error.  Try different size inputs to locate the smallest one that
-causes an error.  You're welcome to hunt through the code using the
-execution trace as a guide.  This is especially true if you're
-incorporating Qhull into your own program.
-
-When you do report an error, please attach a data set to the
-end of your message.  This allows us to see the error for ourselves.
-Qhull is maintained part-time.
-.PP
-.SH E-MAIL
-Please send correspondence to qhull@qhull.org and report bugs to
-qhull_bug@qhull.org.  Let us know how you use Qhull.  If you
-mention it in a paper, please send the reference and an abstract.
-
-If you would like to get Qhull announcements (e.g., a new version)
-and news (any bugs that get fixed, etc.), let us know and we will add you to
-our mailing list.  If you would like to communicate with other
-Qhull users, we will add you to the qhull_users alias.  
-For Internet news about geometric algorithms and convex hulls, look at
-comp.graphics.algorithms and sci.math.num-analysis
-
-.SH SEE ALSO
-rbox(1)
-
-Barber, C. B., D.P. Dobkin, and H.T. Huhdanpaa,
-"The Quickhull Algorithm for Convex Hulls," ACM
-Trans. on Mathematical Software, Dec. 1996.
-http://www.acm.org/pubs/citations/journals/toms/1996-22-4/p469-barber/
-http://citeseer.nj.nec.com/83502.html
-
-Clarkson, K.L., K. Mehlhorn, and R. Seidel, "Four results on randomized 
-incremental construction," Computational Geometry: Theory and Applications,
-vol. 3, p. 185-211, 1993.
-
-Preparata, F. and M. Shamos, Computational
-Geometry, Springer-Verlag, New York, 1985.
-
-.PP
-.SH AUTHORS
-.nf
-  C. Bradford Barber                    Hannu Huhdanpaa
-  bradb@qhull.org                    hannu@qhull.org
-  
-                    c/o The Geometry Center
-                    University of Minnesota
-                    400 Lind Hall
-                    207 Church Street S.E.
-                    Minneapolis, MN 55455
-
-.fi
-
-.SH ACKNOWLEDGEMENTS
-
-A special thanks to Albert Marden, Victor Milenkovic, the Geometry Center,
-Harvard University, and Endocardial Solutions, Inc. for supporting this work.
-
-The software was developed under National Science Foundation grants
-NSF/DMS-8920161 and NSF-CCR-91-15793 750-7504.  David Dobkin guided
-the original work at Princeton University.  
-If you find it useful, please let us know.
-
-The Geometry Center is supported by grant DMS-8920161 from the National 
-Science Foundation, by grant DOE/DE-FG02-92ER25137 from the Department 
-of Energy, by the University of Minnesota, and by Minnesota Technology, Inc.
-
-Qhull is available from http://www.qhull.org
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.txt
deleted file mode 100644
index f3b2f88f7db800a691935555888372bc4bb8e059..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qhull.txt
+++ /dev/null
@@ -1,1263 +0,0 @@
-
-
-
-qhull(1)						 qhull(1)
-
-
-NAME
-       qhull  -	convex hull, Delaunay triangulation, Voronoi dia-
-       gram, halfspace intersection about a point, hull volume, facet area
-
-SYNOPSIS
-       qhull- compute convex hulls and related structures
-	   input (stdin): dimension, #points, point coordinates
-	   first comment (non-numeric) is listed in the	summary
-	   halfspace: use dim plus one with offsets after coefficients
-
-       options (qh-quick.htm):
-	   d	  - Delaunay triangulation by lifting points to	a paraboloid
-	   v	  - Voronoi diagram via	the Delaunay triangulation
-	   H1,1	  - Halfspace intersection about [1,1,0,...]
-	   d Qu	  - Furthest-site Delaunay triangulation (upper	convex hull)
-	   v Qu	  - Furthest-site Voronoi diagram
-	   QJ	  - Joggle the input to	avoid precision	problems
-	   .	  - concise list of all	options
-	   -	  - one-line description of all	options
-
-       Output options (subset):
-	   FA	  - compute total area and volume
-	   Fx	  - extreme points (convex hull	vertices)
-	   G	  - Geomview output (2-d, 3-d and 4-d)
-	   Fp	  - halfspace intersection coordinates
-	   m	  - Mathematica	output (2-d and	3-d)
-	   n	  - normals with offsets
-	   o	  - OFF	file format (if	Voronoi, outputs regions)
-	   TO file- output results to file, may	be enclosed in single quotes
-	   f	  - print all fields of	all facets
-	   s	  - summary of results (default)
-	   Tv	  - verify result: structure, convexity, and point inclusion
-	   p	  - vertex coordinates
-	   i	  - vertices incident to each facet
-
-       example:
-	   rbox	1000 s | qhull Tv s FA
-
-	- html manual:	  index.htm
-	- installation:	  README.txt
-	- see also:	  COPYING.txt, REGISTER.txt, Changes.txt
-	- WWW:	<http://www.qhull.org>
-        - CVS:  <http://savannah.gnu.org/projects/qhull/>
-        - mirror: <http://www6.uniovi.es/ftp/pub/mirrors/geom.umn.edu/software/ghindex.html>
-	- news:	<http://www.qhull.org/news>
-	- Geomview:  <http://www.geomview.org>
-	- news group:	  <news:comp.graphics.algorithms>
-	- FAQ:	     <http://exaflop.org/docs/cgafaq/cga6.html>
-	- email:	  qhull@qhull.org
-	- bug reports:	  qhull_bug@qhull.org
-
-
-
-
-Geometry Center		     2003/12/30			1
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       The sections are:
-	- INTRODUCTION
-	- DESCRIPTION, a description of	Qhull
-	- IMPRECISION, how Qhull handles imprecision
-	- OPTIONS
-	-    Input and output options
-	-    Additional	input/output formats
-	-    Precision options
-	-    Geomview options
-	-    Print options
-	-    Qhull options
-	-    Trace options
-	- BUGS
-	- E-MAIL
-	- SEE ALSO
-	- AUTHORS
-	- ACKNOWLEGEMENTS
-
-       This man	page briefly describes all Qhull options.  Please
-       report  any  mismatches	with  Qhull's  html  manual  (qh-
-       man.htm).
-
-
-
-INTRODUCTION
-       Qhull  is  a  general  dimension	code for computing convex
-       hulls, Delaunay triangulations, Voronoi diagram,	furthest-
-       site  Voronoi  diagram,	furthest-site Delaunay triangula-
-       tions, and halfspace  intersections  about  a  point.   It
-       implements  the Quickhull algorithm for computing the con-
-       vex hull.  Qhull	handles	round-off  errors  from	 floating
-       point arithmetic.  It can approximate a convex hull.
-
-       The  program includes options for hull volume, facet area,
-       partial hulls, input transformations, randomization, trac-
-       ing,  multiple  output  formats,	and execution statistics.
-       The program can be called from  within  your  application.
-       You  can	 view  the  results  in	 2-d,  3-d  and	 4-d with
-       Geomview.
-
-
-DESCRIPTION
-       The format of input is the following: first line	 contains
-       the  dimension,	second	line contains the number of input
-       points, and point coordinates follow.  The  dimension  and
-       number  of  points  can	be  reversed.	Comments and line
-       breaks are ignored.  A comment starts with  a  non-numeric
-       character  and  continues  to  the end of line.	The first
-       comment is reported in summaries	 and  statistics.   Error
-       reporting is better if there is one point per line.
-
-       The  default printout option is a short summary.	There are
-       many other output formats.
-
-
-
-
-Geometry Center		     2003/12/30			2
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       Qhull implements	the Quickhull algorithm	for convex  hull.
-       This  algorithm	combines the 2-d Quickhull algorithm with
-       the n-d beneath-beyond algorithm	[c.f., Preparata & Shamos
-       '85].   It  is  similar	to  the	 randomized algorithms of
-       Clarkson	and others  [Clarkson  et  al.	'93].	The  main
-       advantages  of Quickhull	are output sensitive performance,
-       reduced space requirements, and automatic handling of pre-
-       cision problems.
-
-       The data	structure produced by Qhull consists of	vertices,
-       ridges, and facets.  A vertex is	a point	of the input set.
-       A ridge is a set	of d vertices and two neighboring facets.
-       For example in 3-d, a ridge is an edge of the  polyhedron.
-       A facet is a set	of ridges, a set of neighboring	facets,	a
-       set of incident vertices, and a hyperplane equation.   For
-       simplicial  facets, the ridges are defined by the vertices
-       and neighboring facets.	When Qhull merges two facets,  it
-       produces	 a  non-simplicial facet.  A non-simplicial facet
-       has more	than d neighbors and  may  share  more	than  one
-       ridge with a neighbor.
-
-
-IMPRECISION
-       Since Qhull uses	floating point arithmetic, roundoff error
-       may occur for each calculation.	This causes  problems for
-       most geometric algorithms.
-
-       Qhull  automatically  sets  option  'C-0' in 2-d, 3-d, and
-       4-d, or option 'Qx' in 5-d and higher.  These options han-
-       dle  precision problems by merging facets.  Alternatively,
-       use option 'QJ' to joggle the input.
-
-       With 'C-0', Qhull  merges  non-convex  facets  while  con-
-       structing  the hull. The	remaining facets are clearly con-
-       vex. With 'Qx',	Qhull  merges  coplanar	 horizon  facets,
-       flipped	facets,	concave	facets and duplicated ridges.  It
-       merges coplanar facets after constructing the hull.   With
-       'Qx',  coplanar points may be missed, but it appears to be
-       unlikely.
-
-       To guarantee triangular	output,	 joggle	 the  input  with
-       option 'QJ'.  Facet merging will	not occur.
-
-OPTIONS
-       To  get	a  list	 of  the  most important options, execute
-       'qhull' by itself.  To get a  complete  list  of	 options,
-       execute	'qhull	-'.   To  get a	complete, concise list of
-       options,	execute	'qhull .'.
-
-       Options can be in any order.  Capitalized options take  an
-       argument	 (except  'PG'	and 'F'	options).  Single letters
-       are used	for output formats and precision constants.   The
-       other options are grouped into menus for	other output for-
-       mats ('F'), Geomview output ('G'), printing  ('P'),  Qhull
-
-
-
-Geometry Center		     2003/12/30			3
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       control ('Q'), and tracing ('T').
-
-       Main options:
-
-       default
-	      Compute  the  convex  hull  of  the  input  points.
-	      Report a summary of the result.
-
-       d      Compute the Delaunay triangulation by  lifting  the
-	      input  points  to	 a  paraboloid.	  The  'o' option
-	      prints the  input	 points	 and  facets.	The  'QJ'
-	      option  guarantees  triangular  output.	The  'Ft'
-	      option prints a triangulation.  It adds points (the
-	      centrums)	to non-simplicial facets.
-
-       v      Compute  the Voronoi diagram from	the Delaunay tri-
-	      angulation.  The 'p' option prints the Voronoi ver-
-	      tices.   The 'o' option prints the Voronoi vertices
-	      and the vertices in each Voronoi region.	It  lists
-	      regions  in  site	id order.  The 'Fv' option prints
-	      each ridge of the	Voronoi	diagram.   The	first  or
-	      zero'th  vertex indicates	the infinity vertex.  Its
-	      coordinates are qh_INFINITE  (-10.101).	It  indi-
-	      cates   unbounded	 Voronoi  regions  or  degenerate
-	      Delaunay triangles.
-
-       Hn,n,...
-	      Compute halfspace	intersection  about  [n,n,0,...].
-	      The  input  is  a	 set of	halfspaces defined in the
-	      same format as 'n', 'Fo',	and 'Fi'.   Use	 'Fp'  to
-	      print  the  intersection	points.	 Use 'Fv' to list
-	      the intersection points for  each	 halfspace.   The
-	      other  output formats display the	dual convex hull.
-
-	      The point	[n,n,n,...] is a feasible point	 for  the
-	      halfspaces, i.e.,	a point	that is	inside all of the
-	      halfspaces (Hx+b <=  0).	 The  default  coordinate
-	      value is 0.
-
-	      The  input may start with	a feasible point.  If so,
-	      use 'H' by itself.  The input starts with	a  feasi-
-	      ble  point  when the first number	is the dimension,
-	      the second number	is "1",	and the	coordinates  com-
-	      plete  a line.  The 'FV' option produces a feasible
-	      point for	a convex hull.
-
-       d Qu   Compute the  furthest-site  Delaunay  triangulation
-	      from  the	upper convex hull.  The	'o' option prints
-	      the input	points and facets.  The	'QJ' option guar-
-	      antees triangular	otuput.	 You can also use facets.
-
-       v Qu   Compute the furthest-site	Voronoi	diagram.  The 'p'
-	      option prints the	Voronoi	vertices.  The 'o' option
-	      prints the Voronoi vertices  and	the  vertices  in
-
-
-
-Geometry Center		     2003/12/30			4
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      each  Voronoi  region.  The 'Fv' option prints each
-	      ridge of the Voronoi diagram.  The first or zero'th
-	      vertex  indicates	 the infinity vertex at	infinity.
-	      Its  coordinates	are  qh_INFINITE  (-10.101).   It
-	      indicates	 unbounded Voronoi regions and degenerate
-	      Delaunay triangles.
-
-       Qt     Triangulated output.
-
-
-       Input/Output options:
-
-       f      Print out	all facets and all fields of each  facet.
-
-       G      Output  the hull in Geomview format.  For	imprecise
-	      hulls, Geomview displays the inner and outer  hull.
-	      Geomview can also	display	points,	ridges,	vertices,
-	      coplanar	points,	 and  facet  intersections.   See
-	      below for	a list of options.
-
-	      For  Delaunay triangulations, 'G'	displays the cor-
-	      responding paraboloid.  For halfspace intersection,
-	      'G' displays the dual polytope.
-
-       i      Output the incident vertices for each facet.  Qhull
-	      prints the number	of facets followed  by	the  ver-
-	      tices  of	 each  facet.	One  facet is printed per
-	      line.  The numbers are the  0-relative  indices  of
-	      the  corresponding  input	 points.   The facets are
-	      oriented.
-
-	      In 4-d and higher, Qhull	triangulates  non-simpli-
-	      cial  facets.   Each  apex  (the first vertex) is	a
-	      created point that corresponds to	the facet's  cen-
-	      trum.  Its index is greater than the indices of the
-	      input points.  Each base corresponds to  a  simpli-
-	      cial  ridge  between two facets.	To print the ver-
-	      tices without triangulation, use option 'Fv'.
-
-       m      Output  the  hull	 in  Mathematica  format.   Qhull
-	      writes  a	 Mathematica  file for 2-d and 3-d convex
-	      hulls and	for 2-d	Delaunay triangulations.    Qhull
-	      produces a list of objects that you can assign to	a
-	      variable in Mathematica,	for  example:  "list=  <<
-	      <outputfilename> ". If the object	is 2-d,	it can be
-	      visualized  by  "Show[Graphics[list]]  ".	 For  3-d
-	      objects the command is "Show[Graphics3D[list]]".
-
-       n      Output  the  normal equation for each facet.  Qhull
-	      prints the dimension  (plus  one),  the  number  of
-	      facets,  and  the	 normals  for  each  facet.   The
-	      facet's offset follows its normal	coefficients.
-
-       o      Output the facets	in OFF file format.  Qhull prints
-	      the  dimension, number of	points,	number of facets,
-	      and  number  of  ridges.	 Then	it   prints   the
-
-
-
-Geometry Center		     2003/12/30			5
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      coordinates  of  the  input points and the vertices
-	      for each facet.  Each facet is on	a separate  line.
-	      The  first  number  is the number	of vertices.  The
-	      remainder	are  the  indices  of  the  corresponding
-	      points.  The vertices are	oriented in 2-d, 3-d, and
-	      in simplicial facets.
-
-	      For 2-d Voronoi diagrams,	the vertices  are  sorted
-	      by adjacency, but	not oriented.  In 3-d and higher,
-	      the Voronoi vertices are sorted by index.	 See  the
-	      'v' option for more information.
-
-       p      Output the coordinates of	each vertex point.  Qhull
-	      prints the dimension, the	number of points, and the
-	      coordinates  for	each  vertex.	With the 'Gc' and
-	      'Gi' options, it also prints coplanar and	 interior
-	      points.	For Voronoi diagrams, it prints	the coor-
-	      dinates of each Voronoi vertex.
-
-       s      Print a summary to stderr.  If  no  output  options
-	      are  specified  at  all,	a summary goes to stdout.
-	      The summary lists	the number of input  points,  the
-	      dimension,  the  number  of  vertices in the convex
-	      hull, the	number of facets in the	convex hull,  the
-	      number of	good facets (if	'Pg'), and statistics.
-
-	      The  last	 two  statistics  (if needed) measure the
-	      maximum distance from a point or vertex to a facet.
-	      The number in parenthesis	(e.g., 2.1x) is	the ratio
-	      between the maximum  distance  and  the  worst-case
-	      distance due to merging two simplicial facets.
-
-
-       Precision options
-
-       An     Maximum  angle  given  as	 a  cosine.  If	the angle
-	      between a	pair of	facet normals is greater than n, Qhull
-	      merges  one  of the facets into a	neighbor.  If 'n'
-	      is negative, Qhull tests angles after  adding  each
-	      point  to	 the hull (pre-merging).  If 'n' is posi-
-	      tive, Qhull tests	 angles	 after	constructing  the
-	      hull  (post-merging).   Both  pre- and post-merging
-	      can be defined.
-
-	      Option 'C0' or 'C-0' is set  if  the  corresponding
-	      'Cn' or 'C-n' is not set.	 If 'Qx' is set, then 'A-
-	      n' and 'C-n' are checked after  the  hull	 is  con-
-	      structed and before 'An' and 'Cn'	are checked.
-
-       Cn     Centrum  radius.	If a centrum is	less than n below
-	      a	 neighboring  facet,  Qhull  merges  one  of  the
-	      facets.	If  'n'	 is negative or	'-0', Qhull tests
-	      and merges facets	after adding each  point  to  the
-	      hull.   This  is	called	"pre-merging".	If 'n' is
-
-
-
-Geometry Center		     2003/12/30			6
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      positive,	Qhull  tests  for  convexity  after  con-
-	      structing	the hull ("post-merging").  Both pre- and
-	      post-merging can be defined.
-
-	      For 5-d and higher, 'Qx' should be used instead  of
-	      'C-n'.  Otherwise, most or all facets may	be merged
-	      together.
-
-       En     Maximum roundoff error for distance computations.
-
-       Rn     Randomly perturb distance	computations up	to +/-	n
-	      *	 max_coord.  This option perturbs every	distance,
-	      hyperplane, and angle computation.  To use time  as
-	      the random number	seed, use option 'QR-1'.
-
-       Vn     Minimum  distance	 for  a	 facet	to be visible.	A
-	      facet is visible if the distance from the	point  to
-	      the facet	is greater than	'Vn'.
-
-	      Without  merging,	the default value for 'Vn' is the
-	      round-off	error ('En').  With merging, the  default
-	      value  is	 the  pre-merge	centrum	('C-n')	in 2-d or
-	      3--d, or three times that	in other dimensions.   If
-	      the outside width	is specified ('Wn'), the maximum,
-	      default value for	'Vn' is	'Wn'.
-
-       Un     Maximum distance below a facet for a  point  to  be
-	      coplanar	to the facet.  The default value is 'Vn'.
-
-       Wn     Minimum outside width  of	 the  hull.   Points  are
-	      added  to	 the convex hull only if they are clearly
-	      outside of a facet.  A point is outside of a  facet
-	      if  its distance to the facet is greater than 'Wn'.
-	      The normal value for 'Wn'	is  'En'.   If	the  user
-	      specifies	 pre-merging  and does not set 'Wn', than
-	      'Wn'  is	set  to	 the  premerge	'Cn'  and  maxco-
-	      ord*(1-An).
-
-
-       Additional input/output formats
-
-       Fa     Print area for each facet.  For Delaunay triangula-
-	      tions, the area is the area of the  triangle.   For
-	      Voronoi  diagrams, the area is the area of the dual
-	      facet.   Use  'PAn'  for	printing  the  n  largest
-	      facets, and option 'PFn' for printing facets larger
-	      than 'n'.
-
-	      The area for non-simplicial facets is  the  sum  of
-	      the areas	for each ridge to the centrum.	 Vertices
-	      far below	the facet's hyperplane are ignored.   The
-	      reported	area  may  be significantly less than the
-	      actual area.
-
-
-
-
-Geometry Center		     2003/12/30			7
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       FA     Compute the total	area and volume	for  option  's'.
-	      It  is  an  approximation	for non-simplicial facets
-	      (see 'Fa').
-
-       Fc     Print coplanar points for	each facet.   The  output
-	      starts  with the number of facets.  Then each facet
-	      is printed one per line.	Each line is  the  number
-	      of  coplanar  points  followed  by  the  point ids.
-	      Option 'Qi' includes  the	 interior  points.   Each
-	      coplanar	point (interior	point) is assigned to the
-	      facet it is furthest above (resp., least below).
-
-       FC     Print centrums for each facet.  The  output  starts
-	      with  the	 dimension  followed  by  the  number  of
-	      facets.  Then each facet centrum	is  printed,  one
-	      per line.
-
-       Fd     Read  input  in cdd format with homogeneous points.
-	      The input	starts with comments.  The first  comment
-	      is  reported  in	the summary.  Data starts after	a
-	      "begin" line.  The  next	line  is  the  number  of
-	      points  followed	by  the	dimension+1 and	"real" or
-	      "integer".  Then the  points  are	 listed	  with	a
-	      leading  "1" or "1.0".  The data ends with an "end"
-	      line.
-
-	      For halfspaces ('Fd Hn,n,...'), the input	format is
-	      the  same.   Each	halfspace starts with its offset.
-	      The sign of the offset is	the opposite  of  Qhull's
-	      convention.
-
-       FD     Print  normals ('n', 'Fo', 'Fi') or points ('p') in
-	      cdd format.  The first line  is  the  command  line
-	      that  invoked  Qhull.   Data  starts with	a "begin"
-	      line.  The next line is the number  of  normals  or
-	      points  followed	by  the	 dimension+1  and "real".
-	      Then the normals or points  are  listed	with  the
-	      offset  before  the  coefficients.   The offset for
-	      points is	1.0.  The  offset  for	normals	 has  the
-	      opposite sign.  The data ends with an "end" line.
-
-       FF     Print  facets  (as  in  'f')  without  printing the
-	      ridges.
-
-       Fi     Print inner planes for each facet.  The inner plane
-	      is below all vertices.
-
-       Fi     Print  separating	 hyperplanes  for  bounded, inner
-	      regions of the Voronoi diagram.  The first line  is
-	      the  number  of  ridges.	 Then  each hyperplane is
-	      printed, one per line.  A	line starts with the num-
-	      ber  of  indices	and floats.  The first pair lists
-	      adjacent input sites, the	next  d	 floats	 are  the
-	      normalized coefficients for the hyperplane, and the
-
-
-
-Geometry Center		     2003/12/30			8
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      last float is the	offset.	 The hyperplane	 is  ori-
-	      ented  toward  verify that the hyperplanes are per-
-	      pendicular  bisectors.   Use  'Fo'  for	unbounded
-	      regions,	and  'Fv'  for	the corresponding Voronoi
-	      vertices.
-
-       FI     Print facet identifiers.
-
-       Fm     Print number of merges for each facet.  At most 511
-	      merges  are  reported  for  a facet.  See	'PMn' for
-	      printing the facets with the most	merges.
-
-       FM     Output  the  hull	 in  Maple format.  See 'm'
-
-       Fn     Print neighbors for each facet.  The output  starts
-	      with  the	 number	 of  facets.   Then each facet is
-	      printed one per line.  Each line is the  number  of
-	      neighbors	 followed  by an index for each	neighbor.
-	      The indices match	the other facet	output formats.
-
-	      A	negative index indicates an unprinted  facet  due
-	      to  printing  only  good	facets ('Pg').	It is the
-	      negation of the  facet's	id  (option  'FI').   For
-	      example,	negative  indices are used for facets "at
-	      infinity"	in the Delaunay	triangulation.
-
-       FN     Print vertex neighbors or	coplanar facet	for  each
-	      point.   The  first  line	 is the	number of points.
-	      Then each	point is printed, one per line.	  If  the
-	      point  is	coplanar, the line is "1" followed by the
-	      facet's id.  If the point	is not a selected vertex,
-	      the  line	is "0".	 Otherwise, each line is the num-
-	      ber of  neighbors	 followed  by  the  corresponding
-	      facet indices (see 'Fn').
-
-       Fo     Print  outer planes for each facet in the	same for-
-	      mat as 'n'.  The outer plane is above all	points.
-
-       Fo     Print separating hyperplanes for	unbounded,  outer
-	      regions  of the Voronoi diagram.	The first line is
-	      the number of  ridges.   Then  each  hyperplane  is
-	      printed, one per line.  A	line starts with the num-
-	      ber of indices and floats.  The  first  pair  lists
-	      adjacent	input  sites,  the  next d floats are the
-	      normalized coefficients for the hyperplane, and the
-	      last  float  is the offset.  The hyperplane is ori-
-	      ented toward verify that the hyperplanes	are  per-
-	      pendicular   bisectors.	 Use   'Fi'  for  bounded
-	      regions, and 'Fv'	 for  the  corresponding  Voronoi
-	      vertices.
-
-       FO     List  all	 options to stderr, including the default
-	      values.  Additional 'FO's	are printed to stdout.
-
-       Fp     Print points for	halfspace  intersections  (option
-	      'Hn,n,...').   Each  intersection	 corresponds to	a
-
-
-
-Geometry Center		     2003/12/30			9
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      facet of the dual	polytope.  The	"infinity"  point
-	      [-10.101,-10.101,...]    indicates   an	unbounded
-	      intersection.
-
-       FP     For each coplanar	point ('Qc') print the	point  id
-	      of  the nearest vertex, the point	id, the	facet id,
-	      and the distance.
-
-       FQ     Print command used for qhull and input.
-
-       Fs     Print a summary.	The first line	consists  of  the
-	      number  of  integers  ("7"), followed by the dimen-
-	      sion, the	number of points, the number of	vertices,
-	      the  number  of  facets,	the  number  of	 vertices
-	      selected for output, the number of facets	 selected
-	      for  output, the number of coplanar points selected
-	      for output.
-
-	      The second line consists of  the	number	of  reals
-	      ("2"),  followed by the maxmimum offset to an outer
-	      plane and	and minimum offset  to	an  inner  plane.
-	      Roundoff	is included.  Later versions of	Qhull may
-	      produce additional integers or reals.
-
-       FS     Print the	size of	the hull.  The	first  line  con-
-	      sists  of	the number of integers ("0").  The second
-	      line consists of the number of  reals  ("2"),  fol-
-	      lowed  by	 the total facet area, and the total vol-
-	      ume.  Later versions of  Qhull  may  produce  addi-
-	      tional integers or reals.
-
-	      The  total volume	measures the volume of the inter-
-	      section of the halfspaces	defined	 by  each  facet.
-	      Both  area  and  volume are approximations for non-
-	      simplicial facets.  See option 'Fa'.
-
-       Ft     Print a triangulation with added	points	for  non-
-	      simplicial facets.  The first line is the	dimension
-	      and the second line is the number	of points and the
-	      number of	facets.	 The points follow, one	per line,
-	      then the facets follow as	a list of point	 indices.
-	      With option points include the point-at-infinity.
-
-       Fv     Print  vertices  for each	facet.	The first line is
-	      the number of facets.  Then each facet is	 printed,
-	      one  per line.  Each line	is the number of vertices
-	      followed by the corresponding point ids.	 Vertices
-	      are listed in the	order they were	added to the hull
-	      (the last	one is first).
-
-       Fv     Print all	ridges of a Voronoi diagram.   The  first
-	      line  is	the number of ridges.  Then each ridge is
-	      printed, one per line.  A	line starts with the num-
-	      ber  of  indices.	  The  first  pair lists adjacent
-
-
-
-Geometry Center		     2003/12/30		       10
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      input sites, the	remaining  indices  list  Voronoi
-	      vertices.	  Vertex  '0'  indicates  the  vertex-at-
-	      infinity (i.e., an unbounded  ray).   In	3-d,  the
-	      vertices	are  listed  in	order.	See 'Fi' and 'Fo'
-	      for separating hyperplanes.
-
-       FV     Print average vertex.  The average vertex	is a fea-
-	      sible point for halfspace	intersection.
-
-       Fx     List  extreme points (vertices) of the convex hull.
-	      The first	line is	the number of points.  The  other
-	      lines give the indices of	the corresponding points.
-	      The first	point is '0'.  In 2-d, the  points  occur
-	      in counter-clockwise order; otherwise they occur in
-	      input order.   For  Delaunay  triangulations,  'Fx'
-	      lists  the  extreme points of the	input sites.  The
-	      points are unordered.
-
-
-       Geomview	options
-
-       G      Produce a	file for viewing with Geomview.	  Without
-	      other  options,  Qhull displays edges in 2-d, outer
-	      planes in	3-d, and ridges	in 4-d.	 A ridge  can  be
-	      explicit or implicit.  An	explicit ridge is a dim-1
-	      dimensional simplex between two  facets.	 In  4-d,
-	      the explicit ridges are triangles.  When displaying
-	      a	ridge in 4-d, Qhull projects the ridge's vertices
-	      to  one  of  its	facets'	hyperplanes.  Use 'Gh' to
-	      project ridges to	the intersection of  both  hyper-
-	      planes.
-
-       Ga     Display all input	points as dots.
-
-       Gc     Display  the  centrum  for  each facet in	3-d.  The
-	      centrum is defined by a green radius sitting  on	a
-	      blue  plane.   The plane corresponds to the facet's
-	      hyperplane.  The radius  is  defined  by	'C-n'  or
-	      'Cn'.
-
-       GDn    Drop  dimension  n  in 3-d or 4-d.  The result is	a
-	      2-d or 3-d object.
-
-       Gh     Display hyperplane intersections in  3-d	and  4-d.
-	      In  3-d, the intersection	is a black line.  It lies
-	      on two  neighboring  hyperplanes	(c.f.,	the  blue
-	      squares  associated with centrums	('Gc')).  In 4-d,
-	      the ridges are projected	to  the	 intersection  of
-	      both hyperplanes.
-
-       Gi     Display  inner  planes  in  2-d and 3-d.	The inner
-	      plane of a facet is below	all of its vertices.   It
-	      is  parallel  to the facet's hyperplane.	The inner
-	      plane's color is the opposite (1-r,1-g,1-b) of  the
-
-
-
-Geometry Center		     2003/12/30		       11
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      outer  plane.  Its edges are determined by the ver-
-	      tices.
-
-       Gn     Do not display inner or outer planes.  By	 default,
-	      Geomview displays	the precise plane (no merging) or
-	      both inner  and  output  planes  (merging).   Under
-	      merging,	Geomview does not display the inner plane
-	      if the the difference between inner  and	outer  is
-	      too small.
-
-       Go     Display  outer  planes  in  2-d and 3-d.	The outer
-	      plane of a facet is above	all input points.  It  is
-	      parallel	to  the	facet's	hyperplane.  Its color is
-	      determined by the	facet's	normal,	and its	edges are
-	      determined by the	vertices.
-
-       Gp     Display  coplanar	 points	and vertices as	radii.	A
-	      radius defines a	ball  which  corresponds  to  the
-	      imprecision  of  the point.  The imprecision is the
-	      maximum of the roundoff error, the centrum  radius,
-	      and  maxcoord  * (1-An).	It is at least 1/20'th of
-	      the maximum coordinate, and ignores post-merging if
-	      pre-merging is done.
-
-       Gr     Display  ridges  in  3-d.	 A ridge connects the two
-	      vertices that are	 shared	 by  neighboring  facets.
-	      Ridges are always	displayed in 4-d.
-
-       Gt     A	 3-d  Delaunay	triangulation looks like a convex
-	      hull with	interior facets.  Option 'Gt' removes the
-	      outside  ridges to reveal	the outermost facets.  It
-	      automatically sets options 'Gr' and 'GDn'.
-
-       Gv     Display vertices as spheres.   The  radius  of  the
-	      sphere  corresponds to the imprecision of	the data.
-	      See 'Gp' for determining the radius.
-
-
-       Print options
-
-       PAn    Only the n  largest  facets  are	marked	good  for
-	      printing.	  Unless  'PG'	is set,	'Pg' is	automati-
-	      cally set.
-
-       Pdk:n  Drop facet from output  if  normal[k]  <=	 n.   The
-	      option 'Pdk' uses	the default value of 0 for n.
-
-       PDk:n  Drop  facet  from	 output	 if  normal[k] >= n.  The
-	      option 'PDk' uses	the default value of 0 for n.
-
-       PFn    Only facets with area at least 'n' are marked  good
-	      for printing.  Unless 'PG' is set, 'Pg' is automat-
-	      ically set.
-
-
-
-
-Geometry Center		     2003/12/30		       12
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       Pg     Print only good facets.  A  good	facet  is  either
-	      visible from a point (the	'QGn' option) or includes
-	      a	point (the 'QVn'  option).   It	 also  meets  the
-	      requirements  of	'Pdk'  and 'PDk' options.  Option
-	      'Pg' is automatically set	 for  options  'PAn'  and
-	      'PFn'.
-
-       PG     Print neighbors of good facets.
-
-       PMn    Only  the	 n facets with the most	merges are marked
-	      good for printing.  Unless 'PG'  is  set,	 'Pg'  is
-	      automatically set.
-
-       Po     Force output despite precision problems.	Verify  ('Tv')  does	not check
-	      coplanar points.	Flipped	facets are  reported  and
-	      concave  facets  are  counted.   If  'Po'	 is used,
-	      points are not partitioned into flipped facets  and
-	      a	 flipped  facet	 is  always  visible  to a point.
-	      Also, if an error	occurs before the  completion  of
-	      Qhull  and  tracing  is  not active, 'Po'	outputs	a
-	      neighborhood of the erroneous facets (if any).
-
-       Pp     Do not report precision problems.
-
-
-       Qhull control options
-
-       Qbk:0Bk:0
-	      Drop dimension  k	 from  the  input  points.   This
-	      allows  the user to take convex hulls of sub-dimen-
-	      sional objects.  It happens before the Delaunay and
-	      Voronoi transformation.
-
-       QbB    Scale the	input points to	fit the	unit cube.  After
-	      scaling, the lower bound will be -0.5 and	the upper
-	      bound  +0.5  in  all  dimensions.	 For Delaunay and
-	      Voronoi diagrams,	scaling	happens	after  projection
-	      to the paraboloid.  Under	precise	arithmetic, scal-
-	      ing does not change  the	topology  of  the  convex
-	      hull.
-
-       Qbb    Scale  the last coordinate to [0,	m] where m is the
-	      maximum absolute value of	 the  other  coordinates.
-	      For  Delaunay and	Voronoi	diagrams, scaling happens
-	      after projection to  the	paraboloid.   It  reduces
-	      roundoff error for inputs	with integer coordinates.
-	      Under precise arithmetic,	scaling	does  not  change
-	      the topology of the convex hull.
-
-       Qbk:n  Scale  the  k'th	coordinate  of	the input points.
-	      After scaling, the lower bound of	the input  points
-	      will be n.  'Qbk'	scales to -0.5.
-
-
-
-Geometry Center		     2003/12/30		       13
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       QBk:n  Scale  the  k'th	coordinate  of	the input points.
-	      After scaling, the upper bound will  be  n.   'QBk'
-	      scales to	+0.5.
-
-       Qc     Keep  coplanar points with the nearest facet.  Out-
-	      put formats 'p', 'f', 'Gp', 'Fc',	 'FN',	and  'FP'
-	      will print the points.
-
-       Qf     Partition	points to the furthest outside facet.
-
-       Qg     Only  build  good	 facets.   With	 the 'Qg' option,
-	      Qhull will only build those facets that it needs to
-	      determine	 the  good  facets  in	the  output.  See
-	      'QGn', 'QVn', and	'PdD' for defining  good  facets,
-	      and  'Pg'	 and  'PG'  for	 printing good facets and
-	      their neighbors.
-
-       QGn    A	facet is good (see 'Qg'	and 'Pg') if it	is  visi-
-	      ble  from	point n.  If n < 0, a facet is good if it
-	      is not visible from point	n.  Point n is not  added
-	      to  the  hull  (unless 'TCn' or 'TPn').  With rbox,
-	      use the 'Pn,m,r' option to define	 your  point;  it
-	      will be point 0 (QG0).
-
-       Qi     Keep  interior points with the nearest facet.  Out-
-	      put formats 'p', 'f', 'Gp', 'FN',	 'FP',	and  'Fc'
-	      will print the points.
-
-       QJn    Joggle  each  input  coordinate  by adding a random
-	      number in	[-n,n].	 If  a	precision  error  occurs,
-	      then  qhull  increases  n	and tries again.  It does
-	      not increase n beyond a certain value, and it stops
-	      after  a	certain	 number	of attempts [see user.h].
-	      Option 'QJ' selects a default  value  for	 n.   The
-	      output will be simplicial.  For Delaunay triangula-
-	      tions, 'QJn' sets	'Qbb' to scale the  last  coordi-
-	      nate (not	if 'Qbk:n' or 'QBk:n' is set).  See also
-	      'Qt'.
-
-       Qm     Only  process  points that would otherwise increase
-	      max_outside.  Other points are treated as	 coplanar
-	      or interior points.
-
-       Qr     Process  random  outside points instead of furthest
-	      ones.  This makes	Qhull equivalent to  the  random-
-	      ized  incremental	 algorithms.   CPU  time  is  not
-	      reported since the randomization is inefficient.
-
-       QRn    Randomly rotate the input	points.	 If n=0, use time
-	      as  the  random  number seed.  If	n>0, use n as the
-	      random number seed.  If n=-1, don't rotate but  use
-	      time  as the random number seed.	For Delaunay tri-
-	      angulations ('d' and 'v'), rotate	 about	the  last
-	      axis.
-
-
-
-
-Geometry Center		     2003/12/30		       14
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       Qs     Search all points	for the	initial	simplex.
-
-       Qt     Triangulated output.  Triangulate non-simplicial 
-              facets.
-
-       Qv     Test  vertex  neighbors  for  convexity after post-
-	      merging.	To use the 'Qv'	option,	you also need  to
-	      set a merge option (e.g.,	'Qx' or	'C-0').
-
-       QVn    A	 good facet (see 'Qg' and 'Pg')	includes point n.
-	      If n<0, then a good facet	does not include point n.
-	      The point	is either in the initial simplex or it is
-	      the first	point added to the  hull.   Option  'QVn'
-	      may not be used with merging.
-
-       Qx     Perform  exact merges while building the hull.  The
-	      "exact" merges are merging a point into a	 coplanar
-	      facet  (defined  by 'Vn',	'Un', and 'C-n'), merging
-	      concave facets, merging duplicate	ridges,	and merg-
-	      ing  flipped  facets.   Coplanar	merges	and angle
-	      coplanar merges ('A-n') are not performed.  Concav-
-	      ity testing is delayed until a merge occurs.
-
-	      After  the  hull	is built, all coplanar merges are
-	      performed	(defined by 'C-n' and 'A-n'), then  post-
-	      merges are performed (defined by 'Cn' and	'An').
-
-       Qz     Add  a  point  "at  infinity"  that  is  above  the
-	      paraboloid for Delaunay triangulations and  Voronoi
-	      diagrams.	  This	reduces	 precision  problems  and
-	      allows the triangulation of cospherical points.
-
-
-       Qhull experiments and speedups
-
-       Q0     Turn off pre-merging as  a  default  option.   With
-	      'Q0'/'Qx'	 and  without explicit pre-merge options,
-	      Qhull ignores precision issues  while  constructing
-	      the  convex  hull.   This	 may  lead  to	precision
-	      errors.  If so, a	descriptive warning is generated.
-
-       Q1     With  'Q1',  Qhull  sorts	merges by type (coplanar,
-	      angle coplanar, concave) instead of by angle.
-
-       Q2     With 'Q2', Qhull merges all facets at once  instead
-	      of  using	 independent  sets  of	merges	and  then
-	      retesting.
-
-       Q3     With 'Q3', Qhull does  not  remove  redundant  ver-
-	      tices.
-
-       Q4     With 'Q4', Qhull avoids merges of	an old facet into
-	      a	new facet.
-
-       Q5     With 'Q5', Qhull does not	correct	outer  planes  at
-	      the  end.	 The maximum outer plane is used instead.
-
-
-
-
-Geometry Center		     2003/12/30		       15
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       Q6     With 'Q6', Qhull	does  not  pre-merge  concave  or
-	      coplanar facets.
-
-       Q7     With  'Q7',  Qhull  processes facets in depth-first
-	      order instead of breadth-first order.
-
-       Q8     With 'Q8'	and merging, Qhull does	not retain  near-
-	      interior	points	for adjusting outer planes.  'Qc'
-	      will probably retain all points that  adjust  outer
-	      planes.
-
-       Q9     With 'Q9', Qhull processes the furthest of all out-
-	      side sets	at each	iteration.
-
-       Q10    With 'Q10', Qhull does not use special processing 
-	      for narrow distributions.
-
-       Q11    With 'Q11', Qhull copies normals and recomputes 
-	      centrums for tricoplanar facets.
-
-       Trace options
-
-       Tn     Trace at level n.	 Qhull	includes  full	execution
-	      tracing.	 'T-1'	traces	events.	  'T1' traces the
-	      overall execution	of the program.	  'T2'	and  'T3'
-	      trace overall execution and geometric and	topologi-
-	      cal  events.   'T4'  traces  the	algorithm.   'T5'
-	      includes	information  about  memory allocation and
-	      Gaussian elimination.
-
-       Tc     Check frequently during execution.  This will catch
-	      most inconsistency errors.
-
-       TCn    Stop  Qhull  after  building the cone of new facets
-	      for point	n.  The	output for 'f' includes	the  cone
-	      and the old hull.	 See also 'TVn'.
-
-       TFn    Report  progress	whenever  more	than n facets are
-	      created During post-merging, 'TFn' reports progress
-	      after more than n/2 merges.
-
-       TI file
-	      Input data from 'file'.  The filename may not include 
-		  spaces or quotes.
-
-       TO file
-	      Output results to	'file'.	 The name may be enclosed
-	      in single	quotes.
-
-       TPn    Turn on tracing when point n is added to the  hull.
-          Trace partitions of point n. If used with TWn, turn off
-          tracing after adding point n to the hull.
-
-       TRn    Rerun  qhull  n  times.  Usually used with 'QJn' to
-	      determine	the probability	that a given joggle  will
-	      fail.
-
-       Ts     Collect  statistics  and print to	stderr at the end
-	      of execution.
-
-       Tv     Verify the convex	hull.  This checks the	topologi-
-	      cal  structure,  facet  convexity, and point inclu-
-	      sion.  If	precision problems occurred,  facet  con-
-	      vexity  is  tested whether or not	'Tv' is	selected.
-	      Option 'Tv'  does	 not  check  point  inclusion  if
-
-
-
-Geometry Center		     2003/12/30		       16
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-	      forcing output with 'Po',	or if 'Q5' is set.
-
-	      For  point  inclusion  testing, Qhull verifies that
-	      all points are below all outer planes  (facet->max-
-	      outside).	 Point inclusion is exhaustive if merging
-	      or if the	facet-point product is small enough; oth-
-	      erwise  Qhull  verifies  each point with a directed
-	      search (qh_findbest).
-
-	      Point inclusion testing occurs after producing out-
-	      put.   It	 prints	a message to stderr unless option
-	      'Pp' is used.  This allows the  user  to	interrupt
-	      Qhull without changing the output.
-
-       TVn    Stop  Qhull  after  adding point n.  If n	< 0, stop
-	      Qhull before adding point	n.  Output shows the hull
-	      at this time.  See also 'TCn'
-
-       TMn    Turn on tracing at n'th merge.
-
-       TWn    Trace  merge  facets when	the width is greater than
-	      n.
-
-       Tz     Redirect stderr to stdout.
-
-
-BUGS
-       Please	 report	   bugs	    to	   Brad	    Barber     at
-       qhull_bug@qhull.org.
-
-       If Qhull	does not compile, it is	due to an incompatibility
-       between your system and ours.  The first	thing to check is
-       that  your compiler is ANSI standard.  If it is,	check the
-       man page	for the	best options, or  find	someone	 to  help
-       you.  If	you locate the cause of	your problem, please send
-       email since it might help others.
-
-       If Qhull	compiles but crashes on	the test case (rbox  D4),
-       there's	still  incompatibility	between	 your  system and
-       ours.  Typically	it's been due to mem.c and memory  align-
-       ment.   You  can	 use qh_NOmem in mem.h to turn off memory
-       management.  Please let us know if you figure out  how  to
-       fix these problems.
-
-       If  you	do  find  a  problem,  try  to simplify	it before
-       reporting the error.  Try different size	inputs to  locate
-       the  smallest one that causes an	error.	You're welcome to
-       hunt through the	code  using  the  execution  trace  as	a
-       guide.	This  is  especially true if you're incorporating
-       Qhull into your own program.
-
-       When you	do report an error, please attach a data  set  to
-       the  end	of your	message.  This allows us to see	the error
-       for ourselves.  Qhull is	maintained part-time.
-
-
-
-Geometry Center		     2003/12/30		       17
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-E-MAIL
-       Please  send  correspondence  to	 qhull@qhull.org   and
-       report  bugs  to	 qhull_bug@qhull.org.  Let us know how
-       you use Qhull.  If you mention it in a paper, please  send
-       the reference and an abstract.
-
-       If  you would like to get Qhull announcements (e.g., a new
-       version)	and news (any bugs that	get fixed, etc.), let  us
-       know  and  we  will  add	 you to	our mailing list.  If you
-       would like to communicate with other Qhull users, we  will
-       add you to the qhull_users alias.  For Internet news about
-       geometric algorithms and	convex hulls, look at comp.graph-
-       ics.algorithms and sci.math.num-analysis
-
-
-SEE ALSO
-       rbox(1)
-
-       Barber,	C.  B.,	 D.P.  Dobkin,	and  H.T. Huhdanpaa, "The
-       Quickhull Algorithm for Convex Hulls," ACM Trans. on Math-
-       ematical		  Software,	      Dec.	    1996.
-       http://www.acm.org/pubs/citations/journals/toms/1996-22-4/p469-barber/
-       http://citeseer.nj.nec.com/83502.html
-
-
-       Clarkson, K.L., K. Mehlhorn, and	R. Seidel, "Four  results
-       on  randomized  incremental  construction,"  Computational
-       Geometry: Theory	and Applications,  vol.	 3,  p.	 185-211,
-       1993.
-
-       Preparata,  F.  and  M.	Shamos,	 Computational	Geometry,
-       Springer-Verlag,	New York, 1985.
-
-
-
-AUTHORS
-	 C. Bradford Barber		       Hannu Huhdanpaa
-	 bradb@qhull.org		       hannu@qhull.org
-
-			   c/o The Geometry Center
-			   University of Minnesota
-			   400 Lind Hall
-			   207 Church Street S.E.
-			   Minneapolis,	MN 55455
-
-
-
-ACKNOWLEDGEMENTS
-       A special thanks	to Albert Marden, Victor Milenkovic,  the
-       Geometry	Center,	Harvard	University, and	Endocardial Solu-
-       tions, Inc. for supporting this work.
-
-       The software was	developed under	National Science  Founda-
-       tion grants NSF/DMS-8920161 and NSF-CCR-91-15793	750-7504.
-
-
-
-Geometry Center		     2003/12/30		       18
-
-
-
-
-
-qhull(1)						 qhull(1)
-
-
-       David Dobkin guided the original	work at	Princeton Univer-
-       sity.  If you find it useful, please let	us know.
-
-       The Geometry Center is supported	by grant DMS-8920161 from
-       the  National  Science  Foundation,   by	  grant	  DOE/DE-
-       FG02-92ER25137  from the	Department of Energy, by the Uni-
-       versity of Minnesota, and by Minnesota Technology, Inc.
-
-       Qhull is available at http://www.qhull.org
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Geometry Center		     2003/12/30		       19
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qvoron_f.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qvoron_f.htm
deleted file mode 100644
index de64310f8c0da0639bfe18e3939d653ed00b0eb4..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qvoron_f.htm
+++ /dev/null
@@ -1,408 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>qvoronoi Qu -- furthest-site Voronoi diagram</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<a name="TOP"><b>Up</b></a><b>:</b> 
-<a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a>qvoronoi Qu -- furthest-site Voronoi diagram</h1>
-
-<p>The furthest-site Voronoi diagram is the furthest-neighbor map for a set of
-points. Each region contains those points that are further
-from one input site than any other input site.  See the
-survey article by Aurenhammer [<a href="index.htm#aure91">'91</a>]
-and the brief introduction by O'Rourke [<a
-href="index.htm#orou94">'94</a>].  The furthest-site Voronoi diagram is the dual of the <a
-href="qdelau_f.htm">furthest-site Delaunay triangulation</a>.
-</p>
-
-<blockquote>
-<dl>
-    <dt><b>Example:</b> rbox 10 D2 | qvoronoi <a
-        href="qh-optq.htm#Qu">Qu</a>  <a href="qh-opto.htm#s">s</a>
-        <a href="qh-opto.htm#o">o</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d, furthest-site Voronoi diagram of 10
-        random points. Write a summary to the console and the Voronoi
-        regions and vertices to 'result'. The first vertex of the
-        result indicates unbounded regions. Almost all regions
-        are unbounded.</dd>
-</dl>
-
-<dl>
-    <dt><b>Example:</b> rbox r y c G1 D2 | qvoronoi <a
-        href="qh-optq.htm#Qu">Qu</a> 
-        <a href="qh-opto.htm#s">s</a>
-        <a href="qh-optf.htm#Fn">Fn</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d furthest-site Voronoi diagram of a square
-        and a small triangle. Write a summary to the console and the Voronoi
-        vertices for each input site to 'result'. 
-        The origin is the only furthest-site Voronoi vertex.  The
-		negative indices indicate vertices-at-infinity.</dd>
-</dl>
-</blockquote>
-
-<p>
-Qhull computes the furthest-site Voronoi diagram via the <a href="qdelau_f.htm">
-furthest-site Delaunay triangulation</a>.
-Each furthest-site Voronoi vertex is the circumcenter of an upper
-facet of the Delaunay triangulation. Each furthest-site Voronoi
-region corresponds to a vertex of the Delaunay triangulation
-(i.e., an input site).</p>
-
-<p>See <a href="http://www.qhull.org/html/qh-faq.htm#TOC">Qhull FAQ</a> - Delaunay and
-Voronoi diagram questions.</p>
-
-<p>Options '<a href="qh-optq.htm#Qt">Qt</a>' (triangulated output)
-and '<a href="qh-optq.htm#QJn">QJ</a>' (joggled input), may produce
-unexpected results.   Cocircular and cospherical input sites will
-produce duplicate or nearly duplicate furthest-site Voronoi vertices.  See also <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>The 'qvonoroi' program is equivalent to 
-'<a href=qhull.htm#outputs>qhull v</a> <a href=qh-optq.htm#Qbb>Qbb</a>' in 2-d to 3-d, and
-'<a href=qhull.htm#outputs>qhull v</a> <a href=qh-optq.htm#Qbb>Qbb</a> <a href=qh-optq.htm#Qx>Qx</a>' 
-in 4-d and higher.  It disables the following Qhull
-<a href=qh-quick.htm#options>options</a>: <i>d n m v H U Qb 
-QB Qc Qf Qg Qi Qm Qr QR Qv Qx TR E V Fa FA FC Fp FS Ft FV Gt Q0,etc</i>.
-
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-<h3><a href="#TOP">»</a><a name="synopsis">furthest-site qvoronoi synopsis</a></h3>
-<blockquote>
-
-See <a href="qvoronoi.htm#synopsis">qvoronoi synopsis</a>.  The same
-program is used for both constructions.  Use option '<a href="qh-optq.htm#Qu">Qu</a>'
-for furthest-site Voronoi diagrams.
-
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="input">furthest-site qvoronoi
-input</a></h3>
-<blockquote>
-<p>The input data on <tt>stdin</tt> consists of:</p>
-<ul>
-    <li>dimension 
-    <li>number of points</li>
-    <li>point coordinates</li>
-</ul>
-
-<p>Use I/O redirection (e.g., qvoronoi Qu &lt; data.txt), a pipe (e.g., rbox 10 | qvoronoi Qu),
-or the '<a href=qh-optt.htm#TI>TI</a>' option (e.g., qvoronoi TI data.txt Qu).  
-
-<p>For example, this is a square containing four random points.  
-Its furthest-site Voronoi diagram has on vertex and four unbounded,
-separating hyperplanes (i.e., the coordinate axes)
-<p>
-<blockquote>
-<tt>rbox c 4 D2 &gt; data</tt> 
-<blockquote><pre>
-2 RBOX c 4 D2
-8
--0.4999921736307369 -0.3684622117955817
-0.2556053225468894 -0.0413498678629751
-0.0327672376602583 -0.2810408135699488
--0.452955383763607 0.17886471718444
-  -0.5   -0.5
-  -0.5    0.5
-   0.5   -0.5
-   0.5    0.5
-</pre></blockquote>
-
-<p><tt>qvoronoi Qu s Fo &lt; data</tt>
-<blockquote><pre>
-
-Furthest-site Voronoi vertices by the convex hull of 8 points in 3-d:
-
-  Number of Voronoi regions: 8
-  Number of Voronoi vertices: 1
-  Number of non-simplicial Voronoi vertices: 1
-
-Statistics for: RBOX c 4 D2 | QVORONOI Qu s Fo
-
-  Number of points processed: 8
-  Number of hyperplanes created: 20
-  Number of facets in hull: 11
-  Number of distance tests for qhull: 34
-  Number of merged facets: 1
-  Number of distance tests for merging: 107
-  CPU seconds to compute hull (after input):  0
-
-4
-5 4 5      0      1      0
-5 4 6      1      0      0
-5 5 7      1      0      0
-5 6 7      0      1      0
-</pre></blockquote>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a> <a name="outputs">furthest-site qvoronoi
-outputs</a></h3>
-<blockquote>
-
-<p>These options control the output of furthest-site Voronoi diagrams.</p>
-<blockquote>
-
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>furthest-site Voronoi vertices</b></dd>
-    <dt><a href="qh-opto.htm#p">p</a></dt>
-    <dd>print the coordinates of the furthest-site Voronoi vertices.  The first line
-	is the dimension.  The second line is the number of vertices.  Each
-	remaining line is a furthest-site Voronoi vertex.  The points-in-square example
-	has one furthest-site Voronoi vertex at the origin.</dd>
-    <dt><a href="qh-optf.htm#Fn">Fn</a></dt>
-    <dd>list the neighboring furthest-site Voronoi vertices for each furthest-site Voronoi
-        vertex.  The first line is the number of Voronoi vertices.  Each
-		remaining line starts with the number of neighboring vertices.  Negative indices (e.g., <em>-1</em>) indicate vertices 
-	outside of the Voronoi diagram.  In the points-in-square example, the 
-		Voronoi vertex at the origin has four neighbors-at-infinity.</dd>
-    <dt><a href="qh-optf.htm#FN">FN</a></dt>
-    <dd>list the furthest-site Voronoi vertices for each furthest-site Voronoi region.  The first line is 
-	the number of Voronoi regions.  Each remaining line starts with the
-	number of Voronoi vertices.  Negative indices (e.g., <em>-1</em>) indicate vertices 
-	outside of the Voronoi diagram.
-	In the points-in-square example, all regions share the Voronoi vertex
-	at the origin.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>furthest-site Voronoi regions</b></dd>
-    <dt><a href="qh-opto.htm#o">o</a></dt>
-    <dd>print the furthest-site Voronoi regions in OFF format.  The first line is the 
-	dimension.  The second line is the number of vertices, the number
-	of input sites, and "1".  The third line represents the vertex-at-infinity.
-	Its coordinates are "-10.101".  The next lines are the coordinates
-	of the furthest-site Voronoi vertices.  Each remaining line starts with the number
-	of Voronoi vertices in a Voronoi region.  In 2-d, the vertices are
-listed in adjacency order (unoriented). In 3-d and higher, the
-vertices are listed in numeric order.  In the points-in-square
-	example, each unbounded region includes the Voronoi vertex at
-	the origin.  Lines consisting of <em>0</em> indicate
-	interior input sites.  </dd>
-    <dt><a href="qh-optf.htm#Fi2">Fi</a></dt>
-    <dd>print separating hyperplanes for inner, bounded furthest-site Voronoi
-        regions.  The first number is the number of separating
-		hyperplanes.  Each remaining line starts with <i>3+dim</i>.  The
-		next two numbers are adjacent input sites.  The next <i>dim</i>
-		numbers are the coefficients of the separating hyperplane.  The
-		last number is its offset.  The are no bounded, separating hyperplanes
-		for the points-in-square example.</dd>
-    <dt><a href="qh-optf.htm#Fo2">Fo</a></dt>
-    <dd>print separating hyperplanes for outer, unbounded furthest-site Voronoi
-        regions.  The first number is the number of separating
-		hyperplanes.  Each remaining line starts with <i>3+dim</i>.  The
-		next two numbers are adjacent input sites on the convex hull.  The 
-		next <i>dim</i>
-		numbers are the coefficients of the separating hyperplane.  The
-		last number is its offset.  The points-in-square example has four
-		unbounded, separating hyperplanes.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Input sites</b></dd>
-    <dt><a href="qh-optf.htm#Fv2">Fv</a></dt>
-    <dd>list ridges of furthest-site Voronoi vertices for pairs of input sites.  The
-	first line is the number of ridges.  Each remaining line starts with
-	two plus the number of Voronoi vertices in the ridge.  The next
-	two numbers are two adjacent input sites.  The remaining numbers list
-	the Voronoi vertices.  As with option 'o', a <em>0</em> indicates 
-	the vertex-at-infinity
-	and an unbounded, separating hyperplane.
-	The perpendicular bisector (separating hyperplane)
-	of the input sites is a flat through these vertices.
-	In the points-in-square example, the ridge for each edge of the square
-	is unbounded.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="qh-opto.htm#s">s</a></dt>
-    <dd>print summary of the furthest-site Voronoi diagram. Use '<a
-        href="qh-optf.htm#Fs">Fs</a>' for numeric data.</dd>
-    <dt><a href="qh-opto.htm#i">i</a></dt>
-    <dd>list input sites for each <a href=qdelau_f.htm>furthest-site Delaunay region</a>.  Use option '<a href="qh-optp.htm#Pp">Pp</a>'
-	to avoid the warning.  The first line is the number of regions.  The
-	remaining lines list the input sites for each region.  The regions are
-	oriented.  In the points-in-square example, the square region has four
-	input sites.  In 3-d and higher, report cospherical sites by adding extra points.
-	</dd>
-    <dt><a href="qh-optg.htm#G">G</a></dt>
-    <dd>Geomview output for 2-d furthest-site Voronoi diagrams.</dd>
-	</dl>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a> <a name="controls">furthest-site qvoronoi
-controls</a></h3>
-<blockquote>
-
-<p>These options provide additional control:</p>
-<blockquote>
-
-<dl compact>
-   <dt><a href="qh-optq.htm#Qu">Qu</a></dt>
-    <dd>must be used.</dd>
-    <dt><a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>triangulated output.  If a furthest-site Voronoi vertex is defined by cospherical data, Qhull
-    duplicates the vertex.  For example, if 2-d data is contained in a square, the output
-    will contain two, identical furthest-site Voronoi vertices.</dd>
-    <dt><a href="qh-optq.htm#QJn">QJ</a></dt>
-    <dd>joggle the input to avoid furthest-site Voronoi vertices defined by more
-	than <i>dim+1</i> points.    It is less accurate than triangulated output ('Qt').
-    </dd>
-    <dt><a href="qh-optq.htm#QVn">QVn</a></dt>
-    <dd>select furthest-site Voronoi vertices for input site <em>n</em> </dd>
-    <dt><a href="qh-optt.htm#Tv">Tv</a></dt>
-    <dd>verify result</dd>
-    <dt><a href="qh-optt.htm#TO">TI file</a></dt>
-    <dd>input data from file.  The filename may not use spaces or quotes.</dd>
-    <dt><a href="qh-optt.htm#TO">TO file</a></dt>
-    <dd>output results to file.  Use single quotes if the filename
-	contains spaces (e.g., <tt>TO 'file with spaces.txt'</tt></dd>
-    <dt><a href="qh-optt.htm#TFn">TFn</a></dt>
-    <dd>report progress after constructing <em>n</em> facets</dd>
-    <dt><a href="qh-optp.htm#PDk">PDk:1</a></dt>
-    <dd>include upper and lower facets in the output.  Set <em>k</em>
-        to the last dimension (e.g., 'PD2:1' for 2-d inputs). </dd>
-    <dt><a href="qh-opto.htm#f">f </a></dt>
-    <dd>facet dump.  Print the data structure for each facet (i.e., 
-	furthest-site Voronoi vertex).</dd>
-</dl>
-
-</blockquote>
-</blockquote>
-<h3><a href="#TOP">»</a> <a name="graphics">furthest-site qvoronoi
-graphics</a></h3>
-<blockquote>
-<p>In 2-d, Geomview output ('<a href="qh-optg.htm#G">G</a>')
-displays a furthest-site Voronoi diagram with extra edges to
-close the unbounded furthest-site Voronoi regions. All regions
-will be unbounded.  Since the points-in-box example has only
-one furthest-site Voronoi vertex, the Geomview output is one
-point.</p>
-
-<p>See the <a href="qh-eg.htm#delaunay">Delaunay and Voronoi
-examples</a> for a 2-d example. Turn off normalization (on
-Geomview's 'obscure' menu) when comparing the furthest-site
-Voronoi diagram with the corresponding Voronoi diagram. </p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="notes">furthest-site qvoronoi
-notes</a></h3>
-<blockquote>
-
-<p>See <a href="qvoronoi.htm#notes">Voronoi notes</a>.</p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="conventions">furthest-site qvoronoi conventions</a></h3>
-<blockquote>
-
-<p>The following terminology is used for furthest-site Voronoi
-diagrams in Qhull. The underlying structure is a furthest-site
-Delaunay triangulation from a convex hull in one higher
-dimension. Upper facets of the Delaunay triangulation correspond
-to vertices of the furthest-site Voronoi diagram. Vertices of the
-furthest-site Delaunay triangulation correspond to input sites.
-They also define regions of the furthest-site Voronoi diagram.
-All vertices are extreme points of the input sites. See <a
-href="qconvex.htm#conventions">qconvex conventions</a>, <a
-href="qdelau_f.htm#conventions">furthest-site delaunay
-conventions</a>, and <a href="index.htm#structure">Qhull's data structures</a>.</p>
-
-<ul>
-    <li><em>input site</em> - a point in the input (one dimension
-        lower than a point on the convex hull)</li>
-    <li><em>point</em> - a point has <i>d+1</i> coordinates. The
-        last coordinate is the sum of the squares of the input
-        site's coordinates</li>
-    <li><em>vertex</em> - a point on the upper facets of the
-        paraboloid. It corresponds to a unique input site. </li>
-    <li><em>furthest-site Delaunay facet</em> - an upper facet of the
-        paraboloid. The last coefficient of its normal is
-		clearly positive.</li>
-    <li><em>furthest-site Voronoi vertex</em> - the circumcenter
-        of a furthest-site Delaunay facet</li>
-    <li><em>furthest-site Voronoi region</em> - the region of
-        Euclidean space further from an input site than any other
-        input site. Qhull lists the furthest-site Voronoi
-        vertices that define each furthest-site Voronoi region.</li>
-    <li><em>furthest-site Voronoi diagram</em> - the graph of the
-        furthest-site Voronoi regions with the ridges (edges)
-        between the regions.</li>
-    <li><em>infinity vertex</em> - the Voronoi vertex for
-        unbounded furthest-site Voronoi regions in '<a
-        href="qh-opto.htm#o">o</a>' output format. Its
-        coordinates are <em>-10.101</em>.</li>
-    <li><em>good facet</em> - an furthest-site Voronoi vertex with
-        optional restrictions by '<a href="qh-optq.htm#QVn">QVn</a>',
-        etc.</li>
-</ul>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">furthest-site qvoronoi options</a></h3>
-<blockquote>
-
-See <a href="qvoronoi.htm#options">qvoronoi options</a>.    The same
-program is used for both constructions.  Use option '<a href="qh-optq.htm#Qu">Qu</a>'
-for furthest-site Voronoi diagrams.
-</blockquote>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qvoronoi.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qvoronoi.htm
deleted file mode 100644
index 322a54e15a18c96db604dcabc8533f8136c7a5a0..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/qvoronoi.htm
+++ /dev/null
@@ -1,673 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>qvoronoi -- Voronoi diagram</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<a name="TOP"><b>Up</b></a><b>:</b> 
-<a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/delaunay.html"><img
-src="qh--dt.gif" alt="[delaunay]" align="middle" width="100"
-height="100"></a>qvoronoi -- Voronoi diagram</h1>
-
-<p>The Voronoi diagram is the nearest-neighbor map for a set of
-points.  Each region contains those points that are nearer
-one input site than any other input site.  It has many useful properties and applications. See the
-survey article by Aurenhammer [<a href="index.htm#aure91">'91</a>]
-and the detailed introduction by O'Rourke [<a
-href="index.htm#orou94">'94</a>]. The Voronoi diagram is the
-dual of the <a href=qdelaun.htm>Delaunay triangulation</a>. </p>
-
-<blockquote>
-<dl>
-    <dt><b>Example:</b> rbox 10 D3 | qvoronoi <a href="qh-opto.htm#s">s</a>
-        <a href="qh-opto.htm#o">o</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 3-d Voronoi diagram of 10 random points. Write a
-        summary to the console and the Voronoi vertices and
-        regions to 'result'. The first vertex of the result
-        indicates unbounded regions.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox r y c G0.1 D2 | qvoronoi 
-	     <a href="qh-opto.htm#s">s</a>
-        <a href="qh-opto.htm#o">o</a> <a href="qh-optt.htm#TO">TO
-        result</a></dt>
-    <dd>Compute the 2-d Voronoi diagram of a triangle and a small
-        square. Write a
-        summary to the console and Voronoi vertices and regions
-        to 'result'. Report a single Voronoi vertex for
-        cocircular input sites. The first vertex of the result
-        indicates unbounded regions. The origin is the Voronoi
-        vertex for the square.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox r y c G0.1 D2 | qvoronoi <a href="qh-optf.htm#Fv2">Fv</a>
-        <a href="qh-optt.htm#TO">TO result</a></dt>
-    <dd>Compute the 2-d Voronoi diagram of a triangle and a small
-        square. Write a
-        summary to the console and the Voronoi ridges to
-        'result'. Each ridge is the perpendicular bisector of a
-        pair of input sites. Vertex &quot;0&quot; indicates
-        unbounded ridges. Vertex &quot;8&quot; is the Voronoi
-        vertex for the square.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt><b>Example:</b> rbox r y c G0.1 D2 | qvoronoi <a href="qh-optf.htm#Fi2">Fi</a></dt>
-    <dd>Print the bounded, separating hyperplanes for the 2-d Voronoi diagram of a 
-	      triangle and a small
-        square.  Note the four hyperplanes (i.e., lines) for Voronoi vertex
-		&quot;8&quot;.  It is at the origin.
-		</dd>
-</dl>
-</blockquote>
-
-<p>Qhull computes the Voronoi diagram via the <a href="qdelaun.htm">Delaunay
-triangulation</a>. Each Voronoi
-vertex is the circumcenter of a facet of the Delaunay
-triangulation. Each Voronoi region corresponds to a vertex (i.e., input site) of the
-Delaunay triangulation. </p>
-
-<p>Qhull outputs the Voronoi vertices for each Voronoi region. With 
-option '<a href="qh-optf.htm#Fv2">Fv</a>',
-it lists all ridges of the Voronoi diagram with the corresponding
-pairs of input sites. With 
-options '<a href="qh-optf.htm#Fi2">Fi</a>' and '<a href="qh-optf.htm#Fo2">Fo</a>',
-it lists the bounded and unbounded separating hyperplanes.
-You can also output a single Voronoi region
-for further processing [see <a href="#graphics">graphics</a>].</p>
-
-<p>See <a href="http://www.qhull.org/html/qh-faq.htm#TOC">Qhull FAQ</a> - Delaunay and
-Voronoi diagram questions.</p>
-
-<p>Options '<a href="qh-optq.htm#Qt">Qt</a>' (triangulated output)
-and '<a href="qh-optq.htm#QJn">QJ</a>' (joggled input) may produce
-unexpected results.   Cocircular and cospherical input sites will
-produce duplicate or nearly duplicate Voronoi vertices.  See also <a
-href="qh-impre.htm#joggle">Merged facets or joggled input</a>. </p>
-
-<p>The 'qvonoroi' program is equivalent to 
-'<a href=qhull.htm#outputs>qhull v</a> <a href=qh-optq.htm#Qbb>Qbb</a>' in 2-d to 3-d, and
-'<a href=qhull.htm#outputs>qhull v</a> <a href=qh-optq.htm#Qbb>Qbb</a> <a href=qh-optq.htm#Qx>Qx</a>' 
-in 4-d and higher.  It disables the following Qhull
-<a href=qh-quick.htm#options>options</a>: <i>d n v Qbb QbB Qf Qg Qm 
-Qr QR Qv Qx Qz TR E V Fa FA FC FD FS Ft FV Gt Q0,etc</i>.
-
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-<h3><a href="#TOP">»</a><a name="synopsis">qvoronoi synopsis</a></h3>
-
-<pre>
-qvoronoi- compute the Voronoi diagram.
-    input (stdin): dimension, number of points, point coordinates
-    comments start with a non-numeric character
-
-options (qh-voron.htm):
-    Qu   - compute furthest-site Voronoi diagram
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-    Tv   - verify result: structure, convexity, and in-circle test
-    .    - concise list of all options
-    -    - one-line description of all options
-
-output options (subset):
-    s    - summary of results (default)
-    p    - Voronoi vertices
-    o    - OFF file format (dim, Voronoi vertices, and Voronoi regions)
-    FN   - count and Voronoi vertices for each Voronoi region
-    Fv   - Voronoi diagram as Voronoi vertices between adjacent input sites
-    Fi   - separating hyperplanes for bounded regions, 'Fo' for unbounded
-    G    - Geomview output (2-d only)
-    QVn  - Voronoi vertices for input point n, -n if not
-    TO file- output results to file, may be enclosed in single quotes
-
-examples:
-rbox c P0 D2 | qvoronoi s o         rbox c P0 D2 | qvoronoi Fi
-rbox c P0 D2 | qvoronoi Fo          rbox c P0 D2 | qvoronoi Fv
-rbox c P0 D2 | qvoronoi s Qu Fv     rbox c P0 D2 | qvoronoi Qu Fo
-rbox c G1 d D2 | qvoronoi s p       rbox c G1 d D2 | qvoronoi Qt s p
-rbox c P0 D2 | qvoronoi s Fv QV0
-</pre>
-
-<h3><a href="#TOP">»</a><a name="input">qvoronoi input</a></h3>
-<blockquote>
-The input data on <tt>stdin</tt> consists of:
-<ul>
-    <li>dimension 
-    <li>number of points</li>
-    <li>point coordinates</li>
-</ul>
-
-<p>Use I/O redirection (e.g., qvoronoi &lt; data.txt), a pipe (e.g., rbox 10 | qvoronoi),
-or the '<a href=qh-optt.htm#TI>TI</a>' option (e.g., qvoronoi TI data.txt).  
-
-<p>For example, this is four cocircular points inside a square.  Their Voronoi
-diagram has nine vertices and eight regions.  Notice the Voronoi vertex
-at the origin, and the Voronoi vertices (on each axis) for the four 
-sides of the square.
-<p>
-<blockquote>
-<tt>rbox s 4 W0 c G1 D2 &gt; data</tt> 
-<blockquote><pre>
-2 RBOX s 4 W0 c D2
-8
--0.4941988586954018 -0.07594397977563715
--0.06448037284989526 0.4958248496365813
-0.4911154367094632 0.09383830681375946
--0.348353580869097 -0.3586778257652367
-    -1     -1
-    -1      1
-     1     -1
-     1      1
-</pre></blockquote>
-
-<p><tt>qvoronoi s p &lt; data</tt>
-<blockquote><pre>
-
-Voronoi diagram by the convex hull of 8 points in 3-d:
-
-  Number of Voronoi regions: 8
-  Number of Voronoi vertices: 9
-  Number of non-simplicial Voronoi vertices: 1
-
-Statistics for: RBOX s 4 W0 c D2 | QVORONOI s p
-
-  Number of points processed: 8
-  Number of hyperplanes created: 18
-  Number of facets in hull: 10
-  Number of distance tests for qhull: 33
-  Number of merged facets: 2
-  Number of distance tests for merging: 102
-  CPU seconds to compute hull (after input): 0.094
-
-2
-9
-4.217546450968612e-17 1.735507986399734
--8.402566836762659e-17 -1.364368854147395
-0.3447488772716865 -0.6395484723719818
-1.719446929853986 2.136555906154247e-17
-0.4967882915039657 0.68662371396699
--1.729928876283549 1.343733067524222e-17
--0.8906163241424728 -0.4594150543829102
--0.6656840313875723 0.5003013793414868
--7.318364664277155e-19 -1.188217818408333e-16
-</pre></blockquote>
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a> <a name="outputs">qvoronoi
-outputs</a></h3>
-<blockquote>
-
-<p>These options control the output of Voronoi diagrams.</p>
-<blockquote>
-
-<dl compact>
-    <dt>&nbsp;</dt>
-    <dd><b>Voronoi vertices</b></dd>
-    <dt><a href="qh-opto.htm#p">p</a></dt>
-    <dd>print the coordinates of the Voronoi vertices.  The first line
-	is the dimension.  The second line is the number of vertices.  Each
-	remaining line is a Voronoi vertex.</dd>
-    <dt><a href="qh-optf.htm#Fn">Fn</a></dt>
-    <dd>list the neighboring Voronoi vertices for each Voronoi
-        vertex.  The first line is the number of Voronoi vertices.  Each
-		remaining line starts with the number of neighboring vertices.  
-		Negative vertices (e.g., <em>-1</em>) indicate vertices 
-	outside of the Voronoi diagram.
-     In the circle-in-box example, the 
-		Voronoi vertex at the origin has four neighbors.</dd>
-    <dt><a href="qh-optf.htm#FN">FN</a></dt>
-    <dd>list the Voronoi vertices for each Voronoi region.  The first line is 
-	the number of Voronoi regions.  Each remaining line starts with the
-	number of Voronoi vertices.  Negative indices (e.g., <em>-1</em>) indicate vertices 
-	outside of the Voronoi diagram.
-	In the circle-in-box example, the four bounded regions are defined by four
-	Voronoi vertices.</dd>
-
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Voronoi regions</b></dd>
-    <dt><a href="qh-opto.htm#o">o</a></dt>
-    <dd>print the Voronoi regions in OFF format.  The first line is the 
-	dimension.  The second line is the number of vertices, the number
-	of input sites, and "1".  The third line represents the vertex-at-infinity.
-	Its coordinates are "-10.101".  The next lines are the coordinates
-	of the Voronoi vertices.  Each remaining line starts with the number
-	of Voronoi vertices in a Voronoi region.  In 2-d, the vertices are
-listed in adjacency order (unoriented). In 3-d and higher, the
-vertices are listed in numeric order.  In the circle-in-square
-	example, each bounded region includes the Voronoi vertex at
-	the origin.  Lines consisting of <em>0</em> indicate
-	coplanar input sites or '<a href="qh-optq.htm#Qz">Qz</a>'.  </dd>
-    <dt><a href="qh-optf.htm#Fi2">Fi</a></dt>
-    <dd>print separating hyperplanes for inner, bounded Voronoi
-        regions.  The first number is the number of separating
-		hyperplanes.  Each remaining line starts with <i>3+dim</i>.  The
-		next two numbers are adjacent input sites.  The next <i>dim</i>
-		numbers are the coefficients of the separating hyperplane.  The
-		last number is its offset.  Use '<a href="qh-optt.htm#Tv">Tv</a>' to verify that the
-hyperplanes are perpendicular bisectors. It will list relevant
-statistics to stderr. </dd>
-    <dt><a href="qh-optf.htm#Fo2">Fo</a></dt>
-    <dd>print separating hyperplanes for outer, unbounded Voronoi
-        regions.  The first number is the number of separating
-		hyperplanes.  Each remaining line starts with <i>3+dim</i>.  The
-		next two numbers are adjacent input sites on the convex hull.  The 
-		next <i>dim</i>
-		numbers are the coefficients of the separating hyperplane.  The
-		last number is its offset.  Use '<a href="qh-optt.htm#Tv">Tv</a>' to verify that the
-hyperplanes are perpendicular bisectors. It will list relevant
-statistics to stderr,</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>Input sites</b></dd>
-    <dt><a href="qh-optf.htm#Fv2">Fv</a></dt>
-    <dd>list ridges of Voronoi vertices for pairs of input sites.  The
-	first line is the number of ridges.  Each remaining line starts with
-	two plus the number of Voronoi vertices in the ridge.  The next
-	two numbers are two adjacent input sites.  The remaining numbers list
-	the Voronoi vertices.  As with option 'o', a <em>0</em> indicates 
-	the vertex-at-infinity
-	and an unbounded, separating hyperplane.
-	The perpendicular bisector (separating hyperplane)
-	of the input sites is a flat through these vertices.
-	In the circle-in-square example, the ridge for each edge of the square
-	is unbounded.</dd>
-    <dt><a href="qh-optf.htm#Fc">Fc</a></dt>
-    <dd>list coincident input sites for each Voronoi vertex.
-	The first line is the number of vertices.  The remaining lines start with 
-	the number of coincident sites and deleted vertices.  Deleted vertices
-	indicate highly degenerate input (see'<A href="qh-optf.htm#Fs">Fs</a>').
-	A coincident site is assigned to one Voronoi
-	vertex.  Do not use '<a href="qh-optq.htm#QJn">QJ</a>' with 'Fc'; the joggle will separate
-	coincident sites.</dd>
-    <dt><a href="qh-optf.htm#FP">FP</a></dt>
-    <dd>print coincident input sites with distance to
-        nearest site (i.e., vertex). The first line is the 
-	number of coincident sites.  Each remaining line starts with the point ID of
-	an input site, followed by the point ID of a coincident point, its vertex, and distance.
-        Includes deleted vertices which
-	indicate highly degenerate input (see'<A href="qh-optf.htm#Fs">Fs</a>').  
-	Do not use '<a href="qh-optq.htm#QJn">QJ</a>' with 'FP'; the joggle will separate
-	coincident sites.</dd>
-    <dt>&nbsp;</dt>
-    <dt>&nbsp;</dt>
-    <dd><b>General</b></dd>
-    <dt><a href="qh-opto.htm#s">s</a></dt>
-    <dd>print summary of the Voronoi diagram. Use '<a
-        href="qh-optf.htm#Fs">Fs</a>' for numeric data.</dd>
-    <dt><a href="qh-opto.htm#i">i</a></dt>
-    <dd>list input sites for each <a href=qdelaun.htm>Delaunay region</a>.  Use option '<a href="qh-optp.htm#Pp">Pp</a>'
-	to avoid the warning.  The first line is the number of regions.  The
-	remaining lines list the input sites for each region.  The regions are
-	oriented.  In the circle-in-square example, the cocircular region has four
-	edges.  In 3-d and higher, report cospherical sites by adding extra points.
-	</dd>
-    <dt><a href="qh-optg.htm#G">G</a></dt>
-    <dd>Geomview output for 2-d Voronoi diagrams.</dd>
-	</dl>
-</blockquote>
-</blockquote>
-<h3><a href="#TOP">»</a> <a name="controls">qvoronoi
-controls</a></h3>
-<blockquote>
-
-<p>These options provide additional control:</p>
-<blockquote>
-
-<dl compact>
-    <dt><a href="qh-optq.htm#Qt">Qt</a></dt>
-    <dd>triangulated output.  If a Voronoi vertex is defined by cospherical data, Qhull
-    duplicates the vertex.  For example, if the data contains a square, the output
-    will contain two copies of the Voronoi vertex.</dd>
-    <dt><a href="qh-optq.htm#QJn">QJ</a></dt>
-    <dd>joggle the input to avoid Voronoi vertices defined by more
-	than <i>dim+1</i> points.    It is less accurate than triangulated output ('Qt').
-    </dd>
-   <dt><a href="qh-optq.htm#Qu">Qu</a></dt>
-    <dd>compute the <a href="qvoron_f.htm">furthest-site Voronoi diagram</a>.</dd>
-    <dt><a href="qh-optq.htm#QVn">QVn</a></dt>
-    <dd>select Voronoi vertices for input site <em>n</em> </dd>
-    <dt><a href="qh-optq.htm#Qz">Qz</a></dt>
-    <dd>add a point above the paraboloid to reduce precision
-        errors. Use it for nearly cocircular/cospherical input
-        (e.g., 'rbox c | qvoronoi Qz').</dd>
-    <dt><a href="qh-optt.htm#Tv">Tv</a></dt>
-    <dd>verify result</dd>
-    <dt><a href="qh-optt.htm#TO">TI file</a></dt>
-    <dd>input data from file.  The filename may not use spaces or quotes.</dd>
-    <dt><a href="qh-optt.htm#TO">TO file</a></dt>
-    <dd>output results to file.  Use single quotes if the filename
-	contains spaces (e.g., <tt>TO 'file with spaces.txt'</tt></dd>
-    <dt><a href="qh-optt.htm#TFn">TFn</a></dt>
-    <dd>report progress after constructing <em>n</em> facets</dd>
-    <dt><a href="qh-optp.htm#PDk">PDk:1</a></dt>
-    <dd>include upper and lower facets in the output.  Set <em>k</em>
-        to the last dimension (e.g., 'PD2:1' for 2-d inputs). </dd>
-    <dt><a href="qh-opto.htm#f">f </a></dt>
-    <dd>facet dump.  Print the data structure for each facet (i.e., 
-	Voronoi vertex).</dd>
-</dl>
-
-</blockquote>
-</blockquote>
-<h3><a href="#TOP">»</a> <a name="graphics">qvoronoi
-graphics</a></h3>
-<blockquote>
-
-<p>In 2-d, Geomview output ('<a href="qh-optg.htm#G">G</a>')
-displays a Voronoi diagram with extra edges to close the
-unbounded Voronoi regions. To view the unbounded rays, enclose
-the input points in a square.</p>
-
-<p>You can also view <i>individual</i> Voronoi regions in 3-d. To
-view the Voronoi region for site 3 in Geomview, execute</p>
-
-<blockquote>
-    <p>qvoronoi &lt;data '<a href="qh-optq.htm#QVn">QV3</a>' '<a
-    href="qh-opto.htm#p">p</a>' | qconvex s G &gt;output</p>
-</blockquote>
-
-<p>The <tt>qvoronoi</tt> command returns the Voronoi vertices
-for input site 3.  The <tt>qconvex</tt> command computes their convex hull.
-This is the Voronoi region for input site 3.  Its
-hyperplane normals (qconvex 'n') are the same as the separating hyperplanes
-from options '<a href="qh-optf.htm#Fi">Fi</a>' 
-and '<a href="qh-optf.htm#Fo">Fo</a>' (up to roundoff error).
-
-<p>See the <a href="qh-eg.htm#delaunay">Delaunay and Voronoi
-examples</a> for 2-d and 3-d examples. Turn off normalization (on
-Geomview's 'obscure' menu) when comparing the Voronoi diagram
-with the corresponding Delaunay triangulation. </p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="notes">qvoronoi
-notes</a></h3>
-<blockquote>
-
-<p>You can simplify the Voronoi diagram by enclosing the input
-sites in a large square or cube.  This is particularly recommended
-for cocircular or cospherical input data.</p>
-
-<p>See <a href="#graphics">Voronoi graphics</a> for computing
-the convex hull of a Voronoi region. </p>
-
-<p>Voronoi diagrams do not include facets that are
-coplanar with the convex hull of the input sites.  A facet is
-coplanar if the last coefficient of its normal is
-nearly zero (see <a href="../src/user.h#ZEROdelaunay">qh_ZEROdelaunay</a>).
-
-<p>Unbounded regions can be confusing. For example, '<tt>rbox c |
-qvoronoi Qz o</tt>' produces the Voronoi regions for the vertices
-of a cube centered at the origin. All regions are unbounded. The
-output is </p>
-
-<blockquote>
-    <pre>3
-2 9 1
--10.101 -10.101 -10.101 
-     0      0      0 
-2 0 1
-2 0 1
-2 0 1
-2 0 1
-2 0 1
-2 0 1
-2 0 1
-2 0 1
-0
-</pre>
-</blockquote>
-
-<p>The first line is the dimension. The second line is the number
-of vertices and the number of regions. There is one region per
-input point plus a region for the point-at-infinity added by
-option '<a href="qh-optq.htm#Qz">Qz</a>'. The next two lines
-lists the Voronoi vertices. The first vertex is the infinity
-vertex. It is indicate by the coordinates <em>-10.101</em>. The
-second vertex is the origin. The next nine lines list the
-regions. Each region lists two vertices -- the infinity vertex
-and the origin. The last line is &quot;0&quot; because no region
-is associated with the point-at-infinity. A &quot;0&quot; would
-also be listed for nearly incident input sites. </p>
-
-<p>To use option '<a href="qh-optf.htm#Fv">Fv</a>', add an
-interior point. For example, </p>
-
-<blockquote>
-    <pre>
-rbox c P0 | qvoronoi Fv
-20
-5 0 7 1 3 5
-5 0 3 1 4 5
-5 0 5 1 2 3
-5 0 1 1 2 4
-5 0 6 2 3 6
-5 0 2 2 4 6
-5 0 4 4 5 6
-5 0 8 5 3 6
-5 1 2 0 2 4
-5 1 3 0 1 4
-5 1 5 0 1 2
-5 2 4 0 4 6
-5 2 6 0 2 6
-5 3 4 0 4 5
-5 3 7 0 1 5
-5 4 8 0 6 5
-5 5 6 0 2 3
-5 5 7 0 1 3
-5 6 8 0 6 3
-5 7 8 0 3 5
-</pre>
-</blockquote>
-
-<p>The output consists of 20 ridges and each ridge lists a pair
-of input sites and a triplet of Voronoi vertices. The first eight
-ridges connect the origin ('P0'). The remainder list the edges of
-the cube. Each edge generates an unbounded ray through the
-midpoint. The corresponding separating planes ('Fo') follow each
-pair of coordinate axes. </p>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="conventions">qvoronoi conventions</a></h3>
-<blockquote>
-
-<p>The following terminology is used for Voronoi diagrams in
-Qhull. The underlying structure is a Delaunay triangulation from
-a convex hull in one higher dimension. Facets of the Delaunay
-triangulation correspond to vertices of the Voronoi diagram.
-Vertices of the Delaunay triangulation correspond to input sites.
-They also correspond to regions of the Voronoi diagram. See <a
-href="qconvex.htm#conventions">convex hull conventions</a>, <a
-href="qdelaun.htm#conventions">Delaunay conventions</a>, and
-<a href="index.htm#structure">Qhull's data structures</a>.</p>
-<blockquote>
-
-<ul>
-    <li><em>input site</em> - a point in the input (one dimension
-        lower than a point on the convex hull)</li>
-    <li><em>point</em> - a point has <i>d+1</i> coordinates. The
-        last coordinate is the sum of the squares of the input
-        site's coordinates</li>
-    <li><em>coplanar point</em> - a <em>nearly incident</em>
-        input site</li>
-    <li><em>vertex</em> - a point on the paraboloid. It
-        corresponds to a unique input site. </li>
-    <li><em>point-at-infinity</em> - a point added above the
-        paraboloid by option '<a href="qh-optq.htm#Qz">Qz</a>'</li>
-    <li><em>Delaunay facet</em> - a lower facet of the
-        paraboloid. The last coefficient of its normal is
-		clearly negative.</li>
-    <li><em>Voronoi vertex</em> - the circumcenter of a Delaunay
-        facet</li>
-    <li><em>Voronoi region</em> - the Voronoi vertices for an
-        input site. The region of Euclidean space nearest to an
-        input site.</li>
-    <li><em>Voronoi diagram</em> - the graph of the Voronoi
-        regions. It includes the ridges (i.e., edges) between the
-        regions.</li>
-    <li><em>vertex-at-infinity</em> - the Voronoi vertex that
-        indicates unbounded Voronoi regions in '<a
-        href="qh-opto.htm#o">o</a>' output format. Its
-        coordinates are <em>-10.101</em>.</li>
-    <li><em>good facet</em> - a Voronoi vertex with optional
-        restrictions by '<a href="qh-optq.htm#QVn">QVn</a>', etc.</li>
-</ul>
-
-</blockquote>
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">qvoronoi options</a></h3>
-
-<pre>
-qvoronoi- compute the Voronoi diagram
-    http://www.qhull.org
-
-input (stdin):
-    first lines: dimension and number of points (or vice-versa).
-    other lines: point coordinates, best if one point per line
-    comments:    start with a non-numeric character
-
-options:
-    Qu   - compute furthest-site Voronoi diagram
-    Qt   - triangulated output
-    QJ   - joggle input instead of merging facets
-
-Qhull control options:
-    QJn  - randomly joggle input in range [-n,n]
-    Qs   - search all points for the initial simplex
-    Qz   - add point-at-infinity to Voronoi diagram
-    QGn  - Voronoi vertices if visible from point n, -n if not
-    QVn  - Voronoi vertices for input point n, -n if not
-
-Trace options:
-    T4   - trace at level n, 4=all, 5=mem/gauss, -1= events
-    Tc   - check frequently during execution
-    Ts   - statistics
-    Tv   - verify result: structure, convexity, and in-circle test
-    Tz   - send all output to stdout
-    TFn  - report summary when n or more facets created
-    TI file - input data from file, no spaces or single quotes
-    TO file - output results to file, may be enclosed in single quotes
-    TPn  - turn on tracing when point n added to hull
-     TMn - turn on tracing at merge n
-     TWn - trace merge facets when width > n
-    TVn  - stop qhull after adding point n, -n for before (see TCn)
-     TCn - stop qhull after building cone for point n (see TVn)
-
-Precision options:
-    Cn   - radius of centrum (roundoff added).  Merge facets if non-convex
-     An  - cosine of maximum angle.  Merge facets if cosine > n or non-convex
-           C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge
-    Rn   - randomly perturb computations by a factor of [1-n,1+n]
-    Wn   - min facet width for non-coincident point (before roundoff)
-
-Output formats (may be combined; if none, produces a summary to stdout):
-    s    - summary to stderr
-    p    - Voronoi vertices
-    o    - OFF format (dim, Voronoi vertices, and Voronoi regions)
-    i    - Delaunay regions (use 'Pp' to avoid warning)
-    f    - facet dump
-
-More formats:
-    Fc   - count plus coincident points (by Voronoi vertex)
-    Fd   - use cdd format for input (homogeneous with offset first)
-    FD   - use cdd format for output (offset first)
-    FF   - facet dump without ridges
-    Fi   - separating hyperplanes for bounded Voronoi regions
-    FI   - ID for each Voronoi vertex
-    Fm   - merge count for each Voronoi vertex (511 max)
-    Fn   - count plus neighboring Voronoi vertices for each Voronoi vertex
-    FN   - count and Voronoi vertices for each Voronoi region
-    Fo   - separating hyperplanes for unbounded Voronoi regions
-    FO   - options and precision constants
-    FP   - nearest point and distance for each coincident point
-    FQ   - command used for qvoronoi
-    Fs   - summary: #int (8), dimension, #points, tot vertices, tot facets,
-                    for output: #Voronoi regions, #Voronoi vertices,
-                                #coincident points, #non-simplicial regions
-                    #real (2), max outer plane and min vertex
-    Fv   - Voronoi diagram as Voronoi vertices between adjacent input sites
-    Fx   - extreme points of Delaunay triangulation (on convex hull)
-
-Geomview options (2-d only)
-    Ga   - all points as dots
-     Gp  -  coplanar points and vertices as radii
-     Gv  -  vertices as spheres
-    Gi   - inner planes only
-     Gn  -  no planes
-     Go  -  outer planes only
-    Gc	 - centrums
-    Gh   - hyperplane intersections
-    Gr   - ridges
-    GDn  - drop dimension n in 3-d and 4-d output
-
-Print options:
-    PAn  - keep n largest Voronoi vertices by 'area'
-    Pdk:n - drop facet if normal[k] &lt;= n (default 0.0)
-    PDk:n - drop facet if normal[k] >= n
-    Pg   - print good Voronoi vertices (needs 'QGn' or 'QVn')
-    PFn  - keep Voronoi vertices whose 'area' is at least n
-    PG   - print neighbors of good Voronoi vertices
-    PMn  - keep n Voronoi vertices with most merges
-    Po   - force output.  If error, output neighborhood of facet
-    Pp   - do not report precision problems
-
-    .    - list of all options
-    -    - one line descriptions of all options
-</pre>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis 
-&#149; <a href="#input">in</a>put &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#controls">co</a>ntrols &#149; <a href="#graphics">gr</a>aphics 
-&#149; <a href="#notes">no</a>tes &#149; <a href="#conventions">co</a>nventions 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.htm
deleted file mode 100644
index f039ead1d139ae4a889c733d5fe523b24810360e..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.htm
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>rbox -- generate point distributions</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><b><a name="TOP">Up:</a></b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#examples">ex</a>amples &#149; <a href="#notes">no</a>tes 
-&#149; <a href="#options">op</a>tions
-<hr>
-<!-- Main text of document -->
-<h1><a
-href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/cone.html"><img
-src="qh--cone.gif" alt="[CONE]" align="middle" width="100"
-height="100"></a>rbox -- generate point distributions</h1>
-
-<blockquote>
-       rbox  generates	random or regular points according to the
-       options given, and  outputs  the  points  to  stdout.  The
-       points  are  generated in a cube, unless 's', 'x', or 'y'
-	   are given. 
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="synopsis">rbox synopsis</a></h3>
-<pre>
-rbox- generate various point distributions.  Default is random in cube.
-
-args (any order, space separated):            
-  3000    number of random points in cube, lens, spiral, sphere or grid
-  D3      dimension 3-d
-  c       add a unit cube to the output ('c G2.0' sets size)
-  d       add a unit diamond to the output ('d G2.0' sets size)
-  l       generate a regular 3-d spiral
-  r       generate a regular polygon, ('r s Z1 G0.1' makes a cone)
-  s       generate cospherical points
-  x       generate random points in simplex, may use 'r' or 'Wn'
-  y       same as 'x', plus simplex
-  Pn,m,r  add point [n,m,r] first, pads with 0
-
-  Ln      lens distribution of radius n.  Also 's', 'r', 'G', 'W'.
-  Mn,m,r  lattice (Mesh) rotated by [n,-m,0], [m,n,0], [0,0,r], ...
-          '27 M1,0,1' is {0,1,2} x {0,1,2} x {0,1,2}.  Try 'M3,4 z'.
-  W0.1    random distribution within 0.1 of the cube's or sphere's surface
-  Z0.5 s  random points in a 0.5 disk projected to a sphere
-  Z0.5 s G0.6 same as Z0.5 within a 0.6 gap
-
-  Bn      bounding box coordinates, default 0.5
-  h       output as homogeneous coordinates for cdd
-  n       remove command line from the first line of output
-  On      offset coordinates by n
-  t       use time as the random number seed (default is command line)
-  tn      use n as the random number seed
-  z       print integer coordinates, default 'Bn' is 1e+06
-</pre>
-
-<h3><a href="#TOP">»</a><a name="outputs">rbox outputs</a></h3>
-<blockquote>
-
-The format of the output is the following: first line contains
-       the dimension and a comment, second line contains the 
-	   number of points, and the following lines contain the points,
-       one  point per line. Points are represented by their coordinate values.
-
-<p>For example, <tt>rbox c 10 D2</tt> generates
-<blockquote>
-<pre>
-2 RBOX c 10 D2
-14
--0.4999921736307369 -0.3684622117955817
-0.2556053225468894 -0.0413498678629751
-0.0327672376602583 -0.2810408135699488
--0.452955383763607 0.17886471718444
-0.1792964061529342 0.4346928963760779
--0.1164979223315585 0.01941637230982666
-0.3309653464993139 -0.4654278894564396
--0.4465383649305798 0.02970019358182344
-0.1711493843897706 -0.4923018137852678
--0.1165843490665633 -0.433157762450313
-  -0.5   -0.5
-  -0.5    0.5
-   0.5   -0.5
-   0.5    0.5
-</pre>
-
-</blockquote>
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="examples">rbox examples</a></h3>
-
-<pre>
-       rbox 10
-	      10 random points in the unit cube centered  at  the
-	      origin.
-
-       rbox 10 s D2
-	      10 random points on a 2-d circle.
-
-       rbox 100 W0
-	      100 random points on the surface of a cube.
-
-       rbox 1000 s D4
-	      1000 random points on a 4-d sphere.
-
-       rbox c D5 O0.5
-	      a 5-d hypercube with one corner at the origin.
-
-       rbox d D10
-	      a 10-d diamond.
-
-       rbox x 1000 r W0
-	      100 random points on the surface of a fixed simplex
-
-       rbox y D12
-	      a 12-d simplex.
-
-       rbox l 10
-	      10 random points along a spiral
-
-       rbox l 10 r
-	      10 regular points  along	a  spiral  plus  two  end
-	      points
-
-       rbox 1000 L10000 D4 s
-	      1000 random points on the surface of a narrow lens.
-
-	   rbox 1000 L100000 s G1e-6
-		  1000 random points near the edge of a narrow lens
-
-       rbox c G2 d G3
-	      a cube with coordinates +2/-2 and  a  diamond  with
-	      coordinates +3/-3.
-
-       rbox 64 M3,4 z
-	      a  rotated,  {0,1,2,3} x {0,1,2,3} x {0,1,2,3} lat-
-	      tice (Mesh) of integer points.
-
-       rbox P0 P0 P0 P0 P0
-	      5 copies of the origin in 3-d.  Try 'rbox P0 P0  P0
-	      P0 P0 | qhull QJ'.
-
-       r 100 s Z1 G0.1
-	      two  cospherical	100-gons plus another cospherical
-	      point.
-
-       100 s Z1
-	      a cone of points.
-
-       100 s Z1e-7
-	      a narrow cone of points with many precision errors.
-</pre>
-
-<h3><a href="#TOP">»</a><a name="notes">rbox notes</a></h3>
-<blockquote>
-Some combinations of arguments generate odd results.
-
-</blockquote>
-<h3><a href="#TOP">»</a><a name="options">rbox options</a></h3>
-
-<pre>
-       n      number of points
-
-       Dn     dimension n-d (default 3-d)
-
-       Bn     bounding box coordinates (default 0.5)
-
-       l      spiral distribution, available only in 3-d
-
-       Ln     lens  distribution  of  radius n.  May be used with
-	      's', 'r', 'G', and 'W'.
-
-       Mn,m,r lattice  (Mesh)  rotated	by  {[n,-m,0],	 [m,n,0],
-	      [0,0,r],	...}.	Use  'Mm,n'  for a rigid rotation
-	      with r = sqrt(n^2+m^2).  'M1,0'  is  an  orthogonal
-	      lattice.	 For  example,	'27  M1,0'  is	{0,1,2} x
-	      {0,1,2} x {0,1,2}.
-
-       s      cospherical points randomly generated in a cube and
-	      projected to the unit sphere
-
-       x      simplicial  distribution.   It  is fixed for option
-	      'r'.  May be used with 'W'.
-
-       y      simplicial distribution plus a simplex.	Both  'x'
-	      and 'y' generate the same points.
-
-       Wn     restrict	points	to distance n of the surface of a
-	      sphere or a cube
-
-       c      add a unit cube to the output
-
-       c Gm   add a cube with all combinations of +m  and  -m  to
-	      the output
-
-       d      add a unit diamond to the output.
-
-       d Gm   add a diamond made of 0, +m and -m to the output
-
-       Pn,m,r add point [n,m,r] to the output first.  Pad coordi-
-	      nates with 0.0.
-
-       n      Remove the command line from the first line of out-
-	      put.
-
-       On     offset the data by adding n to each coordinate.
-
-       t      use  time  in  seconds  as  the  random number seed
-	      (default is command line).
-
-       tn     set the random number seed to n.
-
-       z      generate integer coordinates.  Use 'Bn'  to  change
-	      the  range.   The  default  is 'B1e6' for six-digit
-	      coordinates.  In R^4, seven-digit coordinates  will
-	      overflow hyperplane normalization.
-
-       Zn s   restrict points to a disk about the z+ axis and the
-	      sphere (default Z1.0).  Includes the opposite pole.
-	      'Z1e-6'  generates  degenerate  points under single
-	      precision.
-
-       Zn Gm s
-	      same as Zn with an empty center (default G0.5).
-
-       r s D2 generate a regular polygon
-
-       r s Z1 G0.1
-	      generate a regular cone
-</pre>
-
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual</a>: Table of Contents<br>
-<b>To:</b> <a href="qh-quick.htm#programs">Programs</a>
-&#149; <a href="qh-quick.htm#options">Options</a> 
-&#149; <a href="qh-opto.htm#output">Output</a> 
-&#149; <a href="qh-optf.htm#format">Formats</a> 
-&#149; <a href="qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="qh-optp.htm#print">Print</a>
-&#149; <a href="qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="qh-optc.htm#prec">Precision</a> 
-&#149; <a href="qh-optt.htm#trace">Trace</a><br>
-<b>To:</b> <a href="#synopsis">sy</a>nopsis &#149; <a href="#outputs">ou</a>tputs 
-&#149; <a href="#examples">ex</a>amples &#149; <a href="#notes">no</a>tes 
-&#149; <a href="#options">op</a>tions
-<!-- GC common information -->
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="qh--geom.gif"
-align="middle" width="40" height="40"></a><i>The Geometry Center
-Home Page </i></p>
-
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-<br>
-Created: Sept. 25, 1995 --- <!-- hhmts start --> Last modified: August 12, 1998 <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.man b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.man
deleted file mode 100644
index 84ef6e306823f040f35490304d9154faef9c2b71..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.man
+++ /dev/null
@@ -1,176 +0,0 @@
-./"  This is the Unix manual page for rbox, written in nroff, the standard
-./"  manual formatter for Unix systems.  To format it, type
-./"
-./"  nroff -man rbox.man
-./"
-./"  This will print a formatted copy to standard output.  If you want
-./"  to ensure that the output is plain ascii, free of any control
-./"  characters that nroff uses for underlining etc, pipe the output
-./"  through "col -b":
-./"
-./"  nroff -man rbox.man | col -b
-./"
-.TH rbox 1 "August 10, 1998" "Geometry Center"
-.SH NAME
-rbox \- generate point distributions for qhull
-.SH SYNOPSIS
-Command "rbox" (w/o arguments) lists the options.
-.SH DESCRIPTION
-.PP
-rbox generates random or regular points according to the options given, and 
-outputs
-the points to stdout. The points are generated in a cube, unless 's' or
-'k' option is
-given. The format of the output is the following: first line
-contains the dimension and a comment, 
-second line contains the number of points, and the 
-following lines contain the points, one point per line. Points are represented
-by their coordinate values.
-.SH EXAMPLES
-.TP
-rbox 10
-10 random points in the unit cube centered at the origin.
-.TP
-rbox 10 s D2
-10 random points on a 2-d circle.
-.TP
-rbox 100 W0
-100 random points on the surface of a cube.
-.TP
-rbox 1000 s D4
-1000 random points on a 4-d sphere.
-.TP
-rbox c D5 O0.5
-a 5-d hypercube with one corner at the origin.
-.TP
-rbox d D10
-a 10-d diamond.
-.TP 
-rbox x 1000 r W0
-100 random points on the surface of a fixed simplex 
-.TP
-rbox y D12
-a 12-d simplex.
-.TP
-rbox l 10
-10 random points along a spiral
-.TP
-rbox l 10 r
-10 regular points along a spiral plus two end points
-.TP
-rbox 1000 L10000 D4 s
-1000 random points on the surface of a narrow lens.
-.TP
-rbox c G2 d G3
-a cube with coordinates +2/-2 and a diamond with coordinates +3/-3.
-.TP
-rbox 64 M3,4 z
-a rotated, {0,1,2,3} x {0,1,2,3} x {0,1,2,3} lattice (Mesh) of integer points.  
-'rbox 64 M1,0' is orthogonal.
-.TP
-rbox P0 P0 P0 P0 P0
-5 copies of the origin in 3-d.  Try 'rbox P0 P0 P0 P0 P0 | qhull QJ'.
-.TP
-r 100 s Z1 G0.1
-two cospherical 100-gons plus another cospherical point.
-.TP
-100 s Z1
-a cone of points.
-.TP 
-100 s Z1e-7
-a narrow cone of points with many precision errors.
-.SH OPTIONS
-.TP
-n
-number of points
-.TP
-Dn
-dimension n-d (default 3-d)
-.TP
-Bn
-bounding box coordinates (default 0.5)
-.TP
-l
-spiral distribution, available only in 3-d
-.TP
-Ln
-lens distribution of radius n.  May be used with 's', 'r', 'G', and 'W'.
-.TP
-Mn,m,r
-lattice (Mesh) rotated by {[n,-m,0], [m,n,0], [0,0,r], ...}.  
-Use 'Mm,n' for a rigid rotation with r = sqrt(n^2+m^2).  'M1,0' is an 
-orthogonal lattice.  For example, '27 M1,0' is {0,1,2} x {0,1,2} x {0,1,2}. 
-'27 M3,4 z' is a rotated integer lattice.
-.TP
-s
-cospherical points randomly generated in a cube and projected to the unit sphere
-.TP
-x
-simplicial distribution.  It is fixed for option 'r'.  May be used with 'W'.
-.TP
-y
-simplicial distribution plus a simplex.  Both 'x' and 'y' generate the same points.
-.TP
-Wn
-restrict points to distance n of the surface of a sphere or a cube
-.TP
-c
-add a unit cube to the output
-.TP
-c Gm
-add a cube with all combinations of +m and -m to the output
-.TP
-d
-add a unit diamond to the output.
-.TP
-d Gm
-add a diamond made of 0, +m and -m to the output
-.TP
-Pn,m,r
-add point [n,m,r] to the output first.  Pad coordinates with 0.0.
-.TP
-n
-Remove the command line from the first line of output.
-.TP
-On
-offset the data by adding n to each coordinate.
-.TP
-t
-use time in seconds as the random number seed (default is command line).
-.TP
-tn
-set the random number seed to n.
-.TP
-z
-generate integer coordinates.  Use 'Bn' to change the range.  
-The default is 'B1e6' for six-digit coordinates.  In R^4, seven-digit
-coordinates will overflow hyperplane normalization.
-.TP
-Zn s
-restrict points to a disk about the z+ axis and the sphere (default Z1.0). 
-Includes the opposite pole.  'Z1e-6' generates degenerate points under
-single precision.
-.TP
-Zn Gm s
-same as Zn with an empty center (default G0.5). 
-.TP
-r s D2
-generate a regular polygon
-.TP
-r s Z1 G0.1
-generate a regular cone
-.SH BUGS
-Some combinations of arguments generate odd results.
-
-Report bugs to qhull_bug@qhull.org, other correspondence to qhull@qhull.org 
-.SH SEE ALSO
-qhull(1)
-.SH AUTHOR
-.nf
-C. Bradford Barber
-c/o The Geometry Center
-400 Lind Hall
-207 Church Street S.E.
-Minneapolis, MN 55455
-.fi
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.txt
deleted file mode 100644
index bc459525fe97fb3ea9ac062e1eba7f7279f0e733..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/html/rbox.txt
+++ /dev/null
@@ -1,198 +0,0 @@
-
-
-
-rbox(1) 						  rbox(1)
-
-
-NAME
-       rbox - generate point distributions for qhull
-
-SYNOPSIS
-       Command "rbox" (w/o arguments) lists the options.
-
-DESCRIPTION
-       rbox  generates	random or regular points according to the
-       options given, and  outputs  the  points  to  stdout.  The
-       points  are  generated in a cube, unless 's' or given. The
-       format of the output is the following: first line contains
-       the dimension and a comment, second line contains the num-
-       ber of points, and the following lines contain the points,
-       one  point per line. Points are represented by their coor-
-       dinate values.
-
-EXAMPLES
-       rbox 10
-	      10 random points in the unit cube centered  at  the
-	      origin.
-
-       rbox 10 s D2
-	      10 random points on a 2-d circle.
-
-       rbox 100 W0
-	      100 random points on the surface of a cube.
-
-       rbox 1000 s D4
-	      1000 random points on a 4-d sphere.
-
-       rbox c D5 O0.5
-	      a 5-d hypercube with one corner at the origin.
-
-       rbox d D10
-	      a 10-d diamond.
-
-       rbox x 1000 r W0
-	      100 random points on the surface of a fixed simplex
-
-       rbox y D12
-	      a 12-d simplex.
-
-       rbox l 10
-	      10 random points along a spiral
-
-       rbox l 10 r
-	      10 regular points  along	a  spiral  plus  two  end
-	      points
-
-       rbox 1000 L10000 D4 s
-	      1000 random points on the surface of a narrow lens.
-
-       rbox c G2 d G3
-	      a cube with coordinates +2/-2 and  a  diamond  with
-
-
-
-Geometry Center 	 August 10, 1998			1
-
-
-
-
-
-rbox(1) 						  rbox(1)
-
-
-	      coordinates +3/-3.
-
-       rbox 64 M3,4 z
-	      a  rotated,  {0,1,2,3} x {0,1,2,3} x {0,1,2,3} lat-
-	      tice (Mesh) of integer points.
-
-       rbox P0 P0 P0 P0 P0
-	      5 copies of the origin in 3-d.  Try 'rbox P0 P0  P0
-	      P0 P0 | qhull QJ'.
-
-       r 100 s Z1 G0.1
-	      two  cospherical	100-gons plus another cospherical
-	      point.
-
-       100 s Z1
-	      a cone of points.
-
-       100 s Z1e-7
-	      a narrow cone of points with many precision errors.
-
-OPTIONS
-       n      number of points
-
-       Dn     dimension n-d (default 3-d)
-
-       Bn     bounding box coordinates (default 0.5)
-
-       l      spiral distribution, available only in 3-d
-
-       Ln     lens  distribution  of  radius n.  May be used with
-	      's', 'r', 'G', and 'W'.
-
-       Mn,m,r lattice  (Mesh)  rotated	by  {[n,-m,0],	 [m,n,0],
-	      [0,0,r],	...}.	Use  'Mm,n'  for a rigid rotation
-	      with r = sqrt(n^2+m^2).  'M1,0'  is  an  orthogonal
-	      lattice.	 For  example,	'27  M1,0'  is	{0,1,2} x
-	      {0,1,2} x {0,1,2}.
-
-       s      cospherical points randomly generated in a cube and
-	      projected to the unit sphere
-
-       x      simplicial  distribution.   It  is fixed for option
-	      'r'.  May be used with 'W'.
-
-       y      simplicial distribution plus a simplex.	Both  'x'
-	      and 'y' generate the same points.
-
-       Wn     restrict	points	to distance n of the surface of a
-	      sphere or a cube
-
-       c      add a unit cube to the output
-
-       c Gm   add a cube with all combinations of +m  and  -m  to
-	      the output
-
-
-
-Geometry Center 	 August 10, 1998			2
-
-
-
-
-
-rbox(1) 						  rbox(1)
-
-
-       d      add a unit diamond to the output.
-
-       d Gm   add a diamond made of 0, +m and -m to the output
-
-       Pn,m,r add point [n,m,r] to the output first.  Pad coordi-
-	      nates with 0.0.
-
-       n      Remove the command line from the first line of out-
-	      put.
-
-       On     offset the data by adding n to each coordinate.
-
-       t      use  time  in  seconds  as  the  random number seed
-	      (default is command line).
-
-       tn     set the random number seed to n.
-
-       z      generate integer coordinates.  Use 'Bn'  to  change
-	      the  range.   The  default  is 'B1e6' for six-digit
-	      coordinates.  In R^4, seven-digit coordinates  will
-	      overflow hyperplane normalization.
-
-       Zn s   restrict points to a disk about the z+ axis and the
-	      sphere (default Z1.0).  Includes the opposite pole.
-	      'Z1e-6'  generates  degenerate  points under single
-	      precision.
-
-       Zn Gm s
-	      same as Zn with an empty center (default G0.5).
-
-       r s D2 generate a regular polygon
-
-       r s Z1 G0.1
-	      generate a regular cone
-
-BUGS
-       Some combinations of arguments generate odd results.
-
-       Report bugs to  qhull_bug@qhull.org,	other  correspon-
-       dence to qhull@qhull.org
-
-SEE ALSO
-       qhull(1)
-
-AUTHOR
-       C. Bradford Barber
-       c/o The Geometry Center
-       400 Lind Hall
-       207 Church Street S.E.
-       Minneapolis, MN 55455
-
-
-
-
-
-
-
-Geometry Center 	 August 10, 1998			3
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/geom.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/geom.h
deleted file mode 100644
index 6b37268941f66df7a774ca3cdbb0fb22d89611b3..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/geom.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*<html><pre>  -<a                             href="qh-geom.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-  geom.h
-    header file for geometric routines
-
-   see qh-geom.htm and geom.c
-
-   copyright (c) 1993-2003 The Geometry Center
-*/
-
-#ifndef qhDEFgeom
-#define qhDEFgeom 1
-
-/* ============ -macros- ======================== */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="fabs_">-</a>
-
-  fabs_(a)
-    returns the absolute value of a
-*/
-#define fabs_( a ) ((( a ) < 0 ) ? -( a ):( a ))
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="fmax_">-</a>
-
-  fmax_(a,b)
-    returns the maximum value of a and b
-*/
-#define fmax_( a,b )  ( ( a ) < ( b ) ? ( b ) : ( a ) )
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="fmin_">-</a>
-
-  fmin_(a,b)
-    returns the minimum value of a and b
-*/
-#define fmin_( a,b )  ( ( a ) > ( b ) ? ( b ) : ( a ) )
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="maximize_">-</a>
-
-  maximize_(maxval, val)
-    set maxval to val if val is greater than maxval
-*/
-#define maximize_( maxval, val ) {if (( maxval ) < ( val )) ( maxval )= ( val );}
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="minimize_">-</a>
-
-  minimize_(minval, val)
-    set minval to val if val is less than minval
-*/
-#define minimize_( minval, val ) {if (( minval ) > ( val )) ( minval )= ( val );}
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="det2_">-</a>
-
-  det2_(a1, a2,
-        b1, b2)
-
-    compute a 2-d determinate
-*/
-#define det2_( a1,a2,b1,b2 ) (( a1 )*( b2 ) - ( a2 )*( b1 ))
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="det3_">-</a>
-
-  det3_(a1, a2, a3,
-       b1, b2, b3,
-       c1, c2, c3)
-
-    compute a 3-d determinate
-*/
-#define det3_( a1,a2,a3,b1,b2,b3,c1,c2,c3 ) ( ( a1 )*det2_( b2,b3,c2,c3 ) \
-        - ( b1 )*det2_( a2,a3,c2,c3 ) + ( c1 )*det2_( a2,a3,b2,b3 ) )
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="dX">-</a>
-
-  dX( p1, p2 )
-  dY( p1, p2 )
-  dZ( p1, p2 )
-
-    given two indices into rows[],
-
-    compute the difference between X, Y, or Z coordinates
-*/
-#define dX( p1,p2 )  ( *( rows[p1] ) - *( rows[p2] ))
-#define dY( p1,p2 )  ( *( rows[p1]+1 ) - *( rows[p2]+1 ))
-#define dZ( p1,p2 )  ( *( rows[p1]+2 ) - *( rows[p2]+2 ))
-#define dW( p1,p2 )  ( *( rows[p1]+3 ) - *( rows[p2]+3 ))
-
-/*============= prototypes in alphabetical order, infrequent at end ======= */
-
-void    qh_backnormal(realT** rows, int numrow, int numcol, boolT sign, coordT* normal, boolT* nearzero);
-void    qh_distplane(pointT* point, facetT* facet, realT* dist);
-facetT* qh_findbest(pointT* point, facetT* startfacet,
-                    boolT bestoutside, boolT isnewfacets, boolT noupper,
-                    realT* dist, boolT* isoutside, int* numpart);
-facetT* qh_findbesthorizon(boolT ischeckmax, pointT* point,
-                           facetT* startfacet, boolT noupper, realT* bestdist, int* numpart);
-facetT* qh_findbestnew(pointT* point, facetT* startfacet, realT* dist,
-                       boolT bestoutside, boolT* isoutside, int* numpart);
-void    qh_gausselim(realT** rows, int numrow, int numcol, boolT* sign, boolT* nearzero);
-realT   qh_getangle(pointT* vect1, pointT* vect2);
-pointT* qh_getcenter(setT* vertices);
-pointT* qh_getcentrum(facetT* facet);
-realT   qh_getdistance(facetT* facet, facetT* neighbor, realT* mindist, realT* maxdist);
-void    qh_normalize(coordT* normal, int dim, boolT toporient);
-void    qh_normalize2(coordT* normal, int dim, boolT toporient,
-                      realT* minnorm, boolT* ismin);
-pointT* qh_projectpoint(pointT* point, facetT* facet, realT dist);
-
-void    qh_setfacetplane(facetT* newfacets);
-void    qh_sethyperplane_det(int dim, coordT** rows, coordT* point0,
-                             boolT toporient, coordT* normal, realT* offset, boolT* nearzero);
-void    qh_sethyperplane_gauss(int dim, coordT** rows, pointT* point0,
-                               boolT toporient, coordT* normal, coordT* offset, boolT* nearzero);
-boolT   qh_sharpnewfacets(void);
-
-/*========= infrequently used code in geom2.c =============*/
-
-
-coordT* qh_copypoints(coordT* points, int numpoints, int dimension);
-void    qh_crossproduct(int dim, realT vecA[3], realT vecB[3], realT vecC[3]);
-realT   qh_determinant(realT** rows, int dim, boolT* nearzero);
-realT   qh_detjoggle(pointT* points, int numpoints, int dimension);
-void    qh_detroundoff(void);
-realT   qh_detsimplex(pointT* apex, setT* points, int dim, boolT* nearzero);
-realT   qh_distnorm(int dim, pointT* point, pointT* normal, realT* offsetp);
-realT   qh_distround(int dimension, realT maxabs, realT maxsumabs);
-realT   qh_divzero(realT numer, realT denom, realT mindenom1, boolT* zerodiv);
-realT   qh_facetarea(facetT* facet);
-realT   qh_facetarea_simplex(int dim, coordT* apex, setT* vertices,
-                             vertexT* notvertex,  boolT toporient, coordT* normal, realT* offset);
-pointT* qh_facetcenter(setT* vertices);
-facetT* qh_findgooddist(pointT* point, facetT* facetA, realT* distp, facetT** facetlist);
-void    qh_getarea(facetT* facetlist);
-boolT   qh_gram_schmidt(int dim, realT** rows);
-boolT   qh_inthresholds(coordT* normal, realT* angle);
-void    qh_joggleinput(void);
-realT*  qh_maxabsval(realT* normal, int dim);
-setT*   qh_maxmin(pointT* points, int numpoints, int dimension);
-realT   qh_maxouter(void);
-void    qh_maxsimplex(int dim, setT* maxpoints, pointT* points, int numpoints, setT** simplex);
-realT   qh_minabsval(realT* normal, int dim);
-int     qh_mindiff(realT* vecA, realT* vecB, int dim);
-boolT   qh_orientoutside(facetT* facet);
-void    qh_outerinner(facetT* facet, realT* outerplane, realT* innerplane);
-coordT  qh_pointdist(pointT* point1, pointT* point2, int dim);
-void    qh_printmatrix(FILE* fp, char* string, realT** rows, int numrow, int numcol);
-void    qh_printpoints(FILE* fp, char* string, setT* points);
-void    qh_projectinput(void);
-void    qh_projectpoints(signed char* project, int n, realT* points,
-                         int numpoints, int dim, realT* newpoints, int newdim);
-int     qh_rand(void);
-void    qh_srand(int seed);
-realT   qh_randomfactor(void);
-void    qh_randommatrix(realT* buffer, int dim, realT** row);
-void    qh_rotateinput(realT** rows);
-void    qh_rotatepoints(realT* points, int numpoints, int dim, realT** rows);
-void    qh_scaleinput(void);
-void    qh_scalelast(coordT* points, int numpoints, int dim, coordT low,
-                     coordT high, coordT newhigh);
-void    qh_scalepoints(pointT* points, int numpoints, int dim,
-                       realT* newlows, realT* newhighs);
-boolT   qh_sethalfspace(int dim, coordT* coords, coordT** nextp,
-                        coordT* normal, coordT* offset, coordT* feasible);
-coordT* qh_sethalfspace_all(int dim, int count, coordT* halfspaces, pointT* feasible);
-pointT* qh_voronoi_center(int dim, setT* points);
-
-#endif /* qhDEFgeom */
-
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/io.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/io.h
deleted file mode 100644
index a2ca04499c442309eeddfeb3ad4557af40f3b707..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/io.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*<html><pre>  -<a                             href="qh-io.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   io.h
-   declarations of Input/Output functions
-
-   see README, qhull.h and io.c
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFio
-#define qhDEFio 1
-
-/*============ constants and flags ==================*/
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_MAXfirst">-</a>
-
-  qh_MAXfirst
-    maximum length of first two lines of stdin
-*/
-#define qh_MAXfirst  200
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_MINradius">-</a>
-
-  qh_MINradius
-    min radius for Gp and Gv, fraction of maxcoord
-*/
-#define qh_MINradius 0.02
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_GEOMepsilon">-</a>
-
-  qh_GEOMepsilon
-    adjust outer planes for 'lines closer' and geomview roundoff.
-    This prevents bleed through.
-*/
-#define qh_GEOMepsilon 2e-3
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_WHITESPACE">-</a>
-
-  qh_WHITESPACE
-    possible values of white space
-*/
-#define qh_WHITESPACE " \n\t\v\r\f"
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="RIDGE">-</a>
-
-  qh_RIDGE
-    to select which ridges to print in qh_eachvoronoi
-*/
-typedef enum
-{
-    qh_RIDGEall = 0, qh_RIDGEinner, qh_RIDGEouter
-}
-qh_RIDGE;
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="printvridgeT">-</a>
-
-  printvridgeT
-    prints results of qh_printvdiagram
-
-  see:
-    <a href="io.c#printvridge">qh_printvridge</a> for an example
-*/
-typedef void (*printvridgeT)(FILE* fp, vertexT* vertex, vertexT* vertexA, setT* centers, boolT unbounded);
-
-/*============== -prototypes in alphabetical order =========*/
-
-void    dfacet(unsigned id);
-void    dvertex(unsigned id);
-int qh_compare_facetarea(const void* p1, const void* p2);
-int qh_compare_facetmerge(const void* p1, const void* p2);
-int qh_compare_facetvisit(const void* p1, const void* p2);
-int qh_compare_vertexpoint(const void* p1, const void* p2); /* not used */
-
-void    qh_countfacets(facetT* facetlist, setT* facets, boolT printall,
-                       int* numfacetsp, int* numsimplicialp, int* totneighborsp,
-                       int* numridgesp, int* numcoplanarsp, int* numnumtricoplanarsp);
-pointT* qh_detvnorm(vertexT* vertex, vertexT* vertexA, setT* centers, realT* offsetp);
-setT*   qh_detvridge(vertexT* vertex);
-setT*   qh_detvridge3(vertexT* atvertex, vertexT* vertex);
-int     qh_eachvoronoi(FILE* fp, printvridgeT printvridge, vertexT* atvertex, boolT visitall, qh_RIDGE innerouter, boolT inorder);
-int     qh_eachvoronoi_all(FILE* fp, printvridgeT printvridge, boolT isupper, qh_RIDGE innerouter, boolT inorder);
-void    qh_facet2point(facetT* facet, pointT** point0, pointT** point1, realT* mindist);
-setT*   qh_facetvertices(facetT* facetlist, setT* facets, boolT allfacets);
-void    qh_geomplanes(facetT* facet, realT* outerplane, realT* innerplane);
-void    qh_markkeep(facetT* facetlist);
-setT*   qh_markvoronoi(facetT* facetlist, setT* facets, boolT printall, boolT* islowerp, int* numcentersp);
-void    qh_order_vertexneighbors(vertexT* vertex);
-void    qh_printafacet(FILE* fp, int format, facetT* facet, boolT printall);
-void    qh_printbegin(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printcenter(FILE* fp, int format, char* string, facetT* facet);
-void    qh_printcentrum(FILE* fp, facetT* facet, realT radius);
-void    qh_printend(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printend4geom(FILE* fp, facetT* facet, int* num, boolT printall);
-void    qh_printextremes(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printextremes_2d(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printextremes_d(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printfacet(FILE* fp, facetT* facet);
-void    qh_printfacet2math(FILE* fp, facetT* facet, int format, int notfirst);
-void    qh_printfacet2geom(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet2geom_points(FILE* fp, pointT* point1, pointT* point2,
-                                  facetT* facet, realT offset, realT color[3]);
-void    qh_printfacet3math(FILE* fp, facetT* facet, int format, int notfirst);
-void    qh_printfacet3geom_nonsimplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet3geom_points(FILE* fp, setT* points, facetT* facet, realT offset, realT color[3]);
-void    qh_printfacet3geom_simplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet3vertex(FILE* fp, facetT* facet, int format);
-void    qh_printfacet4geom_nonsimplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet4geom_simplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacetNvertex_nonsimplicial(FILE* fp, facetT* facet, int id, int format);
-void    qh_printfacetNvertex_simplicial(FILE* fp, facetT* facet, int format);
-void    qh_printfacetheader(FILE* fp, facetT* facet);
-void    qh_printfacetridges(FILE* fp, facetT* facet);
-void    qh_printfacets(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printhelp_degenerate(FILE* fp);
-void    qh_printhelp_singular(FILE* fp);
-void    qh_printhyperplaneintersection(FILE* fp, facetT* facet1, facetT* facet2,
-                                       setT* vertices, realT color[3]);
-void    qh_printneighborhood(FILE* fp, int format, facetT* facetA, facetT* facetB, boolT printall);
-void    qh_printline3geom(FILE* fp, pointT* pointA, pointT* pointB, realT color[3]);
-void    qh_printpoint(FILE* fp, char* string, pointT* point);
-void    qh_printpointid(FILE* fp, char* string, int dim, pointT* point, int id);
-void    qh_printpoint3(FILE* fp, pointT* point);
-void    qh_printpoints_out(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printpointvect(FILE* fp, pointT* point, coordT* normal, pointT* center, realT radius, realT color[3]);
-void    qh_printpointvect2(FILE* fp, pointT* point, coordT* normal, pointT* center, realT radius);
-void    qh_printridge(FILE* fp, ridgeT* ridge);
-void    qh_printspheres(FILE* fp, setT* vertices, realT radius);
-void    qh_printvdiagram(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-int     qh_printvdiagram2(FILE* fp, printvridgeT printvridge, setT* vertices, qh_RIDGE innerouter, boolT inorder);
-void    qh_printvertex(FILE* fp, vertexT* vertex);
-void    qh_printvertexlist(FILE* fp, char* string, facetT* facetlist,
-                           setT* facets, boolT printall);
-void    qh_printvertices(FILE* fp, char* string, setT* vertices);
-void    qh_printvneighbors(FILE* fp, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printvoronoi(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printvnorm(FILE* fp, vertexT* vertex, vertexT* vertexA, setT* centers, boolT unbounded);
-void    qh_printvridge(FILE* fp, vertexT* vertex, vertexT* vertexA, setT* centers, boolT unbounded);
-void    qh_produce_output(void);
-void    qh_projectdim3(pointT* source, pointT* destination);
-int     qh_readfeasible(int dim, char* remainder);
-coordT* qh_readpoints(int* numpoints, int* dimension, boolT* ismalloc);
-void    qh_setfeasible(int dim);
-boolT   qh_skipfacet(facetT* facet);
-
-#endif /* qhDEFio */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/mem.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/mem.h
deleted file mode 100644
index 3283efe89efa77d661b47bf603c50317c611d5f8..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/mem.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*<html><pre>  -<a                             href="qh-mem.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   mem.h
-     prototypes for memory management functions
-
-   see qh-mem.htm, mem.c and qset.h
-
-   for error handling, writes message and calls
-     qh_errexit (qhmem_ERRmem, NULL, NULL) if insufficient memory
-       and
-     qh_errexit (qhmem_ERRqhull, NULL, NULL) otherwise
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#pragma once
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="NOmem">-</a>
-
-  qh_NOmem
-    turn off quick-fit memory allocation
-
-  notes:
-    mem.c implements Quickfit memory allocation for about 20% time
-    savings.  If it fails on your machine, try to locate the
-    problem, and send the answer to qhull@qhull.org.  If this can
-    not be done, define qh_NOmem to use malloc/free instead.
-
-   #define qh_NOmem
-*/
-
-/*-------------------------------------------
-    to avoid bus errors, memory allocation must consider alignment requirements.
-    malloc() automatically takes care of alignment.   Since mem.c manages
-    its own memory, we need to explicitly specify alignment in
-    qh_meminitbuffers().
-
-    A safe choice is sizeof(double).  sizeof(float) may be used if doubles
-    do not occur in data structures and pointers are the same size.  Be careful
-    of machines (e.g., DEC Alpha) with large pointers.  If gcc is available,
-    use __alignof__(double) or fmax_(__alignof__(float), __alignof__(void *)).
-
-   see <a href="user.h#MEMalign">qh_MEMalign</a> in user.h for qhull's alignment
-*/
-
-#define qhmem_ERRmem 4    /* matches qh_ERRmem in qhull.h */
-#define qhmem_ERRqhull 5  /* matches qh_ERRqhull in qhull.h */
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="ptr_intT">-</a>
-
-  ptr_intT
-    for casting a void* to an integer-type
-
-  notes:
-    On 64-bit machines, a pointer may be larger than an 'int'.
-    qh_meminit() checks that 'long' holds a 'void*'
-*/
-typedef unsigned long ptr_intT;
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="qhmemT">-</a>
-
-  qhmemT
-    global memory structure for mem.c
-
- notes:
-   users should ignore qhmem except for writing extensions
-   qhmem is allocated in mem.c
-
-   qhmem could be swapable like qh and qhstat, but then
-   multiple qh's and qhmem's would need to keep in synch.
-   A swapable qhmem would also waste memory buffers.  As long
-   as memory operations are atomic, there is no problem with
-   multiple qh structures being active at the same time.
-   If you need separate address spaces, you can swap the
-   contents of qhmem.
-*/
-typedef struct qhmemT qhmemT;
-extern qhmemT qhmem;
-
-struct qhmemT                 /* global memory management variables */
-{
-    int      BUFsize;       /* size of memory allocation buffer */
-    int      BUFinit;       /* initial size of memory allocation buffer */
-    int      TABLEsize;         /* actual number of sizes in free list table */
-    int      NUMsizes;          /* maximum number of sizes in free list table */
-    int      LASTsize;          /* last size in free list table */
-    int      ALIGNmask;         /* worst-case alignment, must be 2^n-1 */
-    void**   freelists;          /* free list table, linked by offset 0 */
-    int*     sizetable;         /* size of each freelist */
-    int*     indextable;        /* size->index table */
-    void*    curbuffer;         /* current buffer, linked by offset 0 */
-    void*    freemem;           /*   free memory in curbuffer */
-    int      freesize;          /*   size of free memory in bytes */
-    void*    tempstack;         /* stack of temporary memory, managed by users */
-    FILE*    ferr;              /* file for reporting errors */
-    int      IStracing;         /* =5 if tracing memory allocations */
-    int      cntquick;          /* count of quick allocations */
-    /* remove statistics doesn't effect speed */
-    int      cntshort;          /* count of short allocations */
-    int      cntlong;           /* count of long allocations */
-    int      curlong;           /* current count of inuse, long allocations */
-    int      freeshort;         /* count of short memfrees */
-    int      freelong;          /* count of long memfrees */
-    int      totshort;          /* total size of short allocations */
-    int      totlong;           /* total size of long allocations */
-    int      maxlong;           /* maximum totlong */
-    int      cntlarger;         /* count of setlarger's */
-    int      totlarger;         /* total copied by setlarger */
-};
-
-
-/*==================== -macros ====================*/
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="memalloc_">-</a>
-
-  qh_memalloc_(size, object, type)
-    returns object of size bytes
-    assumes size<=qhmem.LASTsize and void **freelistp is a temp
-*/
-
-#ifdef qh_NOmem
-#define qh_memalloc_(size, freelistp, object, type) {\
-        object= (type*)qh_memalloc (size); }
-#else /* !qh_NOmem */
-
-#define qh_memalloc_(size, freelistp, object, type) {\
-        freelistp= qhmem.freelists + qhmem.indextable[size];\
-        if ((object= (type*)*freelistp)) {\
-            qhmem.cntquick++;  \
-            *freelistp= *((void **)*freelistp);\
-        }else object= (type*)qh_memalloc (size);}
-#endif
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="memfree_">-</a>
-
-  qh_memfree_(object, size)
-    free up an object
-
-  notes:
-    object may be NULL
-    assumes size<=qhmem.LASTsize and void **freelistp is a temp
-*/
-#ifdef qh_NOmem
-#define qh_memfree_(object, size, freelistp) {\
-        qh_memfree (object, size); }
-#else /* !qh_NOmem */
-
-#define qh_memfree_(object, size, freelistp) {\
-        if (object) { \
-            qhmem .freeshort++;\
-            freelistp= qhmem.freelists + qhmem.indextable[size];\
-            *((void **)object)= *freelistp;\
-            *freelistp= object;}}
-#endif
-
-/*=============== prototypes in alphabetical order ============*/
-
-void* qh_memalloc(int insize);
-void qh_memfree(void* object, int size);
-void qh_memfreeshort(int* curlong, int* totlong);
-void qh_meminit(FILE* ferr);
-void qh_meminitbuffers(int tracelevel, int alignment, int numsizes,
-                       int bufsize, int bufinit);
-void qh_memsetup(void);
-void qh_memsize(int size);
-void qh_memstatistics(FILE* fp);
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/merge.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/merge.h
deleted file mode 100644
index 8b689576dbb05d1627d116b360599a866b2cc93c..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/merge.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*<html><pre>  -<a                             href="qh-merge.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   merge.h
-   header file for merge.c
-
-   see qh-merge.htm and merge.c
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFmerge
-#define qhDEFmerge 1
-
-
-/*============ -constants- ==============*/
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_ANGLEredundant">-</a>
-
-  qh_ANGLEredundant
-    indicates redundant merge in mergeT->angle
-*/
-#define qh_ANGLEredundant 6.0
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_ANGLEdegen">-</a>
-
-  qh_ANGLEdegen
-    indicates degenerate facet in mergeT->angle
-*/
-#define qh_ANGLEdegen     5.0
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_ANGLEconcave">-</a>
-
-  qh_ANGLEconcave
-    offset to indicate concave facets in mergeT->angle
-
-  notes:
-    concave facets are assigned the range of [2,4] in mergeT->angle
-    roundoff error may make the angle less than 2
-*/
-#define qh_ANGLEconcave  1.5
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="MRG">-</a>
-
-  MRG... (mergeType)
-    indicates the type of a merge (mergeT->type)
-*/
-typedef enum    /* in sort order for facet_mergeset */
-{
-    MRGnone = 0,
-    MRGcoplanar,      /* centrum coplanar */
-    MRGanglecoplanar, /* angle coplanar */
-    /* could detect half concave ridges */
-    MRGconcave,       /* concave ridge */
-    MRGflip,      /* flipped facet. facet1 == facet2 */
-    MRGridge,     /* duplicate ridge (qh_MERGEridge) */
-    /* degen and redundant go onto degen_mergeset */
-    MRGdegen,     /* degenerate facet (not enough neighbors) facet1 == facet2 */
-    MRGredundant,     /* redundant facet (vertex subset) */
-    /* merge_degenredundant assumes degen < redundant */
-    MRGmirror,            /* mirror facet from qh_triangulate */
-    ENDmrg
-} mergeType;
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_MERGEapex">-</a>
-
-  qh_MERGEapex
-    flag for qh_mergefacet() to indicate an apex merge
-*/
-#define qh_MERGEapex     True
-
-/*============ -structures- ====================*/
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="mergeT">-</a>
-
-  mergeT
-    structure used to merge facets
-*/
-
-typedef struct mergeT mergeT;
-struct mergeT       /* initialize in qh_appendmergeset */
-{
-    realT   angle;        /* angle between normals of facet1 and facet2 */
-    facetT* facet1;   /* will merge facet1 into facet2 */
-    facetT* facet2;
-    mergeType type;
-};
-
-
-/*=========== -macros- =========================*/
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="FOREACHmerge_">-</a>
-
-  FOREACHmerge_( merges ) {...}
-    assign 'merge' to each merge in merges
-
-  notes:
-    uses 'mergeT *merge, **mergep;'
-    if qh_mergefacet(),
-      restart since qh.facet_mergeset may change
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHmerge_( merges ) FOREACHsetelement_(mergeT, merges, merge)
-
-/*============ prototypes in alphabetical order after pre/postmerge =======*/
-
-void    qh_premerge(vertexT* apex, realT maxcentrum, realT maxangle);
-void    qh_postmerge(char* reason, realT maxcentrum, realT maxangle,
-                     boolT vneighbors);
-void    qh_all_merges(boolT othermerge, boolT vneighbors);
-void    qh_appendmergeset(facetT* facet, facetT* neighbor, mergeType mergetype, realT* angle);
-setT*   qh_basevertices(facetT* samecycle);
-void    qh_checkconnect(void /* qh new_facets */);
-boolT   qh_checkzero(boolT testall);
-int     qh_compareangle(const void* p1, const void* p2);
-int     qh_comparemerge(const void* p1, const void* p2);
-int     qh_comparevisit(const void* p1, const void* p2);
-void    qh_copynonconvex(ridgeT* atridge);
-void    qh_degen_redundant_facet(facetT* facet);
-void    qh_degen_redundant_neighbors(facetT* facet, facetT* delfacet);
-vertexT* qh_find_newvertex(vertexT* oldvertex, setT* vertices, setT* ridges);
-void    qh_findbest_test(boolT testcentrum, facetT* facet, facetT* neighbor,
-                         facetT** bestfacet, realT* distp, realT* mindistp, realT* maxdistp);
-facetT* qh_findbestneighbor(facetT* facet, realT* distp, realT* mindistp, realT* maxdistp);
-void    qh_flippedmerges(facetT* facetlist, boolT* wasmerge);
-void    qh_forcedmerges(boolT* wasmerge);
-void    qh_getmergeset(facetT* facetlist);
-void    qh_getmergeset_initial(facetT* facetlist);
-void    qh_hashridge(setT* hashtable, int hashsize, ridgeT* ridge, vertexT* oldvertex);
-ridgeT* qh_hashridge_find(setT* hashtable, int hashsize, ridgeT* ridge,
-                          vertexT* vertex, vertexT* oldvertex, int* hashslot);
-void    qh_makeridges(facetT* facet);
-void    qh_mark_dupridges(facetT* facetlist);
-void    qh_maydropneighbor(facetT* facet);
-int     qh_merge_degenredundant(void);
-void    qh_merge_nonconvex(facetT* facet1, facetT* facet2, mergeType mergetype);
-void    qh_mergecycle(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_all(facetT* facetlist, boolT* wasmerge);
-void    qh_mergecycle_facets(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_neighbors(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_ridges(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_vneighbors(facetT* samecycle, facetT* newfacet);
-void    qh_mergefacet(facetT* facet1, facetT* facet2, realT* mindist, realT* maxdist, boolT mergeapex);
-void    qh_mergefacet2d(facetT* facet1, facetT* facet2);
-void    qh_mergeneighbors(facetT* facet1, facetT* facet2);
-void    qh_mergeridges(facetT* facet1, facetT* facet2);
-void    qh_mergesimplex(facetT* facet1, facetT* facet2, boolT mergeapex);
-void    qh_mergevertex_del(vertexT* vertex, facetT* facet1, facetT* facet2);
-void    qh_mergevertex_neighbors(facetT* facet1, facetT* facet2);
-void    qh_mergevertices(setT* vertices1, setT** vertices);
-setT*   qh_neighbor_intersections(vertexT* vertex);
-void    qh_newvertices(setT* vertices);
-boolT   qh_reducevertices(void);
-vertexT* qh_redundant_vertex(vertexT* vertex);
-boolT   qh_remove_extravertices(facetT* facet);
-vertexT* qh_rename_sharedvertex(vertexT* vertex, facetT* facet);
-void    qh_renameridgevertex(ridgeT* ridge, vertexT* oldvertex, vertexT* newvertex);
-void    qh_renamevertex(vertexT* oldvertex, vertexT* newvertex, setT* ridges,
-                        facetT* oldfacet, facetT* neighborA);
-boolT   qh_test_appendmerge(facetT* facet, facetT* neighbor);
-boolT   qh_test_vneighbors(void /* qh newfacet_list */);
-void    qh_tracemerge(facetT* facet1, facetT* facet2);
-void    qh_tracemerging(void);
-void    qh_updatetested(facetT* facet1, facetT* facet2);
-setT*   qh_vertexridges(vertexT* vertex);
-void    qh_vertexridges_facet(vertexT* vertex, facetT* facet, setT** ridges);
-void    qh_willdelete(facetT* facet, facetT* replace);
-
-#endif /* qhDEFmerge */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/poly.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/poly.h
deleted file mode 100644
index 109b5b3eab4c055084faca92bd9fc8561ec59259..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/poly.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/*<html><pre>  -<a                             href="qh-poly.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   poly.h
-   header file for poly.c and poly2.c
-
-   see qh-poly.htm, qhull.h and poly.c
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFpoly
-#define qhDEFpoly 1
-
-/*===============   constants ========================== */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="ALGORITHMfault">-</a>
-
-  ALGORITHMfault
-    use as argument to checkconvex() to report errors during buildhull
-*/
-#define qh_ALGORITHMfault 0
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="DATAfault">-</a>
-
-  DATAfault
-    use as argument to checkconvex() to report errors during initialhull
-*/
-#define qh_DATAfault 1
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="DUPLICATEridge">-</a>
-
-  DUPLICATEridge
-    special value for facet->neighbor to indicate a duplicate ridge
-
-  notes:
-    set by matchneighbor, used by matchmatch and mark_dupridge
-*/
-#define qh_DUPLICATEridge ( facetT * ) 1L
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="MERGEridge">-</a>
-
-  MERGEridge       flag in facet
-    special value for facet->neighbor to indicate a merged ridge
-
-  notes:
-    set by matchneighbor, used by matchmatch and mark_dupridge
-*/
-#define qh_MERGEridge ( facetT * ) 2L
-
-
-/*============ -structures- ====================*/
-
-/*=========== -macros- =========================*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLfacet_">-</a>
-
-  FORALLfacet_( facetlist ) { ... }
-    assign 'facet' to each facet in facetlist
-
-  notes:
-    uses 'facetT *facet;'
-    assumes last facet is a sentinel
-
-  see:
-    FORALLfacets
-*/
-#define FORALLfacet_( facetlist ) if ( facetlist ) for( facet=( facetlist );facet && facet->next;facet=facet->next )
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLnew_facets">-</a>
-
-  FORALLnew_facets { ... }
-    assign 'newfacet' to each facet in qh.newfacet_list
-
-  notes:
-    uses 'facetT *newfacet;'
-    at exit, newfacet==NULL
-*/
-#define FORALLnew_facets for( newfacet=qh newfacet_list;newfacet && newfacet->next;newfacet=newfacet->next )
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLvertex_">-</a>
-
-  FORALLvertex_( vertexlist ) { ... }
-    assign 'vertex' to each vertex in vertexlist
-
-  notes:
-    uses 'vertexT *vertex;'
-    at exit, vertex==NULL
-*/
-#define FORALLvertex_( vertexlist ) for ( vertex=( vertexlist );vertex && vertex->next;vertex= vertex->next )
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLvisible_facets">-</a>
-
-  FORALLvisible_facets { ... }
-    assign 'visible' to each visible facet in qh.visible_list
-
-  notes:
-    uses 'vacetT *visible;'
-    at exit, visible==NULL
-*/
-#define FORALLvisible_facets for (visible=qh visible_list; visible && visible->visible; visible= visible->next)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLsame_">-</a>
-
-  FORALLsame_( newfacet ) { ... }
-    assign 'same' to each facet in newfacet->f.samecycle
-
-  notes:
-    uses 'facetT *same;'
-    stops when it returns to newfacet
-*/
-#define FORALLsame_(newfacet) for (same= newfacet->f.samecycle; same != newfacet; same= same->f.samecycle)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLsame_cycle_">-</a>
-
-  FORALLsame_cycle_( newfacet ) { ... }
-    assign 'same' to each facet in newfacet->f.samecycle
-
-  notes:
-    uses 'facetT *same;'
-    at exit, same == NULL
-*/
-#define FORALLsame_cycle_(newfacet) \
-    for (same= newfacet->f.samecycle; \
-         same; same= (same == newfacet ?  NULL : same->f.samecycle))
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHneighborA_">-</a>
-
-  FOREACHneighborA_( facet ) { ... }
-    assign 'neighborA' to each neighbor in facet->neighbors
-
-  FOREACHneighborA_( vertex ) { ... }
-    assign 'neighborA' to each neighbor in vertex->neighbors
-
-  declare:
-    facetT *neighborA, **neighborAp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHneighborA_(facet)  FOREACHsetelement_(facetT, facet->neighbors, neighborA)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvisible_">-</a>
-
-  FOREACHvisible_( facets ) { ... }
-    assign 'visible' to each facet in facets
-
-  notes:
-    uses 'facetT *facet, *facetp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvisible_(facets) FOREACHsetelement_(facetT, facets, visible)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHnewfacet_">-</a>
-
-  FOREACHnewfacet_( facets ) { ... }
-    assign 'newfacet' to each facet in facets
-
-  notes:
-    uses 'facetT *newfacet, *newfacetp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHnewfacet_(facets) FOREACHsetelement_(facetT, facets, newfacet)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertexA_">-</a>
-
-  FOREACHvertexA_( vertices ) { ... }
-    assign 'vertexA' to each vertex in vertices
-
-  notes:
-    uses 'vertexT *vertexA, *vertexAp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertexA_(vertices) FOREACHsetelement_(vertexT, vertices, vertexA)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertexreverse12_">-</a>
-
-  FOREACHvertexreverse12_( vertices ) { ... }
-    assign 'vertex' to each vertex in vertices
-    reverse order of first two vertices
-
-  notes:
-    uses 'vertexT *vertex, *vertexp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertexreverse12_(vertices) FOREACHsetelementreverse12_(vertexT, vertices, vertex)
-
-
-/*=============== prototypes poly.c in alphabetical order ================*/
-
-void    qh_appendfacet(facetT* facet);
-void    qh_appendvertex(vertexT* vertex);
-void    qh_attachnewfacets(void);
-boolT   qh_checkflipped(facetT* facet, realT* dist, boolT allerror);
-void    qh_delfacet(facetT* facet);
-void    qh_deletevisible(void /*qh visible_list, qh horizon_list*/);
-setT*   qh_facetintersect(facetT* facetA, facetT* facetB, int* skipAp, int* skipBp, int extra);
-unsigned qh_gethash(int hashsize, setT* set, int size, int firstindex, void* skipelem);
-facetT* qh_makenewfacet(setT* vertices, boolT toporient, facetT* facet);
-void    qh_makenewplanes(void /* newfacet_list */);
-facetT* qh_makenew_nonsimplicial(facetT* visible, vertexT* apex, int* numnew);
-facetT* qh_makenew_simplicial(facetT* visible, vertexT* apex, int* numnew);
-void    qh_matchneighbor(facetT* newfacet, int newskip, int hashsize,
-                         int* hashcount);
-void    qh_matchnewfacets(void);
-boolT   qh_matchvertices(int firstindex, setT* verticesA, int skipA,
-                         setT* verticesB, int* skipB, boolT* same);
-facetT* qh_newfacet(void);
-ridgeT* qh_newridge(void);
-int     qh_pointid(pointT* point);
-void    qh_removefacet(facetT* facet);
-void    qh_removevertex(vertexT* vertex);
-void    qh_updatevertices(void);
-
-
-/*========== -prototypes poly2.c in alphabetical order ===========*/
-
-void    qh_addhash(void* newelem, setT* hashtable, int hashsize, unsigned hash);
-void    qh_check_bestdist(void);
-void    qh_check_maxout(void);
-void    qh_check_output(void);
-void    qh_check_point(pointT* point, facetT* facet, realT* maxoutside, realT* maxdist, facetT** errfacet1, facetT** errfacet2);
-void    qh_check_points(void);
-void    qh_checkconvex(facetT* facetlist, int fault);
-void    qh_checkfacet(facetT* facet, boolT newmerge, boolT* waserrorp);
-void    qh_checkflipped_all(facetT* facetlist);
-void    qh_checkpolygon(facetT* facetlist);
-void    qh_checkvertex(vertexT* vertex);
-void    qh_clearcenters(qh_CENTER type);
-void    qh_createsimplex(setT* vertices);
-void    qh_delridge(ridgeT* ridge);
-void    qh_delvertex(vertexT* vertex);
-setT*   qh_facet3vertex(facetT* facet);
-facetT* qh_findbestfacet(pointT* point, boolT bestoutside,
-                         realT* bestdist, boolT* isoutside);
-facetT* qh_findbestlower(facetT* upperfacet, pointT* point, realT* bestdistp, int* numpart);
-facetT* qh_findfacet_all(pointT* point, realT* bestdist, boolT* isoutside,
-                         int* numpart);
-int     qh_findgood(facetT* facetlist, int goodhorizon);
-void    qh_findgood_all(facetT* facetlist);
-void    qh_furthestnext(void /* qh facet_list */);
-void    qh_furthestout(facetT* facet);
-void    qh_infiniteloop(facetT* facet);
-void    qh_initbuild(void);
-void    qh_initialhull(setT* vertices);
-setT*   qh_initialvertices(int dim, setT* maxpoints, pointT* points, int numpoints);
-vertexT* qh_isvertex(pointT* point, setT* vertices);
-vertexT* qh_makenewfacets(pointT* point /*horizon_list, visible_list*/);
-void    qh_matchduplicates(facetT* atfacet, int atskip, int hashsize, int* hashcount);
-void    qh_nearcoplanar(void /* qh.facet_list */);
-vertexT* qh_nearvertex(facetT* facet, pointT* point, realT* bestdistp);
-int     qh_newhashtable(int newsize);
-vertexT* qh_newvertex(pointT* point);
-ridgeT* qh_nextridge3d(ridgeT* atridge, facetT* facet, vertexT** vertexp);
-void    qh_outcoplanar(void /* facet_list */);
-pointT* qh_point(int id);
-void    qh_point_add(setT* set, pointT* point, void* elem);
-setT*   qh_pointfacet(void /*qh facet_list*/);
-setT*   qh_pointvertex(void /*qh facet_list*/);
-void    qh_prependfacet(facetT* facet, facetT** facetlist);
-void    qh_printhashtable(FILE* fp);
-void    qh_printlists(void);
-void    qh_resetlists(boolT stats, boolT resetVisible /*qh newvertex_list newfacet_list visible_list*/);
-void    qh_setvoronoi_all(void);
-void    qh_triangulate(void /*qh facet_list*/);
-void    qh_triangulate_facet(facetT* facetA, vertexT** first_vertex);
-void    qh_triangulate_link(facetT* oldfacetA, facetT* facetA, facetT* oldfacetB, facetT* facetB);
-void    qh_triangulate_mirror(facetT* facetA, facetT* facetB);
-void    qh_triangulate_null(facetT* facetA);
-void    qh_vertexintersect(setT** vertexsetA, setT* vertexsetB);
-setT*   qh_vertexintersect_new(setT* vertexsetA, setT* vertexsetB);
-void    qh_vertexneighbors(void /*qh facet_list*/);
-boolT   qh_vertexsubset(setT* vertexsetA, setT* vertexsetB);
-
-
-#endif /* qhDEFpoly */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qhull.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qhull.h
deleted file mode 100644
index ebc0d2becc309ea76adbd9f2d194c29b609b45df..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qhull.h
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qhull.h
-   user-level header file for using qhull.a library
-
-   see qh-qhull.htm, qhull_a.h
-
-   copyright (c) 1993-2003, The Geometry Center
-
-   NOTE: access to qh_qh is via the 'qh' macro.  This allows
-   qh_qh to be either a pointer or a structure.  An example
-   of using qh is "qh DROPdim" which accesses the DROPdim
-   field of qh_qh.  Similarly, access to qh_qhstat is via
-   the 'qhstat' macro.
-
-   includes function prototypes for qhull.c, geom.c, global.c, io.c, user.c
-
-   use mem.h for mem.c
-   use qset.h for qset.c
-
-   see unix.c for an example of using qhull.h
-
-   recompile qhull if you change this file
-*/
-
-#ifndef qhDEFqhull
-#define qhDEFqhull 1
-
-/*=========================== -included files ==============*/
-
-#include <setjmp.h>
-#include <float.h>
-#include <time.h>
-
-#if __MWERKS__ && __POWERPC__
-#include  <SIOUX.h>
-#include  <Files.h>
-#include    <Desk.h>
-#endif
-
-#ifndef __STDC__
-#ifndef __cplusplus
-#if     !_MSC_VER
-#error  Neither __STDC__ nor __cplusplus is defined.  Please use strict ANSI C or C++ to compile
-#error  Qhull.  You may need to turn off compiler extensions in your project configuration.  If
-#error  your compiler is a standard C compiler, you can delete this warning from qhull.h
-#endif
-#endif
-#endif
-
-#include "user.h"      /* user defineable constants */
-
-/*============ constants and basic types ====================*/
-
-extern char* qh_version; /* defined in global.c */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="coordT">-</a>
-
-  coordT
-    coordinates and coefficients are stored as realT (i.e., double)
-
-  notes:
-    could use 'float' for data and 'double' for calculations (realT vs. coordT)
-      This requires many type casts, and adjusted error bounds.
-      Also C compilers may do expressions in double anyway.
-*/
-#define coordT realT
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="pointT">-</a>
-
-  pointT
-    a point is an array of DIM3 coordinates
-*/
-#define pointT coordT
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="flagT">-</a>
-
-  flagT
-    Boolean flag as a bit
-*/
-#define flagT unsigned int
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="boolT">-</a>
-
-  boolT
-    boolean value, either True or False
-
-  notes:
-    needed for portability
-*/
-#define boolT unsigned int
-#ifdef False
-#undef False
-#endif
-#ifdef True
-#undef True
-#endif
-#define False 0
-#define True 1
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="CENTERtype">-</a>
-
-  qh_CENTER
-    to distinguish facet->center
-*/
-typedef enum
-{
-    qh_ASnone = 0, qh_ASvoronoi, qh_AScentrum
-}
-qh_CENTER;
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="qh_PRINT">-</a>
-
-  qh_PRINT
-    output formats for printing (qh.PRINTout).
-    'Fa' 'FV' 'Fc' 'FC'
-
-
-   notes:
-   some of these names are similar to qh names.  The similar names are only
-   used in switch statements in qh_printbegin() etc.
-*/
-typedef enum {qh_PRINTnone = 0,
-              qh_PRINTarea, qh_PRINTaverage,           /* 'Fa' 'FV' 'Fc' 'FC' */
-              qh_PRINTcoplanars, qh_PRINTcentrums,
-              qh_PRINTfacets, qh_PRINTfacets_xridge,   /* 'f' 'FF' 'G' 'FI' 'Fi' 'Fn' */
-              qh_PRINTgeom, qh_PRINTids, qh_PRINTinner, qh_PRINTneighbors,
-              qh_PRINTnormals, qh_PRINTouter, qh_PRINTmaple, /* 'n' 'Fo' 'i' 'm' 'Fm' 'FM', 'o' */
-              qh_PRINTincidences, qh_PRINTmathematica, qh_PRINTmerges, qh_PRINToff,
-              qh_PRINToptions, qh_PRINTpointintersect, /* 'FO' 'Fp' 'FP' 'p' 'FQ' 'FS' */
-              qh_PRINTpointnearest, qh_PRINTpoints, qh_PRINTqhull, qh_PRINTsize,
-              qh_PRINTsummary, qh_PRINTtriangles,      /* 'Fs' 'Ft' 'Fv' 'FN' 'Fx' */
-              qh_PRINTvertices, qh_PRINTvneighbors, qh_PRINTextremes,
-              qh_PRINTEND
-             } qh_PRINT;
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="qh_ALL">-</a>
-
-  qh_ALL
-    argument flag for selecting everything
-*/
-#define qh_ALL      True
-#define qh_NOupper  True     /* argument for qh_findbest */
-#define qh_IScheckmax  True     /* argument for qh_findbesthorizon */
-#define qh_ISnewfacets  True     /* argument for qh_findbest */
-#define qh_RESETvisible  True     /* argument for qh_resetlists */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="qh_ERR">-</a>
-
-  qh_ERR
-    Qhull exit codes, for indicating errors
-*/
-#define qh_ERRnone  0    /* no error occurred during qhull */
-#define qh_ERRinput 1    /* input inconsistency */
-#define qh_ERRsingular 2 /* singular input data */
-#define qh_ERRprec  3    /* precision error */
-#define qh_ERRmem   4    /* insufficient memory, matches mem.h */
-#define qh_ERRqhull 5    /* internal error detected, matches mem.h */
-
-/* ============ -structures- ====================
-   each of the following structures is defined by a typedef
-   all realT and coordT fields occur at the beginning of a structure
-        (otherwise space may be wasted due to alignment)
-   define all flags together and pack into 32-bit number
-*/
-
-typedef struct vertexT vertexT;
-typedef struct ridgeT ridgeT;
-typedef struct facetT facetT;
-#ifndef DEFsetT
-#define DEFsetT 1
-typedef struct setT setT;          /* defined in qset.h */
-#endif
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="facetT">-</a>
-
-  facetT
-    defines a facet
-
-  notes:
-   qhull() generates the hull as a list of facets.
-
-  topological information:
-    f.previous,next     doubly-linked list of facets
-    f.vertices          set of vertices
-    f.ridges            set of ridges
-    f.neighbors         set of neighbors
-    f.toporient         True if facet has top-orientation (else bottom)
-
-  geometric information:
-    f.offset,normal     hyperplane equation
-    f.maxoutside        offset to outer plane -- all points inside
-    f.center            centrum for testing convexity
-    f.simplicial        True if facet is simplicial
-    f.flipped           True if facet does not include qh.interior_point
-
-  for constructing hull:
-    f.visible           True if facet on list of visible facets (will be deleted)
-    f.newfacet          True if facet on list of newly created facets
-    f.coplanarset       set of points coplanar with this facet
-                        (includes near-inside points for later testing)
-    f.outsideset        set of points outside of this facet
-    f.furthestdist      distance to furthest point of outside set
-    f.visitid           marks visited facets during a loop
-    f.replace           replacement facet for to-be-deleted, visible facets
-    f.samecycle,newcycle cycle of facets for merging into horizon facet
-
-  see below for other flags and fields
-*/
-struct facetT
-{
-#if !qh_COMPUTEfurthest
-    coordT   furthestdist;/* distance to furthest point of outsideset */
-#endif
-#if qh_MAXoutside
-    coordT   maxoutside;  /* max computed distance of point to facet
-            Before QHULLfinished this is an approximation
-            since maxdist not always set for mergefacet
-            Actual outer plane is +DISTround and
-            computed outer plane is +2*DISTround */
-#endif
-    coordT   offset;      /* exact offset of hyperplane from origin */
-    coordT*  normal;      /* normal of hyperplane, hull_dim coefficients */
-    /*   if tricoplanar, shared with a neighbor */
-    union                 /* in order of testing */
-    {
-        realT   area;        /* area of facet, only in io.c if  ->isarea */
-        facetT* replace; /*  replacement facet if ->visible and NEWfacets
-                 is NULL only if qh_mergedegen_redundant or interior */
-        facetT* samecycle;   /*  cycle of facets from the same visible/horizon intersection,
-                 if ->newfacet */
-        facetT* newcycle;    /*  in horizon facet, current samecycle of new facets */
-        facetT* trivisible;  /* visible facet for ->tricoplanar facets during qh_triangulate() */
-        facetT* triowner;    /* owner facet for ->tricoplanar, !isarea facets w/ ->keepcentrum */
-    } f;
-    coordT*  center;      /*  centrum for convexity, qh CENTERtype == qh_AScentrum */
-    /*  Voronoi center, qh CENTERtype == qh_ASvoronoi */
-    /*   if tricoplanar, shared with a neighbor */
-    facetT*  previous;    /* previous facet in the facet_list */
-    facetT*  next;        /* next facet in the facet_list */
-    setT*    vertices;    /* vertices for this facet, inverse sorted by ID
-                           if simplicial, 1st vertex was apex/furthest */
-    setT*    ridges;      /* explicit ridges for nonsimplicial facets.
-               for simplicial facets, neighbors defines ridge */
-    setT*    neighbors;   /* neighbors of the facet.  If simplicial, the kth
-               neighbor is opposite the kth vertex, and the first
-               neighbor is the horizon facet for the first vertex*/
-    setT*    outsideset;  /* set of points outside this facet
-                   if non-empty, last point is furthest
-               if NARROWhull, includes coplanars for partitioning*/
-    setT*    coplanarset; /* set of points coplanar with this facet
-               > qh.min_vertex and <= facet->max_outside
-                           a point is assigned to the furthest facet
-                   if non-empty, last point is furthest away */
-    unsigned visitid;     /* visit_id, for visiting all neighbors,
-               all uses are independent */
-    unsigned id;          /* unique identifier from qh facet_id */
-    unsigned nummerge: 9; /* number of merges */
-#define qh_MAXnummerge 511 /*     2^9-1, 32 flags total, see "flags:" in io.c */
-    flagT    tricoplanar: 1; /* True if TRIangulate and simplicial and coplanar with a neighbor */
-    /*   all tricoplanars share the same ->center, ->normal, ->offset, ->maxoutside */
-    /*   all tricoplanars share the same apex */
-    /*   if ->degenerate, does not span facet (one logical ridge) */
-    /*   one tricoplanar has ->keepcentrum and ->coplanarset */
-    /*   during qh_triangulate, f.trivisible points to original facet */
-    flagT    newfacet: 1; /* True if facet on qh newfacet_list (new or merged) */
-    flagT    visible: 1;  /* True if visible facet (will be deleted) */
-    flagT    toporient: 1; /* True if created with top orientation
-               after merging, use ridge orientation */
-    flagT    simplicial: 1; /* True if simplicial facet, ->ridges may be implicit */
-    flagT    seen: 1;     /* used to perform operations only once, like visitid */
-    flagT    seen2: 1;    /* used to perform operations only once, like visitid */
-    flagT    flipped: 1;  /* True if facet is flipped */
-    flagT    upperdelaunay: 1; /* True if facet is upper envelope of Delaunay triangulation */
-    flagT    notfurthest: 1; /* True if last point of outsideset is not furthest*/
-
-    /*-------- flags primarily for output ---------*/
-    flagT    good: 1;     /* True if a facet marked good for output */
-    flagT    isarea: 1;   /* True if facet->f.area is defined */
-
-    /*-------- flags for merging ------------------*/
-    flagT    dupridge: 1; /* True if duplicate ridge in facet */
-    flagT    mergeridge: 1; /* True if facet or neighbor contains a qh_MERGEridge
-                            ->normal defined (also defined for mergeridge2) */
-    flagT    mergeridge2: 1; /* True if neighbor contains a qh_MERGEridge (mark_dupridges */
-    flagT    coplanar: 1; /* True if horizon facet is coplanar at last use */
-    flagT     mergehorizon: 1; /* True if will merge into horizon (->coplanar) */
-    flagT     cycledone: 1; /* True if mergecycle_all already done */
-    flagT    tested: 1;   /* True if facet convexity has been tested (false after merge */
-    flagT    keepcentrum: 1; /* True if keep old centrum after a merge, or marks owner for ->tricoplanar */
-    flagT    newmerge: 1; /* True if facet is newly merged for reducevertices */
-    flagT    degenerate: 1; /* True if facet is degenerate (degen_mergeset or ->tricoplanar) */
-    flagT    redundant: 1; /* True if facet is redundant (degen_mergeset) */
-};
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="ridgeT">-</a>
-
-  ridgeT
-    defines a ridge
-
-  notes:
-  a ridge is DIM3-1 simplex between two neighboring facets.  If the
-  facets are non-simplicial, there may be more than one ridge between
-  two facets.  E.G. a 4-d hypercube has two triangles between each pair
-  of neighboring facets.
-
-  topological information:
-    vertices            a set of vertices
-    top,bottom          neighboring facets with orientation
-
-  geometric information:
-    tested              True if ridge is clearly convex
-    nonconvex           True if ridge is non-convex
-*/
-struct ridgeT
-{
-    setT*    vertices;    /* vertices belonging to this ridge, inverse sorted by ID
-                           NULL if a degen ridge (matchsame) */
-    facetT*  top;         /* top facet this ridge is part of */
-    facetT*  bottom;      /* bottom facet this ridge is part of */
-    unsigned id: 24;      /* unique identifier, =>room for 8 flags */
-    flagT    seen: 1;     /* used to perform operations only once */
-    flagT    tested: 1;   /* True when ridge is tested for convexity */
-    flagT    nonconvex: 1; /* True if getmergeset detected a non-convex neighbor
-               only one ridge between neighbors may have nonconvex */
-};
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="vertexT">-</a>
-
-  vertexT
-     defines a vertex
-
-  topological information:
-    next,previous       doubly-linked list of all vertices
-    neighbors           set of adjacent facets (only if qh.VERTEXneighbors)
-
-  geometric information:
-    point               array of DIM3 coordinates
-*/
-struct vertexT
-{
-    vertexT* next;        /* next vertex in vertex_list */
-    vertexT* previous;    /* previous vertex in vertex_list */
-    pointT*  point;       /* hull_dim coordinates (coordT) */
-    setT*    neighbors;   /* neighboring facets of vertex, qh_vertexneighbors()
-               inits in io.c or after first merge */
-    unsigned visitid; /* for use with qh vertex_visit */
-    unsigned id: 24;  /* unique identifier, =>room for 8 flags */
-    flagT    seen: 1;     /* used to perform operations only once */
-    flagT    seen2: 1;    /* another seen flag */
-    flagT    delridge: 1; /* vertex was part of a deleted ridge */
-    flagT    deleted: 1;  /* true if vertex on qh del_vertices */
-    flagT    newlist: 1;  /* true if vertex on qh newvertex_list */
-};
-
-/*======= -global variables -qh ============================*/
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >--------------------------------</a><a name="qh">-</a>
-
-  qh
-   all global variables for qhull are in qh, qhmem, and qhstat
-
-  notes:
-   qhmem is defined in mem.h and qhstat is defined in stat.h
-   Access to qh_qh is via the "qh" macro.  See qh_QHpointer in user.h
-*/
-typedef struct qhT qhT;
-#if qh_QHpointer
-#define qh qh_qh->
-extern qhT* qh_qh;     /* allocated in global.c */
-#else
-#define qh qh_qh.
-extern qhT qh_qh;
-#endif
-
-struct qhT
-{
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-const">-</a>
-
-      qh constants
-        configuration flags and constants for Qhull
-
-      notes:
-        The user configures Qhull by defining flags.  They are
-        copied into qh by qh_setflags().  qh-quick.htm#options defines the flags.
-    */
-    boolT ALLpoints;        /* true 'Qs' if search all points for initial simplex */
-    boolT ANGLEmerge;   /* true 'Qa' if sort potential merges by angle */
-    boolT APPROXhull;       /* true 'Wn' if MINoutside set */
-    realT MINoutside;       /*   'Wn' min. distance for an outside point */
-    boolT ATinfinity;       /* true 'Qz' if point num_points-1 is "at-infinity"
-                             for improving precision in Delaunay triangulations */
-    boolT AVOIDold;         /* true 'Q4' if avoid old->new merges */
-    boolT BESToutside;      /* true 'Qf' if partition points into best outsideset */
-    boolT CDDinput;         /* true 'Pc' if input uses CDD format (1.0/offset first) */
-    boolT CDDoutput;        /* true 'PC' if print normals in CDD format (offset first) */
-    boolT CHECKfrequently;  /* true 'Tc' if checking frequently */
-    realT premerge_cos;     /*   'A-n'   cos_max when pre merging */
-    realT postmerge_cos;    /*   'An'    cos_max when post merging */
-    boolT DELAUNAY;         /* true 'd' if computing DELAUNAY triangulation */
-    boolT DOintersections;  /* true 'Gh' if print hyperplane intersections */
-    int   DROPdim;          /* drops dim 'GDn' for 4-d -> 3-d output */
-    boolT FORCEoutput;      /* true 'Po' if forcing output despite degeneracies */
-    int   GOODpoint;        /* 1+n for 'QGn', good facet if visible/not(-) from point n*/
-    pointT* GOODpointp;     /*   the actual point */
-    boolT GOODthreshold;    /* true if qh lower_threshold/upper_threshold defined
-                 false if qh SPLITthreshold */
-    int   GOODvertex;       /* 1+n, good facet if vertex for point n */
-    pointT* GOODvertexp;     /*   the actual point */
-    boolT HALFspace;        /* true 'Hn,n,n' if halfspace intersection */
-    int   IStracing;        /* trace execution, 0=none, 1=least, 4=most, -1=events */
-    int   KEEParea;         /* 'PAn' number of largest facets to keep */
-    boolT KEEPcoplanar;     /* true 'Qc' if keeping nearest facet for coplanar points */
-    boolT KEEPinside;       /* true 'Qi' if keeping nearest facet for inside points
-                  set automatically if 'd Qc' */
-    int   KEEPmerge;        /* 'PMn' number of facets to keep with most merges */
-    realT KEEPminArea;      /* 'PFn' minimum facet area to keep */
-    realT MAXcoplanar;      /* 'Un' max distance below a facet to be coplanar*/
-    boolT MERGEexact;   /* true 'Qx' if exact merges (coplanar, degen, dupridge, flipped) */
-    boolT MERGEindependent; /* true 'Q2' if merging independent sets */
-    boolT MERGING;          /* true if exact-, pre- or post-merging, with angle and centrum tests */
-    realT   premerge_centrum;  /*   'C-n' centrum_radius when pre merging.  Default is round-off */
-    realT   postmerge_centrum; /*   'Cn' centrum_radius when post merging.  Default is round-off */
-    boolT MERGEvertices;    /* true 'Q3' if merging redundant vertices */
-    realT MINvisible;       /* 'Vn' min. distance for a facet to be visible */
-    boolT NOnarrow;         /* true 'Q10' if no special processing for narrow distributions */
-    boolT NOnearinside;     /* true 'Q8' if ignore near-inside points when partitioning */
-    boolT NOpremerge;       /* true 'Q0' if no defaults for C-0 or Qx */
-    boolT ONLYgood;     /* true 'Qg' if process points with good visible or horizon facets */
-    boolT ONLYmax;      /* true 'Qm' if only process points that increase max_outside */
-    boolT PICKfurthest;     /* true 'Q9' if process furthest of furthest points*/
-    boolT POSTmerge;        /* true if merging after buildhull (Cn or An) */
-    boolT PREmerge;         /* true if merging during buildhull (C-n or A-n) */
-    /* NOTE: some of these names are similar to qh_PRINT names */
-    boolT PRINTcentrums;    /* true 'Gc' if printing centrums */
-    boolT PRINTcoplanar;    /* true 'Gp' if printing coplanar points */
-    int   PRINTdim;         /* print dimension for Geomview output */
-    boolT PRINTdots;        /* true 'Ga' if printing all points as dots */
-    boolT PRINTgood;        /* true 'Pg' if printing good facets */
-    boolT PRINTinner;   /* true 'Gi' if printing inner planes */
-    boolT PRINTneighbors;   /* true 'PG' if printing neighbors of good facets */
-    boolT PRINTnoplanes;    /* true 'Gn' if printing no planes */
-    boolT PRINToptions1st;  /* true 'FO' if printing options to stderr */
-    boolT PRINTouter;   /* true 'Go' if printing outer planes */
-    boolT PRINTprecision;   /* false 'Pp' if not reporting precision problems */
-    qh_PRINT PRINTout[qh_PRINTEND]; /* list of output formats to print */
-    boolT PRINTridges;      /* true 'Gr' if print ridges */
-    boolT PRINTspheres;     /* true 'Gv' if print vertices as spheres */
-    boolT PRINTstatistics;  /* true 'Ts' if printing statistics to stderr */
-    boolT PRINTsummary;     /* true 's' if printing summary to stderr */
-    boolT PRINTtransparent; /* true 'Gt' if print transparent outer ridges */
-    boolT PROJECTdelaunay;  /* true if DELAUNAY, no readpoints() and
-                 need projectinput() for Delaunay in qh_init_B */
-    int   PROJECTinput;     /* number of projected dimensions 'bn:0Bn:0' */
-    boolT QUICKhelp;    /* true if quick help message for degen input */
-    boolT RANDOMdist;       /* true if randomly change distplane and setfacetplane */
-    realT RANDOMfactor;     /*    maximum random perturbation */
-    realT RANDOMa;         /*  qh_randomfactor is randr * RANDOMa + RANDOMb */
-    realT RANDOMb;
-    boolT RANDOMoutside;    /* true if select a random outside point */
-    int   REPORTfreq;       /* buildtracing reports every n facets */
-    int   REPORTfreq2;      /* tracemerging reports every REPORTfreq/2 facets */
-    int   RERUN;            /* 'TRn' rerun qhull n times (qh.build_cnt) */
-    int   ROTATErandom;     /* 'QRn' seed, 0 time, >= rotate input */
-    boolT SCALEinput;       /* true 'Qbk' if scaling input */
-    boolT SCALElast;        /* true 'Qbb' if scale last coord to max prev coord */
-    boolT SETroundoff;      /* true 'E' if qh DISTround is predefined */
-    boolT SKIPcheckmax;     /* true 'Q5' if skip qh_check_maxout */
-    boolT SKIPconvex;       /* true 'Q6' if skip convexity testing during pre-merge */
-    boolT SPLITthresholds;  /* true if upper_/lower_threshold defines a region
-                               used only for printing (not for qh ONLYgood) */
-    int   STOPcone;         /* 'TCn' 1+n for stopping after cone for point n*/
-    /*       also used by qh_build_withresart for err exit*/
-    int   STOPpoint;        /* 'TVn' 'TV-n' 1+n for stopping after/before(-)
-                            adding point n */
-    int   TESTpoints;   /* 'QTn' num of test points after qh.num_points.  Test points always coplanar. */
-    boolT TESTvneighbors;   /*  true 'Qv' if test vertex neighbors at end */
-    int   TRACElevel;       /* 'Tn' conditional IStracing level */
-    int   TRACElastrun;     /*  qh.TRACElevel applies to last qh.RERUN */
-    int   TRACEpoint;       /* 'TPn' start tracing when point n is a vertex */
-    realT TRACEdist;        /* 'TWn' start tracing when merge distance too big */
-    int   TRACEmerge;       /* 'TMn' start tracing before this merge */
-    boolT TRIangulate;      /* true 'Qt' if triangulate non-simplicial facets */
-    boolT TRInormals;   /* true 'Q11' if triangulate duplicates normals (sets Qt) */
-    boolT UPPERdelaunay;    /* true 'Qu' if computing furthest-site Delaunay */
-    boolT VERIFYoutput;     /* true 'Tv' if verify output at end of qhull */
-    boolT VIRTUALmemory;    /* true 'Q7' if depth-first processing in buildhull */
-    boolT VORONOI;      /* true 'v' if computing Voronoi diagram */
-
-    /*--------input constants ---------*/
-    realT AREAfactor;       /* 1/(hull_dim-1)! for converting det's to area */
-    boolT DOcheckmax;       /* true if calling qh_check_maxout (qh_initqhull_globals) */
-    char*  feasible_string;  /* feasible point 'Hn,n,n' for halfspace intersection */
-    coordT* feasible_point;  /*    as coordinates, both malloc'd */
-    boolT GETarea;          /* true 'Fa', 'FA', 'FS', 'PAn', 'PFn' if compute facet area/Voronoi volume in io.c */
-    boolT KEEPnearinside;   /* true if near-inside points in coplanarset */
-    int   hull_dim;         /* dimension of hull, set by initbuffers */
-    int   input_dim;    /* dimension of input, set by initbuffers */
-    int   num_points;       /* number of input points */
-    pointT* first_point;    /* array of input points, see POINTSmalloc */
-    boolT POINTSmalloc;     /*   true if qh first_point/num_points allocated */
-    pointT* input_points;   /* copy of original qh.first_point for input points for qh_joggleinput */
-    boolT input_malloc;     /* true if qh input_points malloc'd */
-    char  qhull_command[256];/* command line that invoked this program */
-    char  rbox_command[256]; /* command line that produced the input points */
-    char  qhull_options[512];/* descriptive list of options */
-    int   qhull_optionlen;  /*    length of last line */
-    int   qhull_optionsiz;  /*     size of qhull_options before qh_initbuild */
-    boolT VERTEXneighbors;  /* true if maintaining vertex neighbors */
-    boolT ZEROcentrum;      /* true if 'C-0' or 'C-0 Qx'.  sets ZEROall_ok */
-    realT* upper_threshold; /* don't print if facet->normal[k]>=upper_threshold[k]
-                             must set either GOODthreshold or SPLITthreshold
-                 if Delaunay, default is 0.0 for upper envelope */
-    realT* lower_threshold; /* don't print if facet->normal[k] <=lower_threshold[k] */
-    realT* upper_bound;     /* scale point[k] to new upper bound */
-    realT* lower_bound;     /* scale point[k] to new lower bound
-                 project if both upper_ and lower_bound == 0 */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-prec">-</a>
-
-      qh precision constants
-        precision constants for Qhull
-
-      notes:
-        qh_detroundoff() computes the maximum roundoff error for distance
-        and other computations.  It also sets default values for the
-        qh constants above.
-    */
-    realT ANGLEround;       /* max round off error for angles */
-    realT centrum_radius;   /* max centrum radius for convexity (roundoff added) */
-    realT cos_max;      /* max cosine for convexity (roundoff added) */
-    realT DISTround;        /* max round off error for distances, 'E' overrides */
-    realT MAXabs_coord;     /* max absolute coordinate */
-    realT MAXlastcoord;     /* max last coordinate for qh_scalelast */
-    realT MAXsumcoord;      /* max sum of coordinates */
-    realT MAXwidth;         /* max rectilinear width of point coordinates */
-    realT MINdenom_1;       /* min. abs. value for 1/x */
-    realT MINdenom;         /*    use divzero if denominator < MINdenom */
-    realT MINdenom_1_2;     /* min. abs. val for 1/x that allows normalization */
-    realT MINdenom_2;       /*    use divzero if denominator < MINdenom_2 */
-    realT MINlastcoord;     /* min. last coordinate for qh_scalelast */
-    boolT NARROWhull;       /* set in qh_initialhull if angle < qh_MAXnarrow */
-    realT* NEARzero;        /* hull_dim array for near zero in gausselim */
-    realT NEARinside;       /* keep points for qh_check_maxout if close to facet */
-    realT ONEmerge;         /* max distance for merging simplicial facets */
-    realT outside_err;      /* application's epsilon for coplanar points
-                             qh_check_bestdist() qh_check_points() reports error if point outside */
-    realT WIDEfacet;        /* size of wide facet for skipping ridge in
-                 area computation and locking centrum */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-intern">-</a>
-
-      qh internal constants
-        internal constants for Qhull
-    */
-    char qhull[sizeof("qhull")]; /* for checking ownership */
-    void* old_stat;         /* pointer to saved qh_qhstat, qh_save_qhull */
-    jmp_buf errexit;        /* exit label for qh_errexit, defined by setjmp() */
-    char jmpXtra[40];       /* extra bytes in case jmp_buf is defined wrong by compiler */
-    jmp_buf restartexit;    /* restart label for qh_errexit, defined by setjmp() */
-    char jmpXtra2[40];      /* extra bytes in case jmp_buf is defined wrong by compiler*/
-    FILE* fin;              /* pointer to input file, init by qh_meminit */
-    FILE* fout;             /* pointer to output file */
-    FILE* ferr;             /* pointer to error file */
-    pointT* interior_point; /* center point of the initial simplex*/
-    int   normal_size;      /* size in bytes for facet normals and point coords*/
-    int   center_size;      /* size in bytes for Voronoi centers */
-    int   TEMPsize;         /* size for small, temporary sets (in quick mem) */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-lists">-</a>
-
-      qh facet and vertex lists
-        defines lists of facets, new facets, visible facets, vertices, and
-        new vertices.  Includes counts, next ids, and trace ids.
-      see:
-        qh_resetlists()
-    */
-    facetT* facet_list;     /* first facet */
-    facetT*  facet_tail;     /* end of facet_list (dummy facet) */
-    facetT* facet_next;     /* next facet for buildhull()
-                     previous facets do not have outside sets
-                             NARROWhull: previous facets may have coplanar outside sets for qh_outcoplanar */
-    facetT* newfacet_list;  /* list of new facets to end of facet_list */
-    facetT* visible_list;   /* list of visible facets preceeding newfacet_list,
-                             facet->visible set */
-    int       num_visible;  /* current number of visible facets */
-    unsigned tracefacet_id;  /* set at init, then can print whenever */
-    facetT* tracefacet;     /*   set in newfacet/mergefacet, undone in delfacet*/
-    unsigned tracevertex_id;  /* set at buildtracing, can print whenever */
-    vertexT* tracevertex;     /*   set in newvertex, undone in delvertex*/
-    vertexT* vertex_list;     /* list of all vertices, to vertex_tail */
-    vertexT*  vertex_tail;    /*      end of vertex_list (dummy vertex) */
-    vertexT* newvertex_list; /* list of vertices in newfacet_list, to vertex_tail
-                             all vertices have 'newlist' set */
-    int   num_facets;   /* number of facets in facet_list
-                 includes visble faces (num_visible) */
-    int   num_vertices;     /* number of vertices in facet_list */
-    int   num_outside;      /* number of points in outsidesets (for tracing and RANDOMoutside)
-                               includes coplanar outsideset points for NARROWhull/qh_outcoplanar() */
-    int   num_good;         /* number of good facets (after findgood_all) */
-    unsigned facet_id;      /* ID of next, new facet from newfacet() */
-    unsigned ridge_id;      /* ID of next, new ridge from newridge() */
-    unsigned vertex_id;     /* ID of next, new vertex from newvertex() */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-var">-</a>
-
-      qh global variables
-        defines minimum and maximum distances, next visit ids, several flags,
-        and other global variables.
-        initialize in qh_initbuild or qh_maxmin if used in qh_buildhull
-    */
-    unsigned long hulltime; /* ignore time to set up input and randomize */
-    /*   use unsigned to avoid wrap-around errors */
-    boolT ALLOWrestart;     /* true if qh_precision can use qh.restartexit */
-    int   build_cnt;        /* number of calls to qh_initbuild */
-    qh_CENTER CENTERtype;   /* current type of facet->center, qh_CENTER */
-    int   furthest_id;      /* pointid of furthest point, for tracing */
-    facetT* GOODclosest;    /* closest facet to GOODthreshold in qh_findgood */
-    realT JOGGLEmax;        /* set 'QJn' if randomly joggle input */
-    boolT maxoutdone;       /* set qh_check_maxout(), cleared by qh_addpoint() */
-    realT max_outside;      /* maximum distance from a point to a facet,
-                   before roundoff, not simplicial vertices
-                   actual outer plane is +DISTround and
-                   computed outer plane is +2*DISTround */
-    realT max_vertex;       /* maximum distance (>0) from vertex to a facet,
-                   before roundoff, due to a merge */
-    realT min_vertex;       /* minimum distance (<0) from vertex to a facet,
-                   before roundoff, due to a merge
-                   if qh.JOGGLEmax, qh_makenewplanes sets it
-                   recomputed if qh.DOcheckmax, default -qh.DISTround */
-    boolT NEWfacets;        /* true while visible facets invalid due to new or merge
-                  from makecone/attachnewfacets to deletevisible */
-    boolT findbestnew;      /* true if partitioning calls qh_findbestnew */
-    boolT findbest_notsharp; /* true if new facets are at least 90 degrees */
-    boolT NOerrexit;        /* true if qh.errexit is not available */
-    realT PRINTcradius;     /* radius for printing centrums */
-    realT PRINTradius;      /* radius for printing vertex spheres and points */
-    boolT POSTmerging;      /* true when post merging */
-    int   printoutvar;      /* temporary variable for qh_printbegin, etc. */
-    int   printoutnum;      /* number of facets printed */
-    boolT QHULLfinished;    /* True after qhull() is finished */
-    realT totarea;          /* 'FA': total facet area computed by qh_getarea */
-    realT totvol;           /* 'FA': total volume computed by qh_getarea */
-    unsigned int visit_id;  /* unique ID for searching neighborhoods, */
-    unsigned int vertex_visit; /* unique ID for searching vertices */
-    boolT ZEROall_ok;       /* True if qh_checkzero always succeeds */
-    boolT WAScoplanar;      /* True if qh_partitioncoplanar (qh_check_maxout) */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-set">-</a>
-
-      qh global sets
-        defines sets for merging, initial simplex, hashing, extra input points,
-        and deleted vertices
-    */
-    setT* facet_mergeset;   /* temporary set of merges to be done */
-    setT* degen_mergeset;   /* temporary set of degenerate and redundant merges */
-    setT* hash_table;   /* hash table for matching ridges in qh_matchfacets
-                             size is setsize() */
-    setT* other_points;     /* additional points (first is qh interior_point) */
-    setT* del_vertices;     /* vertices to partition and delete with visible
-                             facets.  Have deleted set for checkfacet */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-buf">-</a>
-
-      qh global buffers
-        defines buffers for maxtrix operations, input, and error messages
-    */
-    coordT* gm_matrix;      /* (dim+1)Xdim matrix for geom.c */
-    coordT** gm_row;        /* array of gm_matrix rows */
-    char* line;             /* malloc'd input line of maxline+1 chars */
-    int maxline;
-    coordT* half_space;     /* malloc'd input array for halfspace (qh normal_size+coordT) */
-    coordT* temp_malloc;    /* malloc'd input array for points */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-static">-</a>
-
-      qh static variables
-        defines static variables for individual functions
-
-      notes:
-        do not use 'static' within a function.  Multiple instances of qhull
-        may exist.
-
-        do not assume zero initialization, 'QPn' may cause a restart
-    */
-    boolT ERREXITcalled;    /* true during errexit (prevents duplicate calls */
-    boolT firstcentrum;     /* for qh_printcentrum */
-    realT last_low;         /* qh_scalelast parameters for qh_setdelaunay */
-    realT last_high;
-    realT last_newhigh;
-    unsigned lastreport;    /* for qh_buildtracing */
-    int mergereport;        /* for qh_tracemerging */
-    boolT old_randomdist;   /* save RANDOMdist when io, tracing, or statistics */
-    int   ridgeoutnum;      /* number of ridges in 4OFF output */
-    void* old_qhstat;       /* for saving qh_qhstat in save_qhull() */
-    setT* old_tempstack;     /* for saving qhmem.tempstack in save_qhull */
-    setT* coplanarset;      /* set of coplanar facets for searching qh_findbesthorizon() */
-};
-
-/*=========== -macros- =========================*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="otherfacet_">-</a>
-
-  otherfacet_(ridge, facet)
-    return neighboring facet for a ridge in facet
-*/
-#define otherfacet_(ridge, facet) \
-    (((ridge)->top == (facet)) ? (ridge)->bottom : (ridge)->top)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="getid_">-</a>
-
-  getid_(p)
-    return ID for facet, ridge, or vertex
-    return MAXINT if NULL (-1 causes type conversion error )
-*/
-#define getid_(p)       ((p) ? (p)->id : -1)
-
-/*============== FORALL macros ===================*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLfacets">-</a>
-
-  FORALLfacets { ... }
-    assign 'facet' to each facet in qh.facet_list
-
-  notes:
-    uses 'facetT *facet;'
-    assumes last facet is a sentinel
-
-  see:
-    FORALLfacet_( facetlist )
-*/
-#define FORALLfacets for (facet=qh facet_list;facet && facet->next;facet=facet->next)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLpoints">-</a>
-
-  FORALLpoints { ... }
-    assign 'point' to each point in qh.first_point, qh.num_points
-
-  declare:
-    coordT *point, *pointtemp;
-*/
-#define FORALLpoints FORALLpoint_(qh first_point, qh num_points)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLpoint_">-</a>
-
-  FORALLpoint_( points, num) { ... }
-    assign 'point' to each point in points array of num points
-
-  declare:
-    coordT *point, *pointtemp;
-*/
-#define FORALLpoint_(points, num) for(point= (points), \
-                                      pointtemp= (points)+qh hull_dim*(num); point < pointtemp; point += qh hull_dim)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLvertices">-</a>
-
-  FORALLvertices { ... }
-    assign 'vertex' to each vertex in qh.vertex_list
-
-  declare:
-    vertexT *vertex;
-
-  notes:
-    assumes qh.vertex_list terminated with a sentinel
-*/
-#define FORALLvertices for (vertex=qh vertex_list;vertex && vertex->next;vertex= vertex->next)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHfacet_">-</a>
-
-  FOREACHfacet_( facets ) { ... }
-    assign 'facet' to each facet in facets
-
-  declare:
-    facetT *facet, **facetp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHfacet_(facets)    FOREACHsetelement_(facetT, facets, facet)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHneighbor_">-</a>
-
-  FOREACHneighbor_( facet ) { ... }
-    assign 'neighbor' to each neighbor in facet->neighbors
-
-  FOREACHneighbor_( vertex ) { ... }
-    assign 'neighbor' to each neighbor in vertex->neighbors
-
-  declare:
-    facetT *neighbor, **neighborp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHneighbor_(facet)  FOREACHsetelement_(facetT, facet->neighbors, neighbor)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHpoint_">-</a>
-
-  FOREACHpoint_( points ) { ... }
-    assign 'point' to each point in points set
-
-  declare:
-    pointT *point, **pointp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHpoint_(points)    FOREACHsetelement_(pointT, points, point)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHridge_">-</a>
-
-  FOREACHridge_( ridges ) { ... }
-    assign 'ridge' to each ridge in ridges set
-
-  declare:
-    ridgeT *ridge, **ridgep;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHridge_(ridges)    FOREACHsetelement_(ridgeT, ridges, ridge)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertex_">-</a>
-
-  FOREACHvertex_( vertices ) { ... }
-    assign 'vertex' to each vertex in vertices set
-
-  declare:
-    vertexT *vertex, **vertexp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertex_(vertices) FOREACHsetelement_(vertexT, vertices,vertex)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHfacet_i_">-</a>
-
-  FOREACHfacet_i_( facets ) { ... }
-    assign 'facet' and 'facet_i' for each facet in facets set
-
-  declare:
-    facetT *facet;
-    int     facet_n, facet_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHfacet_i_(facets)    FOREACHsetelement_i_(facetT, facets, facet)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHneighbor_i_">-</a>
-
-  FOREACHneighbor_i_( facet ) { ... }
-    assign 'neighbor' and 'neighbor_i' for each neighbor in facet->neighbors
-
-  FOREACHneighbor_i_( vertex ) { ... }
-    assign 'neighbor' and 'neighbor_i' for each neighbor in vertex->neighbors
-
-  declare:
-    facetT *neighbor;
-    int     neighbor_n, neighbor_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHneighbor_i_(facet)  FOREACHsetelement_i_(facetT, facet->neighbors, neighbor)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHpoint_i_">-</a>
-
-  FOREACHpoint_i_( points ) { ... }
-    assign 'point' and 'point_i' for each point in points set
-
-  declare:
-    pointT *point;
-    int     point_n, point_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHpoint_i_(points)    FOREACHsetelement_i_(pointT, points, point)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHridge_i_">-</a>
-
-  FOREACHridge_i_( ridges ) { ... }
-    assign 'ridge' and 'ridge_i' for each ridge in ridges set
-
-  declare:
-    ridgeT *ridge;
-    int     ridge_n, ridge_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHridge_i_(ridges)    FOREACHsetelement_i_(ridgeT, ridges, ridge)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertex_i_">-</a>
-
-  FOREACHvertex_i_( vertices ) { ... }
-    assign 'vertex' and 'vertex_i' for each vertex in vertices set
-
-  declare:
-    vertexT *vertex;
-    int     vertex_n, vertex_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
- */
-#define FOREACHvertex_i_(vertices) FOREACHsetelement_i_(vertexT, vertices,vertex)
-
-/********* -qhull.c prototypes (duplicated from qhull_a.h) **********************/
-
-void    qh_qhull(void);
-boolT   qh_addpoint(pointT* furthest, facetT* facet, boolT checkdist);
-void    qh_printsummary(FILE* fp);
-
-/********* -user.c prototypes (alphabetical) **********************/
-
-void    qh_errexit(int exitcode, facetT* facet, ridgeT* ridge);
-void    qh_errprint(char* string, facetT* atfacet, facetT* otherfacet, ridgeT* atridge, vertexT* atvertex);
-int     qh_new_qhull(int dim, int numpoints, coordT* points, boolT ismalloc,
-                     char* qhull_cmd, FILE* outfile, FILE* errfile);
-void    qh_printfacetlist(facetT* facetlist, setT* facets, boolT printall);
-void    qh_user_memsizes(void);
-
-/***** -geom.c/geom2.c prototypes (duplicated from geom.h) ****************/
-
-facetT* qh_findbest(pointT* point, facetT* startfacet,
-                    boolT bestoutside, boolT newfacets, boolT noupper,
-                    realT* dist, boolT* isoutside, int* numpart);
-facetT* qh_findbestnew(pointT* point, facetT* startfacet,
-                       realT* dist, boolT bestoutside, boolT* isoutside, int* numpart);
-boolT   qh_gram_schmidt(int dim, realT** rows);
-void    qh_outerinner(facetT* facet, realT* outerplane, realT* innerplane);
-void    qh_printsummary(FILE* fp);
-void    qh_projectinput(void);
-void    qh_randommatrix(realT* buffer, int dim, realT** row);
-void    qh_rotateinput(realT** rows);
-void    qh_scaleinput(void);
-void    qh_setdelaunay(int dim, int count, pointT* points);
-coordT*  qh_sethalfspace_all(int dim, int count, coordT* halfspaces, pointT* feasible);
-
-/***** -global.c prototypes (alphabetical) ***********************/
-
-unsigned long qh_clock(void);
-void    qh_checkflags(char* command, char* hiddenflags);
-void    qh_freebuffers(void);
-void    qh_freeqhull(boolT allmem);
-void    qh_init_A(FILE* infile, FILE* outfile, FILE* errfile, int argc, char* argv[]);
-void    qh_init_B(coordT* points, int numpoints, int dim, boolT ismalloc);
-void    qh_init_qhull_command(int argc, char* argv[]);
-void    qh_initbuffers(coordT* points, int numpoints, int dim, boolT ismalloc);
-void    qh_initflags(char* command);
-void    qh_initqhull_buffers(void);
-void    qh_initqhull_globals(coordT* points, int numpoints, int dim, boolT ismalloc);
-void    qh_initqhull_mem(void);
-void    qh_initqhull_start(FILE* infile, FILE* outfile, FILE* errfile);
-void    qh_initthresholds(char* command);
-void    qh_option(char* option, int* i, realT* r);
-#if qh_QHpointer
-void    qh_restore_qhull(qhT** oldqh);
-qhT*    qh_save_qhull(void);
-#endif
-
-/***** -io.c prototypes (duplicated from io.h) ***********************/
-
-void    dfacet(unsigned id);
-void    dvertex(unsigned id);
-void    qh_printneighborhood(FILE* fp, int format, facetT* facetA, facetT* facetB, boolT printall);
-void    qh_produce_output(void);
-coordT* qh_readpoints(int* numpoints, int* dimension, boolT* ismalloc);
-
-
-/********* -mem.c prototypes (duplicated from mem.h) **********************/
-
-void qh_meminit(FILE* ferr);
-void qh_memfreeshort(int* curlong, int* totlong);
-
-/********* -poly.c/poly2.c prototypes (duplicated from poly.h) **********************/
-
-void    qh_check_output(void);
-void    qh_check_points(void);
-setT*   qh_facetvertices(facetT* facetlist, setT* facets, boolT allfacets);
-facetT* qh_findbestfacet(pointT* point, boolT bestoutside,
-                         realT* bestdist, boolT* isoutside);
-vertexT* qh_nearvertex(facetT* facet, pointT* point, realT* bestdistp);
-pointT* qh_point(int id);
-setT*   qh_pointfacet(void /*qh.facet_list*/);
-int     qh_pointid(pointT* point);
-setT*   qh_pointvertex(void /*qh.facet_list*/);
-void    qh_setvoronoi_all(void);
-void    qh_triangulate(void /*qh facet_list*/);
-
-/********* -stat.c prototypes (duplicated from stat.h) **********************/
-
-void    qh_collectstatistics(void);
-void    qh_printallstatistics(FILE* fp, char* string);
-
-#endif /* qhDEFqhull */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qhull_a.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qhull_a.h
deleted file mode 100644
index 5d985a084ab6fd201a6864692d249972ab5cb2f7..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qhull_a.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qhull_a.h
-   all header files for compiling qhull
-
-   see qh-qhull.htm
-
-   see qhull.h for user-level definitions
-
-   see user.h for user-defineable constants
-
-   defines internal functions for qhull.c global.c
-
-   copyright (c) 1993-2003, The Geometry Center
-
-   Notes:  grep for ((" and (" to catch fprintf("lkasdjf");
-           full parens around (x?y:z)
-       use '#include qhull/qhull_a.h' to avoid name clashes
-*/
-
-#pragma once
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <string.h>
-#include <math.h>
-#include <float.h>    /* some compilers will not need float.h */
-#include <limits.h>
-#include <time.h>
-#include <ctype.h>
-/*** uncomment here and qset.c
-     if string.h does not define memcpy()
-#include <memory.h>
-*/
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-#include "geom.h"
-#include "merge.h"
-#include "poly.h"
-#include "io.h"
-#include "stat.h"
-
-#if qh_CLOCKtype == 2  /* defined in user.h from qhull.h */
-#include <sys/types.h>
-#include <sys/times.h>
-#include <unistd.h>
-#endif
-
-#ifdef _MSC_VER  /* Microsoft Visual C++ */
-#pragma warning( disable : 4056)  /* float constant expression.  Looks like a compiler bug */
-#pragma warning( disable : 4146)  /* unary minus applied to unsigned type */
-#pragma warning( disable : 4244)  /* conversion from 'unsigned long' to 'real' */
-#pragma warning( disable : 4305)  /* conversion from 'const double' to 'float' */
-#endif
-
-/* ======= -macros- =========== */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="traceN">-</a>
-
-  traceN((fp.ferr, "format\n", vars));
-    calls fprintf if qh.IStracing >= N
-
-  notes:
-    removing tracing reduces code size but doesn't change execution speed
-*/
-#ifndef qh_NOtrace
-#define trace0(args) {if (qh IStracing) fprintf args;}
-#define trace1(args) {if (qh IStracing >= 1) fprintf args;}
-#define trace2(args) {if (qh IStracing >= 2) fprintf args;}
-#define trace3(args) {if (qh IStracing >= 3) fprintf args;}
-#define trace4(args) {if (qh IStracing >= 4) fprintf args;}
-#define trace5(args) {if (qh IStracing >= 5) fprintf args;}
-#else /* qh_NOtrace */
-#define trace0(args) {}
-#define trace1(args) {}
-#define trace2(args) {}
-#define trace3(args) {}
-#define trace4(args) {}
-#define trace5(args) {}
-#endif /* qh_NOtrace */
-
-/***** -qhull.c prototypes (alphabetical after qhull) ********************/
-
-void    qh_qhull(void);
-boolT   qh_addpoint(pointT* furthest, facetT* facet, boolT checkdist);
-void    qh_buildhull(void);
-void    qh_buildtracing(pointT* furthest, facetT* facet);
-void    qh_build_withrestart(void);
-void    qh_errexit2(int exitcode, facetT* facet, facetT* otherfacet);
-void    qh_findhorizon(pointT* point, facetT* facet, int* goodvisible, int* goodhorizon);
-pointT* qh_nextfurthest(facetT** visible);
-void    qh_partitionall(setT* vertices, pointT* points, int npoints);
-void    qh_partitioncoplanar(pointT* point, facetT* facet, realT* dist);
-void    qh_partitionpoint(pointT* point, facetT* facet);
-void    qh_partitionvisible(boolT allpoints, int* numpoints);
-void    qh_precision(char* reason);
-void    qh_printsummary(FILE* fp);
-
-/***** -global.c internal prototypes (alphabetical) ***********************/
-
-void    qh_appendprint(qh_PRINT format);
-void    qh_freebuild(boolT allmem);
-void    qh_freebuffers(void);
-void    qh_initbuffers(coordT* points, int numpoints, int dim, boolT ismalloc);
-int     qh_strtol(const char* s, char** endp);
-double  qh_strtod(const char* s, char** endp);
-
-/***** -stat.c internal prototypes (alphabetical) ***********************/
-
-void    qh_allstatA(void);
-void    qh_allstatB(void);
-void    qh_allstatC(void);
-void    qh_allstatD(void);
-void    qh_allstatE(void);
-void    qh_allstatE2(void);
-void    qh_allstatF(void);
-void    qh_allstatG(void);
-void    qh_allstatH(void);
-void    qh_freebuffers(void);
-void    qh_initbuffers(coordT* points, int numpoints, int dim, boolT ismalloc);
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qset.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qset.h
deleted file mode 100644
index 165a84c3b361527d8478a66c829d29e49420816a..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/qset.h
+++ /dev/null
@@ -1,470 +0,0 @@
-/*<html><pre>  -<a                             href="qh-set.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qset.h
-     header file for qset.c that implements set
-
-   see qh-set.htm and qset.c
-
-   only uses mem.c, malloc/free
-
-   for error handling, writes message and calls
-      qh_errexit (qhmem_ERRqhull, NULL, NULL);
-
-   set operations satisfy the following properties:
-    - sets have a max size, the actual size (if different) is stored at the end
-    - every set is NULL terminated
-    - sets may be sorted or unsorted, the caller must distinguish this
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFset
-#define qhDEFset 1
-
-/*================= -structures- ===============*/
-
-#ifndef DEFsetT
-#define DEFsetT 1
-typedef struct setT setT;   /* a set is a sorted or unsorted array of pointers */
-#endif
-
-/*-<a                                      href="qh-set.htm#TOC"
->----------------------------------------</a><a name="setT">-</a>
-
-setT
-  a set or list of pointers with maximum size and actual size.
-
-variations:
-  unsorted, unique   -- a list of unique pointers with NULL terminator
-               user guarantees uniqueness
-  sorted         -- a sorted list of unique pointers with NULL terminator
-               qset.c guarantees uniqueness
-  unsorted           -- a list of pointers terminated with NULL
-  indexed        -- an array of pointers with NULL elements
-
-structure for set of n elements:
-
-    --------------
-    |  maxsize
-    --------------
-    |  e[0] - a pointer, may be NULL for indexed sets
-    --------------
-    |  e[1]
-
-    --------------
-    |  ...
-    --------------
-    |  e[n-1]
-    --------------
-    |  e[n] = NULL
-    --------------
-    |  ...
-    --------------
-    |  e[maxsize] - n+1 or NULL (determines actual size of set)
-    --------------
-
-*/
-
-/*-- setelemT -- internal type to allow both pointers and indices
-*/
-typedef union setelemT setelemT;
-union setelemT
-{
-    void*    p;
-    int      i;         /* integer used for e[maxSize] */
-};
-
-struct setT
-{
-    int maxsize;          /* maximum number of elements (except NULL) */
-    setelemT e[1];        /* array of pointers, tail is NULL */
-    /* last slot (unless NULL) is actual size+1
-       e[maxsize]==NULL or e[e[maxsize]-1]==NULL */
-    /* this may generate a warning since e[] contains
-    maxsize elements */
-};
-
-/*=========== -constants- =========================*/
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="SETelemsize">-</a>
-
-  SETelemsize
-    size of a set element in bytes
-*/
-#define SETelemsize sizeof(setelemT)
-
-
-/*=========== -macros- =========================*/
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHsetelement_">-</a>
-
-   FOREACHsetelement_(type, set, variable)
-     define FOREACH iterator
-
-   declare:
-     assumes *variable and **variablep are declared
-     no space in "variable)" [DEC Alpha cc compiler]
-
-   each iteration:
-     variable is set element
-     variablep is one beyond variable.
-
-   to repeat an element:
-     variablep--; / *repeat* /
-
-   at exit:
-     variable is NULL at end of loop
-
-   example:
-     #define FOREACHfacet_( facets ) FOREACHsetelement_( facetT, facets, facet )
-
-   notes:
-     use FOREACHsetelement_i_() if need index or include NULLs
-
-   WARNING:
-     nested loops can't use the same variable (define another FOREACH)
-
-     needs braces if nested inside another FOREACH
-     this includes intervening blocks, e.g. FOREACH...{ if () FOREACH...} )
-*/
-#define FOREACHsetelement_(type, set, variable) \
-    if (((variable= NULL), set)) for(\
-                                         variable##p= (type **)&((set)->e[0].p); \
-                                         (variable= *variable##p++);)
-
-/*-<a                                      href="qh-set.htm#TOC"
-  >----------------------------------------</a><a name="FOREACHsetelement_i_">-</a>
-
-   FOREACHsetelement_i_(type, set, variable)
-     define indexed FOREACH iterator
-
-   declare:
-     type *variable, variable_n, variable_i;
-
-   each iteration:
-     variable is set element, may be NULL
-     variable_i is index, variable_n is qh_setsize()
-
-   to repeat an element:
-     variable_i--; variable_n-- repeats for deleted element
-
-   at exit:
-     variable==NULL and variable_i==variable_n
-
-   example:
-     #define FOREACHfacet_i_( facets ) FOREACHsetelement_i_( facetT, facets, facet )
-
-   WARNING:
-     nested loops can't use the same variable (define another FOREACH)
-
-     needs braces if nested inside another FOREACH
-     this includes intervening blocks, e.g. FOREACH...{ if () FOREACH...} )
-*/
-#define FOREACHsetelement_i_(type, set, variable) \
-    if (((variable= NULL), set)) for (\
-                                          variable##_i= 0, variable= (type *)((set)->e[0].p), \
-                                          variable##_n= qh_setsize(set);\
-                                          variable##_i < variable##_n;\
-                                          variable= (type *)((set)->e[++variable##_i].p) )
-
-/*-<a                                    href="qh-set.htm#TOC"
-  >--------------------------------------</a><a name="FOREACHsetelementreverse_">-</a>
-
-   FOREACHsetelementreverse_(type, set, variable)-
-     define FOREACH iterator in reverse order
-
-   declare:
-     assumes *variable and **variablep are declared
-     also declare 'int variabletemp'
-
-   each iteration:
-     variable is set element
-
-   to repeat an element:
-     variabletemp++; / *repeat* /
-
-   at exit:
-     variable is NULL
-
-   example:
-     #define FOREACHvertexreverse_( vertices ) FOREACHsetelementreverse_( vertexT, vertices, vertex )
-
-   notes:
-     use FOREACHsetelementreverse12_() to reverse first two elements
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHsetelementreverse_(type, set, variable) \
-    if (((variable= NULL), set)) for(\
-                                         variable##temp= qh_setsize(set)-1, variable= qh_setlast(set);\
-                                         variable; variable= \
-                                                 ((--variable##temp >= 0) ? SETelemt_(set, variable##temp, type) : NULL))
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHsetelementreverse12_">-</a>
-
-   FOREACHsetelementreverse12_(type, set, variable)-
-     define FOREACH iterator with e[1] and e[0] reversed
-
-   declare:
-     assumes *variable and **variablep are declared
-
-   each iteration:
-     variable is set element
-     variablep is one after variable.
-
-   to repeat an element:
-     variablep--; / *repeat* /
-
-   at exit:
-     variable is NULL at end of loop
-
-   example
-     #define FOREACHvertexreverse12_( vertices ) FOREACHsetelementreverse12_( vertexT, vertices, vertex )
-
-   notes:
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHsetelementreverse12_(type, set, variable) \
-    if (((variable= NULL), set)) for(\
-                                         variable##p= (type **)&((set)->e[1].p); \
-                                         (variable= *variable##p); \
-                                         variable##p == ((type **)&((set)->e[0].p))?variable##p += 2: \
-                                                 (variable##p == ((type **)&((set)->e[1].p))?variable##p--:variable##p++))
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHelem_">-</a>
-
-   FOREACHelem_( set )-
-     iterate elements in a set
-
-   declare:
-     void *elem, *elemp;
-
-   each iteration:
-     elem is set element
-     elemp is one beyond
-
-   to repeat an element:
-     elemp--; / *repeat* /
-
-   at exit:
-     elem == NULL at end of loop
-
-   example:
-     FOREACHelem_(set) {
-
-   notes:
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHelem_(set) FOREACHsetelement_(void, set, elem)
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHset_">-</a>
-
-   FOREACHset_( set )-
-     iterate a set of sets
-
-   declare:
-     setT *set, **setp;
-
-   each iteration:
-     set is set element
-     setp is one beyond
-
-   to repeat an element:
-     setp--; / *repeat* /
-
-   at exit:
-     set == NULL at end of loop
-
-   example
-     FOREACHset_(sets) {
-
-   notes:
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHset_(sets) FOREACHsetelement_(setT, sets, set)
-
-/*-<a                                       href="qh-set.htm#TOC"
-  >-----------------------------------------</a><a name="SETindex_">-</a>
-
-   SETindex_( set, elem )
-     return index of elem in set
-
-   notes:
-     for use with FOREACH iteration
-
-   example:
-     i= SETindex_(ridges, ridge)
-*/
-#define SETindex_(set, elem) ((void **)elem##p - (void **)&(set)->e[1].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETref_">-</a>
-
-   SETref_( elem )
-     l.h.s. for modifying the current element in a FOREACH iteration
-
-   example:
-     SETref_(ridge)= anotherridge;
-*/
-#define SETref_(elem) (elem##p[-1])
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETelem_">-</a>
-
-   SETelem_(set, n)
-     return the n'th element of set
-
-   notes:
-      assumes that n is valid [0..size] and that set is defined
-      use SETelemt_() for type cast
-*/
-#define SETelem_(set, n)           ((set)->e[n].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETelemt_">-</a>
-
-   SETelemt_(set, n, type)
-     return the n'th element of set as a type
-
-   notes:
-      assumes that n is valid [0..size] and that set is defined
-*/
-#define SETelemt_(set, n, type)    ((type*)((set)->e[n].p))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETelemaddr_">-</a>
-
-   SETelemaddr_(set, n, type)
-     return address of the n'th element of a set
-
-   notes:
-      assumes that n is valid [0..size] and set is defined
-*/
-#define SETelemaddr_(set, n, type) ((type **)(&((set)->e[n].p)))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETfirst_">-</a>
-
-   SETfirst_(set)
-     return first element of set
-
-*/
-#define SETfirst_(set)             ((set)->e[0].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETfirstt_">-</a>
-
-   SETfirstt_(set, type)
-     return first element of set as a type
-
-*/
-#define SETfirstt_(set, type)      ((type*)((set)->e[0].p))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETsecond_">-</a>
-
-   SETsecond_(set)
-     return second element of set
-
-*/
-#define SETsecond_(set)            ((set)->e[1].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETsecondt_">-</a>
-
-   SETsecondt_(set, type)
-     return second element of set as a type
-*/
-#define SETsecondt_(set, type)     ((type*)((set)->e[1].p))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETaddr_">-</a>
-
-   SETaddr_(set, type)
-       return address of set's elements
-*/
-#define SETaddr_(set,type)     ((type **)(&((set)->e[0].p)))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETreturnsize_">-</a>
-
-   SETreturnsize_(set, size)
-     return size of a set
-
-   notes:
-      set must be defined
-      use qh_setsize(set) unless speed is critical
-*/
-#define SETreturnsize_(set, size) (((size)= ((set)->e[(set)->maxsize].i))?(--(size)):((size)= (set)->maxsize))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETempty_">-</a>
-
-   SETempty_(set)
-     return true (1) if set is empty
-
-   notes:
-      set may be NULL
-*/
-#define SETempty_(set)            (!set || (SETfirst_(set) ? 0:1))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETtruncate_">-</a>
-
-   SETtruncate_(set)
-     return first element of set
-
-   see:
-     qh_settruncate()
-
-*/
-#define SETtruncate_(set, size) {set->e[set->maxsize].i= size+1; /* maybe overwritten */ \
-        set->e[size].p= NULL;}
-
-/*======= prototypes in alphabetical order ============*/
-
-void  qh_setaddsorted(setT** setp, void* elem);
-void  qh_setaddnth(setT** setp, int nth, void* newelem);
-void  qh_setappend(setT** setp, void* elem);
-void  qh_setappend_set(setT** setp, setT* setA);
-void  qh_setappend2ndlast(setT** setp, void* elem);
-void  qh_setcheck(setT* set, char* tname, int id);
-void  qh_setcompact(setT* set);
-setT* qh_setcopy(setT* set, int extra);
-void* qh_setdel(setT* set, void* elem);
-void* qh_setdellast(setT* set);
-void* qh_setdelnth(setT* set, int nth);
-void* qh_setdelnthsorted(setT* set, int nth);
-void* qh_setdelsorted(setT* set, void* newelem);
-setT* qh_setduplicate(setT* set, int elemsize);
-int   qh_setequal(setT* setA, setT* setB);
-int   qh_setequal_except(setT* setA, void* skipelemA, setT* setB, void* skipelemB);
-int   qh_setequal_skip(setT* setA, int skipA, setT* setB, int skipB);
-void  qh_setfree(setT** set);
-void  qh_setfree2(setT** setp, int elemsize);
-void  qh_setfreelong(setT** set);
-int   qh_setin(setT* set, void* setelem);
-int   qh_setindex(setT* set, void* setelem);
-void  qh_setlarger(setT** setp);
-void* qh_setlast(setT* set);
-setT* qh_setnew(int size);
-setT* qh_setnew_delnthsorted(setT* set, int size, int nth, int prepend);
-void  qh_setprint(FILE* fp, char* string, setT* set);
-void  qh_setreplace(setT* set, void* oldelem, void* newelem);
-int   qh_setsize(setT* set);
-setT* qh_settemp(int setsize);
-void  qh_settempfree(setT** set);
-void  qh_settempfree_all(void);
-setT* qh_settemppop(void);
-void  qh_settemppush(setT* set);
-void  qh_settruncate(setT* set, int size);
-int   qh_setunique(setT** set, void* elem);
-void  qh_setzero(setT* set, int index, int size);
-
-
-#endif /* qhDEFset */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/stat.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/stat.h
deleted file mode 100644
index 6e7b0fc60e59b0b60d74d338425efe5812a1b554..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/stat.h
+++ /dev/null
@@ -1,528 +0,0 @@
-/*<html><pre>  -<a                             href="qh-stat.htm"
->-------------------------------</a><a name="TOP">-</a>
-
- stat.h
-   contains all statistics that are collected for qhull
-
- see qh-stat.htm and stat.c
-
- copyright (c) 1993-2003, The Geometry Center
-
- recompile qhull if you change this file
-
- Integer statistics are Z* while real statistics are W*.
-
- define maydebugx to call a routine at every statistic event
-
-*/
-
-#ifndef qhDEFstat
-#define qhDEFstat 1
-
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="KEEPstatistics">-</a>
-
-  qh_KEEPstatistics
-    0 turns off statistic gathering (except zzdef/zzinc/zzadd/zzval/wwval)
-*/
-#ifndef qh_KEEPstatistics
-#define qh_KEEPstatistics 1
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="statistics">-</a>
-
-  Zxxx for integers, Wxxx for reals
-
-  notes:
-    be sure that all statistics are defined in stat.c
-      otherwise initialization may core dump
-    can pick up all statistics by:
-      grep '[zw].*_[(][ZW]' *.c >z.x
-    remove trailers with query">-</a>
-    remove leaders with  query-replace-regexp [ ^I]+  (
-*/
-#if qh_KEEPstatistics
-enum statistics       /* alphabetical after Z/W */
-{
-    Zacoplanar,
-    Wacoplanarmax,
-    Wacoplanartot,
-    Zangle,
-    Wangle,
-    Wanglemax,
-    Wanglemin,
-    Zangletests,
-    Wareatot,
-    Wareamax,
-    Wareamin,
-    Zavoidold,
-    Wavoidoldmax,
-    Wavoidoldtot,
-    Zback0,
-    Zbestcentrum,
-    Zbestdist,
-    Zbestlower,
-    Zbestlowerv,
-    Zcentrumtests,
-    Zcheckpart,
-    Zcomputefurthest,
-    Zconcave,
-    Wconcavemax,
-    Wconcavetot,
-    Zconcaveridges,
-    Zconcaveridge,
-    Zcoplanar,
-    Wcoplanarmax,
-    Wcoplanartot,
-    Zcoplanarangle,
-    Zcoplanarcentrum,
-    Zcoplanarhorizon,
-    Zcoplanarinside,
-    Zcoplanarpart,
-    Zcoplanarridges,
-    Wcpu,
-    Zcyclefacetmax,
-    Zcyclefacettot,
-    Zcyclehorizon,
-    Zcyclevertex,
-    Zdegen,
-    Wdegenmax,
-    Wdegentot,
-    Zdegenvertex,
-    Zdelfacetdup,
-    Zdelridge,
-    Zdelvertextot,
-    Zdelvertexmax,
-    Zdetsimplex,
-    Zdistcheck,
-    Zdistconvex,
-    Zdistgood,
-    Zdistio,
-    Zdistplane,
-    Zdiststat,
-    Zdistvertex,
-    Zdistzero,
-    Zdoc1,
-    Zdoc2,
-    Zdoc3,
-    Zdoc4,
-    Zdoc5,
-    Zdoc6,
-    Zdoc7,
-    Zdoc8,
-    Zdoc9,
-    Zdoc10,
-    Zdoc11,
-    Zdoc12,
-    Zdropdegen,
-    Zdropneighbor,
-    Zdupflip,
-    Zduplicate,
-    Wduplicatemax,
-    Wduplicatetot,
-    Zdupridge,
-    Zdupsame,
-    Zflipped,
-    Wflippedmax,
-    Wflippedtot,
-    Zflippedfacets,
-    Zfindbest,
-    Zfindbestmax,
-    Zfindbesttot,
-    Zfindcoplanar,
-    Zfindfail,
-    Zfindhorizon,
-    Zfindhorizonmax,
-    Zfindhorizontot,
-    Zfindjump,
-    Zfindnew,
-    Zfindnewmax,
-    Zfindnewtot,
-    Zfindnewjump,
-    Zfindnewsharp,
-    Zgauss0,
-    Zgoodfacet,
-    Zhashlookup,
-    Zhashridge,
-    Zhashridgetest,
-    Zhashtests,
-    Zinsidevisible,
-    Zintersect,
-    Zintersectfail,
-    Zintersectmax,
-    Zintersectnum,
-    Zintersecttot,
-    Zmaxneighbors,
-    Wmaxout,
-    Wmaxoutside,
-    Zmaxridges,
-    Zmaxvertex,
-    Zmaxvertices,
-    Zmaxvneighbors,
-    Zmemfacets,
-    Zmempoints,
-    Zmemridges,
-    Zmemvertices,
-    Zmergeflipdup,
-    Zmergehorizon,
-    Zmergeinittot,
-    Zmergeinitmax,
-    Zmergeinittot2,
-    Zmergeintohorizon,
-    Zmergenew,
-    Zmergesettot,
-    Zmergesetmax,
-    Zmergesettot2,
-    Zmergesimplex,
-    Zmergevertex,
-    Wmindenom,
-    Wminvertex,
-    Zminnorm,
-    Zmultiridge,
-    Znearlysingular,
-    Zneighbor,
-    Wnewbalance,
-    Wnewbalance2,
-    Znewfacettot,
-    Znewfacetmax,
-    Znewvertex,
-    Wnewvertex,
-    Wnewvertexmax,
-    Znoarea,
-    Znonsimplicial,
-    Znowsimplicial,
-    Znotgood,
-    Znotgoodnew,
-    Znotmax,
-    Znumfacets,
-    Znummergemax,
-    Znummergetot,
-    Znumneighbors,
-    Znumridges,
-    Znumvertices,
-    Znumvisibility,
-    Znumvneighbors,
-    Zonehorizon,
-    Zpartangle,
-    Zpartcoplanar,
-    Zpartflip,
-    Zparthorizon,
-    Zpartinside,
-    Zpartition,
-    Zpartitionall,
-    Zpartnear,
-    Zpbalance,
-    Wpbalance,
-    Wpbalance2,
-    Zpostfacets,
-    Zpremergetot,
-    Zprocessed,
-    Zremvertex,
-    Zremvertexdel,
-    Zrenameall,
-    Zrenamepinch,
-    Zrenameshare,
-    Zretry,
-    Wretrymax,
-    Zridge,
-    Wridge,
-    Wridgemax,
-    Zridge0,
-    Wridge0,
-    Wridge0max,
-    Zridgemid,
-    Wridgemid,
-    Wridgemidmax,
-    Zridgeok,
-    Wridgeok,
-    Wridgeokmax,
-    Zsearchpoints,
-    Zsetplane,
-    Ztestvneighbor,
-    Ztotcheck,
-    Ztothorizon,
-    Ztotmerge,
-    Ztotpartcoplanar,
-    Ztotpartition,
-    Ztotridges,
-    Ztotvertices,
-    Ztotvisible,
-    Ztricoplanar,
-    Ztricoplanarmax,
-    Ztricoplanartot,
-    Ztridegen,
-    Ztrimirror,
-    Ztrinull,
-    Wvertexmax,
-    Wvertexmin,
-    Zvertexridge,
-    Zvertexridgetot,
-    Zvertexridgemax,
-    Zvertices,
-    Zvisfacettot,
-    Zvisfacetmax,
-    Zvisvertextot,
-    Zvisvertexmax,
-    Zwidefacet,
-    Zwidevertices,
-    ZEND
-};
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="ZZstat">-</a>
-
-  Zxxx/Wxxx statistics that remain defined if qh_KEEPstatistics=0
-
-  notes:
-    be sure to use zzdef, zzinc, etc. with these statistics (no double checking!)
-*/
-#else
-enum statistics       /* for zzdef etc. macros */
-{
-    Zback0,
-    Zbestdist,
-    Zcentrumtests,
-    Zcheckpart,
-    Zconcaveridges,
-    Zcoplanarhorizon,
-    Zcoplanarpart,
-    Zcoplanarridges,
-    Zcyclefacettot,
-    Zcyclehorizon,
-    Zdelvertextot,
-    Zdistcheck,
-    Zdistconvex,
-    Zdistzero,
-    Zdoc1,
-    Zdoc2,
-    Zdoc3,
-    Zdoc11,
-    Zflippedfacets,
-    Zgauss0,
-    Zminnorm,
-    Zmultiridge,
-    Znearlysingular,
-    Wnewvertexmax,
-    Znumvisibility,
-    Zpartcoplanar,
-    Zpartition,
-    Zpartitionall,
-    Zprocessed,
-    Zretry,
-    Zridge,
-    Wridge,
-    Wridgemax,
-    Zridge0,
-    Wridge0,
-    Wridge0max,
-    Zridgemid,
-    Wridgemid,
-    Wridgemidmax,
-    Zridgeok,
-    Wridgeok,
-    Wridgeokmax,
-    Zsetplane,
-    Ztotmerge,
-    ZEND
-};
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="ztype">-</a>
-
-  ztype
-    the type of a statistic sets its initial value.
-
-  notes:
-    The type should be the same as the macro for collecting the statistic
-*/
-enum ztypes {zdoc, zinc, zadd, zmax, zmin, ZTYPEreal, wadd, wmax, wmin, ZTYPEend};
-
-/*========== macros and constants =============*/
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="MAYdebugx">-</a>
-
-  MAYdebugx
-    define as maydebug() to be called frequently for error trapping
-*/
-#define MAYdebugx
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zdef_">-</a>
-
-  zzdef_, zdef_( type, name, doc, -1)
-    define a statistic (assumes 'qhstat.next= 0;')
-
-  zdef_( type, name, doc, count)
-    define an averaged statistic
-    printed as name/count
-*/
-#define zzdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
-    qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
-#if qh_KEEPstatistics
-#define zdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
-    qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
-#else
-#define zdef_(type,name,doc,count)
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zinc_">-</a>
-
-  zzinc_( name ), zinc_( name)
-    increment an integer statistic
-*/
-#define zzinc_(id) {MAYdebugx; qhstat stats[id].i++;}
-#if qh_KEEPstatistics
-#define zinc_(id) {MAYdebugx; qhstat stats[id].i++;}
-#else
-#define zinc_(id) {}
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zadd_">-</a>
-
-  zzadd_( name, value ), zadd_( name, value ), wadd_( name, value )
-    add value to an integer or real statistic
-*/
-#define zzadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
-#define wwadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
-#if qh_KEEPstatistics
-#define zadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
-#define wadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
-#else
-#define zadd_(id, val) {}
-#define wadd_(id, val) {}
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zval_">-</a>
-
-  zzval_( name ), zval_( name ), wwval_( name )
-    set or return value of a statistic
-*/
-#define zzval_(id) ((qhstat stats[id]).i)
-#define wwval_(id) ((qhstat stats[id]).r)
-#if qh_KEEPstatistics
-#define zval_(id) ((qhstat stats[id]).i)
-#define wval_(id) ((qhstat stats[id]).r)
-#else
-#define zval_(id) qhstat tempi
-#define wval_(id) qhstat tempr
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zmax_">-</a>
-
-  zmax_( id, val ), wmax_( id, value )
-    maximize id with val
-*/
-#define wwmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
-#if qh_KEEPstatistics
-#define zmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].i,(val));}
-#define wmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
-#else
-#define zmax_(id, val) {}
-#define wmax_(id, val) {}
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zmin_">-</a>
-
-  zmin_( id, val ), wmin_( id, value )
-    minimize id with val
-*/
-#if qh_KEEPstatistics
-#define zmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].i,(val));}
-#define wmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].r,(val));}
-#else
-#define zmin_(id, val) {}
-#define wmin_(id, val) {}
-#endif
-
-/*================== stat.h types ==============*/
-
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="intrealT">-</a>
-
-  intrealT
-    union of integer and real, used for statistics
-*/
-typedef union intrealT intrealT;    /* union of int and realT */
-union intrealT
-{
-    int i;
-    realT r;
-};
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="qhstat">-</a>
-
-  qhstat
-    global data structure for statistics
-
-  notes:
-   access to qh_qhstat is via the "qhstat" macro.  There are two choices
-   qh_QHpointer = 1     access globals via a pointer
-                        enables qh_saveqhull() and qh_restoreqhull()
-        = 0     qh_qhstat is a static data structure
-                only one instance of qhull() can be active at a time
-            default value
-   qh_QHpointer is defined in qhull.h
-
-   allocated in stat.c
-*/
-typedef struct qhstatT qhstatT;
-#if qh_QHpointer
-#define qhstat qh_qhstat->
-extern qhstatT* qh_qhstat;
-#else
-#define qhstat qh_qhstat.
-extern qhstatT qh_qhstat;
-#endif
-struct qhstatT
-{
-    intrealT   stats[ZEND];     /* integer and real statistics */
-    unsigned   char id[ZEND + 10]; /* id's in print order */
-    char*      doc[ZEND];       /* array of documentation strings */
-    short int  count[ZEND];     /* -1 if none, else index of count to use */
-    char       type[ZEND];      /* type, see ztypes above */
-    char       printed[ZEND];   /* true, if statistic has been printed */
-    intrealT   init[ZTYPEend];  /* initial values by types, set initstatistics */
-
-    int        next;            /* next index for zdef_ */
-    int        precision;       /* index for precision problems */
-    int        vridges;         /* index for Voronoi ridges */
-    int        tempi;
-    realT      tempr;
-};
-
-/*========== function prototypes ===========*/
-
-void    qh_allstatA(void);
-void    qh_allstatB(void);
-void    qh_allstatC(void);
-void    qh_allstatD(void);
-void    qh_allstatE(void);
-void    qh_allstatE2(void);
-void    qh_allstatF(void);
-void    qh_allstatG(void);
-void    qh_allstatH(void);
-void    qh_allstatI(void);
-void    qh_allstatistics(void);
-void    qh_collectstatistics(void);
-void    qh_freestatistics(void);
-void    qh_initstatistics(void);
-boolT   qh_newstats(int index, int* nextindex);
-boolT   qh_nostatistic(int i);
-void    qh_printallstatistics(FILE* fp, char* string);
-void    qh_printstatistics(FILE* fp, char* string);
-void    qh_printstatlevel(FILE* fp, int id, int start);
-void    qh_printstats(FILE* fp, int index, int* nextindex);
-realT   qh_stddev(int num, realT tot, realT tot2, realT* ave);
-
-#endif   /* qhDEFstat */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/user.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/user.h
deleted file mode 100644
index 63ee9e5b77500cba8fbbc5ed2f4769d24b38d663..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/include/qhull/user.h
+++ /dev/null
@@ -1,762 +0,0 @@
-/*<html><pre>  -<a                             href="qh-user.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   user.h
-   user redefinable constants
-
-   see qh-user.htm.  see COPYING for copyright information.
-
-   before reading any code, review qhull.h for data structure definitions and
-   the "qh" macro.
-*/
-
-#ifndef qhDEFuser
-#define qhDEFuser 1
-
-/*============= data types and configuration macros ==========*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="realT">-</a>
-
-  realT
-    set the size of floating point numbers
-
-  qh_REALdigits
-    maximimum number of significant digits
-
-  qh_REAL_1, qh_REAL_2n, qh_REAL_3n
-    format strings for printf
-
-  qh_REALmax, qh_REALmin
-    maximum and minimum (near zero) values
-
-  qh_REALepsilon
-    machine roundoff.  Maximum roundoff error for addition and multiplication.
-
-  notes:
-   Select whether to store floating point numbers in single precision (float)
-   or double precision (double).
-
-   Use 'float' to save about 8% in time and 25% in space.  This is particularly
-   help if high-d where convex hulls are space limited.  Using 'float' also
-   reduces the printed size of Qhull's output since numbers have 8 digits of
-   precision.
-
-   Use 'double' when greater arithmetic precision is needed.  This is needed
-   for Delaunay triangulations and Voronoi diagrams when you are not merging
-   facets.
-
-   If 'double' gives insufficient precision, your data probably includes
-   degeneracies.  If so you should use facet merging (done by default)
-   or exact arithmetic (see imprecision section of manual, qh-impre.htm).
-   You may also use option 'Po' to force output despite precision errors.
-
-   You may use 'long double', but many format statements need to be changed
-   and you may need a 'long double' square root routine.  S. Grundmann
-   (sg@eeiwzb.et.tu-dresden.de) has done this.  He reports that the code runs
-   much slower with little gain in precision.
-
-   WARNING: on some machines,    int f(){realT a= REALmax;return (a == REALmax);}
-      returns False.  Use (a > REALmax/2) instead of (a == REALmax).
-
-   REALfloat =   1      all numbers are 'float' type
-             =   0      all numbers are 'double' type
-*/
-#define REALfloat 0
-
-#if (REALfloat == 1)
-#define realT float
-#define REALmax FLT_MAX
-#define REALmin FLT_MIN
-#define REALepsilon FLT_EPSILON
-#define qh_REALdigits 8   /* maximum number of significant digits */
-#define qh_REAL_1 "%6.8g "
-#define qh_REAL_2n "%6.8g %6.8g\n"
-#define qh_REAL_3n "%6.8g %6.8g %6.8g\n"
-
-#elif (REALfloat == 0)
-#define realT double
-#define REALmax DBL_MAX
-#define REALmin DBL_MIN
-#define REALepsilon DBL_EPSILON
-#define qh_REALdigits 16    /* maximum number of significant digits */
-#define qh_REAL_1 "%6.16g "
-#define qh_REAL_2n "%6.16g %6.16g\n"
-#define qh_REAL_3n "%6.16g %6.16g %6.16g\n"
-
-#else
-#error unknown float option
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="CPUclock">-</a>
-
-  qh_CPUclock
-    define the clock() function for reporting the total time spent by Qhull
-    returns CPU ticks as a 'long int'
-    qh_CPUclock is only used for reporting the total time spent by Qhull
-
-  qh_SECticks
-    the number of clock ticks per second
-
-  notes:
-    looks for CLOCKS_PER_SEC, CLOCKS_PER_SECOND, or assumes microseconds
-    to define a custom clock, set qh_CLOCKtype to 0
-
-    if your system does not use clock() to return CPU ticks, replace
-    qh_CPUclock with the corresponding function.  It is converted
-    to unsigned long to prevent wrap-around during long runs.
-
-
-   Set qh_CLOCKtype to
-
-     1      for CLOCKS_PER_SEC, CLOCKS_PER_SECOND, or microsecond
-                Note:  may fail if more than 1 hour elapsed time
-
-     2      use qh_clock() with POSIX times() (see global.c)
-*/
-#define qh_CLOCKtype 1  /* change to the desired number */
-
-#if (qh_CLOCKtype == 1)
-
-#if defined (CLOCKS_PER_SECOND)
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks CLOCKS_PER_SECOND
-
-#elif defined (CLOCKS_PER_SEC)
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks CLOCKS_PER_SEC
-
-#elif defined (CLK_TCK)
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks CLK_TCK
-
-#else
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks 1E6
-#endif
-
-#elif (qh_CLOCKtype == 2)
-#define qh_CPUclock    qh_clock()  /* return CPU clock */
-#define qh_SECticks 100
-
-#else /* qh_CLOCKtype == ? */
-#error unknown clock option
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="RANDOM">-</a>
-
-  qh_RANDOMtype, qh_RANDOMmax, qh_RANDOMseed
-    define random number generator
-
-    qh_RANDOMint generates a random integer between 0 and qh_RANDOMmax.
-    qh_RANDOMseed sets the random number seed for qh_RANDOMint
-
-  Set qh_RANDOMtype (default 5) to:
-    1       for random() with 31 bits (UCB)
-    2       for rand() with RAND_MAX or 15 bits (system 5)
-    3       for rand() with 31 bits (Sun)
-    4       for lrand48() with 31 bits (Solaris)
-    5       for qh_rand() with 31 bits (included with Qhull)
-
-  notes:
-    Random numbers are used by rbox to generate point sets.  Random
-    numbers are used by Qhull to rotate the input ('QRn' option),
-    simulate a randomized algorithm ('Qr' option), and to simulate
-    roundoff errors ('Rn' option).
-
-    Random number generators differ between systems.  Most systems provide
-    rand() but the period varies.  The period of rand() is not critical
-    since qhull does not normally use random numbers.
-
-    The default generator is Park & Miller's minimal standard random
-    number generator [CACM 31:1195 '88].  It is included with Qhull.
-
-    If qh_RANDOMmax is wrong, qhull will report a warning and Geomview
-    output will likely be invisible.
-*/
-#define qh_RANDOMtype 5   /* *** change to the desired number *** */
-
-#if (qh_RANDOMtype == 1)
-#define qh_RANDOMmax ((realT)0x7fffffffUL)  /* 31 bits, random()/MAX */
-#define qh_RANDOMint random()
-#define qh_RANDOMseed_(seed) srandom(seed);
-
-#elif (qh_RANDOMtype == 2)
-#ifdef RAND_MAX
-#define qh_RANDOMmax ((realT)RAND_MAX)
-#else
-#define qh_RANDOMmax ((realT)32767)   /* 15 bits (System 5) */
-#endif
-#define qh_RANDOMint  rand()
-#define qh_RANDOMseed_(seed) srand((unsigned)seed);
-
-#elif (qh_RANDOMtype == 3)
-#define qh_RANDOMmax ((realT)0x7fffffffUL)  /* 31 bits, Sun */
-#define qh_RANDOMint  rand()
-#define qh_RANDOMseed_(seed) srand((unsigned)seed);
-
-#elif (qh_RANDOMtype == 4)
-#define qh_RANDOMmax ((realT)0x7fffffffUL)  /* 31 bits, lrand38()/MAX */
-#define qh_RANDOMint lrand48()
-#define qh_RANDOMseed_(seed) srand48(seed);
-
-#elif (qh_RANDOMtype == 5)
-#define qh_RANDOMmax ((realT)2147483646UL)  /* 31 bits, qh_rand/MAX */
-#define qh_RANDOMint qh_rand()
-#define qh_RANDOMseed_(seed) qh_srand(seed);
-/* unlike rand(), never returns 0 */
-
-#else
-#error: unknown random option
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="ORIENTclock">-</a>
-
-  qh_ORIENTclock
-    0 for inward pointing normals by Geomview convention
-*/
-#define qh_ORIENTclock 0
-
-
-/*========= performance related constants =========*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="HASHfactor">-</a>
-
-  qh_HASHfactor
-    total hash slots / used hash slots.  Must be at least 1.1.
-
-  notes:
-    =2 for at worst 50% occupancy for qh hash_table and normally 25% occupancy
-*/
-#define qh_HASHfactor 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="VERIFYdirect">-</a>
-
-  qh_VERIFYdirect
-    with 'Tv' verify all points against all facets if op count is smaller
-
-  notes:
-    if greater, calls qh_check_bestdist() instead
-*/
-#define qh_VERIFYdirect 1000000
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="INITIALsearch">-</a>
-
-  qh_INITIALsearch
-     if qh_INITIALmax, search points up to this dimension
-*/
-#define qh_INITIALsearch 6
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="INITIALmax">-</a>
-
-  qh_INITIALmax
-    if dim >= qh_INITIALmax, use min/max coordinate points for initial simplex
-
-  notes:
-    from points with non-zero determinants
-    use option 'Qs' to override (much slower)
-*/
-#define qh_INITIALmax 8
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEdefault">-</a>
-
-  qh_JOGGLEdefault
-    default qh.JOGGLEmax is qh.DISTround * qh_JOGGLEdefault
-
-  notes:
-    rbox s r 100 | qhull QJ1e-15 QR0 generates 90% faults at distround 7e-16
-    rbox s r 100 | qhull QJ1e-14 QR0 generates 70% faults
-    rbox s r 100 | qhull QJ1e-13 QR0 generates 35% faults
-    rbox s r 100 | qhull QJ1e-12 QR0 generates 8% faults
-    rbox s r 100 | qhull QJ1e-11 QR0 generates 1% faults
-    rbox s r 100 | qhull QJ1e-10 QR0 generates 0% faults
-    rbox 1000 W0 | qhull QJ1e-12 QR0 generates 86% faults
-    rbox 1000 W0 | qhull QJ1e-11 QR0 generates 20% faults
-    rbox 1000 W0 | qhull QJ1e-10 QR0 generates 2% faults
-    the later have about 20 points per facet, each of which may interfere
-
-    pick a value large enough to avoid retries on most inputs
-*/
-#define qh_JOGGLEdefault 30000.0
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEincrease">-</a>
-
-  qh_JOGGLEincrease
-    factor to increase qh.JOGGLEmax on qh_JOGGLEretry or qh_JOGGLEagain
-*/
-#define qh_JOGGLEincrease 10.0
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEretry">-</a>
-
-  qh_JOGGLEretry
-    if ZZretry = qh_JOGGLEretry, increase qh.JOGGLEmax
-
-  notes:
-    try twice at the original value in case of bad luck the first time
-*/
-#define qh_JOGGLEretry 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEagain">-</a>
-
-  qh_JOGGLEagain
-    every following qh_JOGGLEagain, increase qh.JOGGLEmax
-
-  notes:
-    1 is OK since it's already failed qh_JOGGLEretry times
-*/
-#define qh_JOGGLEagain 1
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEmaxincrease">-</a>
-
-  qh_JOGGLEmaxincrease
-    maximum qh.JOGGLEmax due to qh_JOGGLEincrease
-    relative to qh.MAXwidth
-
-  notes:
-    qh.joggleinput will retry at this value until qh_JOGGLEmaxretry
-*/
-#define qh_JOGGLEmaxincrease 1e-2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEmaxretry">-</a>
-
-  qh_JOGGLEmaxretry
-    stop after qh_JOGGLEmaxretry attempts
-*/
-#define qh_JOGGLEmaxretry 100
-
-/*========= memory constants =========*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MEMalign">-</a>
-
-  qh_MEMalign
-    memory alignment for qh_meminitbuffers() in global.c
-
-  notes:
-    to avoid bus errors, memory allocation must consider alignment requirements.
-    malloc() automatically takes care of alignment.   Since mem.c manages
-    its own memory, we need to explicitly specify alignment in
-    qh_meminitbuffers().
-
-    A safe choice is sizeof(double).  sizeof(float) may be used if doubles
-    do not occur in data structures and pointers are the same size.  Be careful
-    of machines (e.g., DEC Alpha) with large pointers.
-
-    If using gcc, best alignment is
-              #define qh_MEMalign fmax_(__alignof__(realT),__alignof__(void *))
-*/
-#define qh_MEMalign fmax_(sizeof(realT), sizeof(void *))
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MEMbufsize">-</a>
-
-  qh_MEMbufsize
-    size of additional memory buffers
-
-  notes:
-    used for qh_meminitbuffers() in global.c
-*/
-#define qh_MEMbufsize 0x10000       /* allocate 64K memory buffers */
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MEMinitbuf">-</a>
-
-  qh_MEMinitbuf
-    size of initial memory buffer
-
-  notes:
-    use for qh_meminitbuffers() in global.c
-*/
-#define qh_MEMinitbuf 0x20000      /* initially allocate 128K buffer */
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="INFINITE">-</a>
-
-  qh_INFINITE
-    on output, indicates Voronoi center at infinity
-*/
-#define qh_INFINITE  -10.101
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DEFAULTbox">-</a>
-
-  qh_DEFAULTbox
-    default box size (Geomview expects 0.5)
-*/
-#define qh_DEFAULTbox 0.5
-
-/*======= conditional compilation ============================*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="compiler">-</a>
-
-  __cplusplus
-    defined by C++ compilers
-
-  __MSC_VER
-    defined by Microsoft Visual C++
-
-  __MWERKS__ && __POWERPC__
-    defined by Metrowerks when compiling for the Power Macintosh
-
-  __STDC__
-    defined for strict ANSI C
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="COMPUTEfurthest">-</a>
-
-  qh_COMPUTEfurthest
-    compute furthest distance to an outside point instead of storing it with the facet
-    =1 to compute furthest
-
-  notes:
-    computing furthest saves memory but costs time
-      about 40% more distance tests for partitioning
-      removes facet->furthestdist
-*/
-#define qh_COMPUTEfurthest 0
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="KEEPstatistics">-</a>
-
-  qh_KEEPstatistics
-    =0 removes most of statistic gathering and reporting
-
-  notes:
-    if 0, code size is reduced by about 4%.
-*/
-#define qh_KEEPstatistics 1
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXoutside">-</a>
-
-  qh_MAXoutside
-    record outer plane for each facet
-    =1 to record facet->maxoutside
-
-  notes:
-    this takes a realT per facet and slightly slows down qhull
-    it produces better outer planes for geomview output
-*/
-#define qh_MAXoutside 1
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="NOmerge">-</a>
-
-  qh_NOmerge
-    disables facet merging if defined
-
-  notes:
-    This saves about 10% space.
-
-    Unless 'Q0'
-      qh_NOmerge sets 'QJ' to avoid precision errors
-
-    #define qh_NOmerge
-
-  see:
-    <a href="mem.h#NOmem">qh_NOmem</a> in mem.c
-
-    see user.c/user_eg.c for removing io.o
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="NOtrace">-</a>
-
-  qh_NOtrace
-    no tracing if defined
-
-  notes:
-    This saves about 5% space.
-
-    #define qh_NOtrace
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="QHpointer">-</a>
-
-  qh_QHpointer
-    access global data with pointer or static structure
-
-  qh_QHpointer  = 1     access globals via a pointer to allocated memory
-                        enables qh_saveqhull() and qh_restoreqhull()
-            costs about 8% in time and 2% in space
-
-        = 0     qh_qh and qh_qhstat are static data structures
-                only one instance of qhull() can be active at a time
-            default value
-
-  notes:
-    all global variables for qhull are in qh, qhmem, and qhstat
-    qh is defined in qhull.h
-    qhmem is defined in mem.h
-    qhstat is defined in stat.h
-
-  see:
-    user_eg.c for an example
-*/
-#define qh_QHpointer 0
-#if 0  /* sample code */
-qhT* oldqhA, *oldqhB;
-
-exitcode = qh_new_qhull(dim, numpoints, points, ismalloc,
-                        flags, outfile, errfile);
-/* use results from first call to qh_new_qhull */
-oldqhA = qh_save_qhull();
-exitcode = qh_new_qhull(dimB, numpointsB, pointsB, ismalloc,
-                        flags, outfile, errfile);
-/* use results from second call to qh_new_qhull */
-oldqhB = qh_save_qhull();
-qh_restore_qhull(&oldqhA);
-/* use results from first call to qh_new_qhull */
-qh_freeqhull(qh_ALL);   /* frees all memory used by first call */
-qh_restore_qhull(&oldqhB);
-/* use results from second call to qh_new_qhull */
-qh_freeqhull(!qh_ALL);  /* frees long memory used by second call */
-qh_memfreeshort(&curlong, &totlong);   /* frees short memory and memory allocator */
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="QUICKhelp">-</a>
-
-  qh_QUICKhelp
-    =1 to use abbreviated help messages, e.g., for degenerate inputs
-*/
-#define qh_QUICKhelp    0
-
-/* ============ -merge constants- ====================
-
-   These constants effect facet merging.  You probably will not need
-   to modify these.  They effect the performance of facet merging.
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DIMmergeVertex">-</a>
-
-  qh_DIMmergeVertex
-    max dimension for vertex merging (it is not effective in high-d)
-*/
-#define qh_DIMmergeVertex 6
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DIMreduceBuild">-</a>
-
-  qh_DIMreduceBuild
-     max dimension for vertex reduction during build (slow in high-d)
-*/
-#define qh_DIMreduceBuild 5
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="BESTcentrum">-</a>
-
-  qh_BESTcentrum
-     if > 2*dim+n vertices, qh_findbestneighbor() tests centrums (faster)
-     else, qh_findbestneighbor() tests all vertices (much better merges)
-
-  qh_BESTcentrum2
-     if qh_BESTcentrum2 * DIM3 + BESTcentrum < #vertices tests centrums
-*/
-#define qh_BESTcentrum 20
-#define qh_BESTcentrum2 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="BESTnonconvex">-</a>
-
-  qh_BESTnonconvex
-    if > dim+n neighbors, qh_findbestneighbor() tests nonconvex ridges.
-
-  notes:
-    It is needed because qh_findbestneighbor is slow for large facets
-*/
-#define qh_BESTnonconvex 15
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXnewmerges">-</a>
-
-  qh_MAXnewmerges
-    if >n newmerges, qh_merge_nonconvex() calls qh_reducevertices_centrums.
-
-  notes:
-    It is needed because postmerge can merge many facets at once
-*/
-#define qh_MAXnewmerges 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXnewcentrum">-</a>
-
-  qh_MAXnewcentrum
-    if <= dim+n vertices (n approximates the number of merges),
-      reset the centrum in qh_updatetested() and qh_mergecycle_facets()
-
-  notes:
-    needed to reduce cost and because centrums may move too much if
-    many vertices in high-d
-*/
-#define qh_MAXnewcentrum 5
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="COPLANARratio">-</a>
-
-  qh_COPLANARratio
-    for 3-d+ merging, qh.MINvisible is n*premerge_centrum
-
-  notes:
-    for non-merging, it's DISTround
-*/
-#define qh_COPLANARratio 3
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DISToutside">-</a>
-
-  qh_DISToutside
-    When is a point clearly outside of a facet?
-    Stops search in qh_findbestnew or qh_partitionall
-    qh_findbest uses qh.MINoutside since since it is only called if no merges.
-
-  notes:
-    'Qf' always searches for best facet
-    if !qh.MERGING, same as qh.MINoutside.
-    if qh_USEfindbestnew, increase value since neighboring facets may be ill-behaved
-      [Note: Zdelvertextot occurs normally with interior points]
-            RBOX 1000 s Z1 G1e-13 t1001188774 | QHULL Tv
-    When there is a sharp edge, need to move points to a
-    clearly good facet; otherwise may be lost in another partitioning.
-    if too big then O(n^2) behavior for partitioning in cone
-    if very small then important points not processed
-    Needed in qh_partitionall for
-      RBOX 1000 s Z1 G1e-13 t1001032651 | QHULL Tv
-    Needed in qh_findbestnew for many instances of
-      RBOX 1000 s Z1 G1e-13 t | QHULL Tv
-
-  See:
-    qh_DISToutside -- when is a point clearly outside of a facet
-    qh_SEARCHdist -- when is facet coplanar with the best facet?
-    qh_USEfindbestnew -- when to use qh_findbestnew for qh_partitionpoint()
-*/
-#define qh_DISToutside ((qh_USEfindbestnew ? 2 : 1) * \
-                        fmax_((qh MERGING ? 2 : 1)*qh MINoutside, qh max_outside))
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="RATIOnearinside">-</a>
-
-  qh_RATIOnearinside
-    ratio of qh.NEARinside to qh.ONEmerge for retaining inside points for
-    qh_check_maxout().
-
-  notes:
-    This is overkill since do not know the correct value.
-    It effects whether 'Qc' reports all coplanar points
-    Not used for 'd' since non-extreme points are coplanar
-*/
-#define qh_RATIOnearinside 5
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="SEARCHdist">-</a>
-
-  qh_SEARCHdist
-    When is a facet coplanar with the best facet?
-    qh_findbesthorizon: all coplanar facets of the best facet need to be searched.
-
-  See:
-    qh_DISToutside -- when is a point clearly outside of a facet
-    qh_SEARCHdist -- when is facet coplanar with the best facet?
-    qh_USEfindbestnew -- when to use qh_findbestnew for qh_partitionpoint()
-*/
-#define qh_SEARCHdist ((qh_USEfindbestnew ? 2 : 1) * \
-                       (qh max_outside + 2 * qh DISTround + fmax_( qh MINvisible, qh MAXcoplanar)));
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="USEfindbestnew">-</a>
-
-  qh_USEfindbestnew
-     Always use qh_findbestnew for qh_partitionpoint, otherwise use
-     qh_findbestnew if merged new facet or sharpnewfacets.
-
-  See:
-    qh_DISToutside -- when is a point clearly outside of a facet
-    qh_SEARCHdist -- when is facet coplanar with the best facet?
-    qh_USEfindbestnew -- when to use qh_findbestnew for qh_partitionpoint()
-*/
-#define qh_USEfindbestnew (zzval_(Ztotmerge) > 50)
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="WIDEcoplanar">-</a>
-
-  qh_WIDEcoplanar
-    n*MAXcoplanar or n*MINvisible for a WIDEfacet
-
-    if vertex is further than qh.WIDEfacet from the hyperplane
-    then its ridges are not counted in computing the area, and
-    the facet's centrum is frozen.
-
-  notes:
-   qh.WIDEfacet= max(qh.MAXoutside,qh_WIDEcoplanar*qh.MAXcoplanar,
-      qh_WIDEcoplanar * qh.MINvisible);
-*/
-#define qh_WIDEcoplanar 6
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXnarrow">-</a>
-
-  qh_MAXnarrow
-    max. cosine in initial hull that sets qh.NARROWhull
-
-  notes:
-    If qh.NARROWhull, the initial partition does not make
-    coplanar points.  If narrow, a coplanar point can be
-    coplanar to two facets of opposite orientations and
-    distant from the exact convex hull.
-
-    Conservative estimate.  Don't actually see problems until it is -1.0
-*/
-#define qh_MAXnarrow -0.99999999
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="WARNnarrow">-</a>
-
-  qh_WARNnarrow
-    max. cosine in initial hull to warn about qh.NARROWhull
-
-  notes:
-    this is a conservative estimate.
-    Don't actually see problems until it is -1.0.  See qh-impre.htm
-*/
-#define qh_WARNnarrow -0.999999999999999
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="ZEROdelaunay">-</a>
-
-  qh_ZEROdelaunay
-    a zero Delaunay facet occurs for input sites coplanar with their convex hull
-    the last normal coefficient of a zero Delaunay facet is within
-        qh_ZEROdelaunay * qh.ANGLEround of 0
-
-  notes:
-    qh_ZEROdelaunay does not allow for joggled input ('QJ').
-
-    You can avoid zero Delaunay facets by surrounding the input with a box.
-
-    Use option 'PDk:-n' to explicitly define zero Delaunay facets
-      k= dimension of input sites (e.g., 3 for 3-d Delaunay triangulation)
-      n= the cutoff for zero Delaunay facets (e.g., 'PD3:-1e-12')
-*/
-#define qh_ZEROdelaunay 2
-
-#endif /* qh_DEFuser */
-
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/index.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/index.htm
deleted file mode 100644
index b00b715c793df145828d49a037b79cb2fd0283b0..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/index.htm
+++ /dev/null
@@ -1,246 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-
-<head>
-<title>Qhull for Convex Hull, Delaunay Triangulation, Voronoi Diagram, and Halfspace Intersection about a Point</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<b>URL:</b> <a href="http://www.qhull.org">http://www.qhull.org</a>
-<br><b>To:</b>
-<a href="http://www.qhull.org/news">News</a>
-&#149; <a href="http://www.qhull.org/download">Download</a>
-&#149; <a href="http://citeseer.nj.nec.com/83502.html">CiteSeer</a>
-&#149; <a href=http://images.google.com/images?q=qhull&num=100>Images</a>
-&#149; <a href="html/index.htm#TOC">Manual</a>
-&#149; <a href="http://www.qhull.org/html/qh-faq.htm">FAQ</a>
-&#149; <a href="html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="html/qh-quick.htm#options">Options</a> 
-</p>
-
-<hr>
-<!-- Main text of document -->
-<table>
-<tr><td valign=top>
-	<h1>Qhull</h1>
-	<a
-	href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/cone.html"><img
-	src="html/qh--cone.gif" alt="[CONE]" align="middle" width="100"
-	height="100"></a>
-</td><td>
-Qhull computes convex hulls, Delaunay triangulations,
-halfspace intersections about a point, Voronoi diagrams, furthest-site Delaunay
-triangulations, and furthest-site Voronoi diagrams. It runs in
-2-d, 3-d, 4-d, and higher dimensions. It implements the Quickhull
-algorithm for computing the convex hull. Qhull handles roundoff
-errors from floating point arithmetic. It computes volumes,
-surface areas, and approximations to the convex hull.</p>
-
-<!-- duplicated in index.htm and html/index.htm -->
-<p>Qhull does <i>not</i> support constrained Delaunay
-triangulations, triangulation of non-convex surfaces, mesh
-generation of non-convex objects, or medium-sized inputs in 9-D
-and higher. </p>
-</td></tr></table>
-
-<hr>
-<ul>
-    <li><a href="http://www.qhull.org/news">News</a> about Qhull </li>
-    <li><a href="http://www.qhull.org/download">Download</a>
-        Qhull</li>
-    <li><a
-        href="http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/welcome.html">Examples
-        </a>of Qhull output </li>
-	<li><a href=http://savannah.gnu.org/projects/qhull/>Qhull development</a> at Savannah
-	<p>
-    <li><a href="http://www.qhull.org/news/qhull-news.html#use">How</a> is Qhull used?</li>
-	<li><a href="http://citeseer.nj.nec.com/context/86585/83502">CiteSeer</a> references to Qhull
-</p>
- 	<li><a href=http://www.google.com/search?as_q=qhull&num=100>Google</a> Qhull, 
-	Qhull <a href=http://images.google.com/images?q=qhull&num=100>Images</a>,
-	Qhull in <a href=http://groups.google.com/groups?as_q=qhull&num=100&as_scoring=d>Newsgroups</a>,
-	and <a href=http://www.googlism.com/who_is/q/qhull/>Who is</a> Qhull?
-
-	<p>
-	<li><a href=http://www.mathworks.com/>MATLAB</a> uses Qhull for their computational geometry functions: <a href=http://www.mathworks.com/access/helpdesk/help/techdoc/ref/convhulln.shtml>convhulln</a>
-	<a href=http://www.mathworks.com/access/helpdesk/help/techdoc/ref/delaunayn.shtml>delaunayn</a>
-	<a href=http://www.mathworks.com/access/helpdesk/help/techdoc/ref/griddata3.shtml>griddata3</a>
-	<a href=http://www.mathworks.com/access/helpdesk/help/techdoc/ref/griddatan.shtml>griddatan</a>
-	<a href=http://www.mathworks.com/access/helpdesk/help/techdoc/ref/tsearch.shtml>tsearch</a>
-	<a href=http://www.mathworks.com/access/helpdesk/help/techdoc/ref/tsearchn.shtml>tsearchn</a>
-    <a href=http://www.mathworks.com/access/helpdesk/help/techdoc/ref/voronoin.shtml>voronoin</a>.  MATLAB R14 will upgrade to
-	Qhull 2003.1 and triangulated output ('Qt').
-    </li>
-	<li><a href=http://www.octave.org/>GNU Octave</a> uses Qhull for their
-	<a href=http://octave.sourceforge.net/index/analysis.html#Geometry>computational geometry functions</a>.  Octave has partially upgraded
-	to Qhull 2002.1 and triangulated output ('Qt').
-	<li><a href=http://www.wolfram.com/products/mathematica/>Mathematica</a>'s Delaunay interface: <a href=http://www.mathsource.com/Content/Enhancements/Geometry/0211-251>qh-math</a>
-	<li><a href=http://www.geomview.org>Geomview</a> for 3-D and 4-D visualization of Qhull output
-</ul>
-
-<p><b>Introduction</b>
-<ul>
-    <li><a
-        href="http://www.ifor.math.ethz.ch/staff/fukuda/polyfaq/polyfaq.html">Fukuda's
-        introduction</a> to convex hulls, Delaunay
-        triangulations, Voronoi diagrams, and linear programming</li>
-    <li><a
-        href="http://www.cse.unsw.edu.au/~lambert/java/3d/hull.html">Lambert's
-        Java</a> visualization of convex hull algorithms </li>
-    <li><a
-        href="http://www.cs.sunysb.edu/~algorith/major_section/1.6.shtml">Stony
-        Brook</a> Algorithm Repository, computational geometry</li>
-</ul>
-
-<p><b>Qhull Documentation and Support</b>
-<ul>
-   <li><a href="html/index.htm">Manual</a> for Qhull and rbox
-	<ul>
-		<li><a href="html/qconvex.htm">qconvex</a> -- convex hull
-		<li><a href="html/qdelaun.htm">qdelaunay</a> -- Delaunay triangulation
-		<li><a href="html/qvoronoi.htm">qvoronoi</a> -- Voronoi diagram
-		<li><a href="html/qhalf.htm">qhalf</a> -- halfspace intersection about a point
-		<li><a href="html/rbox.htm">rbox</a> -- generate point distributions
-	    <li><a href=src/index.htm>Qhull functions</a>, macros, and data structures with source
-	</ul>
-    <li><a href="http://www.qhull.org/html/qh-faq.htm">Frequently</a> asked
-        questions about Qhull</li>
-    <li>Send e-mail to <a href=mailto:qhull@qhull.org>qhull@qhull.org</a> </li>
-    <li>Report bugs to <a
-        href="mailto:qhull_bug@qhull.org">qhull_bug@qhull.org</a>
-</ul>
-
-<p><b>Related URLs</b>
-<ul>
-    <li><a href="http://www.geom.uiuc.edu/software/cglist">Amenta's directory</a> of
-        computational geometry software </li>
-
-	<li><a href=http://www.boost.org/libs/graph/doc/table_of_contents.html>BGL</a> 
-	Boost Graph Library provides C++ classes for graph data structures
-and algorithms,
-    <li><a
-        href="http://netlib.bell-labs.com/netlib/voronoi/hull.html">Clarkson's
-        hull </a>program with exact arithmetic for convex hulls, Delaunay triangulations,
-		Voronoi volumes, and alpha shapes. </li>
-	<li><a href="http://compgeom.cs.uiuc.edu/~jeffe/compgeom/compgeom.html">Erickson's 
-	    Computational</a> Geometry Pages and 
-		<a href="http://compgeom.cs.uiuc.edu/~jeffe/compgeom/code.html">Software</a>
-    <li><a
-        href="http://www.cs.mcgill.ca/~fukuda/soft/cdd_home/cdd.html">Fukuda's
-        cdd</a> program for halfspace intersection and convex hulls</li>
-	<li><a href="http://www.inf.ethz.ch/personal/gaertner/miniball.html">Gartner's 
-	Miniball</a> for fast and robust smallest enclosing balls (up to 20-d)
-
-	<li><a href=http://directory.google.com/Top/Science/Math/Geometry/Computational_Geometry/Software/>Google's directory</a> for 
-	Science > Math > Geometry > Computational Geometry > Software
-    <li><a href=http://www.algorithmic-solutions.com/enleda.htm>Leda</a>  
-and <a href=http://www.cgal.org/>CGAL</a> libraries for writing computational
-geometry programs and other combinatorial algorithms
-	<li><a href=http://www.magic-software.com>Magic Software</a> source code for computer
-	graphics, image analysis, and numerical methods
-	<li><a href=http://www.mathtools.net/>Mathtools.net</a> of scientific and engineering
-	software
-    <li><a href="http://www.andrew.cmu.edu/user/sowen/mesh.html">Owen's Meshing</a> Research Corner
-    <li><a
-        href="http://www-users.informatik.rwth-aachen.de/~roberts/meshgeneration.html">Schneiders'
-        Finite Element</a> Mesh Generation page</li>
-    <li><a href="http://www.cs.cmu.edu/~quake/triangle.html">Shewchuk's
-        triangle </a>program for 2-d Delaunay</li>
-	<li><a href=ftp://ftp.zib.de/pub/Packages/mathprog/index.html>Skorobohatyj's Mathprog@ZIB</a> for  
-	mathematical software
-	<li><a href=http://www.voronoi.com>Voronoi Web Site</a> for all things Voronoi
-</ul>
-
-<p><b>FAQs and Newsgroups</b>
-<ul>
-    <li><a
-        href="http://exaflop.org/docs/cgafaq/">FAQ</a>
-        for computer graphics algorithms 
-		(<a href="http://exaflop.org/docs/cgafaq/cga6.html">geometric</a> structures)
- </li>
-    <li><a
-        href="http://www-unix.mcs.anl.gov/otc/Guide/faq/linear-programming-faq.html">FAQ
-        </a>for linear programming </li>
-    <li><a href="news:comp.graphics.algorithms">Newsgroup</a>:
-        comp.graphics.algorithms </li>
-	<li><a href="news:comp.soft-sys.matlab">Newsgroup</a>:
-	    comp.soft-sys.matlab</li>
-    <li><a href="news:sci.math.num-analysis">Newsgroup</a>:
-        sci.math.num-analysis </li>
-    <li><a href="news:sci.op-research">Newsgroup</a>:
-        sci.op-research </li>
-</ul>
-</blockquote>
-<hr>
-
-<p>The program includes options for input transformations,
-randomization, tracing, multiple output formats, and execution
-statistics. The program can be called from within your
-application. </p>
-
-<p>You can view the results in 2-d, 3-d and 4-d with <a
-href="http://www.geomview.org">Geomview</a>.   An alternative
-is <a href=http://www.kitware.com/vtk.html>VTK</a>.</p>
-
-<p>For an article about Qhull, download from <a
-href="http://citeseer.nj.nec.com/83502.html">CiteSeer</a>:
-</p>
-
-<blockquote>
-    <p>Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., &quot;The
-    Quickhull algorithm for convex hulls,&quot; <i>ACM Trans. on
-    Mathematical Software</i>, Dec 1996. <a
-    href="http://www.acm.org/pubs/citations/journals/toms/1996-22-4/p469-barber/">http://www.acm.org</a>;
-    </p>
-</blockquote>
-
-<p>Abstract: </p>
-
-<blockquote>
-    <p>The convex hull of a set of points is the smallest convex
-    set that contains the points. This article presents a
-    practical convex hull algorithm that combines the
-    two-dimensional Quickhull Algorithm with the general
-    dimension Beneath-Beyond Algorithm. It is similar to the
-    randomized, incremental algorithms for convex hull and
-    Delaunay triangulation. We provide empirical evidence that
-    the algorithm runs faster when the input contains non-extreme
-    points, and that it uses less memory. </p>
-    <p>Computational geometry algorithms have traditionally
-    assumed that input sets are well behaved. When an algorithm
-    is implemented with floating point arithmetic, this
-    assumption can lead to serious errors. We briefly describe a
-    solution to this problem when computing the convex hull in
-    two, three, or four dimensions. The output is a set of
-    "thick" facets that contain all possible exact convex hulls
-    of the input. A variation is effective in five or more
-    dimensions. </p>
-</blockquote>
-<!-- Navigation links -->
-<hr>
-
-<p><b>Up:</b> <a href="http://www.geom.uiuc.edu/software/past-projects.html"><i>Past Software
-Projects of the Geometry Center</i></a> <br>
-<b>URL:</b> <a href="http://www.qhull.org">http://www.qhull.org</a>
-<br><b>To:</b> 
-<a href="http://www.qhull.org/news">News</a>
-&#149; <a href="http://www.qhull.org/download">Download</a>
-&#149; <a href="http://citeseer.nj.nec.com/83502.html">CiteSeer</a>
-&#149; <a href=http://images.google.com/images?q=qhull&num=100>Images</a>
-&#149; <a href="html/index.htm#TOC">Manual</a>
-&#149; <a href="http://www.qhull.org/html/qh-faq.htm">FAQ</a>
-&#149; <a href="html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="html/qh-quick.htm#options">Options</a> 
-<!-- GC common information --></p>
-
-<hr>
-
-<p><a href="http://www.geom.uiuc.edu/"><img src="html/qh--geom.gif" alt="[HOME]"
-align="middle"></a> <i>The Geometry Center Home Page</i> </p>
-
-<p>Comments to: <a href="mailto:qhull@qhull.org">qhull@qhull.org</a>
-<br>
-Created: May 17 1995 --- <!-- hhmts start --> 
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Changes.txt b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Changes.txt
deleted file mode 100644
index 626008a6068791b2cd340deb97977bcaf2741094..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Changes.txt
+++ /dev/null
@@ -1,1063 +0,0 @@
-
-.............This file lists all changes to qhull and rbox.....................
-
-qhull 2003.1  2003/12/30
-
-New Features:
- - Add Maple output ('FM') for 2-d and 3-d convex hulls [T. Abraham]
-
-Bug Fixes and Code Changes:
- - Fixed qh_findbest() for upperdelaunay facets w/o better, lower neighbors
- -   For library users and some qhull users [A. Cutti, E. Milloti, K. Sun]
- - Preserved qhmem.ferr in qh_memfreeshort() for library users
- - Removed 'static' from qh_compare... for io.h and merge.h [V. Brumberg]
-
-Documentation:
- - Add warning to findDelaunay() and qh_in.htm about tricoplanar facets
- - Noted Edelsbrunner's Geometry & Topology for Mesh Generation [qh-impre.htm]
- - Noted Gartner's Miniball algorithm [qh_impre.htm]
- - Noted Veron and Leon's shape preserving simplification [qh_impre.htm]
-
-qhull 2003.1  2003/12/19
-
-Bug Fixes:
- - Reversed coordinate order for qh.ATinfinity in qh_projectinput [V. Brumberg]
- - This effects:
- -   Qhull library 'd' or 'v' users with 'Qz' and unequal coordinate ranges.
- -   qdelaunay/qvoronoi users with 'Qbk:0Bk:0', 'Qz', and unequal coordinate ranges
-
-Changes to code:
- - Replaced qh_VERSION with qh_version in global.c [B. Pearlmutter]
-    The previous techniques were either clumsy or caused compiler errors
- - Removed unused variables from qh_findbest and qh_findbestnew [B. Pearlmutter]
- - Note that qh.TESTpoints was added in 2002.1 for tsearch implementation
-
-Changes to distribution:
- - Added Unix distribution including Debian files [R. Laboissiere]
-    The previous Unix distribution is now the source distribution
- - Added rpm distribution [L. Mazet]
- - Investigated generation of Win32 dll.  Need to define a C++ interface.
-
-Changes to documentation:
- - Moved Qhull to www.qhull.org (geom.umn.edu is not available)
- - The Geometry Center is archived at http://www.geom.uiuc.edu
- - Reviewed introduction to each program
-    Triangulated output ('Qt') is more accurate than joggled input ('QJ')
-    qdelaunay is 'qhull d Qbb' [C. Ulbrich]
-    qvoronoi is 'qhull v Qbb'
-    Added example of non-simplicial intersection to halfspace intersections
- - Added warning about using the Qhull library.
- - Added qhull timings to When to use Qhull [C. Ulbrich]
- - Reorganized the home page index and the manual index
- - Moved qh-home.htm to index.htm
-
-Changes to examples
- - Fixed options for eg/eg.t23.voronoi.imprecise [B. Pearlmutter]
-
-
-qhull 2002.1  2002/8/20
-
-Changes to distribution:
- - Set up savannah.gnu.org/projects/qhull/ [R. Laboissiere]
- - Set up www.thesa.com as a backup
- - Added qh-get.htm, a local copy of the download page
- - Added Visual C++ interface to Qhull, qhull_interface.cpp [K. Erleben]
- - Use HTTP instead of FTP for downloading Qhull
- - Renamed qhull-1.0.sit.hqx
-
-Bug fixes:
- - Fixed sign of coefficients for cdd halfspaces ('FD','Fd')  [T. Abraham]
-
-Changes to code:
- - Replace qh_version with qh_VERSION in qhull.h.
-   Allows shared libraries and single point of definition
- - Added qh.TESTpoints for future implementation of tsearch
-
-Changes to build
- - Makefile.txt works under cygwin
- - Added Make-config.sh to create a Debian build [R. Laboissiere]
- - Added .exe to Makefile.txt#clean.  
- - In README, use -fno-strict-aliasing with gcc-2.95.1 [Karas, Krishnaswami]
- - Fixed chmod in Makefile.txt [B. Karas]
-
-Documentation updates
- - Documented input options for each program [A. Montesinos]
- - FAQ: "How to get the radii of the empty spheres for Voronoi vertices"
-
-URL updates:
- - Changed official URL from locate/qhull to software/qhull
- - Changed URLs from relative to absolute in qh-home.htm and qh-get.htm
- - Added URL for Newsgroup: comp.soft-sys.matlab
- - Added URL for GNU Octave
- - Added URLs for Google and Google Groups
- - Replaced qhull_mail.html and qhull_bug.html with mailto links.
- - Removed URL for Computational Geometry Tribune
- - Changed URL for locate/cglist to software/cglist
- - Used site relative links for qh-home.htm
-
-qhull 3.1 2001/10/04
-
-New features
- - Added option 'Qt' to triangulate non-simplicial facets
- - Added option 'TI file' to input data from file
- - Added option 'Q10' to prevent special processing for narrow distributions
-        e.g., RBOX 1000 L100000 s G1e-6 t1001803691 | QHULL Tv Q10
- - Tried to compute Voronoi volumes ('Pv'). Requires dual face graph--not easy
-        See Clarkson's hull program for code.
-
-Changes to options
- - Added numtricoplanars to 'Fs'. Number of good, triangulated facets for 'Qt'
- - Added Zdelvertextot to 'Fs'.  If non-zero and Delaunay, input is degenerate
- - Qhull command ('FQ') may be repeated.
- - If 'TPn' and 'TWn' defined, trace the addition of point 'n'
-     otherwise continue tracing (previously it stopped in 4-d)
- - Removed 'Ft' from qdelaunay.  Use 'Qt o' or 'qhull d QJ Qt' instead.
-     For non-simplicial regions, 'Ft' does not satisify the Delaunay property.
- - If 'Po' or 'TVn', qhull checks outer planes.  Use 'Q5' to turn off.
- - If 'T4', print facet lists and check polygon after adding each point
- 
-Corrections to code
- - rbox: allow 'c' and 'd' with 's r', meshes, etc.
- - qh_findbest: redesigned as directed search. qh_findbesthorizon for coplanar
-      qh_findbest is faster for many distributions
- - qh_findbestnew: redesigned to search horizon of coplanar best newfacets
-      needed for distributions with a sharp edge, 
-	  e.g., rbox 1000 s Z1 G1e-13 | qhull Tv
- - qh_findbest/qh_findbestnew: search neighbors of better horizon facets
-      was needed for RBOX 1000 s Z1 G1e-13 t996564279 | qhull Tv  
-      and RBOX 1000 s W1e-13 P0 t996547055 | QHULL d Qbb Qc Tv
- - qh_findbest with noupper: could return an upperdelaunay facet if dist>qh.MINoutside.
- - qh_findbestnew: allow facet->upperdelaunay if dist > qh.MINoutside
- - qh_partitioncoplanar: call qh_partitionpoint if outside and perpendicular
-      for distributions with a sharp edge
- - qh_partitionvisible: report precision error if all newfacets degenerate.
-      was needed for RBOX 1000 s W1e-13 t995138628 | QHULL d
- - qh_createsimplex: clears qh.num_visible, may be non-zero with 'TRn QJ'
-
-Changes to prompts, warnings, and statistics
- - For Delaunay & Voronoi, 's' reports deleted vertices due to facet merging.
-   They were incorrectly reported as nearly incident points.
- - Warn if recompute centrum after constructing hull
- - Simplified narrow hull warning and print all digits of cosine.  
-     A narrow hull may lead to a point outside of the hull.
- - Print total vertices deleted instead of ave. per iteration (Zdelvertextot)
- - Improved tracing for qh_partitionpoint and qh_partitioncoplanar
- - Added number of distance tests for checking outer planes (qh_check_maxout)
- - Simplified "qhull precision error: Only n facets remain."
- - Included 'TRn' in the causes of a premature exit
-
-Changes to documentation
- - README.txt: Added quickstart instructions for Visual C++
- - rbox: Added example of edge of narrow lens, rbox 1000 L100000 s G1e-6
- - Added cross references between options 'o' and 'p'.
- - qh-eg.html: added examples comparing 'Qt', 'QJ', and neither 'Qt' nor 'QJ' 
-	eg.15a.surface, eg.15b.triangle, eg.17a.delaunay.2, etc.
- - Reorganized and enhanced discussion of precision problems in qh_impre.htm
- - Fixed spelling errors [K. Briggs]
- - Fixed link errors, validated HTML, and spell checked [HomeSite]
- - Removed unnecessary #TOP links
- - Added source links to the qh-quick.htm's header and footer
- - qh-geom.htm, qh-poly.htm: add links to Voronoi functions in io.c
- - src/index.htm: Added how to search qhull.h for qhull options
- - qvoronoi.htm/qdelaun.htm: 'Fc' and 'FN' includes deleted vertices
-
-Changes to URLs
- - Added http://www.voronoi.com and http://www.magic-software.com
-
-Changes to code
- - qh_qhull: if 'TVn' or 'TCn' do not call qh_check_maxout and qh_nearcoplanar
- - reviewed time profile.  Qhull is slower.  Optimized qh_findbestnew()
- - qh_addpoint: Added warning note about avoiding a local minimum
- - qh_checkpolygon: report qh.facet_next error if NARROWhull & dist>MINoutside
- - qh_findbest: renamed "newfacets" parameter to "isnewfacets" since it is boolT
- - qh_findbest/qh_findbestnew: testhorizon even if !MERGING
-        Otherwise qhull c D6 | qhull Q0 Tv assigns coplanar points 
- - qh_resetlists: add qh_RESETvisible for qh_triangulate
- - qh_findbest: search better facets first.  Rewritten.
- - qh_findbest: increased minminsearch, always check coplanar facets.  
-        See: RBOX 1000 s Z1 G1e-13 t996564279 | QHULL Tv
- - qh_findbestnew: report precision error for deleted cones [rare event]
-        e.g.:  RBOX 1000 s W1e-13 P0 t1001034076 | QHULL d Qbb Qc Tv
- - qh_findbesthorizon: search horizon of qh.coplanarset.  New.
- - qh_findbestsharp: replaced with qh_sharpnewfacets followed by qh_findbestnew
- - qh_partitionpoint, Delaunay sites can not be inside.  Otherwise points may
-       be outside upperDelaunay facets yet not near-inside Delaunay facets
-       See: RBOX s 1000 t993602376 | QHULL C-1e-3 d  Qbb FA Tv
- - qh_partitioncoplanar: call qh_findbest/qh_findbestnew with qh DELAUNAY 
- - qh_printlists: format long lines 
- - qh_printvertex: format long lines
- - user.h: tightened qh_WARNnarrow and qh_MAXnarrow.  Do not see problems 
-       until they are -1.0.
- - user.h: defined qh_DISToutside, qh_SEARCHdist, and qh_USEfindbestnew 
- - qh_checkfacet: in 3-d, allow #ridges > #vertices.  Can get a vertex twice
-   in a ridge list, e.g,  RBOX 1000 s W1e-13 t995849315 D2 | QHULL d Tc Tv 
-
-Changes to FAQ
- - Recommended use of triangulated output ('Qt')
-
-Changes to distribution
- - Recompiled in Visual C++ 5.0 with optimization (as was version 2.6)
- - q_test: Added bad cases for Qhull and tests for new features
-
-Changes to Qhull library
- - Added qh_triangulate() to poly2.c.  It triangulates the output.
- - Added option 'Q11' to copy normals and recompute centrums for tricoplanar facets 
-        'FP' may not print the nearest vertex for coplanar points
-        Use option 'Q11' when adding points after qh_triangulate()
-
-qhull 3.0 2001/02/11
-
-Changes to distribution
- - added qconvex, qdelaunay, qhalf, and qvoronoi
- - added qhull-interface.cpp on calling Qhull from C++ [K. Erleben]
- - renamed to qhull3.0/.   
- - added eg/, html/, and src/ directories 
-
-Changes to URLs
- - MathLab6 qhull: convhulln, delaunayn, griddatan, tsearchn, vororoin [Z. You]
- - Wolfram Research wrote a Mathematica interface for qdelaunay [Hinton]
- - Geomview moved from www.geom.umn.edu to www.geomview.org [M. Phillips}
- - added URLs for tcsh and cygwin to README.txt
-
-Changes to documentation
- - reorganized table of contents and renamed qh-man.htm to index.htm
- - wrote program documentation, dropped qh-opt.htm and qh-optv.htm
- - added quick reference, qh-quick.htm
- - reorganized qh-rbox.htm and renamed it to rbox.htm
- - split up qh-c.htm for quick navigation
-
-Corrections to code
- - fixed type of arg for error message in qh_initqhull_globals [N. Max]
- - fixed incorrect initialization of qh MINdenom_1 for scalepoints
- - fixed drop dim for 'H Qbk:0Bk:0'.  Added qh.feasible_point to qh_projectinput 
- - qh_WARNnarrow is angle between facet normals.  Negate for warning message.
- -   statistics for Wangle/etc. concerns facet normals.  Reworded [E. Voth]
- - fixed error message for 'FC v'
- - report cospherical points if Delaunay and error in qh_scalelast()
-
-Changes to code
- - turn on Pg if (QVn or QGn) and not (Qg or PG)
- - turn on Qc if format option 'Fc', 'FP', or 'Gp' (removes warning)
- - removed last good facet unless ONLYgood ('Qg').
- - added count of non-simplicial or merged facets to 'FS'
- - added count of non-simplicial facets to 's' (OK if #vertices==dim)
- - added Znonsimplicial and Znowsimplicial to 'Ts'
- - allow Mathematica output of dual polytope for halfspace intersection
- - added qh_checkflags to globals.c for multiple front ends
- - qh_initqhull_globals sets qh.MERGING if qh.MERGEexact
- - removed hashentryT.  It is no longer used.
-
-Changes to prompts and warnings
- - reorganized prompts
- - reorganized synopsis for rbox.c
- - print warning if 'Fc' or 'FP' with 'd QJ'.  Coincident points are unlikely.
- - ignore warning if options 'v i Pp'.  qvoronoi users may need Delaunay tri.
- - reworded warning if 'Pg' and 'QVn' is not a vertex.
- - reworded warning for 'Qx Tv', qh_check_points() in poly2.c
- - if 'Pp', turn off warning for 'Qbb' without 'd' or 'v' 
- - in qh_printsummary() of Voronoi and Delaunay, distinguish QVn, QGn, Pdn, PDn 
-
-Changes to FAQ
- - added FAQ item for nearly flat Delaunay triangles [Z. You]
- - added FAQ item for area and volume [R. Konatham]
- - added FAQ item for Voronoi diagram of a square [J. Yong]
- - edited FAQ item on point location in Delaunay triangles [Z. You]
- - added FAQ item on nearly flat Delaunay triangles [Dehghani]
- - added FAQ item about halfspace intersection [V. Tyberghein]
- - added FAQ item for missing ridges [M. Schmidt]
- - added FAQ item about qh_call_qhull [R. Snyder]
- - added FAQ item about memory statistics [Masi]
- - added FAQ item on meshing non-convex objects
- - added FAQ item on MATLAB and Mathematica interface
-
-qhull 2.6 1999/04/19
- - fixed memory overwrite (no effect) in qh_initstatistics() [K. Ford]
- - added zdoc11 to qh-stat.h#ZZdef for !qh_KEEPstatistics [K. Ford]
- - enhanced qh_initqhull_globals() test of qh_RANDOMint and qh_RANDOMmax
- - added debugging option to always return qh_RANDOMmax from qh_rand()
- - fixed option 'Qr', qh_initialvertices(), to allow a broken qh_rand() 
-   fixed option 'Qr', qh_nextfurthest(), to allow narrow hulls  
-     Option 'Qr' simulates the random incremental algorithm for convex hulls
- - added note that qh.num_outside includes coplanar points for narrow hulls
- - added FAQ items for triangles/ridges of 3-d Delaunay triangulation[P. Kumar]
- - added FAQ item about on-line processing with the Qhull library [O. Skare]
- - changed name of option 'Error-roundoff' to 'Distance-roundoff'
-
-qhull 2.6 1998/12/30
- - for the unbounded rays of the Voronoi diagram, use a large box [Schmidt]
-     e.g., 'rbox P4,4,4 P4,2,4 P2,4,4 P4,4,2 10 | qhull v Fv' fails for point 0
-     while 'rbox P4,4,4 P4,2,4 P2,4,4 P4,4,2 10 c G5 | qhull v Fv' is OK.
- - fixed qh_new_qhull() to use outfile/errfile instead of stdout/stderr [Ford]
- - clarified COPYING.txt for use in other programs [Archer]
- - improved qh_readpoints() error message for incorrect point count.
- - added FAQ item for closest triangle to a point [Sminchisescu & Heijting]
- - added FAQ item for is a point outside of a facet [Beardsley]
- - added FAQ item for visiting facets of the Delaunay triangulation [Heijting]
- - added link to Erickson's Computational Geometry Software
- - added link to Sharman's HTML version of the comp.graphics.algorithms FAQ
- - added link to Owen's Meshing Research Corner
- - added note to 'd' about quadratic size of 'rbox 100 l | qhull d' [Kumar]
- - added 'about a point' to mentions of halfspace intersection
- - added request to qh-in.htm to compute largest empty circle [Hase]
- - the DOS window in Windows NT is better than the DOS window in Windows 95
- - removed obsolete qh_findfacet() from qh-c.htm [Sminchisescu]
-
-qhull 2.6 1998/8/12
- new and modified features
- - rbox: added option Mn,m,r to generate a rotated lattice or mesh
- - rbox: report error if more than one of 'l', 'x', 'L', 's', or 'M'
-
- Qhull library changes
- - added qh_new_qhull() to user.c for calling qhull() from a program [D. Zwick]
-   rewrote user_eg.c to use qh_new_qhull().  Added qh_QHpointer example.
- - added qh_CLOCKtype 2 in user.h to call times() for CPU time [B. Hemkemeier]
- - renamed set.c/set.h to avoid conflict with STL's set.h [G. van den Bergen] 
-   can also use '#include <qhull/qhull_a.h>' for Qhull library
-
- fixed errors
- - fixed qh_init_B() to call qh_initqhull_mem() once only [D. Zwick]
-   This only effects Qhull library users of qh_QHpointer.
- - fixed qh_mergecycle_all() to check for redundant vertices [J. Nagle]
-   e.g., 'rbox M3,4 64 | qhull Qc' should report 8 vertices & 48 coplanars
- - fixed gmcoord initialization in qh_setfacetplane() for qh.RANDOMdist
- - turn off qh.RANDOMdist during qh_printfacetheader()
- - fixed error messages for unknown option flags
-
- documentation changes
- - added note to FAQ on the Voronoi diagram of cospherical points [H. Hase]
- - added note to 'Qu' on furthest-site Delaunay triangulation via convex hull
- - added note to 'QJ' about coplanar points on the convex hull of the input
- - added note that 'o' and 'FN' list Voronoi regions in site id order [Arvind]
- - added links to Fukuda's introduction to convex hulls, etc. [H. Hase]
- - added .c and .h source files to web distribution and qh-c.htm [J. Sands]
- - documented qh_ZEROdelaunay.  Delaunay and Voronoi diagrams do not include
-   facets that are coplanar with the convex hull of the input sites.
-  
- modified code
- - replaced computed minnorm in qh_sethyperplane_det with distance test
- - removed 'qh rand_seed' since random number generator is independent of qhull
- - dropt 'qhull-PPC.sit.bin' from the distribution (out-of-date) [M. Harris]
-
-qhull 2.5 1998/5/4
-
- fixed errors
- - removed zero-area Delaunay triangles and furthest-site triangles [I. Beichl]
-   Zero-area triangles occur for points coplanar with the input's convex hull.
- - replaced qh.MINnorm with computed minnorm in qh_sethyperplane_det [J. Nagle]
-   qh.MINnorm was incorrect for the convex hull of the "teapot" example.
-   Qhull runs 0-20% slower in 3-d and 4-d.
- - allow 'Qg' with furthest-site Delaunay triangulation (may be faster)
- - removed extra space in definition of FOREACHmerge_() for Alpha cc [R. LeRoy]
- - fixed innerouter type in qh_printvdiagram2 [does not effect code, R. Adams]
-
- documentation changes
- - to browse qh-c.htm, set MIME type of .c and .h files to text/html
- - added example of 3-d Delaunay triangulation to q-faq.htm
- - added Delaunay and Voronoi examples to qh-optv.htm
- 
-qhull 2.5 1998/2/4
- - added option 'v Fi' for separating hyperplanes of bounded Voronoi regions
- - added option 'v Fo' for separating hyperplanes of unbounded Voronoi regions
- - option 'Pp' turns off the warning, "initial hull is narrow"
- - fixed partial, 3-d Voronoi diagrams (i.e., 'v Fv QVn Tc')
- - fixed missing statistics in qh_allstat* [T. Johnson]
- - rearranged qh_printvdiagram.  Use qh_eachvoronoi to iterate Voronoi ridges.
- - added qh_check_points to qh-math.c
- 
-qhull 2.5 1998/1/28
- - added option 'Fv' to print the Voronoi diagram
- - added rbox option 'x' to generate random points in a simplex
- - added rbox option 'y' to generate a simplex and random points
- - added rbox option 'On' to offset the output 
- - add unpacking instructions to README.txt
- - updated discussion of forced output, 'Po'
- - sorted the options alphabetically
- - removed __STDC__ check from qhull.h for VisualC++
- - moved qh_markvoronoi from qh_printvoronoi and cleared facet->seen flags
- - added facet->seen2 flag for 'Fv'
-
-qhull 2.5 1998/1/16
- - fixed initialization of qh.last_low on restart of 'd QJ' 
- - renamed qh_JOGGLEmax to qh_JOGGLEmaxincrease
- - updated URL for Fukuda's cdd program
-  
-qhull 2.5 1998/1/12
-
-New or modified features
- - added option 'Fx' to print vertices by point id [G. Harris, T. McClendon]
-     in 2-d, the vertices are printed in counter-clockwise order
-     for Delaunay triangl., 'Fx' lists the extreme points of the input sites
- - added option 'QJ' to randomly joggle input instead of merging facets
- - added option 'TO file' to output results to a file.  Needed for Windows95.
- - added option 'TRn' to rerun Qhull n times. Use to collect joggle statistics
-
-Corrections
- - fixed 2-d facet orientation for 'i' and 'o' outputs
- - for Mathematica 2.2 ('m') changed %10.8g to %16.8f [A. Zhaxybayev]
- - fixed incorrect warning for 'QV0 Qg' in qh_initbuild [B. Wythoff]
- - fixed unaccessible statistic if !qh_KEEPstatistics for Wnewvertexmax
- - fixed overestimate of qh ONEmerge for point sets outside of 
-     first quadrant and far from the origin
- - fixed overestimate of 'Qbb' for point sets far from the origin
- - fixed potential overestimate of qh DISTround under 'Qbb'
- - fixed 'p' printing coplanar points of unselected facets
- - fixed 'Ft' printing centrums unnecessarily in 2-d
-  
-Changes to documentation 
- - wrote internal design documentation (qh-c.htm)
- - started frequently asked questions (qh-faq.htm)
- - added a section on joggled input to qh-impre.htm
- -   added joggle example to qh-eg.htm (eg.15.joggle)
- -   changed q_eg to use 'QJ' instead of 'Q0' were appropriate
- - added an example to each of the main options
- - added examples to rbox.htm
- - added examples to the synopsis
- - added a reference to Mucke, et al ['96], Fast randomized point location ...
- - added code for printing Delaunay triangles to qh-in.htm [A. Tsui]
- - options 'Pdk' and 'PDk' do not drop on equality
-
-Improvements to the code 
- - reviewed warning messages for Qhull options in qh_initflags
- - added warning to 's' if premature exit from 'TCn' or 'TVn'
- - 's' prints max distance above/below only if qh.MERGING
- - reduced maxoutside in qh_check_bestdist/qh_check_points for 'Rn'
- - in post-merging, rebuild centrums of large facets that become small
- - lowered cutoff for coplanar facets for ischeckmax/qh_findbest
- - removed qh_check_maxout for 'Wn Q0'
- - reset tracing after 'TPn' adds point in 4-d and higher
-
-Changes for the Qhull library 
- - changed qh_setdelaunay to call qh_scalelast if used with 'Qbb' or 'QJ'
-     Delaunay callers to qh_findbestfacet, qh_addpoint, or qh_findfacet_all
-     should always use qh_setdelaunay as in user_eg.c
- - defined qh.outside_err to check points against a given epsilon [E. Voth]
- - added header to user_eg.c to avoid its incorporation into qhull [C. Begnis]
- - added qh_nearcoplanar() calls to user_eg.c
-     only needed if use 'QJ'
- - expanded __STDC__ warning message in qhull.h [C. Begnis]
- - renamed qh maxmaxcoord to qh MAXabs_coord
- - replaced qh MAXlowcoord with qh MAXabs_coord
- - random seed ('QR-n') is reset in qh_initqhull_globals after testing
- - replaced 'FO' options "_max-coord/_min-coord" with "_max-width"/qh.MAXwidth
-
-Other changes to Qhull functions
- - report error for !bestfacet in qh_findbest (it shouldn't happen) [H. Meuret]
- - set newbest in qh_findbest only if bestfacet updated 
- - renamed facet parameter for qh_findbest
- - added maxdist argument to qh_checkpoint
- - moved 'FO' output after qh_partitionall
- - separated qh_initbuild from qh_qhull
- -   reinitialize globals modified by qh_buildhull
- -   moved initialization of qh.GOODvertexp & qh.GOODpointp to qh_initbuild
- - separated qh_nearcoplanar from qh_check_maxout
- - separated qh_geomplanes from qh_printfacet2geom, etc.
- - separated qh_freebuild from qh_freeqhull
- - separated qh_outerinner from io.c to return outer and inner planes
- - separated qh_distround and qh_detroundoff from qh_maxmin
-
-
-qhull 2.4 97/4/2
-
-New or modified features
- - made 'C-0' and 'Qx' default options.  Use 'Q0' to not handle roundoff errors
- - removed point-at-infinity from Delaunay/Voronoi.  
-     you no longer need to use 'Qu PDk'
- - added 'Qz' to add a point-at-infinity to Delaunay and Voronoi constructions
- - added published version of qhull article in ACM Trans Math Software
- - ported qhull to Windows95 under Visual C++ and Borland C++
- - added 'Ft' for triangulation by adding the centrums of non-simplicial facets
- - added 'Gt' to display 3-d Delaunay triangulations with a transparent hull
- - changed definition of coplanar point in output to qh min_vertex (see 'Qc')
-     it was qh MAXcoplanar ('Un') [could make vertices non-coplanar]
- - automatically set 'Qi' for options 'd Qc' and 'v Qc'.
- - reworded summary ('s') for Delaunay/Voronoi/halfspace.  
-     use 'Fs' and 'FS' for summary statistics.
- - for summary 's' of Delaunay/Voronoi, display number of coplanars for facets
-     if none, display total number of coplanars (i.e., non-vertices)
- - input comment is first non-numeric text (previously limited to header)
- - added input warning if use 'Qbb' without 'd' or 'v'
- - 'Q3' can not be followed with a numeric option
-
-Corrections
- - fixed qh_partitioncoplanar() to not drop interior points if 'Qi' is used
- - fixed 'FP d' to report distance in point set instead of paraboloid
- - fixed qh_findbest() to search all coplanar facets for qh_check_maxout()
-  
-Changes to documentation 
- - added example eg.17f.delaunay.3 to show a triangulation of cospherical sites
- - split up qh-opt.htm into multiple pieces
- - split off qh-in.htm for Qhull internals
- - renamed .html files to .htm for Windows95
- - rewrote qh-optv.htm on Delaunay triangulation and Voronoi vertices
- - added 'man' pages qhull.txt and rbox.txt.  These list all the options
- - removed 'txt' versions of html files
- - added note to 'PDk' about avoiding a 'd' option immediately after a float
- - under option 'd', display the triangulation with 'GrD3', not 'GnrD3'
- 
-Changes to the Qhull library
- - added 'format' argument to qh_printfacetNvertex_nonsimplicial() in io.c
- - removed C++ type errors [J. Stern, S. Marino]
- -  created SETelemt, SETfirstt, etc. for specifying data types.  
- -  use SETelem,etc. for assignments. 
- -  changed setT.maxsize to 'int' to prevent type conversion warnings
- -  changed FOREACH.. to a comma expression for better code and less warning
- -  changed qh.vertex_visit and .visit_id to unsigned int to prevent warnings
- - changed clock() to qh_CPUclock (user.h)
- - qh_init_B() and qh_readpoints() do not set qh.ATinfinity for Delaunay tri.
- - qh_setvoronoi_all() sets upper Delaunay facets if qh.UPPERdelaunay is set
- - qh_nearvertex() returns distance in dim-1 for qh.DELAUNAY
- - removed MSDOS path from qhull_command.  Spaces in Win95 tripped qh_setflags
- - removed memory.h from qhull_a.h.  memset,etc. should be in strings.h
- - split qh_prompt into pieces for Visual C++
- - added note to qh_addpoint that coordinates can not be deallocated
- - added Baker '89 to constrained Delaunay diagrams under Enhancements
-    please let me know if you try this
- - added request for unbounded Voronoi rays to Enhancements
-    please let me know if you try this
-
-qhull V2.3 96/6/5
- - fixed total area of Delaunay triangulation. [A. Enge]  
-      It should ignore facets on the upper-envelope.
- - if 'd Qu FA', the total area is summed over the upper-Delaunay triangles
- - fixed sign of area for Delaunay triangulations. 
- - fixed cdd input format for Delaunay triangulation. [A. Enge]
- - for cdd input, allow feasible point for halfspaces.
- - warning if cdd output format for centrums, halfspace intersections, or OFF.
- - print '0' for area ('Fa') if area is not computed for a facet
- - option 'QR-n' sets random number seed to n without rotating input
- - fixed qh_findbest() to retest coplanar and flipped facets after a restart
- - for 'd Qu Ts' collects angle statistics for upper Delaunay facets
- 
- Changes to the Qhull library
- - expanded user_eg.c for incremental constructions and Delaunay triangulation
- - added discussion of incremental construction to qh_man.html#library
- - WARNING: The default value of qh ATinfinity was changed from True to False.
-            A new flag, qh UPPERdelaunay, was defined for 'Qu'.
-         Please set qh ATinfinity if you explicitly add the point "at-infinity"
-         Please set qh ATinfinity if you explicitly call qh_projectinput.
-         Please set qh UPPERdelaunay if you explicitly cleared qh ATinfinity.
-	 Other users do not need to change their code.         
-   Now you can build a Delaunay triangulation without creating a point 
-   "at-infinity".  This removes a potential, hard-to-understand error.  
-   qh_readpoints sets qh ATinfinity for options 'd' or 'v' without 'Qu'.
-   qh_initB sets qh ATinfinity for qh PROJECTdelaunay w/o qh UPPERdelaunay.
-   qh_projectinput adds a point "at-infinity" only if qh ATinfinity is set.
- - added qh_setdelaunay to geom2.c to project points to paraboloid
- - added qh_findbestfacet() to poly2.c to replace qh_findfacet()
- - removed procedure qh_findfacet().  It does not always work.
- - removed NULL option for facet in qh_addpoint().  It does not always work.
- - added noupper parameter to qh_findbest.
- - added search of upperdelaunay facets to qh_findbest()
- - allowed qh_findbest() to start with a flipped or upperdelaunay facet
- - removed qh_nonupper() -- it is no longer needed
- - allow space at end of options
- - fixed qh_projectinput for furthest-site Delaunay (qh PROJECTdelaunay 'd Qu')
- - added voids to procedure declarations with empty parameter lists
-
-qhull V2.3 96/3/25
- - fixed missing qh_check_maxout when coplanar points and no merged facets.
- - fixed qh_freeqhull/allmem (e.g., if qh_NOmem) [only custom code] [E. Voth]
- - fixed qh_freeqhull to free qh interior_point [E. Voth]
- - fixed main() to free all of memory if qh_NOmem.  Include "mem.h" [E. Voth]
- - reset f.newcycle link in qh_mergecycle_all [E. Voth]
- - fixed false error if 'Tc', coplanar points, and a narrow hull
- - turn off 'Rn' when computing statistics, checking code, or tracing code
- - removed ={0} from global.c and stat.c to reduce compiler warnings
- - changed Makefile dependences to $(HFILES) for all but unix.o, set.o, mem.o
- - pulled out qh_printpointid and reordered qh_pointid [E. Voth]
- - removed some compiler warnings
- - moved 'FO' print of options to just before qh_buildhull
- - changed 'FO' to list difference from -1 for _narrow-hull
-
-qhull V2.2 96/2/15
- - detect narrow initial hulls (cosine of min angle < qh_MAXnarrow in user.h).
-   Write warning if cosine < qh_WARNnarrow in user.h.  If narrow (qh NARROWhull), 
-   partition coplanar points as outside points and delay coplanar test to end.
-   Needed for  RBOX 1000 L100000 s G1e-6 t995127886 | QHULL Tv
-   See 'limitations' in qh-impre.html for further discussion.
- - corrected some confusions between 'FV' and 'Fv' in qh-opt.html
- - fixed initialization error for small Voronoi diagrams (e.g., [0,0], [1,0], [0,1]) [J. Velez]
-  - fixed bad return from qh_mindiff in geom2.c
- - for initial hull, first process facet with furthest outside point (qh_furthestnext)
- - added facet->notfurthest flag for recomputing furthest point
- - added check for __STDC__ (needs ANSI C) [E. Voth]
- - reduced warning messages from [E. Voth].  e[1] in setT still reports a warning.
- - added a cube to the discussion of option 'v' (Voronoi) in qh-opt.html [J. Velez]
- - added notes about adjacent vertices to "Calling Qhull" in qh-man.html [R. Lewis & J. Velez]
- - added note about 'lines closer' when viewing 3-d Delaunay triangulations [P. Kallberg]
- - added option 'Q9' to always process furthest of furthest outside points.
- - removed option 'Pp' from q_eg and qh-eg.html.
-
-qhull V2.2 95/12/28
- - added option 'Qbb' to scale the last coordinate to [0,m] (max prev coord).
-   This reduces roundoff errors for Delaunay triangulations with integer coordinates.
- - changed option 'Qu d' to print out the furthest-site Delaunay triangulation
-   Use options 'Qu d PD2' to compute the normal 2-d Delaunay triangulation without
-   the point at infinity. 
- - added notes to the documentation of option 'd'
- - added notes to limitations of how Qhull handles imprecision
- - added warning if options 'FP', 'Fc', or 'Gp' without option 'Qc' or 'Qi'
- - added note to options 'PDk:n' and 'Pdk:n' that closest facet is returned if none match
- - added check that 'Qbk' and 'QBk' does not invert paraboloid for 'd'
- - added notes that qh_findfacet and qh_addpoint require lifted points for Delaunay triangulations
- - fixed 'rbox s 5000 W1e-13 D2 | qhull d Qcu C-0 Qbb'
- - fixed option 'QbB' (qh SCALEpoints was not set)
- - fixed minor confusion between 'Gc' (print centrums) and 'Gp' (print points)
- - rewrote qh_findbestnew for upper convex hull, Delaunay facets
- - changed option name for 'Gp' from 'Gcoplanar' to 'Gpoints' 
- - changed "nearest" facet for 'Pdk' to threshold - normal
- - reworked qh GOODclosest for 'Qg'
- - added note that 'Qg' does not always work
- - recorded option 'C-0' as "_zero-merge" in option 'FO'
- - refined qh DISTround in qh_maxmin/geom2.c for Delaunay triangulations
-
-qhull V2.2 95/12/4
- - Version 2.2 fixes an important bug in computing Delaunay triangulations 
-   and convex hulls with edges sharper than ninety degrees.  The problem 
-   occurs when processing a point at a sharp edge.  A directed search can 
-   not be used for partitioning because one side may hide facets from the 
-   other side.  The new lens-shaped distribution for rbox demonstrates the 
-   problem.  For example, 'rbox 100 L3 G0.5 s | qhull Tv' fails for Version 2.1.
-   O. Schramm found the bug when computing the Delaunay triangulation of points
-   near an outside edge.  
-
-   I rewrote qh_findbest and related functions.  Qh_findbest 
-   uses an exhaustive test for sharp edges (qh_findbest_sharp).  
-   Qh_findbest avoids the upper convex hull of Delaunay triangulations.
-
-   Options 'd' and 'v' no longer assign coplanar points to the upper convex hull.
-    
-   Qh_check_maxout tests near-inside points.  It ignores fully inside points.
-   When done, it removes near-inside points from the coplanar sets.
-
-   If you use qh_addpoint or qh_findbest, please review the function headers.  
-   They do not work for lens-shaped hulls for arbitrary facets.  They do work for 
-   Delaunay triangulations.
-
- Changes to options for V2.2
- - added 'Qu' for computing the furthest-site Delaunay triangulation (upper hull)
-   and furthest-site Voronoi vertices.
- - added 'FP' to print nearest vertex for coplanar points
- - added coplanar count to 'Fs' and 's'
- - added number of similar points to summary for Delaunay/Voronoi
- - Option 'Qc' is no longer necessary when merging.  
- - 'o' format for Voronoi vertices ('v') generates "0" lines for similar points
- - 'QRn' for Delaunay ('d' or 'v') now rotates about the Z axis (see qh_init_B).
-   Otherwise Qhull does not identify the upper hull
- - removed option 'Qa' for "all points outside".  In V2.1 it was automatically
-   set for 'd'.  Even though it was a bad idea, it revealed the above bug.
- - for option list ('FO'), added version, values for one-merge, maxpos, maxneg,
-   and near-inside, and flags for zero-centrum
- - optimized 'C-0' and 'Qx'.  These options ("zero-centrum") test vertices 
-   instead of centrums for adjacent simplicial facets.
- - if 'Tv', report number of points that are not verified due to qh_findbest
- - Option 'Q8' ignores near-inside points.
-
- rbox 95/12/3
- - added lens distribution ('Ln')  It may be used with 's', 'r', 'Wn', and 'Gn'
- - removed default point count except for the test case, 'Dn'
- - divided main() of rbox.c into sections
-
- Documentation changes for V2.2
- - added examples for lens distribution and furthest-site Delaunay triangulation
-   and renumbered the examples for q_eg
- - described facet orientation in 'data structure' section [P. Soikkonen]
- - added notes to qh-man.html/"What to do if something goes wrong"
- - added note about using 'Tv' to verify the results [O. Schramm] 
- - expanded definition of f_r in Performance section [S. Grundmann]
- - noted that Geomview display of a Voronoi diagram adds extra edges 
-   for unbounded Voronoi cells
- - rewrote error "convexity constraints may be too strong" [D. Newland]
- - added limitations section to "Imprecision in Qhull"
- - added note about zero-area facets to 'Imprecise convex hulls' in qh-impre.html
- - added note to 'Qi' that it does not retain coplanar points
- - added note that option 'Q5' may be used if outer planes are not needed
- - added note to README.txt about Irix 5.1 [C. Goudeseune]
- - added code fragment for visiting Voronoi vertices to "Calling Qhull" [M. Downes]
- - added note about qh_addpoint() to "Calling Qhull" [M. Downes]
-
- Errors fixed for V2.2
- - use qh_sethyperplane_gauss if 3-d or 4-d norm is less than qh MINnorm
- - count Zcentrumtests if qh_NOstat
- - reversed sign convention for qh_sethyperplane_gauss
-   it was opposite to qh_sethyperplane_det
-   this effects qh_determinant and qh_detsimplex
- - fixed error in qh_findgood_all with multiple restrictions, e.g., 'QVn Pdk'
- - fixed call to qh_clearcenters for qh_produce_output
- - in qh_errexit, report p0 if last furthest point
-
- Changes for users of the Qhull library
- - user code needs to define qh_version (see user_eg.c)
- - merged initialization code into qh_init_A and qh_init_B [M. Mazzario] 
-   old code works as before.
-   qh_initflags also sets qh qhull_command for qh_initthresholds
-   redid initialization for user_eg.c
- - simplified user_eg.c.  It computes the convex hull of a cube.
- - added qh_setvoronoi_all in poly2.c to compute Voronoi centers
-   added related note to call_qhull
- - added qh_findfacet to use in place of qh_findbest
- - added qh_nearvertex to return nearest vertex in facet to point
- - redid notes on multiple, concurrent calls in call_qhull/user.c
- - changed BoolT to unsigned int (prevent implicit enum conversion warnings)
- - added upperdelaunay to facetT.  It indicates a facet of the upper convex hull.
- - converted qhull-PPC.sit for CodeWarrior 7
-
- Code changes for V2.2
- - simplified calls to setjmp() for Cray J916 [Salazar & Velez]
- - replaced fprintf(fp,string) with fputs in io.c
- - 'qh num_coplanar' removed (too expensive and not used).
- - added numcoplanars to qh_countfacets()
- - added min norm to qh_normalize2().  qh_normalize() wasn't changed
- - removed type casts from qh_point and qh_pointid [Salazar & Velez]
- - account for roundoff error in detecting upper convex hull (qh ANGLEround).
- - post merging uses qh_findbestnew for partitioning
- - qh_findbestnew for qh_partitioncoplanar goes to best facet
- - 'Qm' always processes points above the upper hull of a Delaunay triangulation
- - GOODvertex initialized with qh_findbestnew instead of qh_findbest
- - for 'v', qh_facetcenter returns furthest-neighbor vertex if 'Qu'
- - added test for qh feasible_point if use 'Fp' and qh_sethalfspace_all
- - reviewed Sugihara's algorithm for topologically robust beneath-beyond
- - on error, report if qhull in post-merging or has completed
- - if tracing, option 'FO' and qhull command always printed
- - added current furthest point ("during p%d") to 'T-1' events
- - added 'TWn' tracing for vertices of new facets (qh_setfacetplane)
- - added 'TWn' tracing for vertices in an output facet (qh_check_maxout)
- - reorganized split between poly/poly2.c and geom/geom2.c
- - reordered object files in Makefile
-
-qhull V2.1 95/9/25
- - converted qhull.man to html format, many edits
- - referenced Shewchuk's triangle program and Schneiders' Mesh Generation page
- - added option 'Qa' to force all points outside 
-     automatically set for "precise" Delaunay or Voronoi [Salazar & Velez]
-     it is turned off by merging, 'Wn', 'Qc' or 'Qi'
- - added coplanar points to option 'FN'
- - moved option 'FO' to include default precision options
- - changed default random number generator to qh_rand in geom2.c (user.h)
-
- other code changes
- - fixed option comment Pdrop-facets-dim-less, Qbound-dim-low, QbBound-unit-box
- - defined ptr_intT for converting 64-bit ptrs to 'unsigned long' [D. Bremner]
- - defined setelemT to distinguish actual size from pointers [D. Bremner]
-     use either e[...].p or e[...].i (user-level code should use set.h macros)
- - changed %x to %p in format statements for pointers [D. Bremner]
- - added test of REALmax,etc. to qh_maxmin [H. Poulard]
- - added type parameter to qh_memalloc_() macro for type conversion
- - added type conversion to qh_memalloc() calls where missing
- - added type conversion to calls into set.c that return void*
-
- other documentation changes:
- - new URLs for graphics images
- - fixed comment for facetT.neighbors in qhull.h [P. Soikkonen]
- - changed recommendations for precision errors in qh_printhelp_degenerate()
- -  added recommendation for 'V0' (facet is visible if distance >= 0)
- - added note about 'long double' to user.h [S. Grundmann]
- - added note about zero area Delaunay triangles for the 'v' option
- - added note about locating Delaunay triangles to option 'd' [A. Curtis]
- - added note that coplanar vertices correspond to duplicate points for 'd'
- - added note about option 'd' automatically setting 'PDk' (lower convex hull)
- - added note about precision errors to option 'd' [many users] 
- - added note about qh_findbest() to the Qhull library section [L. Lai]
- - 'make install' renames qhull.man to qhull.1 for Unix [M. Phillips]
- - renamed README, etc. to *.txt to match WWW conventions [D. Cervone]
-
-qhull V2.1 7/10/95
-  - in 2-d, 'v o' lists the vertex at infinity in order [R. Critchlow]
-  -   it used to always list the vertex at infinity ("0") first
-  - rewrote description of 'v' option (Voronoi vertices and 2-d diagrams)
-  - added 'PFn' for printing facets whose area is at least 'n' [D. Holland]
-  - prefixed 'Q',etc. to the 'Q',etc. options in the long help prompt
-  - fixed references to 'Fv' and 'FV' options under option 'Hn,n,n'
-  - updated reference to cdd, <ftp://ifor13.ethz.ch/pub/fukuda/cdd/>
-  - in set.c, added some missing type coercions for qhmem.tempstack
-
-qhull V2.1 6/12/95
-  - replaced qhull.ps with qhull-2.ps (paper submitted to ACM TOMS)
-  - use BUFSIZ for setvbuf for Power Macintosh
-  - number of good facets printed if QVn, QGn, Pd, or PD
-  - added Makefile for Borland C++ 4.02 with Win32 [D. Zwick]
-  - added note to Enhancements section of qhull.1 about constrained
-       Delaunay triangulations [T. Rasanen]
-
-qhull V2.1 6/7/95
-  - fixed qh_facetarea_simplex() for non-simplicial facets [L. Schramm]
-  - fixed cast in qh_point and qh_pointid for 64-bit architectures
-  - fixed URL for Amenta's list of computational geometry software
-  - fixed cast in qh_meminitbuffers for qhmem.freelists
-  - added test for !qh half_space in qh readpoints 
-  - clarified options for qh_printhelp_singular()
-  - discussed non-simplicial facet area under option 'Fa' in qhull.1
-
-qhull V2.1 6/3/95
-  - home page for Qhull and new descriptions for the Qhull examples
-      http://www.qhull.org
-  - changed SIOUX buffering for Power Macintosh.   It runs fast now.
-      added a project file for Metrowerk's C
-  - note in README about compiling qhull on the PC
-
-qhull V2.1 beta 5/15/95
-
-		======= main changes ========
-  - added halfspace intersection ('Hn,n,n')
-  - facet merging is better, especially for high dimensions 
-  -   added 'Qx' for exact merges of coplanar points and precision faults
-  - facet merging is faster, especially for high dimensions.
-      e.g., convex hull of the 8-d hypercube is seven times faster
-  - added 'F' output formats for printing each aspect of the convex hull
-  - format 'Fa' computes facet areas, total area, and total volume
-  - format 'FO' writes a descriptive list of selected options to stderr
-  - moved all customization options to user.h
-  - changed the default precision to 'double' since it's needed for Delaunay.
-      using 'float' is faster and takes less space (REALfloat in user.h)
-  - option 'Qm' is no longer important for facet merging
-  - removed need for 'Qs' by selecting initial simplex with pos. determinants
-  - renamed 'Qv' to 'Q7' since virtual memory does not work well for qhull
-  - Qhull is available for the Power Mac (no graphical output)
-
-                 ====== other new and modified options ===========
-  - changed default MINvisible ('Vn') to a multiple of premerge_centrum ('C-n')
-  - added 'Un' option to set width of facet for coplanar points.
-       This replaces the previous rules for determining coplanar points.
-  - changed default MINoutside ('Wn') to twice MINvisible ('Vn')
-  - Geomview output adjusts point radii for MINvisible 'Vn' 
-  - the input format allows the number of points to precede the dimension
-  - options 'v' 'd' 'FAn' and 'FMn' record good facets ('Pg')
-  - added 'Fd' and 'FD' options for homogeneous coordinates in cdd format
-  -   in rbox, added 'h' flag to generate homogeneous coordinates in cdd format
-  - option 'PAn' prints out the n facets with the largest area 
-  - option 'PMn' prints out the n facets with the most merges
-  - option 'Po' under tracing ('Tn') no longer tries to write erroneous facets
-  - option 'TCn' only prints the old 'visible' facets for 'f'
-  - 'TFn' reports intermediate results when post-merging
-  -   option 'Ts' with option 'TFn' prints intermediate statistics
-  - the message for 'Tv' reports if it is checking outer planes
-  - 'Tz' sends stderr output to stdout
-  - added 'Q1' to ignore angle when sorting merges (merges are worse)
-  - added 'Q2' to not perform merges in independent sets (merges are worse)
-  - added 'Q3' to not remove redundant vertices (faster)
-  - added 'Q4' to avoid merges of old facets into new facets (does worse)
-  - added 'Q5' to skip qh_check_maxout (faster, but less accurate)
-  - added 'Q6' to skip pre-merge of concave and coplanar facets
-  - added 'Qv' for testing vertex neighbors for convexity (needs merge option) 
-  - added warning if mix Geomview output with other outputs ('Po' turns off)
-  - options 'o v' for 3-d and higher sort the Voronoi vertices by index
-
-		======= documentation =======
-  - rewrote the introduction and precision sections 
-  - added a section on performance
-  - added an example on halfspace intersection
-  - installed examples of Qhull in
-    <http://www.geom.uiuc.edu/graphics/pix/Special_Topics/Computational_Geometry/>
-
-		======= Makefile, user.h, and messages =======
-  - Makefile calls ./qhull, ./rbox, and prints short prompt for qhull
-  - added new statistics, e.g., for buildhull
-  - changed default qh_RANDOMtype to RAND_MAX with rand()
-  - added comment about numeric overflow to printhelp_singular
-  - reorganized the code to improve locality of reference
-  - option in mem.h (qh_NOmem) to turn off memory management in qhull
-  - option in user.h (qh_NOtrace) to turn off tracing in qhull
-  - option in user.h (qh_NOmerge) to turn off merging in qhull.
-  -   use this instead of redefining qh_merge_nonconvex in user.c
-  - simplified user_eg.c.  See qh_call_qhull() in user.c for the full version
-  
-		======== bug fixes ============
-  - fixed error in number of points for 'rbox 100 r' (odd distribution)
-  - fixed performance error in qh_degen_redundant_neighbors
-  - qh_partitionpoint now sets facet->maxoutside for first outside point
-  - fixed performance error in partitioning when merging a large, regular cone
-  - removed memory leak in qh_appendmergeset
-  - removed double free of qh line under errors in qh_readinput()
-  - forcing output on error ('Po') fixed for options 'n' 'o' 'i' 's'
-  - fixed optimization error on HP machines [fprintf(... *p++)]
-
-                ======== changes to qhull.h for user code =======
-  - qh_collectstatistics and qh_printstatistics removed from qhull.h.
-      should use qh_printallstatistics instead
-  - qh_findbest uses boolT for newfacets
-  - added qh_findbestnew for non-simplicial facets.  qh_findbest is
-    too slow in this case since it needs to look at many nearly coplanar
-    facets.
-  - renamed qh_voronoi/qh_centrum to qh_ASvoronoi, qh_AScentrum
-  - changed facet->id to 32-bits, added new flags for merging
-  - added facet->f for facet pointers while merging and for facet area
-  - added dfacet/dvertex for printing facets/vertices while debugging
-  - added qh_produce_output and qh_printsummary
-   
-		======== changes to code ==========
-  - moved qh_setfacetplane from qh_makenewfacets to qh_makenewplanes
-  - added qh_setfree2, qh_setcompact, and qh_setduplicate to set.c
-  - qh_findgooddist returns list of visible facets instead of setting global
-  - in qh_check_maxout, inside points may be added to coplanar list.
-  - qh_findbestnew used for qh_partitionall.  It is faster.
-  - in qh_findbest, changed searchdist to MINvisible+max_outside+DISTround.
-      MINvisible is the default MAXcoplanar.
-  - cleaned up list management via qh_resetlists
-  - uses facet->dupridge to indicate duplicated ridges instead of ->seen
-  - qh_buildtracing records CPU time relative to qh hulltime instead of 0
-
-		========== changes to merging =======
-  - many performance improvements, especially in high-d.
-  - when merging, qh_findbest and qh_findbestnew stops search at qh_DISToutside
-  - vertex neighbors delayed until first merge
-  - post merges reported every TFn/2 merges
-  - vertex merging turned off in 7-d and higher (lots of work, no benefit).
-      vertex merging moved to qh_qhull_postmerging in 6-d.
-  - replaced qh min_vertex with MAXcoplanar for determining coplanarity
-  - pick closest facets to merge in duplicate ridge instead of flip/flip
-      (see qh_matchduplicates in poly2.c)
-  - optimize merge of simplex into a facet
-  - optimize merge of a "samecycle" of facets into a coplanar horizon facet
-  - cleaned up qh_forcedmerges/qh_flippedmerges and removed facet->newmerge
-  - rewrote qh_merge_degenredundant with separate queue
-  - qh_facetdegen replaced by facet->degenredun
-  - flipped neighbors no longer merged in preference to flip/non-flip pairs
-  - removed angle argument from qh_merge_degenredundant and qh_mergefacet
-       only used for tracing
-  - getmergeset_initial had extra test of neighbor->simplicial
-  - ridge->nonconvex is now set on only one ridge between non-convex facets 
-  - moved centrum deletion to qh_updatetested
-  - qh_isnewmerge(facet) changed to facet->newmerge (removed NEWmerges)
-  - qh_findbestneighbor reports correct distance even if testcentrum
-  - added hull_dim factor to qh_BESTcentrum
-  - removed horizon preference in qh_merge_nonconvex (qh AVOIDold)
-  - facet->keepcentrum if qh WIDEfacet or qh_MAXnewcentrum extra vertices
-
-qhull V2.02 1/25/95
-  - rbox 'z' prints integer coordinates, use 'Bn' to change range
-  - fixed rare bug in qh_check_maxout when qh_bestfacet returns NULL
-  - fixed performance bug in findbestneighbor, should be + BESTnonconvex
-  - renamed 'notgood' flag in 'f' option to 'notG' flag (caused confusion)
-  - changed qh.hulltime to (unsigned) to prevent negative CPU times
-  - added random perturbations to qh_getangle under the 'Rn' option
-  - reviewed the documentation and enhancement list
-  - added discussion of how to intersect halfspaces using qhull
-  - replaced expression that caused incorrect code under an old version of gcc
-  - added buffer after qh.errexit in case 'jmp_buf' has the wrong size
-  - rewrote qh_printhelp_singular for lower-dimensional inputs
-  - rewrote qh_printhelp_degenerate
-  - added options for qh_RANDOMint in qhull_a.h
-  - changed time format for 'TFn' to %02d
-
-qhull V2.01 6/20/94
-  - fixed bug in qh_matchnewfacets that occured when memory alignment makes
-    facet->neighbors larger than necessary.
-  - fixed bug in computing worst-case simplicial merge of angle coplanar
-    facets (ONEmerge).  This decreases (...x) in printsummary.
-
-qhull V2.01 6/17/94
-  - added recommendation for 'Qcm' to documentation and help prompts
-  - added an input warning to qh_check_points ('Tv') if coplanars and no 'Qc'
-  - qh_partitionpoint: always counts coplanar partitions (Zcoplanarpart)
-  - rewrote qh_printhelp_degenerate to emphasize option 'C-0'
-  - For Geomview output, roundoff is not needed when printing the inner and 
-    outer planes.  This improves Geomview output for the 'Rn' option.
-  - For Geomview output without coplanar points or vertices, qh_GEOMepislon 
-    is not needed.  This removes the edge gap when displaying a Voronoi cell.
-  - For Geomview output 'Gp', direct vertices to the interior point 
-    instead of the arithmetic center of the displayed vertices.
-    
-qhull V2.01 6/11/94
-  - if pre-merge, 'Qf' is automatically set.  Otherwise an outside point may 
-        be dropt by qh_findbest().  This slows down partitioning.
-  - always use 'Qc' if merging and all facet->maxoutside's must be right.
-        Otherwise distributions with many coplanar points may occassionally
-	miss a coplanar point for a facet.  This is because qh_findbest, when 
-	called by qh_check_maxout, can become stuck at a local maximum if 
-	the search is started at an arbitrary facet.  With 'Qc', the search 
-	is started from a coplanar facet.  For example,
-		rbox 1000 W8e-6 t | qhull C-0 Tv
-	will (rarely) report that a facet->minoutside is incorrect
-  - option 'Pp' turns off "Verifying" message for 'Tv'
-  - added qh_copynonconvex to qh_renameridgevertex (fixes rare error)
-  - 'rbox tn' sets random seed to n
-  - 'rbox t' reports random seed in comment line
-  - qh_errexit reports rbox_command | qhull_command and 'QR' random seed
-  - added additional tracing to bestdist and setfacetplane
-  - in qh_checkconvex, need to test coplanar against 0 instead of -DISTround 
-  - in qh_checkconvex, always test centrums if merging.  The opposite
-    vertex of a simplicial facet may be coplanar since a vertex of
-    a simplicial facet may be above the facet's hyperplane.
-  - fixed error handling in qh_checkconvex when merging
-  - in qh_printsummary, one merge ratio not printed if less than 'Wn'
-  - documented that 'Tv' verifies all facet->maxoutside
-
-qhull V2.01 6/2/94
-  - 's' prints summary to stderr
-  - multiple output formats printed in order to stdout
-  - added statistic for worst-case distance for merging simplicial facets 
-       	can not hope for a better "max distance above/below facet"
-        print factor for "max distance.."/"merge simplicial" in printsummary
-  - fixed error in scaling input with min/max reversed ('Qb0:1B0:-1')
-  - fixed error in scaling if project & Delaunay & scale ('d Qb0:0B1:0b2:0')
-  - user_eg.c: qh_delpoint removed since it does not always work
-  - user_eg.c now works for either convex hull or Delaunay triangulation
-  - added PROJECTdelaunay for Delaunay triangulations and Voronoi diagrams
-	with libqhull.a and user_eg.c
-  - user_eg.c: if project or scale input, need to copy points
-  - user_eg.c: default just defines main, added fprintf's for qh_errprint etc.
-  - qh_gausselim: a 0 pivot no longer zeros the rest of the array,
-	  need the remaining elements for area computation
-  - qh_qhull: restore cos_max, centrum_radius at end of POSTmerging
-  - qh_checkflipped with !allerror is >=0.0 instead of >0.0
-  - removed -Wall from gcc due to unnecesssary "warning: implicit declaration"
-  - renamed 'new' variables and fields to allow compilation by g++
-  - added README notes on C++, and "size isn't known"
-  - updated manual on 'Qg' with coplanar facets and no merging ('rbox c D7')
-      'Qg Pg' and 'Pg' produce different results because of precision problems
-
-Converting from qhull 1.01 to qhull 2.00
-  - 'qhull An' is now 'qhull Wn'
-	option 'Wn Po' is faster but it doesn't check coplanars
-  - 'qhull g' is now 'qhull G', and the output formats are different
-  - 'qhull c' is now 'qhull Tc'
-  - 'qhull f' is now 'qhull Qf'
-  - 'qhull o' is now 'qhull Po'
-  - 'qhull b' is now always done
-  - qhull and rbox now use floats, change REALfloat in qhull.h for doubles
-  - qhull 2.00 fixes several initialization errors and performanace errors
-	e.g., "singular input" on data with lots of 0 coordinates
-  - 'rbox b' is now 'rbox c G0.48'
-  - all rbox distributions are now scaled to a 0.5 box (use 'Bn' to change)
-  - rbox now adds a comment line.  This may be removed by 'rbox n'
-  - 'rbox r s Z G' no longer includes the positive pole
-  - no changes to the Macintosh version 
-
-qhull V2.00 5/23/94
-  - if force output ('Po'), facet->maxoutside= 'Wn' since coplanars not updated
-        convexity checked if precision problems or verify ('Tv')
-  - if merging, new facets always checked for flipped orientation
-  - a facet is visible (findhorizon) under 'Qm' if distance > max_vertex
-  - if using 'Qm' then min. outside is max_vertex instead of max_outside
-  - default is random()/srandom() in qhull_a.h, checked in initqhull_globals
-  - created internal strtod since strtod may skip spacing after number
-  - removed lower bound (1.0) for qh maxmaxcoord
-  - divzero needs to handle 0/0 and large/small
-  - decreased size of precise vertices
-  - need to initialize qh MINdenom_1 for scalepoints
-  - added factor of qh maxmaxcoord into DISTround (needed for offset)
-  - 'Rn' perturbs distance computations by random +/-n
-  - check_points needs an extra DISTround to get from precise point to computed
-  - rewrote some of the IMPRECISION section in qhull.man
-  - added the input format to the qhull prompt
-  - moved include files to qhull_a.h since some compilers do not use float.h
-  - added qhull.1 and rbox.1 since SGI does not ship nroff
-  - reduced cutoff for printpointvect
-  - use time for qhull random seed only if QR0 or QR-1
-  - radius of vertices and coplanar points determined by pre-merge values
-
-qhull V2.00 5/12/94
-  - facet2point (io.c) used vertex0 instead of vertex1
-  - can't print visible facets after cone is attached
-  - shouldn't check output after STOPcone (TCn)
-  - statistic 'Wminvertex' and 'Wmaxoutside' only if MERGING or APPROXhull
-  - 'make doc' uses lineprinter format for paging
-  - warning if Gpv in 4-d
-
-qhull V2.b05 5/9/94
-  - decreased size of precise vertices
-  - precise facets in 2-d print hyperplanes
-  - accounted for GOODpoint in printsummary
-  - added IMPRECISION section to qhull.man
-  - 'Qg' does work in 7-d unless there's many coplanar facets
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Make-config.sh b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Make-config.sh
deleted file mode 100755
index cc247865257de3b26f6c1665b9f85d243812c62a..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Make-config.sh
+++ /dev/null
@@ -1,285 +0,0 @@
-#!/bin/sh -e
-#
-# Make-config.sh
-#
-#     Setup for Debian build
-#
-#     Writes configure.in and Makefile.am files
-#     and runs automake and autoconfig
-#
-#     Use 'make dist' to build Unix distribution.
-#     Use 'configure; make' to build Qhull
-#
-#note:
-#     'configure; make' does not work under cygwin.
-#	src/unix.c:354: variable 'qh_qh' can't be auto-imported.
-#	Please read the documentation for ld's --enable-auto-import for details.
-
-###################################################
-###########  ../configure.in ######################
-###################################################
-
-echo Create ../configure.in
-cat >../configure.in <<\HERE-CONFIGURE
-dnl configure.in for the qhull package
-dnl Author: Rafael Laboissiere <rafael@debian.org>
-dnl Created: Mon Dec  3 21:36:21 CET 2001
-
-AC_INIT(src/qhull.c)
-AM_INIT_AUTOMAKE(qhull, 2002.1)
-
-AC_PROG_CC
-AC_PROG_LIBTOOL
-
-AC_OUTPUT([Makefile src/Makefile html/Makefile eg/Makefile])
-
-HERE-CONFIGURE
-
-###################################################
-###########  ../Makefile.am #######################
-###################################################
-
-echo Create ../Makefile.am
-cat >../Makefile.am <<\HERE-TOP
-### Makefile.am for the qhull package (main)
-### Author: Rafael Laboissiere <rafael@debian.org>
-### Created: Mon Dec  3 21:36:21 CET 2001
-
-### Documentation files
-
-# to:
-docdir = $(prefix)/share/doc/$(PACKAGE)
-
-# which:
-doc_DATA = \
-  index.htm \
-  Announce.txt \
-  COPYING.txt \
-  README.txt \
-  REGISTER.txt
-
-### Extra files to be included in the tarball
-
-EXTRA_DIST = \
-  $(doc_DATA) \
-  File_id.diz \
-  QHULL-GO.pif
-
-### Subdirectories for Automaking
-
-SUBDIRS = src html eg
-
-HERE-TOP
-
-###################################################
-###########  ../eg/Makefile.am ####################
-###################################################
-
-echo Create ../eg/Makefile.am
-cat >../eg/Makefile.am <<\HERE-AM
-### Makefile.am for the qhull package (eg)
-### Author: Rafael Laboissiere <rafael@debian.org>
-### Created: Mon Dec  3 21:36:21 CET 2001
-
-### Documentation files
-
-# to:
-docdir = $(prefix)/share/doc/$(PACKAGE)
-examplesdir = $(docdir)/examples
-
-# which:
-examples_DATA = \
-  q_eg \
-  q_egtest \
-  q_test \
-  Qhull-go.bat \
-  q_test.bat
-
-### Extra files to be included in the tarball
-
-EXTRA_DIST = $(examples_DATA)
-
-HERE-AM
-
-###################################################
-###########  ../html/Makefile.am ##################
-###################################################
-
-echo Create ../html/Makefile.am
-cat >../html/Makefile.am <<\HERE-HTML
-### Makefile.am for the qhull package (html)
-### Author: Rafael Laboissiere <rafael@debian.org>
-### Created: Mon Dec  3 21:36:21 CET 2001
-
-### Man pages (trick to get around .man extension)
-
-%.1: %.man
-	cp $< $@
-CLEANFILES = *.1
-man_MANS = rbox.1 qhull.1
-
-### Documentation files
-
-# to:
-docdir = $(prefix)/share/doc/$(PACKAGE)
-htmldir = $(docdir)/html
-
-# which:
-html_DATA = \
-  index.htm \
-  qconvex.htm \
-  qdelau_f.htm \
-  qdelaun.htm \
-  qh--4d.gif \
-  qh--cone.gif \
-  qh--dt.gif \
-  qh--geom.gif \
-  qh--half.gif \
-  qh--rand.gif \
-  qh-eg.htm \
-  qh-faq.htm \
-  qh-get.htm \
-  qh-impre.htm \
-  qh-in.htm \
-  qh-optc.htm \
-  qh-optf.htm \
-  qh-optg.htm \
-  qh-opto.htm \
-  qh-optp.htm \
-  qh-optq.htm \
-  qh-optt.htm \
-  qh-quick.htm \
-  qhalf.htm \
-  qhull.htm \
-  qvoron_f.htm \
-  qvoronoi.htm \
-  rbox.htm
-
-### Extra files to be included in the tarball
-
-EXTRA_DIST = \
-  $(html_DATA) \
-  qhull.man \
-  qhull.txt \
-  rbox.man \
-  rbox.txt
-
-HERE-HTML
-
-###################################################
-###########  ../src/Makefile.am ###################
-###################################################
-
-echo Create ../src/Makefile.am
-cat >../src/Makefile.am <<\HERE-SRC
-### Makefile.am for the qhull package (src)
-### Author: Rafael Laboissiere <rafael@debian.org>
-### Created: Mon Dec  3 21:36:21 CET 2001
-
-### Shared Library
-
-# to:
-lib_LTLIBRARIES = libqhull.la
-
-# from:
-libqhull_la_SOURCES = \
-  user.c \
-  global.c \
-  stat.c \
-  io.c \
-  geom2.c \
-  poly2.c \
-  merge.c \
-  qhull.c \
-  geom.c \
-  poly.c \
-  qset.c \
-  mem.c
-
-# how:
-libqhull_la_LDFLAGS = -version-info 0:0:0 -lm
-
-### Utility programs
-
-# to:
-bin_PROGRAMS = qhull rbox qconvex qdelaunay qvoronoi qhalf
-
-# from:
-qhull_SOURCES = unix.c
-rbox_SOURCES = rbox.c
-qconvex_SOURCES = qconvex.c
-qdelaunay_SOURCES = qdelaun.c
-qvoronoi_SOURCES = qvoronoi.c
-qhalf_SOURCES = qhalf.c
-
-# how:
-qhull_LDADD = libqhull.la
-rbox_LDADD = libqhull.la
-qconvex_LDADD = libqhull.la
-qdelaunay_LDADD = libqhull.la
-qvoronoi_LDADD = libqhull.la
-qhalf_LDADD = libqhull.la
-
-### Include files
-
-pkginclude_HEADERS = \
-  geom.h \
-  mem.h \
-  poly.h \
-  qhull_a.h \
-  stat.h \
-  io.h \
-  merge.h \
-  qhull.h  \
-  qset.h \
-  user.h
-
-
-### Example programs
-
-# to:
-docdir = $(prefix)/share/doc/$(PACKAGE)
-examplesdir = $(docdir)/examples
-
-# which:
-examples_DATA = \
-  user_eg.c \
-  user_eg2.c \
-  qhull_interface.cpp \
-  Makefile.txt \
-  Make-config.sh \
-  MBorland
-
-doc_DATA = Changes.txt \
-    index.htm \
-    qh-geom.htm \
-    qh-globa.htm \
-    qh-io.htm \
-    qh-mem.htm \
-    qh-merge.htm \
-    qh-poly.htm \
-    qh-qhull.htm \
-    qh-set.htm \
-    qh-stat.htm \
-    qh-user.htm
-
-
-### Extra files to be included in the tarball
-
-EXTRA_DIST = \
-  $(doc_DATA) \
-  $(examples_DATA)
-
-HERE-SRC
-
-###################################################
-###########  run automake autoconf ################
-###################################################
-
-
-echo Run automake, libtoolize, and autoconf
-cd ..; aclocal &&\
-  automake --foreign --add-missing --force-missing && \
-  libtoolize --force && \
-  autoconf
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Makefile b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Makefile
deleted file mode 100644
index 498ffbade83e2a1bccff32d82cc9521d10ce3c3c..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Makefile
+++ /dev/null
@@ -1,193 +0,0 @@
-# Unix Makefile for qhull and rbox
-#
-#       see README.txt
-#       the Unix distribution contains a configure Makefile
-#
-#       make           to produce qhull qconvex qdelaunay qhalf qvoronoi rbox
-#       make qvoronoi  to produce qvoronoi (etc.)
-#       make qhullx    to produce qhull qconvex etc.  w/o using libqhull.so
-#       make doc       to print documentation
-#       make install   to copy qhull, rbox, qhull.1, rbox.1 to BINDIR, MANDIR
-#       make new       to rebuild qhull and rbox from source
-#
-#       make printall  to print all files
-#       make user_eg   to produce user_eg
-#       make user_eg2  to produce user_eg2
-#       make clean     to remove object files and core
-#       make cleanall  to remove all generated files
-#
-#       PRINTMAN --  command for printing manual pages
-#       PRINTC --  command for printing C files
-#       BINDIR -- directory where to copy executables
-#       MANDIR -- directory where to copy manual pages
-#       CC --     ANSI C or C++ compiler
-#       CCOPTS1 - options used to compile .c files
-#       CCOPTS2 -- options used to link .o files
-#
-#       CFILES -- .c files for printing
-#       HFILES -- .h files for printing
-#       DFILES -- documentation files
-#       MFILES -- man pages and html files
-#       TFILES -- .txt versions of html html files
-#       FILES -- all other files
-#       OBJS -- specifies the object files of libqhull.so
-#
-BINDIR  = /usr/local/bin
-MANDIR  = /usr/local/man/man1
-
-# if you do not have enscript, try a2ps or just use lpr.  The files are text.
-PRINTMAN = enscript -2rl
-PRINTC = enscript -2r
-# PRINTMAN = lpr
-# PRINTC = lpr
-
-#for Gnu's gcc compiler -O2 for optimization, -g for debugging, -Wall for check
-#
-CC     = gcc
-CCOPTS1 = -O1 -ansi 
-
-# for Sun's cc compiler, -fast or O2 for optimization, -g for debugging, -Xc for ANSI
-#CC = cc
-#CCOPTS1 = -Xc -v -fast
-
-# for Silicon Graphics cc compiler, -O2 for optimization, -g for debugging
-#CC = cc
-#CCOPTS1 = -ansi -O2
-
-# for Next cc compiler with fat executable
-#CC = cc
-#CCOPTS1 = -ansi -O2 -arch m68k -arch i386 -arch hppa
-
-# for loader, ld
-CCOPTS2 = $(CCOPTS1)
-
-# OBJS in execution frequency order.  CFILES after qhull.c are alphabetical
-OBJS = user.o global.o stat.o io.o geom2.o poly2.o \
-       merge.o qhull.o geom.o poly.o qset.o mem.o
-
-CFILES= unix.c qhull.c geom.c geom2.c global.c io.c mem.c merge.c poly.c \
-        poly2.c qset.c stat.c user.c qconvex.c qdelaun.c qhalf.c qvoronoi.c
-HFILES= user.h qhull.h qhull_a.h geom.h io.h mem.h merge.h poly.h qset.h stat.h
-TXTFILES= ../Announce.txt ../REGISTER.txt ../COPYING.txt ../README.txt Changes.txt
-DOCFILES= ../html/rbox.txt ../html/qhull.txt
-FILES=  Makefile rbox.c user_eg.c ../eg/q_test ../eg/q_egtest ../eg/q_eg
-HTMFILES= qhull.man rbox.man qh-in.htm qh-optg.htm qh-optt.htm qh-optp.htm \
-        index.htm qh-quick.htm qh-impre.htm qh-eg.htm \
-        qh-optc.htm qh-opto.htm qh-optf.htm qh-optq.htm \
-	    qh-c.htm qh-faq.htm qhull.htm qconvex.htm qdelaun.htm \
-		qh-geom.htm qh-globa.htm qh-io.htm qh-mem.htm qh-merge.htm \
-		qh-poly.htm qh-qhull.htm qh-set.htm qh-stat.htm qh-user.htm \
-		qdelau_f.htm qhalf.htm qvoronoi.htm qvoron_f.htm rbox.htm 
-
-all: rbox qconvex qdelaunay qhalf qvoronoi qhull
-
-unix.o:   qhull.h user.h mem.h
-qconvex.o:   qhull.h user.h mem.h
-qdelaun.o:   qhull.h user.h mem.h
-qhalf.o:   qhull.h user.h mem.h
-qvoronoi.o:   qhull.h user.h mem.h
-qhull.o:  $(HFILES)
-geom.o:   $(HFILES)
-geom2.o:  $(HFILES)
-global.o: $(HFILES)
-io.o:     $(HFILES)
-mem.o:    mem.h 
-merge.o:  $(HFILES)
-poly.o:   $(HFILES)
-poly2.o:  $(HFILES)
-qset.o:   qset.h mem.h 
-stat.o:   $(HFILES)
-user.o:   $(HFILES)
-
-.c.o:
-	$(CC) -c $(CCOPTS1) $<
-
-clean:
-	rm -f *.o ../core qconvex qdelaunay qhalf qvoronoi qhull libqhull.so ../lib/linux/libqhull.so ../../../lib/linux/libqhull.so
-
-cleanall: clean
-	rm -f *~ ../rbox ../qhull ../qhalf ../qconvex ../qdelaunay ../qhalf\
-	   ../qvoronoi ../user_eg ../user_eg2 ../*.exe >/dev/null
-
-doc: 
-	$(PRINTMAN) $(TXTFILES) $(DOCFILES)
-
-install: all 
-	cp ../qconvex $(BINDIR)/qconvex
-	cp ../qdelaunay $(BINDIR)/qdelaunay
-	cp ../qhalf $(BINDIR)/qhalf
-	cp ../qhull $(BINDIR)/qhull
-	cp ../qvoronoi $(BINDIR)/qvoronoi
-	cp ../rbox $(BINDIR)/rbox
-	cp ../html/qhull.man $(MANDIR)/qhull.1
-	cp ../html/rbox.man $(MANDIR)/rbox.1
-
-new:    cleanall all
-
-printall: doc printh printc printf
-
-printh:
-	$(PRINTC) $(HFILES)
-
-printc:
-	$(PRINTC) $(CFILES)
-
-printf:
-	$(PRINTC) $(FILES) 
-
-libqhull.so: $(OBJS)
-	${CC} ${CCOPTS1} -shared -Wl,-soname,libqhull.so -o $@ $(OBJS)
-	cp libqhull.so ../lib/linux
-	cp libqhull.so ../../../lib/linux
-	#@echo if 'ar' or 'ranlib' fails, try 'make qhullx'
-	#ar rv libqhull.so $(OBJS)
-	#@echo the next line may need to be removed.
-	#	-test -x /bin/ranlib -o -x /usr/bin/ranlib && ranlib libqhull.so
-
-# don't use ../qconvex.  Does not work on Red Hat Linux
-qconvex: qconvex.o libqhull.so
-	$(CC) -o qconvex $(CCOPTS2) qconvex.o -L. -lqhull -lm 
-	cp qconvex ..
-
-qdelaunay: qdelaun.o libqhull.so
-	$(CC) -o qdelaunay $(CCOPTS2) qdelaun.o -L. -lqhull -lm 
-	cp qdelaunay ..
-
-qhalf: qhalf.o libqhull.so
-	$(CC) -o qhalf $(CCOPTS2) qhalf.o -L. -lqhull -lm 
-	cp qhalf ..
-
-qvoronoi: qvoronoi.o libqhull.so
-	$(CC) -o qvoronoi $(CCOPTS2) qvoronoi.o -L. -lqhull -lm 
-	cp qvoronoi ..
-
-qhull: unix.o libqhull.so
-	$(CC) -o qhull $(CCOPTS2) unix.o -L. -lqhull -lm 
-	cp qhull ..
-	-chmod +x ../eg/q_test ../eg/q_eg ../eg/q_egtest
-#-cd ..; ./rbox D4 | ./qhull
-
-# compile qhull without using libqhull.so
-qhullx: qconvex.o qdelaun.o qhalf.o qvoronoi.o unix.o $(OBJS)
-	$(CC) -o qconvex $(CCOPTS2) qconvex.o $(OBJS) -lm 
-	$(CC) -o qdelaunay $(CCOPTS2) qdelaun.o $(OBJS) -lm 
-	$(CC) -o qhalf $(CCOPTS2) qhalf.o $(OBJS) -lm 
-	$(CC) -o qvoronoi $(CCOPTS2) qvoronoi.o $(OBJS) -lm 
-	$(CC) -o qhull $(CCOPTS2) unix.o $(OBJS) -lm 
-	cp qconvex qdelaunay qhalf qvoronoi qhull ..
-	-chmod +x ../eg/q_test ../eg/q_eg ../eg/q_egtest
-#-cd ..; ./rbox D4 | ./qhull
-
-rbox: rbox.o
-	$(CC) -o rbox rbox.o $(CCOPTS2) -lm
-	cp rbox ..
-
-user_eg: user_eg.o libqhull.so 
-	$(CC)  -o user_eg $(CCOPTS2) user_eg.o  -L. -lqhull -lm 
-	cp user_eg ..
-
-user_eg2: user_eg2.o libqhull.so 
-	$(CC)  -o user_eg2 $(CCOPTS2) user_eg2.o  -L. -lqhull -lm 
-	cp user_eg2 ..
-
-# end of Makefile
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Mborland b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Mborland
deleted file mode 100644
index 103c49e7a916d707485d03b8e81710953e09ba71..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/Mborland
+++ /dev/null
@@ -1,186 +0,0 @@
-#########################################################################
-#  Borland C++ 4.02 for Win32 and DOS Power Pack                        #
-#  Makefile for qhull and rbox                                          #
-#                                                                       #
-#       make -fMborland all       to produce qconvex, qhull, and rbox   #
-#       make -fMborland user_eg   to produce user_eg                    #
-#       make -fMborland user_eg2  to produce user_eg2                   #
-#       make -fMborland new       to rebuild qhull and rbox from source #
-#       make -fMborland clean     to remove object files                #
-#       make -fMborland cleanall  to remove all generated files         #
-#       make -fMborland test      to test rbox and qhull                #
-#                                                                       #
-#  Author: D. Zwick of Germany, C.B. Barber                             #
-#########################################################################
-
-CC      = bcc32    # 32 bit compiler for DOS
-                   # bcc32i - Intel's compiler
-LINKER  = $(CC)    # bcc calls tlink32 with needed options
-CFLAGS  = -w- -A -O2	
-                    # -w- no warnings, bcc doesn't handle assigns in conditions
-                	# -A Ansi standard
-                	# -X no auto-dependency outputs
-                	# -v debugging, use CCOPTS for both 
-                	# -O2 optimization   
-!if $d(_DPMI)
-LFLAGS  = -WX -w-   # -WX loads DPMI library
-!else
-LFLAGS  = -lap -lx -lc  
-					# -lap 32-bit console application
-					# -lx no map file
-					# -lc case is significant 
-!endif
-
-EXERB = rbox
-EXEQH = qhull
-EXEQC = qconvex
-EXEQD = qdelaunay
-EXEQV = qvoronoi
-EXEQF = qhalf
-EXEEG = user_eg
-EXEEG2 = user_eg2
-
-TMPFILE = BCC32tmp.cfg
-
-OBJS1 =   global.obj stat.obj geom2.obj poly2.obj io.obj
-OBJS2 =   merge.obj qhull.obj mem.obj qset.obj poly.obj geom.obj
-
-HFILES1 = qhull.h stat.h qhull_a.h user.h
-
-
-# General rules
-
-.c.obj:
-	$(CC) -c $(CFLAGS) $<
-
-# Default
-
-all:          $(EXERB) $(EXEQH) $(EXEQC) $(EXEQD) $(EXEQV) $(EXEQF) test
-
-help:
-	@echo  USAGE:
-	@echo  "make all       to produce qhull, rbox, qconvex, qdelaun, qvoronoi, qhalf"
-	@echo  "make user_eg   to produce user_eg"
-	@echo  "make user_eg2  to produce user_eg2"
-	@echo  "make new       to rebuild qhull and rbox from source"
-	@echo  "make clean     to remove object files"
-	@echo  "make cleanall  to remove all generated file"
-	@echo  "make test      to test rbox and qhull"
-	@echo  OPTIONS (default is 32-bit console app):
-	@echo  "-D_DPMI        for C++ 4.01 and DOS Power Pack"
-
-# Executables
-
-$(EXEQH):     ..\$(EXEQH).exe
-	@echo Made ..\$(EXEQH).exe
-
-..\$(EXEQH).exe: unix.obj user.obj $(OBJS1) $(OBJS2)
-	@echo unix.obj user.obj > $(TMPFILE)
-	@echo $(OBJS1) >> $(TMPFILE)
-	@echo $(OBJS2) >> $(TMPFILE)
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) @$(TMPFILE)
-
-$(EXEQC):     ..\$(EXEQC).exe
-	@echo Made ..\$(EXEQC).exe
-
-..\$(EXEQC).exe: qconvex.obj user.obj $(OBJS1) $(OBJS2)
-	@echo qconvex.obj user.obj > $(TMPFILE)
-	@echo $(OBJS1) >> $(TMPFILE)
-	@echo $(OBJS2) >> $(TMPFILE)
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) @$(TMPFILE)
-
-$(EXEQD):     ..\$(EXEQD).exe
-	@echo Made ..\$(EXEQD).exe
-
-..\$(EXEQD).exe: qdelaun.obj user.obj $(OBJS1) $(OBJS2)
-	@echo qdelaun.obj user.obj > $(TMPFILE)
-	@echo $(OBJS1) >> $(TMPFILE)
-	@echo $(OBJS2) >> $(TMPFILE)
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) @$(TMPFILE)
-
-$(EXEQV):     ..\$(EXEQV).exe
-	@echo Made ..\$(EXEQV).exe
-
-..\$(EXEQV).exe: qvoronoi.obj user.obj $(OBJS1) $(OBJS2)
-	@echo qvoronoi.obj user.obj > $(TMPFILE)
-	@echo $(OBJS1) >> $(TMPFILE)
-	@echo $(OBJS2) >> $(TMPFILE)
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) @$(TMPFILE)
-
-$(EXEQF):     ..\$(EXEQF).exe
-	@echo Made ..\$(EXEQF).exe
-
-..\$(EXEQF).exe: qhalf.obj user.obj $(OBJS1) $(OBJS2)
-	@echo qhalf.obj user.obj > $(TMPFILE)
-	@echo $(OBJS1) >> $(TMPFILE)
-	@echo $(OBJS2) >> $(TMPFILE)
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) @$(TMPFILE)
-
-$(EXEEG):     ..\$(EXEEG).exe
-	@echo Made ..\$(EXEEG).exe
-
-..\$(EXEEG).exe: user_eg.obj $(OBJS1) $(OBJS2)
-	@echo user_eg.obj user.obj > $(TMPFILE)
-	@echo $(OBJS1) >> $(TMPFILE)
-	@echo $(OBJS2) >> $(TMPFILE)
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) @$(TMPFILE)
-
-$(EXEEG2):     ..\$(EXEEG2).exe
-	@echo Made ..\$(EXEEG2).exe
-
-..\$(EXEEG2).exe: user_eg2.obj $(OBJS1) $(OBJS2)
-	@echo user_eg2.obj > $(TMPFILE)
-	@echo $(OBJS1) >> $(TMPFILE)
-	@echo $(OBJS2) >> $(TMPFILE)
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) @$(TMPFILE)
-
-$(EXERB):     ..\$(EXERB).exe
-	@echo Made ..\$(EXERB).exe
-
-..\$(EXERB).exe: rbox.obj
-	$(LINKER) -e$@ $(CFLAGS) $(LFLAGS) rbox.obj
-
-# Test rbox and qhull
-
-test:   
-	@..\rbox D4 > test.x
-	@..\qhull <test.x
-	@del test.x
-
-# Clean up
-
-clean:
-	@del *.obj
-	@del $(TMPFILE) 
-
-cleanall: clean
-	@del ..\$(EXERB).exe
-	@del ..\$(EXEQC).exe
-	@del ..\$(EXEQD).exe
-	@del ..\$(EXEQF).exe
-	@del ..\$(EXEQH).exe
-	@del ..\$(EXEQV).exe
-	@del ..\$(EXEEG).exe
-	@del ..\$(EXEEG2).exe
-	@del ..\q_test.x
-	@del ..\q_test.log.1
-
-# Clean up and rebuild all
-
-new:      cleanall all
-
-# Header file dependencies
-
-qhull.obj stat.obj user.obj global.obj: $(HFILES1)
-geom.obj geom2.obj:  $(HFILES1) geom.h
-poly.obj poly2.obj:  $(HFILES1) poly.h
-io.obj:     $(HFILES1) io.h
-merge.obj:  $(HFILES1) merge.h
-mem.obj:    mem.h
-qset.obj:   qset.h mem.h
-unix.obj:   qhull.h user.h
-qconvex.obj:   qhull.h user.h
-qdelaun.obj:   qhull.h user.h
-qhalf.obj:   qhull.h user.h
-qvoronoi.obj:   qhull.h user.h
-rbox.obj:   user.h
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom.c
deleted file mode 100644
index af633eeafc2710e7b354e7c76b36b5d131d8126f..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom.c
+++ /dev/null
@@ -1,1229 +0,0 @@
-/*<html><pre>  -<a                             href="qh-geom.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   geom.c 
-   geometric routines of qhull
-
-   see qh-geom.htm and geom.h
-
-   copyright (c) 1993-2003 The Geometry Center        
-
-   infrequent code goes into geom2.c
-*/
-   
-#include "qhull_a.h"
-   
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="distplane">-</a>
-  
-  qh_distplane( point, facet, dist )
-    return distance from point to facet
-
-  returns:
-    dist
-    if qh.RANDOMdist, joggles result
-  
-  notes:  
-    dist > 0 if point is above facet (i.e., outside)
-    does not error (for sortfacets)
-    
-  see:
-    qh_distnorm in geom2.c
-*/
-void qh_distplane (pointT *point, facetT *facet, realT *dist) {
-  coordT *normal= facet->normal, *coordp, randr;
-  int k;
-  
-  switch(qh hull_dim){
-  case 2:
-    *dist= facet->offset + point[0] * normal[0] + point[1] * normal[1];
-    break;
-  case 3:
-    *dist= facet->offset + point[0] * normal[0] + point[1] * normal[1] + point[2] * normal[2];
-    break;
-  case 4:
-    *dist= facet->offset+point[0]*normal[0]+point[1]*normal[1]+point[2]*normal[2]+point[3]*normal[3];
-    break;
-  case 5:
-    *dist= facet->offset+point[0]*normal[0]+point[1]*normal[1]+point[2]*normal[2]+point[3]*normal[3]+point[4]*normal[4];
-    break;
-  case 6:
-    *dist= facet->offset+point[0]*normal[0]+point[1]*normal[1]+point[2]*normal[2]+point[3]*normal[3]+point[4]*normal[4]+point[5]*normal[5];
-    break;
-  case 7:  
-    *dist= facet->offset+point[0]*normal[0]+point[1]*normal[1]+point[2]*normal[2]+point[3]*normal[3]+point[4]*normal[4]+point[5]*normal[5]+point[6]*normal[6];
-    break;
-  case 8:
-    *dist= facet->offset+point[0]*normal[0]+point[1]*normal[1]+point[2]*normal[2]+point[3]*normal[3]+point[4]*normal[4]+point[5]*normal[5]+point[6]*normal[6]+point[7]*normal[7];
-    break;
-  default:
-    *dist= facet->offset;
-    coordp= point;
-    for (k= qh hull_dim; k--; )
-      *dist += *coordp++ * *normal++;
-    break;
-  }
-  zinc_(Zdistplane);
-  if (!qh RANDOMdist && qh IStracing < 4)
-    return;
-  if (qh RANDOMdist) {
-    randr= qh_RANDOMint;
-    *dist += (2.0 * randr / qh_RANDOMmax - 1.0) *
-      qh RANDOMfactor * qh MAXabs_coord;
-  }
-  if (qh IStracing >= 4) {
-    fprintf (qh ferr, "qh_distplane: ");
-    fprintf (qh ferr, qh_REAL_1, *dist);
-    fprintf (qh ferr, "from p%d to f%d\n", qh_pointid(point), facet->id);
-  }
-  return;
-} /* distplane */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="findbest">-</a>
-  
-  qh_findbest( point, startfacet, bestoutside, qh_ISnewfacets, qh_NOupper, dist, isoutside, numpart )
-    find facet that is furthest below a point 
-    for upperDelaunay facets
-      returns facet only if !qh_NOupper and clearly above
-
-  input:
-    starts search at 'startfacet' (can not be flipped)
-    if !bestoutside (qh_ALL), stops at qh.MINoutside
-
-  returns:
-    best facet (reports error if NULL)
-    early out if isoutside defined and bestdist > qh.MINoutside
-    dist is distance to facet
-    isoutside is true if point is outside of facet
-    numpart counts the number of distance tests
-
-  see also:
-    qh_findbestnew()
-    
-  notes:
-    If merging (testhorizon), searches horizon facets of coplanar best facets because
-    after qh_distplane, this and qh_partitionpoint are the most expensive in 3-d
-      avoid calls to distplane, function calls, and real number operations.
-    caller traces result
-    Optimized for outside points.   Tried recording a search set for qh_findhorizon.
-    Made code more complicated.
-
-  when called by qh_partitionvisible():
-    indicated by qh_ISnewfacets
-    qh.newfacet_list is list of simplicial, new facets
-    qh_findbestnew set if qh_sharpnewfacets returns True (to use qh_findbestnew)
-    qh.bestfacet_notsharp set if qh_sharpnewfacets returns False
-
-  when called by qh_findfacet(), qh_partitionpoint(), qh_partitioncoplanar(), 
-                 qh_check_bestdist(), qh_addpoint()
-    indicated by !qh_ISnewfacets
-    returns best facet in neighborhood of given facet
-      this is best facet overall if dist > -   qh.MAXcoplanar 
-        or hull has at least a "spherical" curvature
-
-  design:
-    initialize and test for early exit
-    repeat while there are better facets
-      for each neighbor of facet
-        exit if outside facet found
-	test for better facet
-    if point is inside and partitioning
-      test for new facets with a "sharp" intersection
-      if so, future calls go to qh_findbestnew()
-    test horizon facets
-*/
-facetT *qh_findbest (pointT *point, facetT *startfacet, 
-		     boolT bestoutside, boolT isnewfacets, boolT noupper,
-		     realT *dist, boolT *isoutside, int *numpart) {
-  realT bestdist= -REALmax/2 /* avoid underflow */;
-  facetT *facet, *neighbor, **neighborp;
-  facetT *bestfacet= NULL, *lastfacet= NULL;
-  int oldtrace= qh IStracing;
-  unsigned int visitid= ++qh visit_id;
-  int numpartnew=0;
-  boolT testhorizon = True; /* needed if precise, e.g., rbox c D6 | qhull Q0 Tv */
-
-  zinc_(Zfindbest);
-  if (qh IStracing >= 3 || (qh TRACElevel && qh TRACEpoint >= 0 && qh TRACEpoint == qh_pointid (point))) {
-    if (qh TRACElevel > qh IStracing)
-      qh IStracing= qh TRACElevel;
-    fprintf (qh ferr, "qh_findbest: point p%d starting at f%d isnewfacets? %d, unless %d exit if > %2.2g\n",
-	     qh_pointid(point), startfacet->id, isnewfacets, bestoutside, qh MINoutside);
-    fprintf(qh ferr, "  testhorizon? %d noupper? %d", testhorizon, noupper);
-    fprintf (qh ferr, "  Last point added was p%d.", qh furthest_id);
-    fprintf(qh ferr, "  Last merge was #%d.  max_outside %2.2g\n", zzval_(Ztotmerge), qh max_outside);
-  }
-  if (isoutside)
-    *isoutside= True;
-  if (!startfacet->flipped) {  /* test startfacet */
-    *numpart= 1;
-    qh_distplane (point, startfacet, dist);  /* this code is duplicated below */
-    if (!bestoutside && *dist >= qh MINoutside 
-    && (!startfacet->upperdelaunay || !noupper)) {
-      bestfacet= startfacet;
-      goto LABELreturn_best;
-    }
-    bestdist= *dist;
-    if (!startfacet->upperdelaunay) {
-      bestfacet= startfacet;
-    } 
-  }else 
-    *numpart= 0;
-  startfacet->visitid= visitid;
-  facet= startfacet;
-  while (facet) {
-    trace4((qh ferr, "qh_findbest: neighbors of f%d, bestdist %2.2g f%d\n", 
-                facet->id, bestdist, getid_(bestfacet)));
-    lastfacet= facet;
-    FOREACHneighbor_(facet) {
-      if (!neighbor->newfacet && isnewfacets)
-        continue;
-      if (neighbor->visitid == visitid)
-	continue;
-      neighbor->visitid= visitid;
-      if (!neighbor->flipped) {  /* code duplicated above */
-	(*numpart)++;
-	qh_distplane (point, neighbor, dist);
-	if (*dist > bestdist) {
-	  if (!bestoutside && *dist >= qh MINoutside 
-	  && (!neighbor->upperdelaunay || !noupper)) {
-	    bestfacet= neighbor;
-	    goto LABELreturn_best;
-	  }
-	  if (!neighbor->upperdelaunay) {
-	    bestfacet= neighbor;
-	    bestdist= *dist;
-	    break; /* switch to neighbor */
-	  }else if (!bestfacet) { 
-	    bestdist= *dist;
-	    break; /* switch to neighbor */
-	  }
-	} /* end of *dist>bestdist */
-      } /* end of !flipped */
-    } /* end of FOREACHneighbor */
-    facet= neighbor;  /* non-NULL only if *dist>bestdist */
-  } /* end of while facet (directed search) */
-  if (isnewfacets) { 
-    if (!bestfacet) {
-      bestdist= -REALmax/2; 
-      bestfacet= qh_findbestnew (point, startfacet->next, &bestdist, bestoutside, isoutside, &numpartnew);
-      testhorizon= False; /* qh_findbestnew calls qh_findbesthorizon */
-    }else if (!qh findbest_notsharp && bestdist < - qh DISTround) {
-      if (qh_sharpnewfacets()) { 
-	/* seldom used, qh_findbestnew will retest all facets */
-	zinc_(Zfindnewsharp);
-	bestfacet= qh_findbestnew (point, bestfacet, &bestdist, bestoutside, isoutside, &numpartnew);
-	testhorizon= False; /* qh_findbestnew calls qh_findbesthorizon */
-	qh findbestnew= True;
-      }else
-	qh findbest_notsharp= True;
-    }
-  }
-  if (!bestfacet) 
-    bestfacet= qh_findbestlower (lastfacet, point, &bestdist, numpart);
-  if (testhorizon) 
-    bestfacet= qh_findbesthorizon (!qh_IScheckmax, point, bestfacet, noupper, &bestdist, &numpartnew);
-  *dist= bestdist;
-  if (isoutside && bestdist < qh MINoutside)
-    *isoutside= False;
-LABELreturn_best:
-  zadd_(Zfindbesttot, *numpart);
-  zmax_(Zfindbestmax, *numpart);
-  (*numpart) += numpartnew;
-  qh IStracing= oldtrace;
-  return bestfacet;
-}  /* findbest */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="findbesthorizon">-</a>
-  
-  qh_findbesthorizon( qh_IScheckmax, point, startfacet, qh_NOupper, &bestdist, &numpart )
-    search coplanar and better horizon facets from startfacet/bestdist
-    ischeckmax turns off statistics and minsearch update
-    all arguments must be initialized
-  returns (ischeckmax):
-    best facet
-  returns (!ischeckmax):
-    best facet that is not upperdelaunay
-    allows upperdelaunay that is clearly outside
-  returns:
-    bestdist is distance to bestfacet
-    numpart -- updates number of distance tests
-
-  notes:
-    no early out -- use qh_findbest() or qh_findbestnew()
-    Searches coplanar or better horizon facets
-
-  when called by qh_check_maxout() (qh_IScheckmax)
-    startfacet must be closest to the point
-      Otherwise, if point is beyond and below startfacet, startfacet may be a local minimum
-      even though other facets are below the point.
-    updates facet->maxoutside for good, visited facets
-    may return NULL
-
-    searchdist is qh.max_outside + 2 * DISTround
-      + max( MINvisible('Vn'), MAXcoplanar('Un'));
-    This setting is a guess.  It must be at least max_outside + 2*DISTround 
-    because a facet may have a geometric neighbor across a vertex
-
-  design:
-    for each horizon facet of coplanar best facets
-      continue if clearly inside
-      unless upperdelaunay or clearly outside
-         update best facet
-*/
-facetT *qh_findbesthorizon (boolT ischeckmax, pointT* point, facetT *startfacet, boolT noupper, realT *bestdist, int *numpart) {
-  facetT *bestfacet= startfacet;
-  realT dist;
-  facetT *neighbor, **neighborp, *facet;
-  facetT *nextfacet= NULL; /* optimize last facet of coplanarset */
-  int numpartinit= *numpart, coplanarset_size;
-  unsigned int visitid= ++qh visit_id;
-  boolT newbest= False; /* for tracing */
-  realT minsearch, searchdist;  /* skip facets that are too far from point */
-
-  if (!ischeckmax) {
-    zinc_(Zfindhorizon);
-  }else {
-#if qh_MAXoutside
-    if ((!qh ONLYgood || startfacet->good) && *bestdist > startfacet->maxoutside)
-      startfacet->maxoutside= *bestdist;
-#endif
-  }
-  searchdist= qh_SEARCHdist; /* multiple of qh.max_outside and precision constants */
-  minsearch= *bestdist - searchdist;
-  if (ischeckmax) {
-    /* Always check coplanar facets.  Needed for RBOX 1000 s Z1 G1e-13 t996564279 | QHULL Tv */
-    minimize_(minsearch, -searchdist);
-  }
-  coplanarset_size= 0;
-  facet= startfacet;
-  while (True) {
-    trace4((qh ferr, "qh_findbesthorizon: neighbors of f%d bestdist %2.2g f%d ischeckmax? %d noupper? %d minsearch %2.2g searchdist %2.2g\n", 
-		facet->id, *bestdist, getid_(bestfacet), ischeckmax, noupper,
-		minsearch, searchdist));
-    FOREACHneighbor_(facet) {
-      if (neighbor->visitid == visitid) 
-	continue;
-      neighbor->visitid= visitid;
-      if (!neighbor->flipped) { 
-	qh_distplane (point, neighbor, &dist);
-	(*numpart)++;
-	if (dist > *bestdist) {
-	  if (!neighbor->upperdelaunay || ischeckmax || (!noupper && dist >= qh MINoutside)) {
-	    bestfacet= neighbor;
-	    *bestdist= dist;
-	    newbest= True;
-	    if (!ischeckmax) {
-	      minsearch= dist - searchdist;
-	      if (dist > *bestdist + searchdist) {
-		zinc_(Zfindjump);  /* everything in qh.coplanarset at least searchdist below */
-		coplanarset_size= 0;
-	      }
-	    }
-	  }
-	}else if (dist < minsearch) 
-	  continue;  /* if ischeckmax, dist can't be positive */
-#if qh_MAXoutside
-	if (ischeckmax && dist > neighbor->maxoutside)
-	  neighbor->maxoutside= dist;
-#endif      
-      } /* end of !flipped */
-      if (nextfacet) {
-	if (!coplanarset_size++) {
-	  SETfirst_(qh coplanarset)= nextfacet;
-	  SETtruncate_(qh coplanarset, 1);
-	}else
-  	  qh_setappend (&qh coplanarset, nextfacet); /* Was needed for RBOX 1000 s W1e-13 P0 t996547055 | QHULL d Qbb Qc Tv
-						 and RBOX 1000 s Z1 G1e-13 t996564279 | qhull Tv  */
-      }
-      nextfacet= neighbor;
-    } /* end of EACHneighbor */
-    facet= nextfacet;
-    if (facet) 
-      nextfacet= NULL;
-    else if (!coplanarset_size)
-      break; 
-    else if (!--coplanarset_size) {
-      facet= SETfirst_(qh coplanarset);
-      SETtruncate_(qh coplanarset, 0);
-    }else
-      facet= (facetT*)qh_setdellast (qh coplanarset);
-  } /* while True, for each facet in qh.coplanarset */
-  if (!ischeckmax) {
-    zadd_(Zfindhorizontot, *numpart - numpartinit);
-    zmax_(Zfindhorizonmax, *numpart - numpartinit);
-    if (newbest)
-      zinc_(Zparthorizon);
-  }
-  trace4((qh ferr, "qh_findbesthorizon: newbest? %d bestfacet f%d bestdist %2.2g\n", newbest, getid_(bestfacet), *bestdist));
-  return bestfacet;
-}  /* findbesthorizon */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="findbestnew">-</a>
-  
-  qh_findbestnew( point, startfacet, dist, isoutside, numpart )
-    find best newfacet for point
-    searches all of qh.newfacet_list starting at startfacet
-    searches horizon facets of coplanar best newfacets
-    searches all facets if startfacet == qh.facet_list
-  returns:
-    best new or horizon facet that is not upperdelaunay
-    early out if isoutside and not 'Qf'
-    dist is distance to facet
-    isoutside is true if point is outside of facet
-    numpart is number of distance tests
-
-  notes:
-    Always used for merged new facets (see qh_USEfindbestnew)
-    Avoids upperdelaunay facet unless (isoutside and outside)
-
-    Uses qh.visit_id, qh.coplanarset.  
-    If share visit_id with qh_findbest, coplanarset is incorrect.
-
-    If merging (testhorizon), searches horizon facets of coplanar best facets because
-    a point maybe coplanar to the bestfacet, below its horizon facet,
-    and above a horizon facet of a coplanar newfacet.  For example,
-      rbox 1000 s Z1 G1e-13 | qhull
-      rbox 1000 s W1e-13 P0 t992110337 | QHULL d Qbb Qc
-
-    qh_findbestnew() used if
-       qh_sharpnewfacets -- newfacets contains a sharp angle
-       if many merges, qh_premerge found a merge, or 'Qf' (qh.findbestnew)
-
-  see also:
-    qh_partitionall() and qh_findbest()
-
-  design:
-    for each new facet starting from startfacet
-      test distance from point to facet
-      return facet if clearly outside
-      unless upperdelaunay and a lowerdelaunay exists
-         update best facet
-    test horizon facets
-*/
-facetT *qh_findbestnew (pointT *point, facetT *startfacet,
-	   realT *dist, boolT bestoutside, boolT *isoutside, int *numpart) {
-  realT bestdist= -REALmax/2;
-  facetT *bestfacet= NULL, *facet;
-  int oldtrace= qh IStracing, i;
-  unsigned int visitid= ++qh visit_id;
-  realT distoutside= 0.0;
-  boolT isdistoutside; /* True if distoutside is defined */
-  boolT testhorizon = True; /* needed if precise, e.g., rbox c D6 | qhull Q0 Tv */
-
-  if (!startfacet) {
-    if (qh MERGING)
-      fprintf(qh ferr, "qhull precision error (qh_findbestnew): merging has formed and deleted a cone of new facets.  Can not continue.\n");
-    else
-      fprintf(qh ferr, "qhull internal error (qh_findbestnew): no new facets for point p%d\n",
-      	      qh furthest_id);      
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  zinc_(Zfindnew);
-  if (qh BESToutside || bestoutside)
-    isdistoutside= False;
-  else {
-    isdistoutside= True;
-    distoutside= qh_DISToutside; /* multiple of qh.MINoutside & qh.max_outside, see user.h */
-  }
-  if (isoutside)
-    *isoutside= True;
-  *numpart= 0;
-  if (qh IStracing >= 3 || (qh TRACElevel && qh TRACEpoint >= 0 && qh TRACEpoint == qh_pointid (point))) {
-    if (qh TRACElevel > qh IStracing)
-      qh IStracing= qh TRACElevel;
-    fprintf(qh ferr, "qh_findbestnew: point p%d facet f%d. Stop? %d if dist > %2.2g\n",
-	     qh_pointid(point), startfacet->id, isdistoutside, distoutside);
-    fprintf(qh ferr, "  Last point added p%d visitid %d.",  qh furthest_id, visitid);
-    fprintf(qh ferr, "  Last merge was #%d.\n", zzval_(Ztotmerge));
-  }
-  /* visit all new facets starting with startfacet, maybe qh facet_list */
-  for (i= 0, facet= startfacet; i < 2; i++, facet= qh newfacet_list) {
-    FORALLfacet_(facet) {
-      if (facet == startfacet && i)
-	break;
-      facet->visitid= visitid;
-      if (!facet->flipped) {
-	qh_distplane (point, facet, dist);
-	(*numpart)++;
-	if (*dist > bestdist) {
-	  if (!facet->upperdelaunay || *dist >= qh MINoutside) {
-	    bestfacet= facet;
-	    if (isdistoutside && *dist >= distoutside)
-	      goto LABELreturn_bestnew;
-	    bestdist= *dist;
-  	  }
-	}
-      } /* end of !flipped */
-    } /* FORALLfacet from startfacet or qh newfacet_list */
-  }
-  if (testhorizon || !bestfacet)
-    bestfacet= qh_findbesthorizon (!qh_IScheckmax, point, bestfacet ? bestfacet : startfacet, 
-	                                !qh_NOupper, &bestdist, numpart);  
-  *dist= bestdist;
-  if (isoutside && *dist < qh MINoutside)
-    *isoutside= False;
-LABELreturn_bestnew:
-  zadd_(Zfindnewtot, *numpart);
-  zmax_(Zfindnewmax, *numpart);
-  trace4((qh ferr, "qh_findbestnew: bestfacet f%d bestdist %2.2g\n", getid_(bestfacet), *dist));
-  qh IStracing= oldtrace;
-  return bestfacet;
-}  /* findbestnew */
-
-/* ============ hyperplane functions -- keep code together [?] ============ */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="backnormal">-</a>
-  
-  qh_backnormal( rows, numrow, numcol, sign, normal, nearzero )
-    given an upper-triangular rows array and a sign,
-    solve for normal equation x using back substitution over rows U
-
-  returns:
-     normal= x
-      
-     if will not be able to divzero() when normalized (qh.MINdenom_2 and qh.MINdenom_1_2),
-       if fails on last row
-         this means that the hyperplane intersects [0,..,1]
-         sets last coordinate of normal to sign
-       otherwise
-         sets tail of normal to [...,sign,0,...], i.e., solves for b= [0...0]
-         sets nearzero
-
-  notes:
-     assumes numrow == numcol-1
-
-     see Golub & van Loan 4.4-9 for back substitution
-
-     solves Ux=b where Ax=b and PA=LU
-     b= [0,...,0,sign or 0]  (sign is either -1 or +1)
-     last row of A= [0,...,0,1]
-
-     1) Ly=Pb == y=b since P only permutes the 0's of   b
-     
-  design:
-    for each row from end
-      perform back substitution
-      if near zero
-        use qh_divzero for division
-        if zero divide and not last row
-          set tail of normal to 0
-*/
-void qh_backnormal (realT **rows, int numrow, int numcol, boolT sign,
-  	coordT *normal, boolT *nearzero) {
-  int i, j;
-  coordT *normalp, *normal_tail, *ai, *ak;
-  realT diagonal;
-  boolT waszero;
-  int zerocol= -1;
-  
-  normalp= normal + numcol - 1;
-  *normalp--= (sign ? -1.0 : 1.0);
-  for(i= numrow; i--; ) {
-    *normalp= 0.0;
-    ai= rows[i] + i + 1;
-    ak= normalp+1;
-    for(j= i+1; j < numcol; j++)
-      *normalp -= *ai++ * *ak++;
-    diagonal= (rows[i])[i];
-    if (fabs_(diagonal) > qh MINdenom_2)
-      *(normalp--) /= diagonal;
-    else {
-      waszero= False;
-      *normalp= qh_divzero (*normalp, diagonal, qh MINdenom_1_2, &waszero);
-      if (waszero) {
-        zerocol= i;
-	*(normalp--)= (sign ? -1.0 : 1.0);
-	for (normal_tail= normalp+2; normal_tail < normal + numcol; normal_tail++)
-	  *normal_tail= 0.0;
-      }else
-	normalp--;
-    }
-  }
-  if (zerocol != -1) {
-    zzinc_(Zback0);
-    *nearzero= True;
-    trace4((qh ferr, "qh_backnormal: zero diagonal at column %d.\n", i));
-    qh_precision ("zero diagonal on back substitution");
-  }
-} /* backnormal */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="gausselim">-</a>
-  
-  qh_gausselim( rows, numrow, numcol, sign )
-    Gaussian elimination with partial pivoting
-
-  returns:
-    rows is upper triangular (includes row exchanges)
-    flips sign for each row exchange
-    sets nearzero if pivot[k] < qh.NEARzero[k], else clears it
-
-  notes:
-    if nearzero, the determinant's sign may be incorrect.
-    assumes numrow <= numcol
-
-  design:
-    for each row
-      determine pivot and exchange rows if necessary
-      test for near zero
-      perform gaussian elimination step
-*/
-void qh_gausselim(realT **rows, int numrow, int numcol, boolT *sign, boolT *nearzero) {
-  realT *ai, *ak, *rowp, *pivotrow;
-  realT n, pivot, pivot_abs= 0.0, temp;
-  int i, j, k, pivoti, flip=0;
-  
-  *nearzero= False;
-  for(k= 0; k < numrow; k++) {
-    pivot_abs= fabs_((rows[k])[k]);
-    pivoti= k;
-    for(i= k+1; i < numrow; i++) {
-      if ((temp= fabs_((rows[i])[k])) > pivot_abs) {
-	pivot_abs= temp;
-	pivoti= i;
-      }
-    }
-    if (pivoti != k) {
-      rowp= rows[pivoti]; 
-      rows[pivoti]= rows[k]; 
-      rows[k]= rowp; 
-      *sign ^= 1;
-      flip ^= 1;
-    }
-    if (pivot_abs <= qh NEARzero[k]) {
-      *nearzero= True;
-      if (pivot_abs == 0.0) {   /* remainder of column == 0 */
-	if (qh IStracing >= 4) {
-	  fprintf (qh ferr, "qh_gausselim: 0 pivot at column %d. (%2.2g < %2.2g)\n", k, pivot_abs, qh DISTround);
-	  qh_printmatrix (qh ferr, "Matrix:", rows, numrow, numcol);
-	}
-	zzinc_(Zgauss0);
-        qh_precision ("zero pivot for Gaussian elimination");
-	goto LABELnextcol;
-      }
-    }
-    pivotrow= rows[k] + k;
-    pivot= *pivotrow++;  /* signed value of pivot, and remainder of row */
-    for(i= k+1; i < numrow; i++) {
-      ai= rows[i] + k;
-      ak= pivotrow;
-      n= (*ai++)/pivot;   /* divzero() not needed since |pivot| >= |*ai| */
-      for(j= numcol - (k+1); j--; )
-	*ai++ -= n * *ak++;
-    }
-  LABELnextcol:
-    ;
-  }
-  wmin_(Wmindenom, pivot_abs);  /* last pivot element */
-  if (qh IStracing >= 5)
-    qh_printmatrix (qh ferr, "qh_gausselem: result", rows, numrow, numcol);
-} /* gausselim */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="getangle">-</a>
-  
-  qh_getangle( vect1, vect2 )
-    returns the dot product of two vectors
-    if qh.RANDOMdist, joggles result
-
-  notes:
-    the angle may be > 1.0 or < -1.0 because of roundoff errors
-
-*/
-realT qh_getangle(pointT *vect1, pointT *vect2) {
-  realT angle= 0, randr;
-  int k;
-
-  for(k= qh hull_dim; k--; )
-    angle += *vect1++ * *vect2++;
-  if (qh RANDOMdist) {
-    randr= qh_RANDOMint;
-    angle += (2.0 * randr / qh_RANDOMmax - 1.0) *
-      qh RANDOMfactor;
-  }
-  trace4((qh ferr, "qh_getangle: %2.2g\n", angle));
-  return(angle);
-} /* getangle */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="getcenter">-</a>
-  
-  qh_getcenter( vertices )
-    returns arithmetic center of a set of vertices as a new point
-
-  notes:
-    allocates point array for center
-*/
-pointT *qh_getcenter(setT *vertices) {
-  int k;
-  pointT *center, *coord;
-  vertexT *vertex, **vertexp;
-  int count= qh_setsize(vertices);
-
-  if (count < 2) {
-    fprintf (qh ferr, "qhull internal error (qh_getcenter): not defined for %d points\n", count);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  center= (pointT *)qh_memalloc(qh normal_size);
-  for (k=0; k < qh hull_dim; k++) {
-    coord= center+k;
-    *coord= 0.0;
-    FOREACHvertex_(vertices)
-      *coord += vertex->point[k];
-    *coord /= count;
-  }
-  return(center);
-} /* getcenter */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="getcentrum">-</a>
-  
-  qh_getcentrum( facet )
-    returns the centrum for a facet as a new point
-
-  notes:
-    allocates the centrum
-*/
-pointT *qh_getcentrum(facetT *facet) {
-  realT dist;
-  pointT *centrum, *point;
-
-  point= qh_getcenter(facet->vertices);
-  zzinc_(Zcentrumtests);
-  qh_distplane (point, facet, &dist);
-  centrum= qh_projectpoint(point, facet, dist);
-  qh_memfree(point, qh normal_size);
-  trace4((qh ferr, "qh_getcentrum: for f%d, %d vertices dist= %2.2g\n",
-	  facet->id, qh_setsize(facet->vertices), dist));
-  return centrum;
-} /* getcentrum */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="getdistance">-</a>
-  
-  qh_getdistance( facet, neighbor, mindist, maxdist )
-    returns the maxdist and mindist distance of any vertex from neighbor
-
-  returns:
-    the max absolute value
-
-  design:
-    for each vertex of facet that is not in neighbor
-      test the distance from vertex to neighbor
-*/
-realT qh_getdistance(facetT *facet, facetT *neighbor, realT *mindist, realT *maxdist) {
-  vertexT *vertex, **vertexp;
-  realT dist, maxd, mind;
-  
-  FOREACHvertex_(facet->vertices)
-    vertex->seen= False;
-  FOREACHvertex_(neighbor->vertices)
-    vertex->seen= True;
-  mind= 0.0;
-  maxd= 0.0;
-  FOREACHvertex_(facet->vertices) {
-    if (!vertex->seen) {
-      zzinc_(Zbestdist);
-      qh_distplane(vertex->point, neighbor, &dist);
-      if (dist < mind)
-	mind= dist;
-      else if (dist > maxd)
-	maxd= dist;
-    }
-  }
-  *mindist= mind;
-  *maxdist= maxd;
-  mind= -mind;
-  if (maxd > mind)
-    return maxd;
-  else
-    return mind;
-} /* getdistance */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="normalize">-</a>
-
-  qh_normalize( normal, dim, toporient )
-    normalize a vector and report if too small
-    does not use min norm
-  
-  see:
-    qh_normalize2
-*/
-void qh_normalize (coordT *normal, int dim, boolT toporient) {
-  qh_normalize2( normal, dim, toporient, NULL, NULL);
-} /* normalize */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="normalize2">-</a>
-  
-  qh_normalize2( normal, dim, toporient, minnorm, ismin )
-    normalize a vector and report if too small
-    qh.MINdenom/MINdenom1 are the upper limits for divide overflow
-
-  returns:
-    normalized vector
-    flips sign if !toporient
-    if minnorm non-NULL, 
-      sets ismin if normal < minnorm
-
-  notes:
-    if zero norm
-       sets all elements to sqrt(1.0/dim)
-    if divide by zero (divzero ())
-       sets largest element to   +/-1
-       bumps Znearlysingular
-      
-  design:
-    computes norm
-    test for minnorm
-    if not near zero
-      normalizes normal
-    else if zero norm
-      sets normal to standard value
-    else
-      uses qh_divzero to normalize
-      if nearzero
-        sets norm to direction of maximum value
-*/
-void qh_normalize2 (coordT *normal, int dim, boolT toporient, 
-            realT *minnorm, boolT *ismin) {
-  int k;
-  realT *colp, *maxp, norm= 0, temp, *norm1, *norm2, *norm3;
-  boolT zerodiv;
-
-  norm1= normal+1;
-  norm2= normal+2;
-  norm3= normal+3;
-  if (dim == 2)
-    norm= sqrt((*normal)*(*normal) + (*norm1)*(*norm1));
-  else if (dim == 3)
-    norm= sqrt((*normal)*(*normal) + (*norm1)*(*norm1) + (*norm2)*(*norm2));
-  else if (dim == 4) {
-    norm= sqrt((*normal)*(*normal) + (*norm1)*(*norm1) + (*norm2)*(*norm2) 
-               + (*norm3)*(*norm3));
-  }else if (dim > 4) {
-    norm= (*normal)*(*normal) + (*norm1)*(*norm1) + (*norm2)*(*norm2) 
-               + (*norm3)*(*norm3);
-    for (k= dim-4, colp= normal+4; k--; colp++)
-      norm += (*colp) * (*colp);
-    norm= sqrt(norm);
-  }
-  if (minnorm) {
-    if (norm < *minnorm) 
-      *ismin= True;
-    else
-      *ismin= False;
-  }
-  wmin_(Wmindenom, norm);
-  if (norm > qh MINdenom) {
-    if (!toporient)
-      norm= -norm;
-    *normal /= norm;
-    *norm1 /= norm;
-    if (dim == 2)
-      ; /* all done */
-    else if (dim == 3)
-      *norm2 /= norm;
-    else if (dim == 4) {
-      *norm2 /= norm;
-      *norm3 /= norm;
-    }else if (dim >4) {
-      *norm2 /= norm;
-      *norm3 /= norm;
-      for (k= dim-4, colp= normal+4; k--; )
-        *colp++ /= norm;
-    }
-  }else if (norm == 0.0) {
-    temp= sqrt (1.0/dim);
-    for (k= dim, colp= normal; k--; )
-      *colp++ = temp;
-  }else {
-    if (!toporient)
-      norm= -norm;
-    for (k= dim, colp= normal; k--; colp++) { /* k used below */
-      temp= qh_divzero (*colp, norm, qh MINdenom_1, &zerodiv);
-      if (!zerodiv)
-	*colp= temp;
-      else {
-	maxp= qh_maxabsval(normal, dim);
-	temp= ((*maxp * norm >= 0.0) ? 1.0 : -1.0);
-	for (k= dim, colp= normal; k--; colp++)
-	  *colp= 0.0;
-	*maxp= temp;
-	zzinc_(Znearlysingular);
-	trace0((qh ferr, "qh_normalize: norm=%2.2g too small during p%d\n", 
-	       norm, qh furthest_id));
-	return;
-      }
-    }
-  }
-} /* normalize */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="projectpoint">-</a>
-  
-  qh_projectpoint( point, facet, dist )
-    project point onto a facet by dist
-
-  returns:
-    returns a new point
-    
-  notes:
-    if dist= distplane(point,facet)
-      this projects point to hyperplane
-    assumes qh_memfree_() is valid for normal_size
-*/
-pointT *qh_projectpoint(pointT *point, facetT *facet, realT dist) {
-  pointT *newpoint, *np, *normal;
-  int normsize= qh normal_size,k;
-  void **freelistp; /* used !qh_NOmem */
-  
-  qh_memalloc_(normsize, freelistp, newpoint, pointT);
-  np= newpoint;
-  normal= facet->normal;
-  for(k= qh hull_dim; k--; )
-    *(np++)= *point++ - dist * *normal++;
-  return(newpoint);
-} /* projectpoint */
-
-  
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="setfacetplane">-</a>
-  
-  qh_setfacetplane( facet )
-    sets the hyperplane for a facet
-    if qh.RANDOMdist, joggles hyperplane
-
-  notes:
-    uses global buffers qh.gm_matrix and qh.gm_row
-    overwrites facet->normal if already defined
-    updates Wnewvertex if PRINTstatistics
-    sets facet->upperdelaunay if upper envelope of Delaunay triangulation
-
-  design:
-    copy vertex coordinates to qh.gm_matrix/gm_row
-    compute determinate
-    if nearzero
-      recompute determinate with gaussian elimination
-      if nearzero
-        force outside orientation by testing interior point
-*/
-void qh_setfacetplane(facetT *facet) {
-  pointT *point;
-  vertexT *vertex, **vertexp;
-  int k,i, normsize= qh normal_size, oldtrace= 0;
-  realT dist;
-  void **freelistp; /* used !qh_NOmem */
-  coordT *coord, *gmcoord;
-  pointT *point0= SETfirstt_(facet->vertices, vertexT)->point;
-  boolT nearzero= False;
-
-  zzinc_(Zsetplane);
-  if (!facet->normal)
-    qh_memalloc_(normsize, freelistp, facet->normal, coordT);
-  if (facet == qh tracefacet) {
-    oldtrace= qh IStracing;
-    qh IStracing= 5;
-    fprintf (qh ferr, "qh_setfacetplane: facet f%d created.\n", facet->id);
-    fprintf (qh ferr, "  Last point added to hull was p%d.", qh furthest_id);
-    if (zzval_(Ztotmerge))
-      fprintf(qh ferr, "  Last merge was #%d.", zzval_(Ztotmerge));
-    fprintf (qh ferr, "\n\nCurrent summary is:\n");
-      qh_printsummary (qh ferr);
-  }
-  if (qh hull_dim <= 4) {
-    i= 0;
-    if (qh RANDOMdist) {
-      gmcoord= qh gm_matrix;
-      FOREACHvertex_(facet->vertices) {
-        qh gm_row[i++]= gmcoord;
-	coord= vertex->point;
-	for (k= qh hull_dim; k--; )
-	  *(gmcoord++)= *coord++ * qh_randomfactor();
-      }	  
-    }else {
-      FOREACHvertex_(facet->vertices)
-       qh gm_row[i++]= vertex->point;
-    }
-    qh_sethyperplane_det(qh hull_dim, qh gm_row, point0, facet->toporient,
-                facet->normal, &facet->offset, &nearzero);
-  }
-  if (qh hull_dim > 4 || nearzero) {
-    i= 0;
-    gmcoord= qh gm_matrix;
-    FOREACHvertex_(facet->vertices) {
-      if (vertex->point != point0) {
-	qh gm_row[i++]= gmcoord;
-	coord= vertex->point;
-	point= point0;
-	for(k= qh hull_dim; k--; )
-	  *(gmcoord++)= *coord++ - *point++;
-      }
-    }
-    qh gm_row[i]= gmcoord;  /* for areasimplex */
-    if (qh RANDOMdist) {
-      gmcoord= qh gm_matrix;
-      for (i= qh hull_dim-1; i--; ) {
-	for (k= qh hull_dim; k--; )
-	  *(gmcoord++) *= qh_randomfactor();
-      }
-    }
-    qh_sethyperplane_gauss(qh hull_dim, qh gm_row, point0, facet->toporient,
-           	facet->normal, &facet->offset, &nearzero);
-    if (nearzero) { 
-      if (qh_orientoutside (facet)) {
-	trace0((qh ferr, "qh_setfacetplane: flipped orientation after testing interior_point during p%d\n", qh furthest_id));
-      /* this is part of using Gaussian Elimination.  For example in 5-d
-	   1 1 1 1 0
-	   1 1 1 1 1
-	   0 0 0 1 0
-	   0 1 0 0 0
-	   1 0 0 0 0
-	   norm= 0.38 0.38 -0.76 0.38 0
-	 has a determinate of 1, but g.e. after subtracting pt. 0 has
-	 0's in the diagonal, even with full pivoting.  It does work
-	 if you subtract pt. 4 instead. */
-      }
-    }
-  }
-  facet->upperdelaunay= False;
-  if (qh DELAUNAY) {
-    if (qh UPPERdelaunay) {     /* matches qh_triangulate_facet and qh.lower_threshold in qh_initbuild */
-      if (facet->normal[qh hull_dim -1] >= qh ANGLEround * qh_ZEROdelaunay)
-        facet->upperdelaunay= True;
-    }else {
-      if (facet->normal[qh hull_dim -1] > -qh ANGLEround * qh_ZEROdelaunay)
-        facet->upperdelaunay= True;
-    }
-  }
-  if (qh PRINTstatistics || qh IStracing || qh TRACElevel || qh JOGGLEmax < REALmax) {
-    qh old_randomdist= qh RANDOMdist;
-    qh RANDOMdist= False;
-    FOREACHvertex_(facet->vertices) {
-      if (vertex->point != point0) {
-	boolT istrace= False;
-	zinc_(Zdiststat);
-        qh_distplane(vertex->point, facet, &dist);
-        dist= fabs_(dist);
-        zinc_(Znewvertex);
-        wadd_(Wnewvertex, dist);
-        if (dist > wwval_(Wnewvertexmax)) {
-          wwval_(Wnewvertexmax)= dist;
-	  if (dist > qh max_outside) {
-	    qh max_outside= dist;  /* used by qh_maxouter() */
-	    if (dist > qh TRACEdist) 
-	      istrace= True;
-	  }
-	}else if (-dist > qh TRACEdist)
-	  istrace= True;
-	if (istrace) {
-	  fprintf (qh ferr, "qh_setfacetplane: ====== vertex p%d (v%d) increases max_outside to %2.2g for new facet f%d last p%d\n",
-	        qh_pointid(vertex->point), vertex->id, dist, facet->id, qh furthest_id);
-	  qh_errprint ("DISTANT", facet, NULL, NULL, NULL);
-	}
-      }
-    }
-    qh RANDOMdist= qh old_randomdist;
-  }
-  if (qh IStracing >= 3) {
-    fprintf (qh ferr, "qh_setfacetplane: f%d offset %2.2g normal: ",
-	     facet->id, facet->offset);
-    for (k=0; k < qh hull_dim; k++)
-      fprintf (qh ferr, "%2.2g ", facet->normal[k]);
-    fprintf (qh ferr, "\n");
-  }
-  if (facet == qh tracefacet)
-    qh IStracing= oldtrace;
-} /* setfacetplane */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="sethyperplane_det">-</a>
-  
-  qh_sethyperplane_det( dim, rows, point0, toporient, normal, offset, nearzero )
-    given dim X dim array indexed by rows[], one row per point, 
-        toporient (flips all signs),
-        and point0 (any row)
-    set normalized hyperplane equation from oriented simplex
-
-  returns:
-    normal (normalized)
-    offset (places point0 on the hyperplane)
-    sets nearzero if hyperplane not through points
-
-  notes:
-    only defined for dim == 2..4
-    rows[] is not modified
-    solves det(P-V_0, V_n-V_0, ..., V_1-V_0)=0, i.e. every point is on hyperplane
-    see Bower & Woodworth, A programmer's geometry, Butterworths 1983.
-
-  derivation of 3-d minnorm
-    Goal: all vertices V_i within qh.one_merge of hyperplane
-    Plan: exactly translate the facet so that V_0 is the origin
-          exactly rotate the facet so that V_1 is on the x-axis and y_2=0.
-          exactly rotate the effective perturbation to only effect n_0
-	     this introduces a factor of sqrt(3)
-    n_0 = ((y_2-y_0)*(z_1-z_0) - (z_2-z_0)*(y_1-y_0)) / norm
-    Let M_d be the max coordinate difference
-    Let M_a be the greater of M_d and the max abs. coordinate
-    Let u be machine roundoff and distround be max error for distance computation
-    The max error for n_0 is sqrt(3) u M_a M_d / norm.  n_1 is approx. 1 and n_2 is approx. 0
-    The max error for distance of V_1 is sqrt(3) u M_a M_d M_d / norm.  Offset=0 at origin
-    Then minnorm = 1.8 u M_a M_d M_d / qh.ONEmerge
-    Note that qh.one_merge is approx. 45.5 u M_a and norm is usually about M_d M_d
-
-  derivation of 4-d minnorm
-    same as above except rotate the facet so that V_1 on x-axis and w_2, y_3, w_3=0
-     [if two vertices fixed on x-axis, can rotate the other two in yzw.]
-    n_0 = det3_(...) = y_2 det2_(z_1, w_1, z_3, w_3) = - y_2 w_1 z_3
-     [all other terms contain at least two factors nearly zero.]
-    The max error for n_0 is sqrt(4) u M_a M_d M_d / norm
-    Then minnorm = 2 u M_a M_d M_d M_d / qh.ONEmerge
-    Note that qh.one_merge is approx. 82 u M_a and norm is usually about M_d M_d M_d
-*/
-void qh_sethyperplane_det (int dim, coordT **rows, coordT *point0, 
-          boolT toporient, coordT *normal, realT *offset, boolT *nearzero) {
-  realT maxround, dist;
-  int i;
-  pointT *point;
-
-
-  if (dim == 2) {
-    normal[0]= dY(1,0);
-    normal[1]= dX(0,1);
-    qh_normalize2 (normal, dim, toporient, NULL, NULL);
-    *offset= -(point0[0]*normal[0]+point0[1]*normal[1]);
-    *nearzero= False;  /* since nearzero norm => incident points */
-  }else if (dim == 3) {
-    normal[0]= det2_(dY(2,0), dZ(2,0),
-		     dY(1,0), dZ(1,0));
-    normal[1]= det2_(dX(1,0), dZ(1,0),
-		     dX(2,0), dZ(2,0));
-    normal[2]= det2_(dX(2,0), dY(2,0),
-		     dX(1,0), dY(1,0));
-    qh_normalize2 (normal, dim, toporient, NULL, NULL);
-    *offset= -(point0[0]*normal[0] + point0[1]*normal[1]
-	       + point0[2]*normal[2]);
-    maxround= qh DISTround;
-    for (i=dim; i--; ) {
-      point= rows[i];
-      if (point != point0) {
-        dist= *offset + (point[0]*normal[0] + point[1]*normal[1]
-	       + point[2]*normal[2]);
-        if (dist > maxround || dist < -maxround) {
-  	  *nearzero= True;
-	  break;
-	}
-      }
-    }
-  }else if (dim == 4) {
-    normal[0]= - det3_(dY(2,0), dZ(2,0), dW(2,0),
-			dY(1,0), dZ(1,0), dW(1,0),
-			dY(3,0), dZ(3,0), dW(3,0));
-    normal[1]=   det3_(dX(2,0), dZ(2,0), dW(2,0),
-		        dX(1,0), dZ(1,0), dW(1,0),
-		        dX(3,0), dZ(3,0), dW(3,0));
-    normal[2]= - det3_(dX(2,0), dY(2,0), dW(2,0),
-			dX(1,0), dY(1,0), dW(1,0),
-			dX(3,0), dY(3,0), dW(3,0));
-    normal[3]=   det3_(dX(2,0), dY(2,0), dZ(2,0),
-		        dX(1,0), dY(1,0), dZ(1,0),
-		        dX(3,0), dY(3,0), dZ(3,0));
-    qh_normalize2 (normal, dim, toporient, NULL, NULL);
-    *offset= -(point0[0]*normal[0] + point0[1]*normal[1]
-	       + point0[2]*normal[2] + point0[3]*normal[3]);
-    maxround= qh DISTround;
-    for (i=dim; i--; ) {
-      point= rows[i];
-      if (point != point0) {
-        dist= *offset + (point[0]*normal[0] + point[1]*normal[1]
-	       + point[2]*normal[2] + point[3]*normal[3]);
-        if (dist > maxround || dist < -maxround) {
-  	  *nearzero= True;
-	  break;
-	}
-      }
-    }
-  }
-  if (*nearzero) {
-    zzinc_(Zminnorm);
-    trace0((qh ferr, "qh_sethyperplane_det: degenerate norm during p%d.\n", qh furthest_id));
-    zzinc_(Znearlysingular);
-  }
-} /* sethyperplane_det */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="sethyperplane_gauss">-</a>
-  
-  qh_sethyperplane_gauss( dim, rows, point0, toporient, normal, offset, nearzero )
-    given (dim-1) X dim array of rows[i]= V_{i+1} - V_0 (point0)
-    set normalized hyperplane equation from oriented simplex
-
-  returns:
-    normal (normalized)
-    offset (places point0 on the hyperplane)
-
-  notes:
-    if nearzero
-      orientation may be incorrect because of incorrect sign flips in gausselim
-    solves [V_n-V_0,...,V_1-V_0, 0 .. 0 1] * N == [0 .. 0 1] 
-        or [V_n-V_0,...,V_1-V_0, 0 .. 0 1] * N == [0] 
-    i.e., N is normal to the hyperplane, and the unnormalized
-        distance to [0 .. 1] is either 1 or   0
-
-  design:
-    perform gaussian elimination
-    flip sign for negative values
-    perform back substitution 
-    normalize result
-    compute offset
-*/
-void qh_sethyperplane_gauss (int dim, coordT **rows, pointT *point0, 
-		boolT toporient, coordT *normal, coordT *offset, boolT *nearzero) {
-  coordT *pointcoord, *normalcoef;
-  int k;
-  boolT sign= toporient, nearzero2= False;
-  
-  qh_gausselim(rows, dim-1, dim, &sign, nearzero);
-  for(k= dim-1; k--; ) {
-    if ((rows[k])[k] < 0)
-      sign ^= 1;
-  }
-  if (*nearzero) {
-    zzinc_(Znearlysingular);
-    trace0((qh ferr, "qh_sethyperplane_gauss: nearly singular or axis parallel hyperplane during p%d.\n", qh furthest_id));
-    qh_backnormal(rows, dim-1, dim, sign, normal, &nearzero2);
-  }else {
-    qh_backnormal(rows, dim-1, dim, sign, normal, &nearzero2);
-    if (nearzero2) {
-      zzinc_(Znearlysingular);
-      trace0((qh ferr, "qh_sethyperplane_gauss: singular or axis parallel hyperplane at normalization during p%d.\n", qh furthest_id));
-    }
-  }
-  if (nearzero2)
-    *nearzero= True;
-  qh_normalize2(normal, dim, True, NULL, NULL);
-  pointcoord= point0;
-  normalcoef= normal;
-  *offset= -(*pointcoord++ * *normalcoef++);
-  for(k= dim-1; k--; )
-    *offset -= *pointcoord++ * *normalcoef++;
-} /* sethyperplane_gauss */
-
-  
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom.h
deleted file mode 100644
index 6b37268941f66df7a774ca3cdbb0fb22d89611b3..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*<html><pre>  -<a                             href="qh-geom.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-  geom.h
-    header file for geometric routines
-
-   see qh-geom.htm and geom.c
-
-   copyright (c) 1993-2003 The Geometry Center
-*/
-
-#ifndef qhDEFgeom
-#define qhDEFgeom 1
-
-/* ============ -macros- ======================== */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="fabs_">-</a>
-
-  fabs_(a)
-    returns the absolute value of a
-*/
-#define fabs_( a ) ((( a ) < 0 ) ? -( a ):( a ))
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="fmax_">-</a>
-
-  fmax_(a,b)
-    returns the maximum value of a and b
-*/
-#define fmax_( a,b )  ( ( a ) < ( b ) ? ( b ) : ( a ) )
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="fmin_">-</a>
-
-  fmin_(a,b)
-    returns the minimum value of a and b
-*/
-#define fmin_( a,b )  ( ( a ) > ( b ) ? ( b ) : ( a ) )
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="maximize_">-</a>
-
-  maximize_(maxval, val)
-    set maxval to val if val is greater than maxval
-*/
-#define maximize_( maxval, val ) {if (( maxval ) < ( val )) ( maxval )= ( val );}
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="minimize_">-</a>
-
-  minimize_(minval, val)
-    set minval to val if val is less than minval
-*/
-#define minimize_( minval, val ) {if (( minval ) > ( val )) ( minval )= ( val );}
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="det2_">-</a>
-
-  det2_(a1, a2,
-        b1, b2)
-
-    compute a 2-d determinate
-*/
-#define det2_( a1,a2,b1,b2 ) (( a1 )*( b2 ) - ( a2 )*( b1 ))
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="det3_">-</a>
-
-  det3_(a1, a2, a3,
-       b1, b2, b3,
-       c1, c2, c3)
-
-    compute a 3-d determinate
-*/
-#define det3_( a1,a2,a3,b1,b2,b3,c1,c2,c3 ) ( ( a1 )*det2_( b2,b3,c2,c3 ) \
-        - ( b1 )*det2_( a2,a3,c2,c3 ) + ( c1 )*det2_( a2,a3,b2,b3 ) )
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="dX">-</a>
-
-  dX( p1, p2 )
-  dY( p1, p2 )
-  dZ( p1, p2 )
-
-    given two indices into rows[],
-
-    compute the difference between X, Y, or Z coordinates
-*/
-#define dX( p1,p2 )  ( *( rows[p1] ) - *( rows[p2] ))
-#define dY( p1,p2 )  ( *( rows[p1]+1 ) - *( rows[p2]+1 ))
-#define dZ( p1,p2 )  ( *( rows[p1]+2 ) - *( rows[p2]+2 ))
-#define dW( p1,p2 )  ( *( rows[p1]+3 ) - *( rows[p2]+3 ))
-
-/*============= prototypes in alphabetical order, infrequent at end ======= */
-
-void    qh_backnormal(realT** rows, int numrow, int numcol, boolT sign, coordT* normal, boolT* nearzero);
-void    qh_distplane(pointT* point, facetT* facet, realT* dist);
-facetT* qh_findbest(pointT* point, facetT* startfacet,
-                    boolT bestoutside, boolT isnewfacets, boolT noupper,
-                    realT* dist, boolT* isoutside, int* numpart);
-facetT* qh_findbesthorizon(boolT ischeckmax, pointT* point,
-                           facetT* startfacet, boolT noupper, realT* bestdist, int* numpart);
-facetT* qh_findbestnew(pointT* point, facetT* startfacet, realT* dist,
-                       boolT bestoutside, boolT* isoutside, int* numpart);
-void    qh_gausselim(realT** rows, int numrow, int numcol, boolT* sign, boolT* nearzero);
-realT   qh_getangle(pointT* vect1, pointT* vect2);
-pointT* qh_getcenter(setT* vertices);
-pointT* qh_getcentrum(facetT* facet);
-realT   qh_getdistance(facetT* facet, facetT* neighbor, realT* mindist, realT* maxdist);
-void    qh_normalize(coordT* normal, int dim, boolT toporient);
-void    qh_normalize2(coordT* normal, int dim, boolT toporient,
-                      realT* minnorm, boolT* ismin);
-pointT* qh_projectpoint(pointT* point, facetT* facet, realT dist);
-
-void    qh_setfacetplane(facetT* newfacets);
-void    qh_sethyperplane_det(int dim, coordT** rows, coordT* point0,
-                             boolT toporient, coordT* normal, realT* offset, boolT* nearzero);
-void    qh_sethyperplane_gauss(int dim, coordT** rows, pointT* point0,
-                               boolT toporient, coordT* normal, coordT* offset, boolT* nearzero);
-boolT   qh_sharpnewfacets(void);
-
-/*========= infrequently used code in geom2.c =============*/
-
-
-coordT* qh_copypoints(coordT* points, int numpoints, int dimension);
-void    qh_crossproduct(int dim, realT vecA[3], realT vecB[3], realT vecC[3]);
-realT   qh_determinant(realT** rows, int dim, boolT* nearzero);
-realT   qh_detjoggle(pointT* points, int numpoints, int dimension);
-void    qh_detroundoff(void);
-realT   qh_detsimplex(pointT* apex, setT* points, int dim, boolT* nearzero);
-realT   qh_distnorm(int dim, pointT* point, pointT* normal, realT* offsetp);
-realT   qh_distround(int dimension, realT maxabs, realT maxsumabs);
-realT   qh_divzero(realT numer, realT denom, realT mindenom1, boolT* zerodiv);
-realT   qh_facetarea(facetT* facet);
-realT   qh_facetarea_simplex(int dim, coordT* apex, setT* vertices,
-                             vertexT* notvertex,  boolT toporient, coordT* normal, realT* offset);
-pointT* qh_facetcenter(setT* vertices);
-facetT* qh_findgooddist(pointT* point, facetT* facetA, realT* distp, facetT** facetlist);
-void    qh_getarea(facetT* facetlist);
-boolT   qh_gram_schmidt(int dim, realT** rows);
-boolT   qh_inthresholds(coordT* normal, realT* angle);
-void    qh_joggleinput(void);
-realT*  qh_maxabsval(realT* normal, int dim);
-setT*   qh_maxmin(pointT* points, int numpoints, int dimension);
-realT   qh_maxouter(void);
-void    qh_maxsimplex(int dim, setT* maxpoints, pointT* points, int numpoints, setT** simplex);
-realT   qh_minabsval(realT* normal, int dim);
-int     qh_mindiff(realT* vecA, realT* vecB, int dim);
-boolT   qh_orientoutside(facetT* facet);
-void    qh_outerinner(facetT* facet, realT* outerplane, realT* innerplane);
-coordT  qh_pointdist(pointT* point1, pointT* point2, int dim);
-void    qh_printmatrix(FILE* fp, char* string, realT** rows, int numrow, int numcol);
-void    qh_printpoints(FILE* fp, char* string, setT* points);
-void    qh_projectinput(void);
-void    qh_projectpoints(signed char* project, int n, realT* points,
-                         int numpoints, int dim, realT* newpoints, int newdim);
-int     qh_rand(void);
-void    qh_srand(int seed);
-realT   qh_randomfactor(void);
-void    qh_randommatrix(realT* buffer, int dim, realT** row);
-void    qh_rotateinput(realT** rows);
-void    qh_rotatepoints(realT* points, int numpoints, int dim, realT** rows);
-void    qh_scaleinput(void);
-void    qh_scalelast(coordT* points, int numpoints, int dim, coordT low,
-                     coordT high, coordT newhigh);
-void    qh_scalepoints(pointT* points, int numpoints, int dim,
-                       realT* newlows, realT* newhighs);
-boolT   qh_sethalfspace(int dim, coordT* coords, coordT** nextp,
-                        coordT* normal, coordT* offset, coordT* feasible);
-coordT* qh_sethalfspace_all(int dim, int count, coordT* halfspaces, pointT* feasible);
-pointT* qh_voronoi_center(int dim, setT* points);
-
-#endif /* qhDEFgeom */
-
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom2.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom2.c
deleted file mode 100644
index 55b6d80832e49d0fd6842e04a26bab0fd7bb268f..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/geom2.c
+++ /dev/null
@@ -1,2160 +0,0 @@
-/*<html><pre>  -<a                             href="qh-geom.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-
-   geom2.c 
-   infrequently used geometric routines of qhull
-
-   see qh-geom.htm and geom.h
-
-   copyright (c) 1993-2003 The Geometry Center        
-
-   frequently used code goes into geom.c
-*/
-   
-#include "qhull_a.h"
-   
-/*================== functions in alphabetic order ============*/
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="copypoints">-</a>
-
-  qh_copypoints( points, numpoints, dimension)
-    return malloc'd copy of points
-*/
-coordT *qh_copypoints (coordT *points, int numpoints, int dimension) {
-  int size;
-  coordT *newpoints;
-
-  size= numpoints * dimension * sizeof(coordT);
-  if (!(newpoints=(coordT*)malloc(size))) {
-    fprintf(qh ferr, "qhull error: insufficient memory to copy %d points\n",
-        numpoints);
-    qh_errexit(qh_ERRmem, NULL, NULL);
-  }
-  memcpy ((char *)newpoints, (char *)points, size);
-  return newpoints;
-} /* copypoints */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="crossproduct">-</a>
-  
-  qh_crossproduct( dim, vecA, vecB, vecC )
-    crossproduct of 2 dim vectors
-    C= A x B
-  
-  notes:
-    from Glasner, Graphics Gems I, p. 639
-    only defined for dim==3
-*/
-void qh_crossproduct (int dim, realT vecA[3], realT vecB[3], realT vecC[3]){
-
-  if (dim == 3) {
-    vecC[0]=   det2_(vecA[1], vecA[2],
-		     vecB[1], vecB[2]);
-    vecC[1]= - det2_(vecA[0], vecA[2],
-		     vecB[0], vecB[2]);
-    vecC[2]=   det2_(vecA[0], vecA[1],
-		     vecB[0], vecB[1]);
-  }
-} /* vcross */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="determinant">-</a>
-  
-  qh_determinant( rows, dim, nearzero )
-    compute signed determinant of a square matrix
-    uses qh.NEARzero to test for degenerate matrices
-
-  returns:
-    determinant
-    overwrites rows and the matrix
-    if dim == 2 or 3
-      nearzero iff determinant < qh NEARzero[dim-1]
-      (not quite correct, not critical)
-    if dim >= 4
-      nearzero iff diagonal[k] < qh NEARzero[k]
-*/
-realT qh_determinant (realT **rows, int dim, boolT *nearzero) {
-  realT det=0;
-  int i;
-  boolT sign= False;
-
-  *nearzero= False;
-  if (dim < 2) {
-    fprintf (qh ferr, "qhull internal error (qh_determinate): only implemented for dimension >= 2\n");
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }else if (dim == 2) {
-    det= det2_(rows[0][0], rows[0][1],
-		 rows[1][0], rows[1][1]);
-    if (fabs_(det) < qh NEARzero[1])  /* not really correct, what should this be? */
-      *nearzero= True;
-  }else if (dim == 3) {
-    det= det3_(rows[0][0], rows[0][1], rows[0][2],
-		 rows[1][0], rows[1][1], rows[1][2],
-		 rows[2][0], rows[2][1], rows[2][2]);
-    if (fabs_(det) < qh NEARzero[2])  /* not really correct, what should this be? */
-      *nearzero= True;
-  }else {	
-    qh_gausselim(rows, dim, dim, &sign, nearzero);  /* if nearzero, diagonal still ok*/
-    det= 1.0;
-    for (i= dim; i--; )
-      det *= (rows[i])[i];
-    if (sign)
-      det= -det;
-  }
-  return det;
-} /* determinant */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="detjoggle">-</a>
-  
-  qh_detjoggle( points, numpoints, dimension )
-    determine default max joggle for point array
-      as qh_distround * qh_JOGGLEdefault
-
-  returns:
-    initial value for JOGGLEmax from points and REALepsilon
-
-  notes:
-    computes DISTround since qh_maxmin not called yet
-    if qh SCALElast, last dimension will be scaled later to MAXwidth
-
-    loop duplicated from qh_maxmin
-*/
-realT qh_detjoggle (pointT *points, int numpoints, int dimension) {
-  realT abscoord, distround, joggle, maxcoord, mincoord;
-  pointT *point, *pointtemp;
-  realT maxabs= -REALmax;
-  realT sumabs= 0;
-  realT maxwidth= 0;
-  int k;
-
-  for (k= 0; k < dimension; k++) {
-    if (qh SCALElast && k == dimension-1)
-      abscoord= maxwidth;
-    else if (qh DELAUNAY && k == dimension-1) /* will qh_setdelaunay() */
-      abscoord= 2 * maxabs * maxabs;  /* may be low by qh hull_dim/2 */
-    else {
-      maxcoord= -REALmax;
-      mincoord= REALmax;
-      FORALLpoint_(points, numpoints) {
-	maximize_(maxcoord, point[k]);
-        minimize_(mincoord, point[k]);
-      }
-      maximize_(maxwidth, maxcoord-mincoord);
-      abscoord= fmax_(maxcoord, -mincoord);
-    }
-    sumabs += abscoord;
-    maximize_(maxabs, abscoord);
-  } /* for k */
-  distround= qh_distround (qh hull_dim, maxabs, sumabs);
-  joggle= distround * qh_JOGGLEdefault;
-  maximize_(joggle, REALepsilon * qh_JOGGLEdefault);
-  trace2((qh ferr, "qh_detjoggle: joggle=%2.2g maxwidth=%2.2g\n", joggle, maxwidth));
-  return joggle;
-} /* detjoggle */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="detroundoff">-</a>
-  
-  qh_detroundoff()
-    determine maximum roundoff errors from
-      REALepsilon, REALmax, REALmin, qh.hull_dim, qh.MAXabs_coord, 
-      qh.MAXsumcoord, qh.MAXwidth, qh.MINdenom_1
-
-    accounts for qh.SETroundoff, qh.RANDOMdist, qh MERGEexact
-      qh.premerge_cos, qh.postmerge_cos, qh.premerge_centrum,
-      qh.postmerge_centrum, qh.MINoutside,
-      qh_RATIOnearinside, qh_COPLANARratio, qh_WIDEcoplanar
-
-  returns:
-    sets qh.DISTround, etc. (see below)
-    appends precision constants to qh.qhull_options
-
-  see:
-    qh_maxmin() for qh.NEARzero
-
-  design:
-    determine qh.DISTround for distance computations
-    determine minimum denominators for qh_divzero
-    determine qh.ANGLEround for angle computations
-    adjust qh.premerge_cos,... for roundoff error
-    determine qh.ONEmerge for maximum error due to a single merge
-    determine qh.NEARinside, qh.MAXcoplanar, qh.MINvisible,
-      qh.MINoutside, qh.WIDEfacet
-    initialize qh.max_vertex and qh.minvertex
-*/
-void qh_detroundoff (void) {
-
-  qh_option ("_max-width", NULL, &qh MAXwidth);
-  if (!qh SETroundoff) {
-    qh DISTround= qh_distround (qh hull_dim, qh MAXabs_coord, qh MAXsumcoord);
-    if (qh RANDOMdist)
-      qh DISTround += qh RANDOMfactor * qh MAXabs_coord;
-    qh_option ("Error-roundoff", NULL, &qh DISTround);
-  }
-  qh MINdenom= qh MINdenom_1 * qh MAXabs_coord;
-  qh MINdenom_1_2= sqrt (qh MINdenom_1 * qh hull_dim) ;  /* if will be normalized */
-  qh MINdenom_2= qh MINdenom_1_2 * qh MAXabs_coord;
-                                              /* for inner product */
-  qh ANGLEround= 1.01 * qh hull_dim * REALepsilon;
-  if (qh RANDOMdist)
-    qh ANGLEround += qh RANDOMfactor;
-  if (qh premerge_cos < REALmax/2) {
-    qh premerge_cos -= qh ANGLEround;
-    if (qh RANDOMdist) 
-      qh_option ("Angle-premerge-with-random", NULL, &qh premerge_cos);
-  }
-  if (qh postmerge_cos < REALmax/2) {
-    qh postmerge_cos -= qh ANGLEround;
-    if (qh RANDOMdist)
-      qh_option ("Angle-postmerge-with-random", NULL, &qh postmerge_cos);
-  }
-  qh premerge_centrum += 2 * qh DISTround;    /*2 for centrum and distplane()*/
-  qh postmerge_centrum += 2 * qh DISTround;
-  if (qh RANDOMdist && (qh MERGEexact || qh PREmerge))
-    qh_option ("Centrum-premerge-with-random", NULL, &qh premerge_centrum);
-  if (qh RANDOMdist && qh POSTmerge)
-    qh_option ("Centrum-postmerge-with-random", NULL, &qh postmerge_centrum);
-  { /* compute ONEmerge, max vertex offset for merging simplicial facets */
-    realT maxangle= 1.0, maxrho;
-    
-    minimize_(maxangle, qh premerge_cos);
-    minimize_(maxangle, qh postmerge_cos);
-    /* max diameter * sin theta + DISTround for vertex to its hyperplane */
-    qh ONEmerge= sqrt (qh hull_dim) * qh MAXwidth *
-      sqrt (1.0 - maxangle * maxangle) + qh DISTround;  
-    maxrho= qh hull_dim * qh premerge_centrum + qh DISTround;
-    maximize_(qh ONEmerge, maxrho);
-    maxrho= qh hull_dim * qh postmerge_centrum + qh DISTround;
-    maximize_(qh ONEmerge, maxrho);
-    if (qh MERGING)
-      qh_option ("_one-merge", NULL, &qh ONEmerge);
-  }
-  qh NEARinside= qh ONEmerge * qh_RATIOnearinside; /* only used if qh KEEPnearinside */
-  if (qh JOGGLEmax < REALmax/2 && (qh KEEPcoplanar || qh KEEPinside)) {
-    realT maxdist;	       /* adjust qh.NEARinside for joggle */
-    qh KEEPnearinside= True;   
-    maxdist= sqrt (qh hull_dim) * qh JOGGLEmax + qh DISTround;
-    maxdist= 2*maxdist;        /* vertex and coplanar point can joggle in opposite directions */
-    maximize_(qh NEARinside, maxdist);  /* must agree with qh_nearcoplanar() */
-  }
-  if (qh KEEPnearinside)
-    qh_option ("_near-inside", NULL, &qh NEARinside);
-  if (qh JOGGLEmax < qh DISTround) {
-    fprintf (qh ferr, "qhull error: the joggle for 'QJn', %.2g, is below roundoff for distance computations, %.2g\n",
-         qh JOGGLEmax, qh DISTround);
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  if (qh MINvisible > REALmax/2) {
-    if (!qh MERGING)
-      qh MINvisible= qh DISTround;
-    else if (qh hull_dim <= 3)
-      qh MINvisible= qh premerge_centrum;
-    else
-      qh MINvisible= qh_COPLANARratio * qh premerge_centrum;
-    if (qh APPROXhull && qh MINvisible > qh MINoutside)
-      qh MINvisible= qh MINoutside;
-    qh_option ("Visible-distance", NULL, &qh MINvisible);
-  }
-  if (qh MAXcoplanar > REALmax/2) {
-    qh MAXcoplanar= qh MINvisible;
-    qh_option ("U-coplanar-distance", NULL, &qh MAXcoplanar);
-  }
-  if (!qh APPROXhull) {             /* user may specify qh MINoutside */
-    qh MINoutside= 2 * qh MINvisible;
-    if (qh premerge_cos < REALmax/2) 
-      maximize_(qh MINoutside, (1- qh premerge_cos) * qh MAXabs_coord);
-    qh_option ("Width-outside", NULL, &qh MINoutside);
-  }
-  qh WIDEfacet= qh MINoutside;
-  maximize_(qh WIDEfacet, qh_WIDEcoplanar * qh MAXcoplanar); 
-  maximize_(qh WIDEfacet, qh_WIDEcoplanar * qh MINvisible); 
-  qh_option ("_wide-facet", NULL, &qh WIDEfacet);
-  if (qh MINvisible > qh MINoutside + 3 * REALepsilon 
-  && !qh BESToutside && !qh FORCEoutput)
-    fprintf (qh ferr, "qhull input warning: minimum visibility V%.2g is greater than \nminimum outside W%.2g.  Flipped facets are likely.\n",
-	     qh MINvisible, qh MINoutside);
-  qh max_vertex= qh DISTround;
-  qh min_vertex= -qh DISTround;
-  /* numeric constants reported in printsummary */
-} /* detroundoff */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="detsimplex">-</a>
-  
-  qh_detsimplex( apex, points, dim, nearzero )
-    compute determinant of a simplex with point apex and base points
-
-  returns:
-     signed determinant and nearzero from qh_determinant
-
-  notes:
-     uses qh.gm_matrix/qh.gm_row (assumes they're big enough)
-
-  design:
-    construct qm_matrix by subtracting apex from points
-    compute determinate
-*/
-realT qh_detsimplex(pointT *apex, setT *points, int dim, boolT *nearzero) {
-  pointT *coorda, *coordp, *gmcoord, *point, **pointp;
-  coordT **rows;
-  int k,  i=0;
-  realT det;
-
-  zinc_(Zdetsimplex);
-  gmcoord= qh gm_matrix;
-  rows= qh gm_row;
-  FOREACHpoint_(points) {
-    if (i == dim)
-      break;
-    rows[i++]= gmcoord;
-    coordp= point;
-    coorda= apex;
-    for (k= dim; k--; )
-      *(gmcoord++)= *coordp++ - *coorda++;
-  }
-  if (i < dim) {
-    fprintf (qh ferr, "qhull internal error (qh_detsimplex): #points %d < dimension %d\n", 
-               i, dim);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  det= qh_determinant (rows, dim, nearzero);
-  trace2((qh ferr, "qh_detsimplex: det=%2.2g for point p%d, dim %d, nearzero? %d\n",
-	  det, qh_pointid(apex), dim, *nearzero)); 
-  return det;
-} /* detsimplex */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="distnorm">-</a>
-  
-  qh_distnorm( dim, point, normal, offset )
-    return distance from point to hyperplane at normal/offset
-
-  returns:
-    dist
-  
-  notes:  
-    dist > 0 if point is outside of hyperplane
-  
-  see:
-    qh_distplane in geom.c
-*/
-realT qh_distnorm (int dim, pointT *point, pointT *normal, realT *offsetp) {
-  coordT *normalp= normal, *coordp= point;
-  realT dist;
-  int k;
-
-  dist= *offsetp;
-  for (k= dim; k--; )
-    dist += *(coordp++) * *(normalp++);
-  return dist;
-} /* distnorm */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="distround">-</a>
-
-  qh_distround ( dimension, maxabs, maxsumabs )
-    compute maximum round-off error for a distance computation
-      to a normalized hyperplane
-    maxabs is the maximum absolute value of a coordinate
-    maxsumabs is the maximum possible sum of absolute coordinate values
-
-  returns:
-    max dist round for REALepsilon
-
-  notes:
-    calculate roundoff error according to
-    Lemma 3.2-1 of Golub and van Loan "Matrix Computation"
-    use sqrt(dim) since one vector is normalized
-      or use maxsumabs since one vector is < 1
-*/
-realT qh_distround (int dimension, realT maxabs, realT maxsumabs) {
-  realT maxdistsum, maxround;
-
-  maxdistsum= sqrt (dimension) * maxabs;
-  minimize_( maxdistsum, maxsumabs);
-  maxround= REALepsilon * (dimension * maxdistsum * 1.01 + maxabs);
-              /* adds maxabs for offset */
-  trace4((qh ferr, "qh_distround: %2.2g maxabs %2.2g maxsumabs %2.2g maxdistsum %2.2g\n",
-	         maxround, maxabs, maxsumabs, maxdistsum));
-  return maxround;
-} /* distround */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="divzero">-</a>
-  
-  qh_divzero( numer, denom, mindenom1, zerodiv )
-    divide by a number that's nearly zero
-    mindenom1= minimum denominator for dividing into 1.0
-
-  returns:
-    quotient
-    sets zerodiv and returns 0.0 if it would overflow
-  
-  design:
-    if numer is nearly zero and abs(numer) < abs(denom)
-      return numer/denom
-    else if numer is nearly zero
-      return 0 and zerodiv
-    else if denom/numer non-zero
-      return numer/denom
-    else
-      return 0 and zerodiv
-*/
-realT qh_divzero (realT numer, realT denom, realT mindenom1, boolT *zerodiv) {
-  realT temp, numerx, denomx;
-  
-
-  if (numer < mindenom1 && numer > -mindenom1) {
-    numerx= fabs_(numer);
-    denomx= fabs_(denom);
-    if (numerx < denomx) {
-      *zerodiv= False;
-      return numer/denom;
-    }else {
-      *zerodiv= True;
-      return 0.0;
-    }
-  }
-  temp= denom/numer;
-  if (temp > mindenom1 || temp < -mindenom1) {
-    *zerodiv= False;
-    return numer/denom;
-  }else {
-    *zerodiv= True;
-    return 0.0;
-  }
-} /* divzero */
-  
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="facetarea">-</a>
-
-  qh_facetarea( facet )
-    return area for a facet
-  
-  notes:
-    if non-simplicial, 
-      uses centrum to triangulate facet and sums the projected areas.
-    if (qh DELAUNAY),
-      computes projected area instead for last coordinate
-    assumes facet->normal exists
-    projecting tricoplanar facets to the hyperplane does not appear to make a difference
-  
-  design:
-    if simplicial
-      compute area
-    else
-      for each ridge
-        compute area from centrum to ridge
-    negate area if upper Delaunay facet
-*/
-realT qh_facetarea (facetT *facet) {
-  vertexT *apex;
-  pointT *centrum;
-  realT area= 0.0;
-  ridgeT *ridge, **ridgep;
-
-  if (facet->simplicial) {
-    apex= SETfirstt_(facet->vertices, vertexT);
-    area= qh_facetarea_simplex (qh hull_dim, apex->point, facet->vertices, 
-                    apex, facet->toporient, facet->normal, &facet->offset);
-  }else {
-    if (qh CENTERtype == qh_AScentrum)
-      centrum= facet->center;
-    else
-      centrum= qh_getcentrum (facet);
-    FOREACHridge_(facet->ridges) 
-      area += qh_facetarea_simplex (qh hull_dim, centrum, ridge->vertices, 
-                 NULL, (ridge->top == facet),  facet->normal, &facet->offset);
-    if (qh CENTERtype != qh_AScentrum)
-      qh_memfree (centrum, qh normal_size);
-  }
-  if (facet->upperdelaunay && qh DELAUNAY)
-    area= -area;  /* the normal should be [0,...,1] */
-  trace4((qh ferr, "qh_facetarea: f%d area %2.2g\n", facet->id, area)); 
-  return area;
-} /* facetarea */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="facetarea_simplex">-</a>
-
-  qh_facetarea_simplex( dim, apex, vertices, notvertex, toporient, normal, offset )
-    return area for a simplex defined by 
-      an apex, a base of vertices, an orientation, and a unit normal
-    if simplicial or tricoplanar facet, 
-      notvertex is defined and it is skipped in vertices
-  
-  returns:
-    computes area of simplex projected to plane [normal,offset]
-    returns 0 if vertex too far below plane (qh WIDEfacet)
-      vertex can't be apex of tricoplanar facet
-  
-  notes:
-    if (qh DELAUNAY),
-      computes projected area instead for last coordinate
-    uses qh gm_matrix/gm_row and qh hull_dim
-    helper function for qh_facetarea
-  
-  design:
-    if Notvertex
-      translate simplex to apex
-    else
-      project simplex to normal/offset
-      translate simplex to apex
-    if Delaunay
-      set last row/column to 0 with -1 on diagonal 
-    else
-      set last row to Normal
-    compute determinate
-    scale and flip sign for area
-*/
-realT qh_facetarea_simplex (int dim, coordT *apex, setT *vertices, 
-        vertexT *notvertex,  boolT toporient, coordT *normal, realT *offset) {
-  pointT *coorda, *coordp, *gmcoord;
-  coordT **rows, *normalp;
-  int k,  i=0;
-  realT area, dist;
-  vertexT *vertex, **vertexp;
-  boolT nearzero;
-
-  gmcoord= qh gm_matrix;
-  rows= qh gm_row;
-  FOREACHvertex_(vertices) {
-    if (vertex == notvertex)
-      continue;
-    rows[i++]= gmcoord;
-    coorda= apex;
-    coordp= vertex->point;
-    normalp= normal;
-    if (notvertex) {
-      for (k= dim; k--; )
-	*(gmcoord++)= *coordp++ - *coorda++;
-    }else {
-      dist= *offset;
-      for (k= dim; k--; )
-	dist += *coordp++ * *normalp++;
-      if (dist < -qh WIDEfacet) {
-	zinc_(Znoarea);
-	return 0.0;
-      }
-      coordp= vertex->point;
-      normalp= normal;
-      for (k= dim; k--; )
-	*(gmcoord++)= (*coordp++ - dist * *normalp++) - *coorda++;
-    }
-  }
-  if (i != dim-1) {
-    fprintf (qh ferr, "qhull internal error (qh_facetarea_simplex): #points %d != dim %d -1\n", 
-               i, dim);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  rows[i]= gmcoord;
-  if (qh DELAUNAY) {
-    for (i= 0; i < dim-1; i++)
-      rows[i][dim-1]= 0.0;
-    for (k= dim; k--; )
-      *(gmcoord++)= 0.0;
-    rows[dim-1][dim-1]= -1.0;
-  }else {
-    normalp= normal;
-    for (k= dim; k--; )
-      *(gmcoord++)= *normalp++;
-  }
-  zinc_(Zdetsimplex);
-  area= qh_determinant (rows, dim, &nearzero);
-  if (toporient)
-    area= -area;
-  area *= qh AREAfactor;
-  trace4((qh ferr, "qh_facetarea_simplex: area=%2.2g for point p%d, toporient %d, nearzero? %d\n",
-	  area, qh_pointid(apex), toporient, nearzero)); 
-  return area;
-} /* facetarea_simplex */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="facetcenter">-</a>
-  
-  qh_facetcenter( vertices )
-    return Voronoi center (Voronoi vertex) for a facet's vertices
-
-  returns:
-    return temporary point equal to the center
-    
-  see:
-    qh_voronoi_center()
-*/
-pointT *qh_facetcenter (setT *vertices) {
-  setT *points= qh_settemp (qh_setsize (vertices));
-  vertexT *vertex, **vertexp;
-  pointT *center;
-  
-  FOREACHvertex_(vertices) 
-    qh_setappend (&points, vertex->point);
-  center= qh_voronoi_center (qh hull_dim-1, points);
-  qh_settempfree (&points);
-  return center;
-} /* facetcenter */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="findgooddist">-</a>
-  
-  qh_findgooddist( point, facetA, dist, facetlist )
-    find best good facet visible for point from facetA
-    assumes facetA is visible from point
-
-  returns:
-    best facet, i.e., good facet that is furthest from point
-      distance to best facet
-      NULL if none
-      
-    moves good, visible facets (and some other visible facets)
-      to end of qh facet_list
-
-  notes:
-    uses qh visit_id
-
-  design:
-    initialize bestfacet if facetA is good
-    move facetA to end of facetlist
-    for each facet on facetlist
-      for each unvisited neighbor of facet
-        move visible neighbors to end of facetlist
-        update best good neighbor
-        if no good neighbors, update best facet
-*/
-facetT *qh_findgooddist (pointT *point, facetT *facetA, realT *distp, 
-               facetT **facetlist) {
-  realT bestdist= -REALmax, dist;
-  facetT *neighbor, **neighborp, *bestfacet=NULL, *facet;
-  boolT goodseen= False;  
-
-  if (facetA->good) {
-    zinc_(Zcheckpart);  /* calls from check_bestdist occur after print stats */
-    qh_distplane (point, facetA, &bestdist);
-    bestfacet= facetA;
-    goodseen= True;
-  }
-  qh_removefacet (facetA);
-  qh_appendfacet (facetA);
-  *facetlist= facetA;
-  facetA->visitid= ++qh visit_id;
-  FORALLfacet_(*facetlist) {
-    FOREACHneighbor_(facet) {
-      if (neighbor->visitid == qh visit_id)
-        continue;
-      neighbor->visitid= qh visit_id;
-      if (goodseen && !neighbor->good)
-        continue;
-      zinc_(Zcheckpart); 
-      qh_distplane (point, neighbor, &dist);
-      if (dist > 0) {
-        qh_removefacet (neighbor);
-        qh_appendfacet (neighbor);
-        if (neighbor->good) {
-          goodseen= True;
-          if (dist > bestdist) {
-            bestdist= dist;
-            bestfacet= neighbor;
-          }
-        }
-      }
-    }
-  }
-  if (bestfacet) {
-    *distp= bestdist;
-    trace2((qh ferr, "qh_findgooddist: p%d is %2.2g above good facet f%d\n",
-      qh_pointid(point), bestdist, bestfacet->id));
-    return bestfacet;
-  }
-  trace4((qh ferr, "qh_findgooddist: no good facet for p%d above f%d\n", 
-      qh_pointid(point), facetA->id));
-  return NULL;
-}  /* findgooddist */
-    
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="getarea">-</a>
-  
-  qh_getarea( facetlist )
-    set area of all facets in facetlist
-    collect statistics
-
-  returns:
-    sets qh totarea/totvol to total area and volume of convex hull
-    for Delaunay triangulation, computes projected area of the lower or upper hull
-      ignores upper hull if qh ATinfinity
-  
-  notes:
-    could compute outer volume by expanding facet area by rays from interior
-    the following attempt at perpendicular projection underestimated badly:
-      qh.totoutvol += (-dist + facet->maxoutside + qh DISTround) 
-                            * area/ qh hull_dim;
-  design:
-    for each facet on facetlist
-      compute facet->area
-      update qh.totarea and qh.totvol
-*/
-void qh_getarea (facetT *facetlist) {
-  realT area;
-  realT dist;
-  facetT *facet;
-
-  if (qh REPORTfreq)
-    fprintf (qh ferr, "computing area of each facet and volume of the convex hull\n");
-  else 
-    trace1((qh ferr, "qh_getarea: computing volume and area for each facet\n"));
-  qh totarea= qh totvol= 0.0;
-  FORALLfacet_(facetlist) {
-    if (!facet->normal)
-      continue;
-    if (facet->upperdelaunay && qh ATinfinity)
-      continue;
-    facet->f.area= area= qh_facetarea (facet);
-    facet->isarea= True;
-    if (qh DELAUNAY) {
-      if (facet->upperdelaunay == qh UPPERdelaunay)
-	qh totarea += area;
-    }else {
-      qh totarea += area;
-      qh_distplane (qh interior_point, facet, &dist);
-      qh totvol += -dist * area/ qh hull_dim;
-    }
-    if (qh PRINTstatistics) {
-      wadd_(Wareatot, area);
-      wmax_(Wareamax, area);
-      wmin_(Wareamin, area);
-    }
-  }
-} /* getarea */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="gram_schmidt">-</a>
-  
-  qh_gram_schmidt( dim, row )
-    implements Gram-Schmidt orthogonalization by rows
-
-  returns:
-    false if zero norm
-    overwrites rows[dim][dim]
-
-  notes:
-    see Golub & van Loan Algorithm 6.2-2
-    overflow due to small divisors not handled
-
-  design:
-    for each row
-      compute norm for row
-      if non-zero, normalize row
-      for each remaining rowA
-        compute inner product of row and rowA
-        reduce rowA by row * inner product
-*/
-boolT qh_gram_schmidt(int dim, realT **row) {
-  realT *rowi, *rowj, norm;
-  int i, j, k;
-  
-  for(i=0; i < dim; i++) {
-    rowi= row[i];
-    for (norm= 0.0, k= dim; k--; rowi++)
-      norm += *rowi * *rowi;
-    norm= sqrt(norm);
-    wmin_(Wmindenom, norm);
-    if (norm == 0.0)  /* either 0 or overflow due to sqrt */
-      return False;
-    for(k= dim; k--; )
-      *(--rowi) /= norm;  
-    for(j= i+1; j < dim; j++) {
-      rowj= row[j];
-      for(norm= 0.0, k=dim; k--; )
-	norm += *rowi++ * *rowj++;
-      for(k=dim; k--; )
-	*(--rowj) -= *(--rowi) * norm;
-    }
-  }
-  return True;
-} /* gram_schmidt */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="inthresholds">-</a>
-  
-  qh_inthresholds( normal, angle )
-    return True if normal within qh.lower_/upper_threshold
-
-  returns:
-    estimate of angle by summing of threshold diffs
-      angle may be NULL
-      smaller "angle" is better
-  
-  notes:
-    invalid if qh.SPLITthresholds
-
-  see:
-    qh.lower_threshold in qh_initbuild()
-    qh_initthresholds()
-
-  design:
-    for each dimension
-      test threshold
-*/
-boolT qh_inthresholds (coordT *normal, realT *angle) {
-  boolT within= True;
-  int k;
-  realT threshold;
-
-  if (angle)
-    *angle= 0.0;
-  for(k= 0; k < qh hull_dim; k++) {
-    threshold= qh lower_threshold[k];
-    if (threshold > -REALmax/2) {
-      if (normal[k] < threshold)
-        within= False;
-      if (angle) {
-	threshold -= normal[k];
-	*angle += fabs_(threshold);
-      }
-    }
-    if (qh upper_threshold[k] < REALmax/2) {
-      threshold= qh upper_threshold[k];
-      if (normal[k] > threshold)
-        within= False;
-      if (angle) {
-	threshold -= normal[k];
-	*angle += fabs_(threshold);
-      }
-    }
-  }
-  return within;
-} /* inthresholds */
-    
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="joggleinput">-</a>
-  
-  qh_joggleinput()
-    randomly joggle input to Qhull by qh.JOGGLEmax
-    initial input is qh.first_point/qh.num_points of qh.hull_dim
-      repeated calls use qh.input_points/qh.num_points
- 
-  returns:
-    joggles points at qh.first_point/qh.num_points
-    copies data to qh.input_points/qh.input_malloc if first time
-    determines qh.JOGGLEmax if it was zero
-    if qh.DELAUNAY
-      computes the Delaunay projection of the joggled points
-
-  notes:
-    if qh.DELAUNAY, unnecessarily joggles the last coordinate
-    the initial 'QJn' may be set larger than qh_JOGGLEmaxincrease
-
-  design:
-    if qh.DELAUNAY
-      set qh.SCALElast for reduced precision errors
-    if first call
-      initialize qh.input_points to the original input points
-      if qh.JOGGLEmax == 0
-        determine default qh.JOGGLEmax
-    else
-      increase qh.JOGGLEmax according to qh.build_cnt
-    joggle the input by adding a random number in [-qh.JOGGLEmax,qh.JOGGLEmax]
-    if qh.DELAUNAY
-      sets the Delaunay projection
-*/
-void qh_joggleinput (void) {
-  int size, i, seed;
-  coordT *coordp, *inputp;
-  realT randr, randa, randb;
-
-  if (!qh input_points) { /* first call */
-    qh input_points= qh first_point;
-    qh input_malloc= qh POINTSmalloc;
-    size= qh num_points * qh hull_dim * sizeof(coordT);
-    if (!(qh first_point=(coordT*)malloc(size))) {
-      fprintf(qh ferr, "qhull error: insufficient memory to joggle %d points\n",
-          qh num_points);
-      qh_errexit(qh_ERRmem, NULL, NULL);
-    }
-    qh POINTSmalloc= True;
-    if (qh JOGGLEmax == 0.0) {
-      qh JOGGLEmax= qh_detjoggle (qh input_points, qh num_points, qh hull_dim);
-      qh_option ("QJoggle", NULL, &qh JOGGLEmax);
-    }
-  }else {                 /* repeated call */
-    if (!qh RERUN && qh build_cnt > qh_JOGGLEretry) {
-      if (((qh build_cnt-qh_JOGGLEretry-1) % qh_JOGGLEagain) == 0) {
-	realT maxjoggle= qh MAXwidth * qh_JOGGLEmaxincrease;
-	if (qh JOGGLEmax < maxjoggle) {
-	  qh JOGGLEmax *= qh_JOGGLEincrease;
-	  minimize_(qh JOGGLEmax, maxjoggle); 
-	}
-      }
-    }
-    qh_option ("QJoggle", NULL, &qh JOGGLEmax);
-  }
-  if (qh build_cnt > 1 && qh JOGGLEmax > fmax_(qh MAXwidth/4, 0.1)) {
-      fprintf (qh ferr, "qhull error: the current joggle for 'QJn', %.2g, is too large for the width\nof the input.  If possible, recompile Qhull with higher-precision reals.\n",
-	        qh JOGGLEmax);
-      qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  /* for some reason, using qh ROTATErandom and qh_RANDOMseed does not repeat the run. Use 'TRn' instead */
-  seed= qh_RANDOMint;
-  qh_option ("_joggle-seed", &seed, NULL);
-  trace0((qh ferr, "qh_joggleinput: joggle input by %2.2g with seed %d\n", 
-    qh JOGGLEmax, seed));
-  inputp= qh input_points;
-  coordp= qh first_point;
-  randa= 2.0 * qh JOGGLEmax/qh_RANDOMmax;
-  randb= -qh JOGGLEmax;
-  size= qh num_points * qh hull_dim;
-  for (i= size; i--; ) {
-    randr= qh_RANDOMint;
-    *(coordp++)= *(inputp++) + (randr * randa + randb);
-  }
-  if (qh DELAUNAY) {
-    qh last_low= qh last_high= qh last_newhigh= REALmax;
-    qh_setdelaunay (qh hull_dim, qh num_points, qh first_point);
-  }
-} /* joggleinput */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="maxabsval">-</a>
-  
-  qh_maxabsval( normal, dim )
-    return pointer to maximum absolute value of a dim vector
-    returns NULL if dim=0
-*/
-realT *qh_maxabsval (realT *normal, int dim) {
-  realT maxval= -REALmax;
-  realT *maxp= NULL, *colp, absval;
-  int k;
-
-  for (k= dim, colp= normal; k--; colp++) {
-    absval= fabs_(*colp);
-    if (absval > maxval) {
-      maxval= absval;
-      maxp= colp;
-    }
-  }
-  return maxp;
-} /* maxabsval */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="maxmin">-</a>
-  
-  qh_maxmin( points, numpoints, dimension )
-    return max/min points for each dimension      
-    determine max and min coordinates
-
-  returns:
-    returns a temporary set of max and min points
-      may include duplicate points. Does not include qh.GOODpoint
-    sets qh.NEARzero, qh.MAXabs_coord, qh.MAXsumcoord, qh.MAXwidth
-         qh.MAXlastcoord, qh.MINlastcoord
-    initializes qh.max_outside, qh.min_vertex, qh.WAScoplanar, qh.ZEROall_ok
-
-  notes:
-    loop duplicated in qh_detjoggle()
-
-  design:
-    initialize global precision variables
-    checks definition of REAL...
-    for each dimension
-      for each point
-        collect maximum and minimum point
-      collect maximum of maximums and minimum of minimums
-      determine qh.NEARzero for Gaussian Elimination
-*/
-setT *qh_maxmin(pointT *points, int numpoints, int dimension) {
-  int k;
-  realT maxcoord, temp;
-  pointT *minimum, *maximum, *point, *pointtemp;
-  setT *set;
-
-  qh max_outside= 0.0;
-  qh MAXabs_coord= 0.0;
-  qh MAXwidth= -REALmax;
-  qh MAXsumcoord= 0.0;
-  qh min_vertex= 0.0;
-  qh WAScoplanar= False;
-  if (qh ZEROcentrum)
-    qh ZEROall_ok= True;
-  if (REALmin < REALepsilon && REALmin < REALmax && REALmin > -REALmax
-  && REALmax > 0.0 && -REALmax < 0.0)
-    ; /* all ok */
-  else {
-    fprintf (qh ferr, "qhull error: floating point constants in user.h are wrong\n\
-REALepsilon %g REALmin %g REALmax %g -REALmax %g\n",
-	     REALepsilon, REALmin, REALmax, -REALmax);
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  set= qh_settemp(2*dimension);
-  for(k= 0; k < dimension; k++) {
-    if (points == qh GOODpointp)
-      minimum= maximum= points + dimension;
-    else
-      minimum= maximum= points;
-    FORALLpoint_(points, numpoints) {
-      if (point == qh GOODpointp)
-	continue;
-      if (maximum[k] < point[k])
-	maximum= point;
-      else if (minimum[k] > point[k])
-	minimum= point;
-    }
-    if (k == dimension-1) {
-      qh MINlastcoord= minimum[k];
-      qh MAXlastcoord= maximum[k];
-    }
-    if (qh SCALElast && k == dimension-1)
-      maxcoord= qh MAXwidth;
-    else {
-      maxcoord= fmax_(maximum[k], -minimum[k]);
-      if (qh GOODpointp) {
-        temp= fmax_(qh GOODpointp[k], -qh GOODpointp[k]);
-        maximize_(maxcoord, temp);
-      }
-      temp= maximum[k] - minimum[k];
-      maximize_(qh MAXwidth, temp);
-    }
-    maximize_(qh MAXabs_coord, maxcoord);
-    qh MAXsumcoord += maxcoord;
-    qh_setappend (&set, maximum);
-    qh_setappend (&set, minimum);
-    /* calculation of qh NEARzero is based on error formula 4.4-13 of
-       Golub & van Loan, authors say n^3 can be ignored and 10 be used in
-       place of rho */
-    qh NEARzero[k]= 80 * qh MAXsumcoord * REALepsilon;
-  }
-  if (qh IStracing >=1)
-    qh_printpoints (qh ferr, "qh_maxmin: found the max and min points (by dim):", set);
-  return(set);
-} /* maxmin */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="maxouter">-</a>
-
-  qh_maxouter()
-    return maximum distance from facet to outer plane
-    normally this is qh.max_outside+qh.DISTround
-    does not include qh.JOGGLEmax
-
-  see:
-    qh_outerinner()
-    
-  notes:
-    need to add another qh.DISTround if testing actual point with computation
-
-  for joggle:
-    qh_setfacetplane() updated qh.max_outer for Wnewvertexmax (max distance to vertex)
-    need to use Wnewvertexmax since could have a coplanar point for a high 
-      facet that is replaced by a low facet
-    need to add qh.JOGGLEmax if testing input points
-*/
-realT qh_maxouter (void) {
-  realT dist;
-
-  dist= fmax_(qh max_outside, qh DISTround);
-  dist += qh DISTround;
-  trace4((qh ferr, "qh_maxouter: max distance from facet to outer plane is %2.2g max_outside is %2.2g\n", dist, qh max_outside));
-  return dist;
-} /* maxouter */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="maxsimplex">-</a>
-  
-  qh_maxsimplex( dim, maxpoints, points, numpoints, simplex )
-    determines maximum simplex for a set of points 
-    starts from points already in simplex
-    skips qh.GOODpointp (assumes that it isn't in maxpoints)
-  
-  returns:
-    simplex with dim+1 points
-
-  notes:
-    assumes at least pointsneeded points in points
-    maximizes determinate for x,y,z,w, etc.
-    uses maxpoints as long as determinate is clearly non-zero
-
-  design:
-    initialize simplex with at least two points
-      (find points with max or min x coordinate)
-    for each remaining dimension
-      add point that maximizes the determinate
-        (use points from maxpoints first)    
-*/
-void qh_maxsimplex (int dim, setT *maxpoints, pointT *points, int numpoints, setT **simplex) {
-  pointT *point, **pointp, *pointtemp, *maxpoint, *minx=NULL, *maxx=NULL;
-  boolT nearzero, maxnearzero= False;
-  int k, sizinit;
-  realT maxdet= -REALmax, det, mincoord= REALmax, maxcoord= -REALmax;
-
-  sizinit= qh_setsize (*simplex);
-  if (sizinit < 2) {
-    if (qh_setsize (maxpoints) >= 2) {
-      FOREACHpoint_(maxpoints) {
-        if (maxcoord < point[0]) {
-          maxcoord= point[0];
-          maxx= point;
-        }
-	if (mincoord > point[0]) {
-          mincoord= point[0];
-          minx= point;
-        }
-      }
-    }else {
-      FORALLpoint_(points, numpoints) {
-	if (point == qh GOODpointp)
-	  continue;
-        if (maxcoord < point[0]) {
-	  maxcoord= point[0];
-          maxx= point;
-        }
-	if (mincoord > point[0]) {
-          mincoord= point[0];
-          minx= point;
-	}
-      }
-    }
-    qh_setunique (simplex, minx);
-    if (qh_setsize (*simplex) < 2)
-      qh_setunique (simplex, maxx);
-    sizinit= qh_setsize (*simplex);
-    if (sizinit < 2) {
-      qh_precision ("input has same x coordinate");
-      if (zzval_(Zsetplane) > qh hull_dim+1) {
-	fprintf (qh ferr, "qhull precision error (qh_maxsimplex for voronoi_center):\n%d points with the same x coordinate.\n",
-		 qh_setsize(maxpoints)+numpoints);
-	qh_errexit (qh_ERRprec, NULL, NULL);
-      }else {
-	fprintf (qh ferr, "qhull input error: input is less than %d-dimensional since it has the same x coordinate\n", qh hull_dim);
-	qh_errexit (qh_ERRinput, NULL, NULL);
-      }
-    }
-  }
-  for(k= sizinit; k < dim+1; k++) {
-    maxpoint= NULL;
-    maxdet= -REALmax;
-    FOREACHpoint_(maxpoints) {
-      if (!qh_setin (*simplex, point)) {
-        det= qh_detsimplex(point, *simplex, k, &nearzero);
-        if ((det= fabs_(det)) > maxdet) {
-	  maxdet= det;
-          maxpoint= point;
-	  maxnearzero= nearzero;
-        }
-      }
-    }
-    if (!maxpoint || maxnearzero) {
-      zinc_(Zsearchpoints);
-      if (!maxpoint) {
-        trace0((qh ferr, "qh_maxsimplex: searching all points for %d-th initial vertex.\n", k+1));
-      }else {
-        trace0((qh ferr, "qh_maxsimplex: searching all points for %d-th initial vertex, better than p%d det %2.2g\n",
-		k+1, qh_pointid(maxpoint), maxdet));
-      }
-      FORALLpoint_(points, numpoints) {
-	if (point == qh GOODpointp)
-	  continue;
-        if (!qh_setin (*simplex, point)) {
-          det= qh_detsimplex(point, *simplex, k, &nearzero);
-          if ((det= fabs_(det)) > maxdet) {
-	    maxdet= det;
-            maxpoint= point;
-	    maxnearzero= nearzero;
-	  }
-        }
-      }
-    } /* !maxpoint */
-    if (!maxpoint) {
-      fprintf (qh ferr, "qhull internal error (qh_maxsimplex): not enough points available\n");
-      qh_errexit (qh_ERRqhull, NULL, NULL);
-    }
-    qh_setappend(simplex, maxpoint);
-    trace1((qh ferr, "qh_maxsimplex: selected point p%d for %d`th initial vertex, det=%2.2g\n",
-	    qh_pointid(maxpoint), k+1, maxdet));
-  } /* k */ 
-} /* maxsimplex */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="minabsval">-</a>
-  
-  qh_minabsval( normal, dim )
-    return minimum absolute value of a dim vector
-*/
-realT qh_minabsval (realT *normal, int dim) {
-  realT minval= 0;
-  realT maxval= 0;
-  realT *colp;
-  int k;
-
-  for (k= dim, colp= normal; k--; colp++) {
-    maximize_(maxval, *colp);
-    minimize_(minval, *colp);
-  }
-  return fmax_(maxval, -minval);
-} /* minabsval */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="mindiff">-</a>
-  
-  qh_mindif( vecA, vecB, dim )
-    return index of min abs. difference of two vectors
-*/
-int qh_mindiff (realT *vecA, realT *vecB, int dim) {
-  realT mindiff= REALmax, diff;
-  realT *vecAp= vecA, *vecBp= vecB;
-  int k, mink= 0;
-
-  for (k= 0; k < dim; k++) {
-    diff= *vecAp++ - *vecBp++;
-    diff= fabs_(diff);
-    if (diff < mindiff) {
-      mindiff= diff;
-      mink= k;
-    }
-  }
-  return mink;
-} /* mindiff */
-
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="orientoutside">-</a>
-  
-  qh_orientoutside( facet  )
-    make facet outside oriented via qh.interior_point
-
-  returns:
-    True if facet reversed orientation.
-*/
-boolT qh_orientoutside (facetT *facet) {
-  int k;
-  realT dist;
-
-  qh_distplane (qh interior_point, facet, &dist);
-  if (dist > 0) {
-    for (k= qh hull_dim; k--; )
-      facet->normal[k]= -facet->normal[k];
-    facet->offset= -facet->offset;
-    return True;
-  }
-  return False;
-} /* orientoutside */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="outerinner">-</a>
-  
-  qh_outerinner( facet, outerplane, innerplane  )
-    if facet and qh.maxoutdone (i.e., qh_check_maxout)
-      returns outer and inner plane for facet
-    else
-      returns maximum outer and inner plane
-    accounts for qh.JOGGLEmax
-
-  see:
-    qh_maxouter(), qh_check_bestdist(), qh_check_points()
-
-  notes:
-    outerplaner or innerplane may be NULL
-    
-    includes qh.DISTround for actual points
-    adds another qh.DISTround if testing with floating point arithmetic
-*/
-void qh_outerinner (facetT *facet, realT *outerplane, realT *innerplane) {
-  realT dist, mindist;
-  vertexT *vertex, **vertexp;
-
-  if (outerplane) {
-    if (!qh_MAXoutside || !facet || !qh maxoutdone) {
-      *outerplane= qh_maxouter();       /* includes qh.DISTround */
-    }else { /* qh_MAXoutside ... */
-#if qh_MAXoutside 
-      *outerplane= facet->maxoutside + qh DISTround;
-#endif
-      
-    }
-    if (qh JOGGLEmax < REALmax/2)
-      *outerplane += qh JOGGLEmax * sqrt (qh hull_dim);
-  }
-  if (innerplane) {
-    if (facet) {
-      mindist= REALmax;
-      FOREACHvertex_(facet->vertices) {
-        zinc_(Zdistio);
-        qh_distplane (vertex->point, facet, &dist);
-        minimize_(mindist, dist);
-      }
-      *innerplane= mindist - qh DISTround;
-    }else 
-      *innerplane= qh min_vertex - qh DISTround;
-    if (qh JOGGLEmax < REALmax/2)
-      *innerplane -= qh JOGGLEmax * sqrt (qh hull_dim);
-  }
-} /* outerinner */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="pointdist">-</a>
-  
-  qh_pointdist( point1, point2, dim )
-    return distance between two points
-
-  notes:
-    returns distance squared if 'dim' is negative
-*/
-coordT qh_pointdist(pointT *point1, pointT *point2, int dim) {
-  coordT dist, diff;
-  int k;
-  
-  dist= 0.0;
-  for (k= (dim > 0 ? dim : -dim); k--; ) {
-    diff= *point1++ - *point2++;
-    dist += diff * diff;
-  }
-  if (dim > 0)
-    return(sqrt(dist));
-  return dist;
-} /* pointdist */
-
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="printmatrix">-</a>
-  
-  qh_printmatrix( fp, string, rows, numrow, numcol )
-    print matrix to fp given by row vectors
-    print string as header
-
-  notes:
-    print a vector by qh_printmatrix(fp, "", &vect, 1, len)
-*/
-void qh_printmatrix (FILE *fp, char *string, realT **rows, int numrow, int numcol) {
-  realT *rowp;
-  realT r; /*bug fix*/
-  int i,k;
-
-  fprintf (fp, "%s\n", string);
-  for (i= 0; i < numrow; i++) {
-    rowp= rows[i];
-    for (k= 0; k < numcol; k++) {
-      r= *rowp++;
-      fprintf (fp, "%6.3g ", r);
-    }
-    fprintf (fp, "\n");
-  }
-} /* printmatrix */
-
-  
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="printpoints">-</a>
-  
-  qh_printpoints( fp, string, points )
-    print pointids to fp for a set of points
-    if string, prints string and 'p' point ids
-*/
-void qh_printpoints (FILE *fp, char *string, setT *points) {
-  pointT *point, **pointp;
-
-  if (string) {
-    fprintf (fp, "%s", string);
-    FOREACHpoint_(points) 
-      fprintf (fp, " p%d", qh_pointid(point));
-    fprintf (fp, "\n");
-  }else {
-    FOREACHpoint_(points) 
-      fprintf (fp, " %d", qh_pointid(point));
-    fprintf (fp, "\n");
-  }
-} /* printpoints */
-
-  
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="projectinput">-</a>
-  
-  qh_projectinput()
-    project input points using qh.lower_bound/upper_bound and qh DELAUNAY
-    if qh.lower_bound[k]=qh.upper_bound[k]= 0, 
-      removes dimension k 
-    if halfspace intersection
-      removes dimension k from qh.feasible_point
-    input points in qh first_point, num_points, input_dim
-
-  returns:
-    new point array in qh first_point of qh hull_dim coordinates
-    sets qh POINTSmalloc
-    if qh DELAUNAY 
-      projects points to paraboloid
-      lowbound/highbound is also projected
-    if qh ATinfinity
-      adds point "at-infinity"
-    if qh POINTSmalloc 
-      frees old point array
-
-  notes:
-    checks that qh.hull_dim agrees with qh.input_dim, PROJECTinput, and DELAUNAY
-
-
-  design:
-    sets project[k] to -1 (delete), 0 (keep), 1 (add for Delaunay)
-    determines newdim and newnum for qh hull_dim and qh num_points
-    projects points to newpoints
-    projects qh.lower_bound to itself
-    projects qh.upper_bound to itself
-    if qh DELAUNAY
-      if qh ATINFINITY
-        projects points to paraboloid
-        computes "infinity" point as vertex average and 10% above all points 
-      else
-        uses qh_setdelaunay to project points to paraboloid
-*/
-void qh_projectinput (void) {
-  int k,i;
-  int newdim= qh input_dim, newnum= qh num_points;
-  signed char *project;
-  int size= (qh input_dim+1)*sizeof(*project);
-  pointT *newpoints, *coord, *infinity;
-  realT paraboloid, maxboloid= 0;
-  
-  project= (signed char*)qh_memalloc (size);
-  memset ((char*)project, 0, size);
-  for (k= 0; k < qh input_dim; k++) {   /* skip Delaunay bound */
-    if (qh lower_bound[k] == 0 && qh upper_bound[k] == 0) {
-      project[k]= -1;
-      newdim--;
-    }
-  }
-  if (qh DELAUNAY) {
-    project[k]= 1;
-    newdim++;
-    if (qh ATinfinity)
-      newnum++;
-  }
-  if (newdim != qh hull_dim) {
-    fprintf(qh ferr, "qhull internal error (qh_projectinput): dimension after projection %d != hull_dim %d\n", newdim, qh hull_dim);
-    qh_errexit(qh_ERRqhull, NULL, NULL);
-  }
-  if (!(newpoints=(coordT*)malloc(newnum*newdim*sizeof(coordT)))){
-    fprintf(qh ferr, "qhull error: insufficient memory to project %d points\n",
-           qh num_points);
-    qh_errexit(qh_ERRmem, NULL, NULL);
-  }
-  qh_projectpoints (project, qh input_dim+1, qh first_point,
-                    qh num_points, qh input_dim, newpoints, newdim);
-  trace1((qh ferr, "qh_projectinput: updating lower and upper_bound\n"));
-  qh_projectpoints (project, qh input_dim+1, qh lower_bound,
-                    1, qh input_dim+1, qh lower_bound, newdim+1);
-  qh_projectpoints (project, qh input_dim+1, qh upper_bound,
-                    1, qh input_dim+1, qh upper_bound, newdim+1);
-  if (qh HALFspace) {
-    if (!qh feasible_point) {
-      fprintf(qh ferr, "qhull internal error (qh_projectinput): HALFspace defined without qh.feasible_point\n");
-      qh_errexit(qh_ERRqhull, NULL, NULL);
-    }
-    qh_projectpoints (project, qh input_dim, qh feasible_point,
-		      1, qh input_dim, qh feasible_point, newdim);
-  }
-  qh_memfree(project, ((qh input_dim+1)*sizeof(*project)));
-  if (qh POINTSmalloc)
-    free (qh first_point);
-  qh first_point= newpoints;
-  qh POINTSmalloc= True;
-  if (qh DELAUNAY && qh ATinfinity) {
-    coord= qh first_point;
-    infinity= qh first_point + qh hull_dim * qh num_points;
-    for (k=qh hull_dim-1; k--; )
-      infinity[k]= 0.0;
-    for (i=qh num_points; i--; ) {
-      paraboloid= 0.0;
-      for (k=0; k < qh hull_dim-1; k++) {
-        paraboloid += *coord * *coord;
-	infinity[k] += *coord;
-        coord++;
-      }
-      *(coord++)= paraboloid;
-      maximize_(maxboloid, paraboloid);
-    }
-    /* coord == infinity */
-    for (k=qh hull_dim-1; k--; )
-      *(coord++) /= qh num_points;
-    *(coord++)= maxboloid * 1.1;
-    qh num_points++;
-    trace0((qh ferr, "qh_projectinput: projected points to paraboloid for Delaunay\n"));
-  }else if (qh DELAUNAY)  /* !qh ATinfinity */
-    qh_setdelaunay( qh hull_dim, qh num_points, qh first_point);
-} /* projectinput */
-
-  
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="projectpoints">-</a>
-  
-  qh_projectpoints( project, n, points, numpoints, dim, newpoints, newdim )
-    project points/numpoints/dim to newpoints/newdim
-    if project[k] == -1
-      delete dimension k 
-    if project[k] == 1 
-      add dimension k by duplicating previous column
-    n is size of project
-
-  notes:
-    newpoints may be points if only adding dimension at end
-
-  design:
-    check that 'project' and 'newdim' agree
-    for each dimension
-      if project == -1
-        skip dimension
-      else
-        determine start of column in newpoints
-        determine start of column in points 
-          if project == +1, duplicate previous column
-        copy dimension (column) from points to newpoints
-*/
-void qh_projectpoints (signed char *project, int n, realT *points, 
-        int numpoints, int dim, realT *newpoints, int newdim) {
-  int testdim= dim, oldk=0, newk=0, i,j=0,k;
-  realT *newp, *oldp;
-  
-  for (k= 0; k < n; k++)
-    testdim += project[k];
-  if (testdim != newdim) {
-    fprintf (qh ferr, "qhull internal error (qh_projectpoints): newdim %d should be %d after projection\n",
-      newdim, testdim);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  for (j= 0; j<n; j++) {
-    if (project[j] == -1)
-      oldk++;
-    else {
-      newp= newpoints+newk++;
-      if (project[j] == +1) {
-	if (oldk >= dim)
-	  continue;
-	oldp= points+oldk;
-      }else 
-	oldp= points+oldk++;
-      for (i=numpoints; i--; ) {
-        *newp= *oldp;
-        newp += newdim;
-        oldp += dim;
-      }
-    }
-    if (oldk >= dim)
-      break;
-  }
-  trace1((qh ferr, "qh_projectpoints: projected %d points from dim %d to dim %d\n", 
-    numpoints, dim, newdim));
-} /* projectpoints */
-        
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="rand">-</a>
-  
-  qh_rand() 
-  qh_srand( seed )
-    generate pseudo-random number between 1 and 2^31 -2
-
-  notes:
-    from Park & Miller's minimimal standard random number generator
-       Communications of the ACM, 31:1192-1201, 1988.
-    does not use 0 or 2^31 -1
-       this is silently enforced by qh_srand()
-    can make 'Rn' much faster by moving qh_rand to qh_distplane
-*/
-int qh_rand_seed= 1;  /* define as global variable instead of using qh */
-
-int qh_rand( void) {
-#define qh_rand_a 16807
-#define qh_rand_m 2147483647
-#define qh_rand_q 127773  /* m div a */
-#define qh_rand_r 2836    /* m mod a */
-  int lo, hi, test;
-  int seed = qh_rand_seed;
-
-  hi = seed / qh_rand_q;  /* seed div q */
-  lo = seed % qh_rand_q;  /* seed mod q */
-  test = qh_rand_a * lo - qh_rand_r * hi;
-  if (test > 0)
-    seed= test;
-  else
-    seed= test + qh_rand_m;
-  qh_rand_seed= seed;
-  /* seed = seed < qh_RANDOMmax/2 ? 0 : qh_RANDOMmax;  for testing */
-  /* seed = qh_RANDOMmax;  for testing */
-  return seed;
-} /* rand */
-
-void qh_srand( int seed) {
-  if (seed < 1)
-    qh_rand_seed= 1;
-  else if (seed >= qh_rand_m)
-    qh_rand_seed= qh_rand_m - 1;
-  else
-    qh_rand_seed= seed;
-} /* qh_srand */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="randomfactor">-</a>
-  
-  qh_randomfactor()
-    return a random factor within qh.RANDOMmax of 1.0
-
-  notes:
-    qh.RANDOMa/b are defined in global.c
-*/
-realT qh_randomfactor (void) {
-  realT randr;
-
-  randr= qh_RANDOMint;
-  return randr * qh RANDOMa + qh RANDOMb;
-} /* randomfactor */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="randommatrix">-</a>
-  
-  qh_randommatrix( buffer, dim, rows )
-    generate a random dim X dim matrix in range [-1,1]
-    assumes buffer is [dim+1, dim]
-
-  returns:
-    sets buffer to random numbers
-    sets rows to rows of buffer
-      sets row[dim] as scratch row
-*/
-void qh_randommatrix (realT *buffer, int dim, realT **rows) {
-  int i, k;
-  realT **rowi, *coord, realr;
-
-  coord= buffer;
-  rowi= rows;
-  for (i=0; i < dim; i++) {
-    *(rowi++)= coord;
-    for (k=0; k < dim; k++) {
-      realr= qh_RANDOMint;
-      *(coord++)= 2.0 * realr/(qh_RANDOMmax+1) - 1.0;
-    }
-  }
-  *rowi= coord;
-} /* randommatrix */
-
-        
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="rotateinput">-</a>
-  
-  qh_rotateinput( rows )
-    rotate input using row matrix
-    input points given by qh first_point, num_points, hull_dim
-    assumes rows[dim] is a scratch buffer
-    if qh POINTSmalloc, overwrites input points, else mallocs a new array
-
-  returns:
-    rotated input
-    sets qh POINTSmalloc
-
-  design:
-    see qh_rotatepoints
-*/
-void qh_rotateinput (realT **rows) {
-
-  if (!qh POINTSmalloc) {
-    qh first_point= qh_copypoints (qh first_point, qh num_points, qh hull_dim);
-    qh POINTSmalloc= True;
-  }
-  qh_rotatepoints (qh first_point, qh num_points, qh hull_dim, rows);
-}  /* rotateinput */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="rotatepoints">-</a>
-  
-  qh_rotatepoints( points, numpoints, dim, row )
-    rotate numpoints points by a d-dim row matrix
-    assumes rows[dim] is a scratch buffer
-
-  returns:
-    rotated points in place
-
-  design:
-    for each point
-      for each coordinate
-        use row[dim] to compute partial inner product
-      for each coordinate
-        rotate by partial inner product
-*/
-void qh_rotatepoints (realT *points, int numpoints, int dim, realT **row) {
-  realT *point, *rowi, *coord= NULL, sum, *newval;
-  int i,j,k;
-
-  if (qh IStracing >= 1)
-    qh_printmatrix (qh ferr, "qh_rotatepoints: rotate points by", row, dim, dim);
-  for (point= points, j= numpoints; j--; point += dim) {
-    newval= row[dim];
-    for (i= 0; i < dim; i++) {
-      rowi= row[i];
-      coord= point;
-      for (sum= 0.0, k= dim; k--; )
-        sum += *rowi++ * *coord++;
-      *(newval++)= sum;
-    }
-    for (k= dim; k--; )
-      *(--coord)= *(--newval);
-  }
-} /* rotatepoints */  
-  
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="scaleinput">-</a>
-  
-  qh_scaleinput()
-    scale input points using qh low_bound/high_bound
-    input points given by qh first_point, num_points, hull_dim
-    if qh POINTSmalloc, overwrites input points, else mallocs a new array
-
-  returns:
-    scales coordinates of points to low_bound[k], high_bound[k]
-    sets qh POINTSmalloc
-
-  design:
-    see qh_scalepoints
-*/
-void qh_scaleinput (void) {
-
-  if (!qh POINTSmalloc) {
-    qh first_point= qh_copypoints (qh first_point, qh num_points, qh hull_dim);
-    qh POINTSmalloc= True;
-  }
-  qh_scalepoints (qh first_point, qh num_points, qh hull_dim,
-       qh lower_bound, qh upper_bound);
-}  /* scaleinput */
-  
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="scalelast">-</a>
-  
-  qh_scalelast( points, numpoints, dim, low, high, newhigh )
-    scale last coordinate to [0,m] for Delaunay triangulations
-    input points given by points, numpoints, dim
-
-  returns:
-    changes scale of last coordinate from [low, high] to [0, newhigh]
-    overwrites last coordinate of each point
-    saves low/high/newhigh in qh.last_low, etc. for qh_setdelaunay()
-
-  notes:
-    when called by qh_setdelaunay, low/high may not match actual data
-    
-  design:
-    compute scale and shift factors
-    apply to last coordinate of each point
-*/
-void qh_scalelast (coordT *points, int numpoints, int dim, coordT low,
-		   coordT high, coordT newhigh) {
-  realT scale, shift;
-  coordT *coord;
-  int i;
-  boolT nearzero= False;
-
-  trace4((qh ferr, "qh_scalelast: scale last coordinate from [%2.2g, %2.2g] to [0,%2.2g]\n",
-    low, high, newhigh));
-  qh last_low= low;
-  qh last_high= high;
-  qh last_newhigh= newhigh;
-  scale= qh_divzero (newhigh, high - low,
-                  qh MINdenom_1, &nearzero);
-  if (nearzero) {
-    if (qh DELAUNAY)
-      fprintf (qh ferr, "qhull input error: can not scale last coordinate.  Input is cocircular\n   or cospherical.   Use option 'Qz' to add a point at infinity.\n");
-    else
-      fprintf (qh ferr, "qhull input error: can not scale last coordinate.  New bounds [0, %2.2g] are too wide for\nexisting bounds [%2.2g, %2.2g] (width %2.2g)\n",
-		newhigh, low, high, high-low);
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  shift= - low * newhigh / (high-low);
-  coord= points + dim - 1;
-  for (i= numpoints; i--; coord += dim)
-    *coord= *coord * scale + shift;
-} /* scalelast */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="scalepoints">-</a>
-  
-  qh_scalepoints( points, numpoints, dim, newlows, newhighs )
-    scale points to new lowbound and highbound
-    retains old bound when newlow= -REALmax or newhigh= +REALmax
-
-  returns:
-    scaled points
-    overwrites old points
-
-  design:
-    for each coordinate
-      compute current low and high bound
-      compute scale and shift factors
-      scale all points
-      enforce new low and high bound for all points
-*/
-void qh_scalepoints (pointT *points, int numpoints, int dim,
-	realT *newlows, realT *newhighs) {
-  int i,k;
-  realT shift, scale, *coord, low, high, newlow, newhigh, mincoord, maxcoord;
-  boolT nearzero= False;
-     
-  for (k= 0; k < dim; k++) {
-    newhigh= newhighs[k];
-    newlow= newlows[k];
-    if (newhigh > REALmax/2 && newlow < -REALmax/2)
-      continue;
-    low= REALmax;
-    high= -REALmax;
-    for (i= numpoints, coord= points+k; i--; coord += dim) {
-      minimize_(low, *coord);
-      maximize_(high, *coord);
-    }
-    if (newhigh > REALmax/2)
-      newhigh= high;
-    if (newlow < -REALmax/2)
-      newlow= low;
-    if (qh DELAUNAY && k == dim-1 && newhigh < newlow) {
-      fprintf (qh ferr, "qhull input error: 'Qb%d' or 'QB%d' inverts paraboloid since high bound %.2g < low bound %.2g\n",
-	       k, k, newhigh, newlow);
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    scale= qh_divzero (newhigh - newlow, high - low,
-                  qh MINdenom_1, &nearzero);
-    if (nearzero) {
-      fprintf (qh ferr, "qhull input error: %d'th dimension's new bounds [%2.2g, %2.2g] too wide for\nexisting bounds [%2.2g, %2.2g]\n",
-              k, newlow, newhigh, low, high);
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    shift= (newlow * high - low * newhigh)/(high-low);
-    coord= points+k;
-    for (i= numpoints; i--; coord += dim)
-      *coord= *coord * scale + shift;
-    coord= points+k;
-    if (newlow < newhigh) {
-      mincoord= newlow;
-      maxcoord= newhigh;
-    }else {
-      mincoord= newhigh;
-      maxcoord= newlow;
-    }
-    for (i= numpoints; i--; coord += dim) {
-      minimize_(*coord, maxcoord);  /* because of roundoff error */
-      maximize_(*coord, mincoord);
-    }
-    trace0((qh ferr, "qh_scalepoints: scaled %d'th coordinate [%2.2g, %2.2g] to [%.2g, %.2g] for %d points by %2.2g and shifted %2.2g\n",
-      k, low, high, newlow, newhigh, numpoints, scale, shift));
-  }
-} /* scalepoints */    
-
-       
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="setdelaunay">-</a>
-  
-  qh_setdelaunay( dim, count, points )
-    project count points to dim-d paraboloid for Delaunay triangulation
-    
-    dim is one more than the dimension of the input set
-    assumes dim is at least 3 (i.e., at least a 2-d Delaunay triangulation)
-
-    points is a dim*count realT array.  The first dim-1 coordinates
-    are the coordinates of the first input point.  array[dim] is
-    the first coordinate of the second input point.  array[2*dim] is
-    the first coordinate of the third input point.
-
-    if qh.last_low defined (i.e., 'Qbb' called qh_scalelast)
-      calls qh_scalelast to scale the last coordinate the same as the other points
-
-  returns:
-    for each point
-      sets point[dim-1] to sum of squares of coordinates
-    scale points to 'Qbb' if needed
-      
-  notes:
-    to project one point, use
-      qh_setdelaunay (qh hull_dim, 1, point)
-      
-    Do not use options 'Qbk', 'QBk', or 'QbB' since they scale 
-    the coordinates after the original projection.
-
-*/
-void qh_setdelaunay (int dim, int count, pointT *points) {
-  int i, k;
-  coordT *coordp, coord;
-  realT paraboloid;
-
-  trace0((qh ferr, "qh_setdelaunay: project %d points to paraboloid for Delaunay triangulation\n", count));
-  coordp= points;
-  for (i= 0; i < count; i++) {
-    coord= *coordp++;
-    paraboloid= coord*coord;
-    for (k= dim-2; k--; ) {
-      coord= *coordp++;
-      paraboloid += coord*coord;
-    }
-    *coordp++ = paraboloid;
-  }
-  if (qh last_low < REALmax/2) 
-    qh_scalelast (points, count, dim, qh last_low, qh last_high, qh last_newhigh);
-} /* setdelaunay */
-
-  
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="sethalfspace">-</a>
-  
-  qh_sethalfspace( dim, coords, nextp, normal, offset, feasible )
-    set point to dual of halfspace relative to feasible point
-    halfspace is normal coefficients and offset.
-
-  returns:
-    false if feasible point is outside of hull (error message already reported)
-    overwrites coordinates for point at dim coords
-    nextp= next point (coords)
-
-  design:
-    compute distance from feasible point to halfspace
-    divide each normal coefficient by -dist
-*/
-boolT qh_sethalfspace (int dim, coordT *coords, coordT **nextp, 
-         coordT *normal, coordT *offset, coordT *feasible) {
-  coordT *normp= normal, *feasiblep= feasible, *coordp= coords;
-  realT dist;
-  realT r; /*bug fix*/
-  int k;
-  boolT zerodiv;
-
-  dist= *offset;
-  for (k= dim; k--; )
-    dist += *(normp++) * *(feasiblep++);
-  if (dist > 0)
-    goto LABELerroroutside;
-  normp= normal;
-  if (dist < -qh MINdenom) {
-    for (k= dim; k--; )
-      *(coordp++)= *(normp++) / -dist;
-  }else {
-    for (k= dim; k--; ) {
-      *(coordp++)= qh_divzero (*(normp++), -dist, qh MINdenom_1, &zerodiv);
-      if (zerodiv) 
-        goto LABELerroroutside;
-    }
-  }
-  *nextp= coordp;
-  if (qh IStracing >= 4) {
-    fprintf (qh ferr, "qh_sethalfspace: halfspace at offset %6.2g to point: ", *offset);
-    for (k= dim, coordp= coords; k--; ) {
-      r= *coordp++;
-      fprintf (qh ferr, " %6.2g", r);
-    }
-    fprintf (qh ferr, "\n");
-  }
-  return True;
-LABELerroroutside:
-  feasiblep= feasible;
-  normp= normal;
-  fprintf(qh ferr, "qhull input error: feasible point is not clearly inside halfspace\nfeasible point: ");
-  for (k= dim; k--; )
-    fprintf (qh ferr, qh_REAL_1, r=*(feasiblep++));
-  fprintf (qh ferr, "\n     halfspace: "); 
-  for (k= dim; k--; )
-    fprintf (qh ferr, qh_REAL_1, r=*(normp++));
-  fprintf (qh ferr, "\n     at offset: ");
-  fprintf (qh ferr, qh_REAL_1, *offset);
-  fprintf (qh ferr, " and distance: ");
-  fprintf (qh ferr, qh_REAL_1, dist);
-  fprintf (qh ferr, "\n");
-  return False;
-} /* sethalfspace */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="sethalfspace_all">-</a>
-  
-  qh_sethalfspace_all( dim, count, halfspaces, feasible )
-    generate dual for halfspace intersection with feasible point
-    array of count halfspaces
-      each halfspace is normal coefficients followed by offset 
-      the origin is inside the halfspace if the offset is negative
-
-  returns:
-    malloc'd array of count X dim-1 points
-
-  notes:
-    call before qh_init_B or qh_initqhull_globals 
-    unused/untested code: please email bradb@shore.net if this works ok for you
-    If using option 'Fp', also set qh feasible_point. It is a malloc'd array 
-      that is freed by qh_freebuffers.
-
-  design:
-    see qh_sethalfspace
-*/
-coordT *qh_sethalfspace_all (int dim, int count, coordT *halfspaces, pointT *feasible) {
-  int i, newdim;
-  pointT *newpoints;
-  coordT *coordp, *normalp, *offsetp;
-
-  trace0((qh ferr, "qh_sethalfspace_all: compute dual for halfspace intersection\n"));
-  newdim= dim - 1;
-  if (!(newpoints=(coordT*)malloc(count*newdim*sizeof(coordT)))){
-    fprintf(qh ferr, "qhull error: insufficient memory to compute dual of %d halfspaces\n",
-          count);
-    qh_errexit(qh_ERRmem, NULL, NULL);
-  }
-  coordp= newpoints;
-  normalp= halfspaces;
-  for (i= 0; i < count; i++) {
-    offsetp= normalp + newdim;
-    if (!qh_sethalfspace (newdim, coordp, &coordp, normalp, offsetp, feasible)) {
-      fprintf (qh ferr, "The halfspace was at index %d\n", i);
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    normalp= offsetp + 1;
-  }
-  return newpoints;
-} /* sethalfspace_all */
-
-  
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="sharpnewfacets">-</a>
-  
-  qh_sharpnewfacets()
-
-  returns:
-    true if could be an acute angle (facets in different quadrants)
- 
-  notes:
-    for qh_findbest
-
-  design:
-    for all facets on qh.newfacet_list
-      if two facets are in different quadrants
-        set issharp
-*/
-boolT qh_sharpnewfacets () {
-  facetT *facet;
-  boolT issharp = False;
-  int *quadrant, k;
-  
-  quadrant= (int*)qh_memalloc (qh hull_dim * sizeof(int));
-  FORALLfacet_(qh newfacet_list) {
-    if (facet == qh newfacet_list) {
-      for (k= qh hull_dim; k--; )
-      	quadrant[ k]= (facet->normal[ k] > 0);
-    }else {
-      for (k= qh hull_dim; k--; ) {
-        if (quadrant[ k] != (facet->normal[ k] > 0)) {
-          issharp= True;
-          break;
-        }
-      }
-    }
-    if (issharp)
-      break;
-  }
-  qh_memfree( quadrant, qh hull_dim * sizeof(int));
-  trace3((qh ferr, "qh_sharpnewfacets: %d\n", issharp));
-  return issharp;
-} /* sharpnewfacets */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="voronoi_center">-</a>
-  
-  qh_voronoi_center( dim, points )
-    return Voronoi center for a set of points
-    dim is the orginal dimension of the points
-    gh.gm_matrix/qh.gm_row are scratch buffers
-
-  returns:
-    center as a temporary point
-    if non-simplicial, 
-      returns center for max simplex of points
-
-  notes:
-    from Bowyer & Woodwark, A Programmer's Geometry, 1983, p. 65
-
-  design:
-    if non-simplicial
-      determine max simplex for points
-    translate point0 of simplex to origin
-    compute sum of squares of diagonal
-    compute determinate
-    compute Voronoi center (see Bowyer & Woodwark)
-*/
-pointT *qh_voronoi_center (int dim, setT *points) {
-  pointT *point, **pointp, *point0;
-  pointT *center= (pointT*)qh_memalloc (qh center_size);
-  setT *simplex;
-  int i, j, k, size= qh_setsize(points);
-  coordT *gmcoord;
-  realT *diffp, sum2, *sum2row, *sum2p, det, factor;
-  boolT nearzero, infinite;
-
-  if (size == dim+1)
-    simplex= points;
-  else if (size < dim+1) {
-    fprintf (qh ferr, "qhull internal error (qh_voronoi_center):\n  need at least %d points to construct a Voronoi center\n",
-	     dim+1);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }else {
-    simplex= qh_settemp (dim+1);
-    qh_maxsimplex (dim, points, NULL, 0, &simplex);
-  }
-  point0= SETfirstt_(simplex, pointT);
-  gmcoord= qh gm_matrix;
-  for (k=0; k < dim; k++) {
-    qh gm_row[k]= gmcoord;
-    FOREACHpoint_(simplex) {
-      if (point != point0)
-        *(gmcoord++)= point[k] - point0[k];
-    }
-  }
-  sum2row= gmcoord;
-  for (i=0; i < dim; i++) {
-    sum2= 0.0;
-    for (k= 0; k < dim; k++) {
-      diffp= qh gm_row[k] + i;
-      sum2 += *diffp * *diffp;
-    }
-    *(gmcoord++)= sum2;
-  }
-  det= qh_determinant (qh gm_row, dim, &nearzero);
-  factor= qh_divzero (0.5, det, qh MINdenom, &infinite);
-  if (infinite) {
-    for (k=dim; k--; )
-      center[k]= qh_INFINITE;
-    if (qh IStracing)
-      qh_printpoints (qh ferr, "qh_voronoi_center: at infinity for ", simplex);
-  }else {
-    for (i=0; i < dim; i++) {
-      gmcoord= qh gm_matrix;
-      sum2p= sum2row;
-      for (k=0; k < dim; k++) {
-	qh gm_row[k]= gmcoord;
-	if (k == i) {
-	  for (j= dim; j--; )
-	    *(gmcoord++)= *sum2p++;
-	}else {
-	  FOREACHpoint_(simplex) {
-	    if (point != point0)
-	      *(gmcoord++)= point[k] - point0[k];
-	  }
-	}
-      }
-      center[i]= qh_determinant (qh gm_row, dim, &nearzero)*factor + point0[i];
-    }
-#ifndef qh_NOtrace
-    if (qh IStracing >= 3) {
-      fprintf (qh ferr, "qh_voronoi_center: det %2.2g factor %2.2g ", det, factor);
-      qh_printmatrix (qh ferr, "center:", &center, 1, dim);
-      if (qh IStracing >= 5) {
-	qh_printpoints (qh ferr, "points", simplex);
-	FOREACHpoint_(simplex)
-	  fprintf (qh ferr, "p%d dist %.2g, ", qh_pointid (point),
-		   qh_pointdist (point, center, dim));
-	fprintf (qh ferr, "\n");
-      }
-    }
-#endif
-  }
-  if (simplex != points)
-    qh_settempfree (&simplex);
-  return center;
-} /* voronoi_center */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/global.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/global.c
deleted file mode 100644
index ff0cafb5eb339f21fdda7f6b908e1f82b0044b62..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/global.c
+++ /dev/null
@@ -1,2041 +0,0 @@
-/*<html><pre>  -<a                             href="qh-globa.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   global.c
-   initializes all the globals of the qhull application
-
-   see README
-
-   see qhull.h for qh.globals and function prototypes
-
-   see qhull_a.h for internal functions
-
-   copyright (c) 1993-2003, The Geometry Center
- */
-
-#include "qhull_a.h"
-
-/*========= qh definition (see qhull.h) =======================*/
-
-#if qh_QHpointer
-qhT *qh_qh= NULL;	/* pointer to all global variables */
-#else
-qhT qh_qh;     		/* all global variables.
-			   Add "= {0}" if this causes a compiler error.
-			   Also qh_qhstat in stat.c and qhmem in mem.c.  */
-#endif
-
-/*-<a                             href	="qh-globa.htm#TOC"
-  >--------------------------------</a><a name="qh_version">-</a>
-
-  qh_version
-    version string by year and date
-
-    the revision increases on code changes only
-
-  notes:
-    change date:    Changes.txt, Announce.txt, README.txt, 
-                    qhull.man, qhull.txt, qhull-news.html, Eudora signatures, 
-    change version: README.txt, qh-get.htm, File_id.diz, Makefile.txt
-    change year:    Copying.txt
-    check download size
-    recompile user_eg.c, rbox.c, qhull.c, qconvex.c, qdelaun.c qvoronoi.c, qhalf.c
-*/
-
-char *qh_version = "2003.1 2003/12/30";
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="appendprint">-</a>
-
-  qh_appendprint( printFormat )
-    append printFormat to qh.PRINTout unless already defined
-*/
-void qh_appendprint (qh_PRINT format) {
-  int i;
-
-  for (i=0; i < qh_PRINTEND; i++) {
-    if (qh PRINTout[i] == format && format != qh_PRINTqhull)
-      break;
-    if (!qh PRINTout[i]) {
-      qh PRINTout[i]= format;
-      break;
-    }
-  }
-} /* appendprint */
-     
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="checkflags">-</a>
-  
-  qh_checkflags( commandStr, hiddenFlags )
-    errors if commandStr contains hiddenFlags
-    hiddenFlags starts and ends with a space and is space deliminated (checked)
-
-  notes:
-    ignores first word (e.g., "qconvex i")
-    use qh_strtol/strtod since strtol/strtod may or may not skip trailing spaces
-  
-  see:
-    qh_initflags() initializes Qhull according to commandStr
-*/
-void qh_checkflags(char *command, char *hiddenflags) {
-  char *s= command, *t, *chkerr, key, opt, prevopt;
-  char chkkey[]= "   ";
-  char chkopt[]=  "    ";
-  char chkopt2[]= "     ";
-
-  if (*hiddenflags != ' ' || hiddenflags[strlen(hiddenflags)-1] != ' ') {
-    fprintf(qh ferr, "qhull error (qh_checkflags): hiddenflags must start and end with a space: \"%s\"", hiddenflags);
-    qh_errexit(qh_ERRinput, NULL, NULL);
-  }
-  if (strpbrk(hiddenflags, ",\n\r\t")) { 
-    fprintf(qh ferr, "qhull error (qh_checkflags): hiddenflags contains commas, newlines, or tabs: \"%s\"", hiddenflags);
-    qh_errexit(qh_ERRinput, NULL, NULL);
-  }
-  while (*s && !isspace(*s))  /* skip program name */
-    s++;
-  while (*s) {
-    while (*s && isspace(*s))
-      s++;
-    if (*s == '-')
-      s++;
-    if (!*s)
-      break;
-    key = *s++;
-    chkerr = NULL;
-    if (key == '\'') {         /* TO 'file name' */
-      t= strchr(s, '\'');
-      if (!t) {
-	fprintf(qh ferr, "qhull error (qh_checkflags): missing the 2nd single-quote for:\n%s\n", s-1);
-	qh_errexit(qh_ERRinput, NULL, NULL);
-      }
-      s= t+1;
-      continue;
-    }
-    chkkey[1]= key;
-    if (strstr(hiddenflags, chkkey)) {
-      chkerr= chkkey;
-    }else if (isupper(key)) {
-      opt= ' ';
-      prevopt= ' ';
-      chkopt[1]= key;
-      chkopt2[1]= key;
-      while (!chkerr && *s && !isspace(*s)) {
-	opt= *s++;
-	if (isalpha(opt)) {
-	  chkopt[2]= opt;
-	  if (strstr(hiddenflags, chkopt))
-	    chkerr= chkopt;
-	  if (prevopt != ' ') {
- 	    chkopt2[2]= prevopt;
- 	    chkopt2[3]= opt;
-	    if (strstr(hiddenflags, chkopt2))
-	      chkerr= chkopt2;
-	  }
-	}else if (key == 'Q' && isdigit(opt) && prevopt != 'b' 
-	      && (prevopt == ' ' || islower(prevopt))) {
-  	    chkopt[2]= opt;
-	    if (strstr(hiddenflags, chkopt))
-	      chkerr= chkopt;
-	}else {
-	  qh_strtod (s-1, &t);
-	  if (s < t)
-	    s= t;
-	}
-        prevopt= opt;
-      }
-    }
-    if (chkerr) {
-      *chkerr= '\'';
-      chkerr[strlen(chkerr)-1]=  '\'';
-      fprintf(qh ferr, "qhull error: option %s is not used with this program.\n             It may be used with qhull.\n", chkerr);
-      qh_errexit(qh_ERRinput, NULL, NULL);
-    }
-  }
-} /* checkflags */
-    
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="clock">-</a>
-  
-  qh_clock()
-    return user CPU time in 100ths (qh_SECtick)
-    only defined for qh_CLOCKtype == 2
-
-  notes:
-    use first value to determine time 0
-    from Stevens '92 8.15
-*/
-unsigned long qh_clock (void) {
-
-#if (qh_CLOCKtype == 2)
-  struct tms time;
-  static long clktck;  /* initialized first call */
-  double ratio, cpu;
-  unsigned long ticks;
-
-  if (!clktck) {
-    if ((clktck= sysconf (_SC_CLK_TCK)) < 0) {
-      fprintf (qh ferr, "qhull internal error (qh_clock): sysconf() failed.  Use qh_CLOCKtype 1 in user.h\n");
-      qh_errexit (qh_ERRqhull, NULL, NULL);
-    }
-  }
-  if (times (&time) == -1) {
-    fprintf (qh ferr, "qhull internal error (qh_clock): times() failed.  Use qh_CLOCKtype 1 in user.h\n");
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  ratio= qh_SECticks / (double)clktck;
-  ticks= time.tms_utime * ratio;
-  return ticks;
-#else
-  fprintf (qh ferr, "qhull internal error (qh_clock): use qh_CLOCKtype 2 in user.h\n");
-  qh_errexit (qh_ERRqhull, NULL, NULL); /* never returns */
-  return 0;
-#endif
-} /* clock */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="freebuffers">-</a>
-
-  qh_freebuffers()
-    free up global memory buffers
-
-  notes:
-    must match qh_initbuffers()
-*/
-void qh_freebuffers (void) {
-
-  trace5((qh ferr, "qh_freebuffers: freeing up global memory buffers\n"));
-  /* allocated by qh_initqhull_buffers */
-  qh_memfree (qh NEARzero, qh hull_dim * sizeof(realT));
-  qh_memfree (qh lower_threshold, (qh input_dim+1) * sizeof(realT));
-  qh_memfree (qh upper_threshold, (qh input_dim+1) * sizeof(realT));
-  qh_memfree (qh lower_bound, (qh input_dim+1) * sizeof(realT));
-  qh_memfree (qh upper_bound, (qh input_dim+1) * sizeof(realT));
-  qh_memfree (qh gm_matrix, (qh hull_dim+1) * qh hull_dim * sizeof(coordT));
-  qh_memfree (qh gm_row, (qh hull_dim+1) * sizeof(coordT *));
-  qh NEARzero= qh lower_threshold= qh upper_threshold= NULL;
-  qh lower_bound= qh upper_bound= NULL;
-  qh gm_matrix= NULL;
-  qh gm_row= NULL;
-  qh_setfree (&qh other_points);
-  qh_setfree (&qh del_vertices);
-  qh_setfree (&qh coplanarset);
-  if (qh line)                /* allocated by qh_readinput, freed if no error */
-    free (qh line);
-  if (qh half_space)
-    free (qh half_space);
-  if (qh temp_malloc)
-    free (qh temp_malloc);
-  if (qh feasible_point)      /* allocated by qh_readfeasible */
-    free (qh feasible_point);
-  if (qh feasible_string)     /* allocated by qh_initflags */
-    free (qh feasible_string);
-  qh line= qh feasible_string= NULL;
-  qh half_space= qh feasible_point= qh temp_malloc= NULL;
-  /* usually allocated by qh_readinput */
-  if (qh first_point && qh POINTSmalloc) {
-    free(qh first_point);
-    qh first_point= NULL;
-  }
-  if (qh input_points && qh input_malloc) { /* set by qh_joggleinput */
-    free (qh input_points);
-    qh input_points= NULL;
-  }
-  trace5((qh ferr, "qh_freebuffers: finished\n"));
-} /* freebuffers */
-
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="freebuild">-</a>
-
-  qh_freebuild( allmem )
-    free global memory used by qh_initbuild and qh_buildhull
-    if !allmem,
-      does not free short memory (freed by qh_memfreeshort)
-
-  design:
-    free centrums
-    free each vertex
-    mark unattached ridges
-    for each facet
-      free ridges
-      free outside set, coplanar set, neighbor set, ridge set, vertex set
-      free facet
-    free hash table
-    free interior point
-    free merge set
-    free temporary sets
-*/
-void qh_freebuild (boolT allmem) {
-  facetT *facet;
-  vertexT *vertex;
-  ridgeT *ridge, **ridgep;
-  mergeT *merge, **mergep;
-
-  trace1((qh ferr, "qh_freebuild: free memory from qh_inithull and qh_buildhull\n"));
-  if (qh del_vertices)
-    qh_settruncate (qh del_vertices, 0);
-  if (allmem) {
-    qh_clearcenters (qh_ASnone);
-    while ((vertex= qh vertex_list)) {
-      if (vertex->next)
-        qh_delvertex (vertex);
-      else {
-        qh_memfree (vertex, sizeof(vertexT));
-        qh newvertex_list= qh vertex_list= NULL;
-      }
-    }
-  }else if (qh VERTEXneighbors) {
-    FORALLvertices
-      qh_setfreelong (&(vertex->neighbors));
-  }
-  qh VERTEXneighbors= False;
-  qh GOODclosest= NULL;
-  if (allmem) {
-    FORALLfacets {
-      FOREACHridge_(facet->ridges)
-        ridge->seen= False;
-    }
-    FORALLfacets {
-      if (facet->visible) {
-	FOREACHridge_(facet->ridges) {
-	  if (!otherfacet_(ridge, facet)->visible)
-	    ridge->seen= True;  /* an unattached ridge */
-	}
-      }
-    }
-    while ((facet= qh facet_list)) {
-      FOREACHridge_(facet->ridges) {
-        if (ridge->seen) {
-          qh_setfree(&(ridge->vertices));
-          qh_memfree(ridge, sizeof(ridgeT));
-        }else
-          ridge->seen= True;
-      }
-      qh_setfree (&(facet->outsideset));
-      qh_setfree (&(facet->coplanarset));
-      qh_setfree (&(facet->neighbors));
-      qh_setfree (&(facet->ridges));
-      qh_setfree (&(facet->vertices));
-      if (facet->next)
-        qh_delfacet (facet);
-      else {
-        qh_memfree (facet, sizeof(facetT));
-        qh visible_list= qh newfacet_list= qh facet_list= NULL;
-      }
-    }
-  }else {
-    FORALLfacets {
-      qh_setfreelong (&(facet->outsideset));
-      qh_setfreelong (&(facet->coplanarset));
-      if (!facet->simplicial) {
-        qh_setfreelong (&(facet->neighbors));
-        qh_setfreelong (&(facet->ridges));
-        qh_setfreelong (&(facet->vertices));
-      }
-    }
-  }
-  qh_setfree (&(qh hash_table));
-  qh_memfree (qh interior_point, qh normal_size);
-  qh interior_point= NULL;
-  FOREACHmerge_(qh facet_mergeset)  /* usually empty */
-    qh_memfree (merge, sizeof(mergeT));
-  qh facet_mergeset= NULL;  /* temp set */
-  qh degen_mergeset= NULL;  /* temp set */
-  qh_settempfree_all();
-} /* freebuild */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="freeqhull">-</a>
-
-  qh_freeqhull( allmem )
-    free global memory
-    if !allmem,
-      does not free short memory (freed by qh_memfreeshort)
-
-  notes:
-    sets qh.NOerrexit in case caller forgets to
-
-  design:
-    free global and temporary memory from qh_initbuild and qh_buildhull
-    free buffers
-    free statistics
-*/
-void qh_freeqhull (boolT allmem) {
-
-  trace1((qh ferr, "qh_freeqhull: free global memory\n"));
-  qh NOerrexit= True;  /* no more setjmp since called at exit */
-  qh_freebuild (allmem);
-  qh_freebuffers();
-  qh_freestatistics();
-#if qh_QHpointer
-  free (qh_qh);
-  qh_qh= NULL;
-#else
-  memset((char *)&qh_qh, 0, sizeof(qhT));
-  qh NOerrexit= True;
-#endif
-} /* freeqhull */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="init_A">-</a>
-
-  qh_init_A( infile, outfile, errfile, argc, argv )
-    initialize memory and stdio files
-    convert input options to option string (qh.qhull_command)
-
-  notes:
-    infile may be NULL if qh_readpoints() is not called
-
-    errfile should always be defined.  It is used for reporting
-    errors.  outfile is used for output and format options.
-
-    argc/argv may be 0/NULL
-
-    called before error handling initialized
-    qh_errexit() may not be used
-*/
-void qh_init_A (FILE *infile, FILE *outfile, FILE *errfile, int argc, char *argv[]) {
-  qh_meminit (errfile);
-  qh_initqhull_start (infile, outfile, errfile);
-  qh_init_qhull_command (argc, argv);
-} /* init_A */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="init_B">-</a>
-
-  qh_init_B( points, numpoints, dim, ismalloc )
-    initialize globals for points array
-
-    points has numpoints dim-dimensional points
-      points[0] is the first coordinate of the first point
-      points[1] is the second coordinate of the first point
-      points[dim] is the first coordinate of the second point
-
-    ismalloc=True
-      Qhull will call free(points) on exit or input transformation
-    ismalloc=False
-      Qhull will allocate a new point array if needed for input transformation
-
-    qh.qhull_command
-      is the option string.
-      It is defined by qh_init_B(), qh_qhull_command(), or qh_initflags
-
-  returns:
-    if qh.PROJECTinput or (qh.DELAUNAY and qh.PROJECTdelaunay)
-      projects the input to a new point array
-
-        if qh.DELAUNAY,
-          qh.hull_dim is increased by one
-        if qh.ATinfinity,
-          qh_projectinput adds point-at-infinity for Delaunay tri.
-
-    if qh.SCALEinput
-      changes the upper and lower bounds of the input, see qh_scaleinput()
-
-    if qh.ROTATEinput
-      rotates the input by a random rotation, see qh_rotateinput()
-      if qh.DELAUNAY
-        rotates about the last coordinate
-
-  notes:
-    called after points are defined
-    qh_errexit() may be used
-*/
-void qh_init_B (coordT *points, int numpoints, int dim, boolT ismalloc) {
-  qh_initqhull_globals (points, numpoints, dim, ismalloc);
-  if (qhmem.LASTsize == 0)
-    qh_initqhull_mem();
-  /* mem.c and qset.c are initialized */
-  qh_initqhull_buffers();
-  qh_initthresholds (qh qhull_command);
-  if (qh PROJECTinput || (qh DELAUNAY && qh PROJECTdelaunay))
-    qh_projectinput();
-  if (qh SCALEinput)
-    qh_scaleinput();
-  if (qh ROTATErandom >= 0) {
-    qh_randommatrix (qh gm_matrix, qh hull_dim, qh gm_row);
-    if (qh DELAUNAY) {
-      int k, lastk= qh hull_dim-1;
-      for (k= 0; k < lastk; k++) {
-        qh gm_row[k][lastk]= 0.0;
-        qh gm_row[lastk][k]= 0.0;
-      }
-      qh gm_row[lastk][lastk]= 1.0;
-    }
-    qh_gram_schmidt (qh hull_dim, qh gm_row);
-    qh_rotateinput (qh gm_row);
-  }
-} /* init_B */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="init_qhull_command">-</a>
-
-  qh_init_qhull_command( argc, argv )
-    build qh.qhull_command from argc/argv
-
-  returns:
-    a space-deliminated string of options (just as typed)
-
-  notes:
-    makes option string easy to input and output
-
-    argc/argv may be 0/NULL
-*/
-void qh_init_qhull_command(int argc, char *argv[]) {
-  int i;
-  char *s;
-
-  if (argc) {
-    if ((s= strrchr( argv[0], '\\'))) /* Borland gives full path */
-      strcpy (qh qhull_command, s+1);
-    else
-      strcpy (qh qhull_command, argv[0]);
-    if ((s= strstr (qh qhull_command, ".EXE"))
-    ||  (s= strstr (qh qhull_command, ".exe")))
-      *s= '\0';
-  }
-  for (i=1; i < argc; i++) {
-    if (strlen (qh qhull_command) + strlen(argv[i]) + 1 < sizeof(qh qhull_command)) {
-      strcat (qh qhull_command, " ");
-      strcat (qh qhull_command, argv[i]);
-    }else {
-      fprintf (qh ferr, "qhull input error: more than %d characters in command line\n",
-        (int)sizeof(qh qhull_command));
-      exit (1);  /* can not use qh_errexit */
-    }
-  }
-} /* init_qhull_command */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="initflags">-</a>
-
-  qh_initflags( commandStr )
-    set flags and initialized constants from commandStr
-
-  returns:
-    sets qh.qhull_command to command if needed
-
-  notes:
-    ignores first word (e.g., "qhull d")
-    use qh_strtol/strtod since strtol/strtod may or may not skip trailing spaces
-
-  see:
-    qh_initthresholds() continues processing of 'Pdn' and 'PDn'
-    'prompt' in unix.c for documentation
-
-  design:
-    for each space-deliminated option group
-      if top-level option
-        check syntax
-        append approriate option to option string
-        set appropriate global variable or append printFormat to print options
-      else
-        for each sub-option
-          check syntax
-          append approriate option to option string
-          set appropriate global variable or append printFormat to print options
-
-
-*/
-void qh_initflags(char *command) {
-  int k, i, lastproject;
-  char *s= command, *t, *prev_s, *start, key;
-  boolT isgeom= False, wasproject;
-  realT r;
-
-  if (command != &qh qhull_command[0]) {
-    *qh qhull_command= '\0';
-    strncat( qh qhull_command, command, sizeof( qh qhull_command));
-  }
-  while (*s && !isspace(*s))  /* skip program name */
-    s++;
-  while (*s) {
-    while (*s && isspace(*s))
-      s++;
-    if (*s == '-')
-      s++;
-    if (!*s)
-      break;
-    prev_s= s;
-    switch (*s++) {
-    case 'd':
-      qh_option ("delaunay", NULL, NULL);
-      qh DELAUNAY= True;
-      break;
-    case 'f':
-      qh_option ("facets", NULL, NULL);
-      qh_appendprint (qh_PRINTfacets);
-      break;
-    case 'i':
-      qh_option ("incidence", NULL, NULL);
-      qh_appendprint (qh_PRINTincidences);
-      break;
-    case 'm':
-      qh_option ("mathematica", NULL, NULL);
-      qh_appendprint (qh_PRINTmathematica);
-      break;
-    case 'n':
-      qh_option ("normals", NULL, NULL);
-      qh_appendprint (qh_PRINTnormals);
-      break;
-    case 'o':
-      qh_option ("offFile", NULL, NULL);
-      qh_appendprint (qh_PRINToff);
-      break;
-    case 'p':
-      qh_option ("points", NULL, NULL);
-      qh_appendprint (qh_PRINTpoints);
-      break;
-    case 's':
-      qh_option ("summary", NULL, NULL);
-      qh PRINTsummary= True;
-      break;
-    case 'v':
-      qh_option ("voronoi", NULL, NULL);
-      qh VORONOI= True;
-      qh DELAUNAY= True;
-      break;
-    case 'A':
-      if (!isdigit(*s) && *s != '.' && *s != '-')
-	fprintf(qh ferr, "qhull warning: no maximum cosine angle given for option 'An'.  Ignored.\n");
-      else {
-	if (*s == '-') {
-	  qh premerge_cos= -qh_strtod (s, &s);
-          qh_option ("Angle-premerge-", NULL, &qh premerge_cos);
-	  qh PREmerge= True;
-	}else {
-	  qh postmerge_cos= qh_strtod (s, &s);
-          qh_option ("Angle-postmerge", NULL, &qh postmerge_cos);
-	  qh POSTmerge= True;
-	}
-	qh MERGING= True;
-      }
-      break;
-    case 'C':
-      if (!isdigit(*s) && *s != '.' && *s != '-')
-	fprintf(qh ferr, "qhull warning: no centrum radius given for option 'Cn'.  Ignored.\n");
-      else {
-	if (*s == '-') {
-	  qh premerge_centrum= -qh_strtod (s, &s);
-          qh_option ("Centrum-premerge-", NULL, &qh premerge_centrum);
-	  qh PREmerge= True;
-	}else {
-	  qh postmerge_centrum= qh_strtod (s, &s);
-          qh_option ("Centrum-postmerge", NULL, &qh postmerge_centrum);
-	  qh POSTmerge= True;
-	}
-	qh MERGING= True;
-      }
-      break;
-    case 'E':
-      if (*s == '-')
-	fprintf(qh ferr, "qhull warning: negative maximum roundoff given for option 'An'.  Ignored.\n");
-      else if (!isdigit(*s))
-	fprintf(qh ferr, "qhull warning: no maximum roundoff given for option 'En'.  Ignored.\n");
-      else {
-	qh DISTround= qh_strtod (s, &s);
-        qh_option ("Distance-roundoff", NULL, &qh DISTround);
-	qh SETroundoff= True;
-      }
-      break;
-    case 'H':
-      start= s;
-      qh HALFspace= True;
-      qh_strtod (s, &t);
-      while (t > s)  {
-        if (*t && !isspace (*t)) {
-	  if (*t == ',')
-	    t++;
-	  else
-	    fprintf (qh ferr, "qhull warning: origin for Halfspace intersection should be 'Hn,n,n,...'\n");
-	}
-        s= t;
-	qh_strtod (s, &t);
-      }
-      if (start < t) {
-        if (!(qh feasible_string= (char*)calloc (t-start+1, 1))) {
-          fprintf(qh ferr, "qhull error: insufficient memory for 'Hn,n,n'\n");
-          qh_errexit(qh_ERRmem, NULL, NULL);
-        }
-        strncpy (qh feasible_string, start, t-start);
-        qh_option ("Halfspace-about", NULL, NULL);
-        qh_option (qh feasible_string, NULL, NULL);
-      }else
-        qh_option ("Halfspace", NULL, NULL);
-      break;
-    case 'R':
-      if (!isdigit(*s))
-	fprintf(qh ferr, "qhull warning: missing random perturbation for option 'Rn'.  Ignored\n");
-      else {
-	qh RANDOMfactor= qh_strtod (s, &s);
-        qh_option ("Random_perturb", NULL, &qh RANDOMfactor);
-        qh RANDOMdist= True;
-      }
-      break;
-    case 'V':
-      if (!isdigit(*s) && *s != '-')
-	fprintf(qh ferr, "qhull warning: missing visible distance for option 'Vn'.  Ignored\n");
-      else {
-	qh MINvisible= qh_strtod (s, &s);
-        qh_option ("Visible", NULL, &qh MINvisible);
-      }
-      break;
-    case 'U':
-      if (!isdigit(*s) && *s != '-')
-	fprintf(qh ferr, "qhull warning: missing coplanar distance for option 'Un'.  Ignored\n");
-      else {
-	qh MAXcoplanar= qh_strtod (s, &s);
-        qh_option ("U-coplanar", NULL, &qh MAXcoplanar);
-      }
-      break;
-    case 'W':
-      if (*s == '-')
-	fprintf(qh ferr, "qhull warning: negative outside width for option 'Wn'.  Ignored.\n");
-      else if (!isdigit(*s))
-	fprintf(qh ferr, "qhull warning: missing outside width for option 'Wn'.  Ignored\n");
-      else {
-	qh MINoutside= qh_strtod (s, &s);
-        qh_option ("W-outside", NULL, &qh MINoutside);
-        qh APPROXhull= True;
-      }
-      break;
-    /************  sub menus ***************/
-    case 'F':
-      while (*s && !isspace(*s)) {
-	switch(*s++) {
-	case 'a':
-	  qh_option ("Farea", NULL, NULL);
-	  qh_appendprint (qh_PRINTarea);
-	  qh GETarea= True;
-	  break;
-	case 'A':
-	  qh_option ("FArea-total", NULL, NULL);
-	  qh GETarea= True;
-	  break;
-        case 'c':
-          qh_option ("Fcoplanars", NULL, NULL);
-          qh_appendprint (qh_PRINTcoplanars);
-          break;
-        case 'C':
-          qh_option ("FCentrums", NULL, NULL);
-          qh_appendprint (qh_PRINTcentrums);
-          break;
-	case 'd':
-          qh_option ("Fd-cdd-in", NULL, NULL);
-	  qh CDDinput= True;
-	  break;
-	case 'D':
-          qh_option ("FD-cdd-out", NULL, NULL);
-	  qh CDDoutput= True;
-	  break;
-	case 'F':
-	  qh_option ("FFacets-xridge", NULL, NULL);
-          qh_appendprint (qh_PRINTfacets_xridge);
-	  break;
-        case 'i':
-          qh_option ("Finner", NULL, NULL);
-          qh_appendprint (qh_PRINTinner);
-          break;
-        case 'I':
-          qh_option ("FIDs", NULL, NULL);
-          qh_appendprint (qh_PRINTids);
-          break;
-        case 'm':
-          qh_option ("Fmerges", NULL, NULL);
-          qh_appendprint (qh_PRINTmerges);
-          break;
-        case 'M':
-          qh_option ("FMaple", NULL, NULL);
-          qh_appendprint (qh_PRINTmaple);
-          break;
-        case 'n':
-          qh_option ("Fneighbors", NULL, NULL);
-          qh_appendprint (qh_PRINTneighbors);
-          break;
-        case 'N':
-          qh_option ("FNeighbors-vertex", NULL, NULL);
-          qh_appendprint (qh_PRINTvneighbors);
-          break;
-        case 'o':
-          qh_option ("Fouter", NULL, NULL);
-          qh_appendprint (qh_PRINTouter);
-          break;
-	case 'O':
-	  if (qh PRINToptions1st) {
-	    qh_option ("FOptions", NULL, NULL);
-	    qh_appendprint (qh_PRINToptions);
-	  }else
-	    qh PRINToptions1st= True;
-	  break;
-	case 'p':
-	  qh_option ("Fpoint-intersect", NULL, NULL);
-	  qh_appendprint (qh_PRINTpointintersect);
-	  break;
-	case 'P':
-	  qh_option ("FPoint-nearest", NULL, NULL);
-	  qh_appendprint (qh_PRINTpointnearest);
-	  break;
-	case 'Q':
-	  qh_option ("FQhull", NULL, NULL);
-	  qh_appendprint (qh_PRINTqhull);
-	  break;
-        case 's':
-          qh_option ("Fsummary", NULL, NULL);
-          qh_appendprint (qh_PRINTsummary);
-          break;
-        case 'S':
-          qh_option ("FSize", NULL, NULL);
-          qh_appendprint (qh_PRINTsize);
-          qh GETarea= True;
-          break;
-        case 't':
-          qh_option ("Ftriangles", NULL, NULL);
-          qh_appendprint (qh_PRINTtriangles);
-          break;
-        case 'v':
-          /* option set in qh_initqhull_globals */
-          qh_appendprint (qh_PRINTvertices);
-          break;
-        case 'V':
-          qh_option ("FVertex-average", NULL, NULL);
-          qh_appendprint (qh_PRINTaverage);
-          break;
-	case 'x':
-	  qh_option ("Fxtremes", NULL, NULL);
-	  qh_appendprint (qh_PRINTextremes);
-	  break;
-	default:
-	  s--;
-	  fprintf (qh ferr, "qhull warning: unknown 'F' output option %c, rest ignored\n", (int)s[0]);
-	  while (*++s && !isspace(*s));
-	  break;
-	}
-      }
-      break;
-    case 'G':
-      isgeom= True;
-      qh_appendprint (qh_PRINTgeom);
-      while (*s && !isspace(*s)) {
-	switch(*s++) {
-        case 'a':
-          qh_option ("Gall-points", NULL, NULL);
-          qh PRINTdots= True;
-          break;
-        case 'c':
-          qh_option ("Gcentrums", NULL, NULL);
-          qh PRINTcentrums= True;
-          break;
-	case 'h':
-          qh_option ("Gintersections", NULL, NULL);
-	  qh DOintersections= True;
-	  break;
-	case 'i':
-          qh_option ("Ginner", NULL, NULL);
-	  qh PRINTinner= True;
-	  break;
-	case 'n':
-          qh_option ("Gno-planes", NULL, NULL);
-	  qh PRINTnoplanes= True;
-	  break;
-	case 'o':
-          qh_option ("Gouter", NULL, NULL);
-	  qh PRINTouter= True;
-	  break;
-	case 'p':
-          qh_option ("Gpoints", NULL, NULL);
-	  qh PRINTcoplanar= True;
-	  break;
-	case 'r':
-          qh_option ("Gridges", NULL, NULL);
-	  qh PRINTridges= True;
-	  break;
-	case 't':
-          qh_option ("Gtransparent", NULL, NULL);
-	  qh PRINTtransparent= True;
-	  break;
-	case 'v':
-          qh_option ("Gvertices", NULL, NULL);
-	  qh PRINTspheres= True;
-	  break;
-	case 'D':
-	  if (!isdigit (*s))
-	    fprintf (qh ferr, "qhull input error: missing dimension for option 'GDn'\n");
-	  else {
-	    if (qh DROPdim >= 0)
-	      fprintf (qh ferr, "qhull warning: can only drop one dimension.  Previous 'GD%d' ignored\n",
-	           qh DROPdim);
-  	    qh DROPdim= qh_strtol (s, &s);
-            qh_option ("GDrop-dim", &qh DROPdim, NULL);
-          }
-	  break;
-	default:
-	  s--;
-	  fprintf (qh ferr, "qhull warning: unknown 'G' print option %c, rest ignored\n", (int)s[0]);
-	  while (*++s && !isspace(*s));
-	  break;
-	}
-      }
-      break;
-    case 'P':
-      while (*s && !isspace(*s)) {
-	switch(*s++) {
-	case 'd': case 'D':  /* see qh_initthresholds() */
-	  key= s[-1];
-	  i= qh_strtol (s, &s);
-	  r= 0;
-	  if (*s == ':') {
-	    s++;
-	    r= qh_strtod (s, &s);
-	  }
-	  if (key == 'd')
-  	    qh_option ("Pdrop-facets-dim-less", &i, &r);
-  	  else
-  	    qh_option ("PDrop-facets-dim-more", &i, &r);
-	  break;
-        case 'g':
-          qh_option ("Pgood-facets", NULL, NULL);
-          qh PRINTgood= True;
-          break;
-        case 'G':
-          qh_option ("PGood-facet-neighbors", NULL, NULL);
-          qh PRINTneighbors= True;
-          break;
-        case 'o':
-          qh_option ("Poutput-forced", NULL, NULL);
-          qh FORCEoutput= True;
-          break;
-        case 'p':
-          qh_option ("Pprecision-ignore", NULL, NULL);
-          qh PRINTprecision= False;
-          break;
-	case 'A':
-	  if (!isdigit (*s))
-	    fprintf (qh ferr, "qhull input error: missing facet count for keep area option 'PAn'\n");
-	  else {
-  	    qh KEEParea= qh_strtol (s, &s);
-            qh_option ("PArea-keep", &qh KEEParea, NULL);
-            qh GETarea= True;
-          }
-	  break;
-	case 'F':
-	  if (!isdigit (*s))
-	    fprintf (qh ferr, "qhull input error: missing facet area for option 'PFn'\n");
-	  else {
-  	    qh KEEPminArea= qh_strtod (s, &s);
-            qh_option ("PFacet-area-keep", NULL, &qh KEEPminArea);
-            qh GETarea= True;
-          }
-	  break;
-	case 'M':
-	  if (!isdigit (*s))
-	    fprintf (qh ferr, "qhull input error: missing merge count for option 'PMn'\n");
-	  else {
-  	    qh KEEPmerge= qh_strtol (s, &s);
-            qh_option ("PMerge-keep", &qh KEEPmerge, NULL);
-          }
-	  break;
-	default:
-	  s--;
-	  fprintf (qh ferr, "qhull warning: unknown 'P' print option %c, rest ignored\n", (int)s[0]);
-	  while (*++s && !isspace(*s));
-	  break;
-	}
-      }
-      break;
-    case 'Q':
-      lastproject= -1;
-      while (*s && !isspace(*s)) {
-	switch(*s++) {
-	case 'b': case 'B':  /* handled by qh_initthresholds */
-	  key= s[-1];
-	  if (key == 'b' && *s == 'B') {
-	    s++;
-	    r= qh_DEFAULTbox;
-	    qh SCALEinput= True;
-	    qh_option ("QbBound-unit-box", NULL, &r);
-	    break;
-	  }
-	  if (key == 'b' && *s == 'b') {
-	    s++;
-	    qh SCALElast= True;
-	    qh_option ("Qbbound-last", NULL, NULL);
-	    break;
-	  }
-	  k= qh_strtol (s, &s);
-	  r= 0.0;
-	  wasproject= False;
-	  if (*s == ':') {
-	    s++;
-	    if ((r= qh_strtod(s, &s)) == 0.0) {
- 	      t= s;            /* need true dimension for memory allocation */
-	      while (*t && !isspace(*t)) {
-	        if (toupper(*t++) == 'B'
-	         && k == qh_strtol (t, &t)
-	         && *t++ == ':'
-	         && qh_strtod(t, &t) == 0.0) {
-	          qh PROJECTinput++;
-	          trace2((qh ferr, "qh_initflags: project dimension %d\n", k));
-	          qh_option ("Qb-project-dim", &k, NULL);
-		  wasproject= True;
-	          lastproject= k;
-	          break;
-		}
-	      }
-	    }
-  	  }
-	  if (!wasproject) {
-	    if (lastproject == k && r == 0.0)
-	      lastproject= -1;  /* doesn't catch all possible sequences */
-	    else if (key == 'b') {
-	      qh SCALEinput= True;
-	      if (r == 0.0)
-		r= -qh_DEFAULTbox;
-	      qh_option ("Qbound-dim-low", &k, &r);
-	    }else {
-	      qh SCALEinput= True;
-	      if (r == 0.0)
-		r= qh_DEFAULTbox;
-	      qh_option ("QBound-dim-high", &k, &r);
-	    }
-	  }
-	  break;
-	case 'c':
-	  qh_option ("Qcoplanar-keep", NULL, NULL);
-	  qh KEEPcoplanar= True;
-	  break;
-	case 'f':
-	  qh_option ("Qfurthest-outside", NULL, NULL);
-	  qh BESToutside= True;
-	  break;
-	case 'g':
-	  qh_option ("Qgood-facets-only", NULL, NULL);
-	  qh ONLYgood= True;
-	  break;
-	case 'i':
-	  qh_option ("Qinterior-keep", NULL, NULL);
-	  qh KEEPinside= True;
-	  break;
-	case 'm':
-	  qh_option ("Qmax-outside-only", NULL, NULL);
-	  qh ONLYmax= True;
-	  break;
-	case 'r':
-	  qh_option ("Qrandom-outside", NULL, NULL);
-	  qh RANDOMoutside= True;
-	  break;
-	case 's':
-	  qh_option ("Qsearch-initial-simplex", NULL, NULL);
-	  qh ALLpoints= True;
-	  break;
-	case 't':
-	  qh_option ("Qtriangulate", NULL, NULL);
-	  qh TRIangulate= True;
-	  break;
-	case 'T':
-	  qh_option ("QTestPoints", NULL, NULL);
-	  if (!isdigit (*s))
-	    fprintf (qh ferr, "qhull input error: missing number of test points for option 'QTn'\n");
-	  else {
-  	    qh TESTpoints= qh_strtol (s, &s);
-            qh_option ("QTestPoints", &qh TESTpoints, NULL);
-          }
-	  break;
-	case 'u':
-	  qh_option ("QupperDelaunay", NULL, NULL);
-	  qh UPPERdelaunay= True;
-	  break;
-	case 'v':
-	  qh_option ("Qvertex-neighbors-convex", NULL, NULL);
-	  qh TESTvneighbors= True;
-	  break;
-	case 'x':
-	  qh_option ("Qxact-merge", NULL, NULL);
-	  qh MERGEexact= True;
-	  break;
-	case 'z':
-	  qh_option ("Qz-infinity-point", NULL, NULL);
-	  qh ATinfinity= True;
-	  break;
-	case '0':
-	  qh_option ("Q0-no-premerge", NULL, NULL);
-	  qh NOpremerge= True;
-	  break;
-	case '1':
-	  if (!isdigit(*s)) {
-	    qh_option ("Q1-no-angle-sort", NULL, NULL);
-	    qh ANGLEmerge= False;
-	    break; 
-	  }
-	  switch(*s++) {
-  	  case '0':
-	    qh_option ("Q10-no-narrow", NULL, NULL);
-	    qh NOnarrow= True;
-	    break; 
-  	  case '1':
-	    qh_option ("Q11-trinormals Qtriangulate", NULL, NULL);
-	    qh TRInormals= True;
-	    qh TRIangulate= True;
-	    break; 
-	  default:
-	    s--;
-	    fprintf (qh ferr, "qhull warning: unknown 'Q' qhull option 1%c, rest ignored\n", (int)s[0]);
-	    while (*++s && !isspace(*s));
-	    break;
-	  }
-	  break;
-	case '2':
-	  qh_option ("Q2-no-merge-independent", NULL, NULL);
-	  qh MERGEindependent= False;
-	  goto LABELcheckdigit;
-	  break; /* no warnings */
-	case '3':
-	  qh_option ("Q3-no-merge-vertices", NULL, NULL);
-	  qh MERGEvertices= False;
-	LABELcheckdigit:
-	  if (isdigit(*s))
-	    fprintf (qh ferr, "qhull warning: can not follow '1', '2', or '3' with a digit.  '%c' skipped.\n",
-	             *s++);
-	  break;
-	case '4':
-	  qh_option ("Q4-avoid-old-into-new", NULL, NULL);
-	  qh AVOIDold= True;
-	  break;
-	case '5':
-	  qh_option ("Q5-no-check-outer", NULL, NULL);
-	  qh SKIPcheckmax= True;
-	  break;
-	case '6':
-	  qh_option ("Q6-no-concave-merge", NULL, NULL);
-	  qh SKIPconvex= True;
-	  break;
-	case '7':
-	  qh_option ("Q7-no-breadth-first", NULL, NULL);
-	  qh VIRTUALmemory= True;
-	  break;
-	case '8':
-	  qh_option ("Q8-no-near-inside", NULL, NULL);
-	  qh NOnearinside= True;
-	  break;
-	case '9':
-	  qh_option ("Q9-pick-furthest", NULL, NULL);
-	  qh PICKfurthest= True;
-	  break;
-	case 'G':
-	  i= qh_strtol (s, &t);
-	  if (qh GOODpoint)
-	    fprintf (qh ferr, "qhull warning: good point already defined for option 'QGn'.  Ignored\n");
-          else if (s == t)
-	    fprintf (qh ferr, "qhull warning: missing good point id for option 'QGn'.  Ignored\n");
-	  else if (i < 0 || *s == '-') {
- 	    qh GOODpoint= i-1;
-  	    qh_option ("QGood-if-dont-see-point", &i, NULL);
-	  }else {
- 	    qh GOODpoint= i+1;
-  	    qh_option ("QGood-if-see-point", &i, NULL);
-  	  }
- 	  s= t;
-	  break;
-	case 'J':
-          if (!isdigit(*s) && *s != '-')
-   	    qh JOGGLEmax= 0.0;
-	  else {
- 	    qh JOGGLEmax= (realT) qh_strtod (s, &s);
-            qh_option ("QJoggle", NULL, &qh JOGGLEmax);
-	  }
-	  break;
-	case 'R':
-          if (!isdigit(*s) && *s != '-')
-	    fprintf (qh ferr, "qhull warning: missing random seed for option 'QRn'.  Ignored\n");
-	  else {
- 	    qh ROTATErandom= i= qh_strtol(s, &s);
-   	    if (i > 0)
-   	      qh_option ("QRotate-id", &i, NULL );
-	    else if (i < -1)
-   	      qh_option ("QRandom-seed", &i, NULL );
-          }
-	  break;
-	case 'V':
-	  i= qh_strtol (s, &t);
-	  if (qh GOODvertex)
-	    fprintf (qh ferr, "qhull warning: good vertex already defined for option 'QVn'.  Ignored\n");
-          else if (s == t)
-	    fprintf (qh ferr, "qhull warning: no good point id given for option 'QVn'.  Ignored\n");
-	  else if (i < 0) {
- 	    qh GOODvertex= i - 1;
- 	    qh_option ("QV-good-facets-not-point", &i, NULL);
-	  }else {
-  	    qh_option ("QV-good-facets-point", &i, NULL);
-	    qh GOODvertex= i + 1;
-          }
- 	  s= t;
-	  break;
-	default:
-	  s--;
-	  fprintf (qh ferr, "qhull warning: unknown 'Q' qhull option %c, rest ignored\n", (int)s[0]);
-	  while (*++s && !isspace(*s));
-	  break;
-	}
-      }
-      break;
-    case 'T':
-      while (*s && !isspace(*s)) {
-	if (isdigit(*s) || *s == '-')
-	  qh IStracing= qh_strtol(s, &s);
-	else switch(*s++) {
-	case 'c':
-          qh_option ("Tcheck-frequently", NULL, NULL);
-	  qh CHECKfrequently= True;
-	  break;
-	case 's':
-          qh_option ("Tstatistics", NULL, NULL);
-	  qh PRINTstatistics= True;
-	  break;
-	case 'v':
-          qh_option ("Tverify", NULL, NULL);
-	  qh VERIFYoutput= True;
-	  break;
-	case 'z':
-	  if (!qh fout)
-	    fprintf (qh ferr, "qhull warning: output file undefined (stdout).  Option 'Tz' ignored.\n");
-	  else {
-	    qh_option ("Tz-stdout", NULL, NULL);
-  	    qh ferr= qh fout;
-  	    qhmem.ferr= qh fout;
-	  }
-	  break;
-	case 'C':
-	  if (!isdigit(*s))
-	    fprintf (qh ferr, "qhull warning: missing point id for cone for trace option 'TCn'.  Ignored\n");
-	  else {
-	    i= qh_strtol (s, &s);
-	    qh_option ("TCone-stop", &i, NULL);
-	    qh STOPcone= i + 1;
-          }
-	  break;
-	case 'F':
-	  if (!isdigit(*s))
-	    fprintf (qh ferr, "qhull warning: missing frequency count for trace option 'TFn'.  Ignored\n");
-	  else {
-	    qh REPORTfreq= qh_strtol (s, &s);
-            qh_option ("TFacet-log", &qh REPORTfreq, NULL);
-	    qh REPORTfreq2= qh REPORTfreq/2;  /* for tracemerging() */
-	  }
-	  break;
-	case 'I':
-	  if (s[0] != ' ' || s[1] == '\"' || s[1] == '\'' ||isspace (s[1])) {
-	    s++;
-	    fprintf (qh ferr, "qhull warning: option 'TI' mistyped.\nUse 'TI', one space, file name, and space or end-of-line.\nDo not use quotes.  Option 'FI' ignored.\n");
-	  }else {  /* not a procedure because of qh_option (filename, NULL, NULL); */
-	    char filename[500], *t= filename;
-
-	    s++;
-	    while (*s) {
-	      if (t - filename >= sizeof (filename)-2) {
-		fprintf (qh ferr, "qhull error: filename for 'TI' too long.\n");
-		qh_errexit (qh_ERRinput, NULL, NULL);
-	      }
-	      if (isspace (*s))
-		break;
-	      *(t++)= *s++;
-	    }
-	    *t= '\0';
-	    if (!freopen (filename, "r", stdin)) {
-	      fprintf (qh ferr, "qhull error: could not open file \"%s\".", filename);
-	      qh_errexit (qh_ERRinput, NULL, NULL);
-	    }else {
-	      qh_option ("TInput-file", NULL, NULL);
-	      qh_option (filename, NULL, NULL);
-	    }
-	  }
-	  break;
-	case 'O':
-	  if (s[0] != ' ' || s[1] == '\"' || isspace (s[1])) {
-	    s++;
-	    fprintf (qh ferr, "qhull warning: option 'TO' mistyped.\nUse 'TO', one space, file name, and space or end-of-line.\nThe file name may be enclosed in single quotes.\nDo not use double quotes.  Option 'FO' ignored.\n");
-	  }else {  /* not a procedure because of qh_option (filename, NULL, NULL); */
-	    char filename[500], *t= filename;
-	    boolT isquote= False;
-
-	    s++;
-	    if (*s == '\'') {
-	      isquote= True;
-	      s++;
-	    }
-	    while (*s) {
-	      if (t - filename >= sizeof (filename)-2) {
-		fprintf (qh ferr, "qhull error: filename for 'TO' too long.\n");
-		qh_errexit (qh_ERRinput, NULL, NULL);
-	      }
-	      if (isquote) {
-		if (*s == '\'') {
-		  s++;
-		  isquote= False;
-		  break;
-		}
-	      }else if (isspace (*s))
-		break;
-	      *(t++)= *s++;
-	    }
-	    *t= '\0';
-	    if (isquote)
-	      fprintf (qh ferr, "qhull error: missing end quote for option 'TO'.  Rest of line ignored.\n");
-	    else if (!freopen (filename, "w", stdout)) {
-	      fprintf (qh ferr, "qhull error: could not open file \"%s\".", filename);
-	      qh_errexit (qh_ERRinput, NULL, NULL);
-	    }else {
-	      qh_option ("TOutput-file", NULL, NULL);
-	      qh_option (filename, NULL, NULL);
-	    }
-	  }
-	  break;
-	case 'P':
-	  if (!isdigit(*s))
-	    fprintf (qh ferr, "qhull warning: missing point id for trace option 'TPn'.  Ignored\n");
-	  else {
-	    qh TRACEpoint= qh_strtol (s, &s);
-            qh_option ("Trace-point", &qh TRACEpoint, NULL);
-          }
-	  break;
-	case 'M':
-	  if (!isdigit(*s))
-	    fprintf (qh ferr, "qhull warning: missing merge id for trace option 'TMn'.  Ignored\n");
-	  else {
-	    qh TRACEmerge= qh_strtol (s, &s);
-            qh_option ("Trace-merge", &qh TRACEmerge, NULL);
-          }
-	  break;
-	case 'R':
-	  if (!isdigit(*s))
-	    fprintf (qh ferr, "qhull warning: missing rerun count for trace option 'TRn'.  Ignored\n");
-	  else {
-	    qh RERUN= qh_strtol (s, &s);
-            qh_option ("TRerun", &qh RERUN, NULL);
-          }
-	  break;
-	case 'V':
-	  i= qh_strtol (s, &t);
-	  if (s == t)
-	    fprintf (qh ferr, "qhull warning: missing furthest point id for trace option 'TVn'.  Ignored\n");
-	  else if (i < 0) {
-	    qh STOPpoint= i - 1;
-            qh_option ("TV-stop-before-point", &i, NULL);
-	  }else {
-	    qh STOPpoint= i + 1;
-            qh_option ("TV-stop-after-point", &i, NULL);
-          }
-          s= t;
-	  break;
-	case 'W':
-	  if (!isdigit(*s))
-	    fprintf (qh ferr, "qhull warning: missing max width for trace option 'TWn'.  Ignored\n");
-	  else {
- 	    qh TRACEdist= (realT) qh_strtod (s, &s);
-            qh_option ("TWide-trace", NULL, &qh TRACEdist);
-          }
-	  break;
-	default:
-	  s--;
-	  fprintf (qh ferr, "qhull warning: unknown 'T' trace option %c, rest ignored\n", (int)s[0]);
-	  while (*++s && !isspace(*s));
-	  break;
-	}
-      }
-      break;
-    default:
-      fprintf (qh ferr, "qhull warning: unknown flag %c (%x)\n", (int)s[-1],
-	       (int)s[-1]);
-      break;
-    }
-    if (s-1 == prev_s && *s && !isspace(*s)) {
-      fprintf (qh ferr, "qhull warning: missing space after flag %c (%x); reserved for menu. Skipped.\n",
-	       (int)*prev_s, (int)*prev_s);
-      while (*s && !isspace(*s))
-	s++;
-    }
-  }
-  if (isgeom && !qh FORCEoutput && qh PRINTout[1])
-    fprintf (qh ferr, "qhull warning: additional output formats are not compatible with Geomview\n");
-  /* set derived values in qh_initqhull_globals */
-} /* initflags */
-
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="initqhull_buffers">-</a>
-
-  qh_initqhull_buffers()
-    initialize global memory buffers
-
-  notes:
-    must match qh_freebuffers()
-*/
-void qh_initqhull_buffers (void) {
-  int k;
-
-  qh TEMPsize= (qhmem.LASTsize - sizeof (setT))/SETelemsize;
-  if (qh TEMPsize <= 0 || qh TEMPsize > qhmem.LASTsize)
-    qh TEMPsize= 8;  /* e.g., if qh_NOmem */
-  qh other_points= qh_setnew (qh TEMPsize);
-  qh del_vertices= qh_setnew (qh TEMPsize);
-  qh coplanarset= qh_setnew (qh TEMPsize);
-  qh NEARzero= (realT *)qh_memalloc(qh hull_dim * sizeof(realT));
-  qh lower_threshold= (realT *)qh_memalloc((qh input_dim+1) * sizeof(realT));
-  qh upper_threshold= (realT *)qh_memalloc((qh input_dim+1) * sizeof(realT));
-  qh lower_bound= (realT *)qh_memalloc((qh input_dim+1) * sizeof(realT));
-  qh upper_bound= (realT *)qh_memalloc((qh input_dim+1) * sizeof(realT));
-  for(k= qh input_dim+1; k--; ) {
-    qh lower_threshold[k]= -REALmax;
-    qh upper_threshold[k]= REALmax;
-    qh lower_bound[k]= -REALmax;
-    qh upper_bound[k]= REALmax;
-  }
-  qh gm_matrix= (coordT *)qh_memalloc((qh hull_dim+1) * qh hull_dim * sizeof(coordT));
-  qh gm_row= (coordT **)qh_memalloc((qh hull_dim+1) * sizeof(coordT *));
-} /* initqhull_buffers */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="initqhull_globals">-</a>
-
-  qh_initqhull_globals( points, numpoints, dim, ismalloc )
-    initialize globals
-    if ismalloc
-      points were malloc'd and qhull should free at end
-
-  returns:
-    sets qh.first_point, num_points, input_dim, hull_dim and others
-    seeds random number generator (seed=1 if tracing)
-    modifies qh.hull_dim if ((qh.DELAUNAY and qh.PROJECTdelaunay) or qh.PROJECTinput)
-    adjust user flags as needed
-    also checks DIM3 dependencies and constants
-
-  notes:
-    do not use qh_point() since an input transformation may move them elsewhere
-
-  see:
-    qh_initqhull_start() sets default values for non-zero globals
-
-  design:
-    initialize points array from input arguments
-    test for qh.ZEROcentrum
-      (i.e., use opposite vertex instead of cetrum for convexity testing)
-    test for qh.PRINTgood (i.e., only print 'good' facets)
-    initialize qh.CENTERtype, qh.normal_size,
-      qh.center_size, qh.TRACEpoint/level,
-    initialize and test random numbers
-    check for conflicting print output options
-*/
-void qh_initqhull_globals (coordT *points, int numpoints, int dim, boolT ismalloc) {
-  int seed, pointsneeded, extra= 0, i, randi, k;
-  boolT printgeom= False, printmath= False, printcoplanar= False;
-  realT randr;
-  realT factorial;
-
-  time_t timedata;
-
-  trace0((qh ferr, "qh_initqhull_globals: for %s | %s\n", qh rbox_command,
-      qh qhull_command));
-  qh POINTSmalloc= ismalloc;
-  qh first_point= points;
-  qh num_points= numpoints;
-  qh hull_dim= qh input_dim= dim;
-  if (!qh NOpremerge && !qh MERGEexact && !qh PREmerge && qh JOGGLEmax > REALmax/2) {
-    qh MERGING= True;
-    if (qh hull_dim <= 4) {
-      qh PREmerge= True;
-      qh_option ("_pre-merge", NULL, NULL);
-    }else {
-      qh MERGEexact= True;
-      qh_option ("Qxact_merge", NULL, NULL);
-    }
-  }else if (qh MERGEexact) 
-    qh MERGING= True;
-  if (!qh NOpremerge && qh JOGGLEmax > REALmax/2) {
-#ifdef qh_NOmerge
-    qh JOGGLEmax= 0.0;
-#endif
-  }
-  if (qh TRIangulate && qh JOGGLEmax < REALmax/2 && qh PRINTprecision)
-    fprintf(qh ferr, "qhull warning: joggle ('QJ') always produces simplicial output.  Triangulated output ('Qt') does nothing.\n");
-  if (qh JOGGLEmax < REALmax/2 && qh DELAUNAY && !qh SCALEinput && !qh SCALElast) {
-    qh SCALElast= True;
-    qh_option ("Qbbound-last-qj", NULL, NULL);
-  }
-  if (qh MERGING && !qh POSTmerge && qh premerge_cos > REALmax/2
-  && qh premerge_centrum == 0) {
-    qh ZEROcentrum= True;
-    qh ZEROall_ok= True;
-    qh_option ("_zero-centrum", NULL, NULL);
-  }
-  if (qh JOGGLEmax < REALmax/2 && REALepsilon > 2e-8 && qh PRINTprecision)
-    fprintf(qh ferr, "qhull warning: real epsilon, %2.2g, is probably too large for joggle ('QJn')\nRecompile with double precision reals (see user.h).\n",
-          REALepsilon);
-#ifdef qh_NOmerge
-  if (qh MERGING) {
-    fprintf (qh ferr, "qhull input error: merging not installed (qh_NOmerge + 'Qx', 'Cn' or 'An')\n");
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-#endif
-  if (!(qh PRINTgood || qh PRINTneighbors)) {
-    if (qh KEEParea || qh KEEPminArea < REALmax/2 || qh KEEPmerge || qh DELAUNAY
-	|| (!qh ONLYgood && (qh GOODvertex || qh GOODpoint))) {
-      qh PRINTgood= True;
-      qh_option ("Pgood", NULL, NULL);
-    }
-  }
-  if (qh DELAUNAY && qh KEEPcoplanar && !qh KEEPinside) {
-    qh KEEPinside= True;
-    qh_option ("Qinterior-keep", NULL, NULL);
-  }
-  if (qh DELAUNAY && qh HALFspace) {
-    fprintf (qh ferr, "qhull input error: can not use Delaunay ('d') or Voronoi ('v') with halfspace intersection ('H')\n");
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  if (!qh DELAUNAY && (qh UPPERdelaunay || qh ATinfinity)) {
-    fprintf (qh ferr, "qhull input error: use upper-Delaunay ('Qu') or infinity-point ('Qz') with Delaunay ('d') or Voronoi ('v')\n");
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  if (qh UPPERdelaunay && qh ATinfinity) {
-    fprintf (qh ferr, "qhull input error: can not use infinity-point ('Qz') with upper-Delaunay ('Qu')\n");
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  if (qh SCALElast && !qh DELAUNAY && qh PRINTprecision)
-    fprintf (qh ferr, "qhull input warning: option 'Qbb' (scale-last-coordinate) is normally used with 'd' or 'v'\n");
-  qh DOcheckmax= (!qh SKIPcheckmax && qh MERGING );
-  qh KEEPnearinside= (qh DOcheckmax && !(qh KEEPinside && qh KEEPcoplanar) 
-                          && !qh NOnearinside);
-  if (qh MERGING)
-    qh CENTERtype= qh_AScentrum;
-  else if (qh VORONOI)
-    qh CENTERtype= qh_ASvoronoi;
-  if (qh TESTvneighbors && !qh MERGING) {
-    fprintf(qh ferr, "qhull input error: test vertex neighbors ('Qv') needs a merge option\n");
-    qh_errexit (qh_ERRinput, NULL ,NULL);
-  }
-  if (qh PROJECTinput || (qh DELAUNAY && qh PROJECTdelaunay)) {
-    qh hull_dim -= qh PROJECTinput;
-    if (qh DELAUNAY) {
-      qh hull_dim++;
-      extra= 1;
-    }
-  }
-  if (qh hull_dim <= 1) {
-    fprintf(qh ferr, "qhull error: dimension %d must be > 1\n", qh hull_dim);
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  for (k= 2, factorial=1.0; k < qh hull_dim; k++)
-    factorial *= k;
-  qh AREAfactor= 1.0 / factorial;
-  trace2((qh ferr, "qh_initqhull_globals: initialize globals.  dim %d numpoints %d malloc? %d projected %d to hull_dim %d\n",
-	dim, numpoints, ismalloc, qh PROJECTinput, qh hull_dim));
-  qh normal_size= qh hull_dim * sizeof(coordT);
-  qh center_size= qh normal_size - sizeof(coordT);
-  pointsneeded= qh hull_dim+1;
-  if (qh hull_dim > qh_DIMmergeVertex) {
-    qh MERGEvertices= False;
-    qh_option ("Q3-no-merge-vertices-dim-high", NULL, NULL);
-  }
-  if (qh GOODpoint)
-    pointsneeded++;
-#ifdef qh_NOtrace
-  if (qh IStracing) {
-    fprintf (qh ferr, "qhull input error: tracing is not installed (qh_NOtrace in user.h)");
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-#endif
-  if (qh RERUN > 1) {
-    qh TRACElastrun= qh IStracing; /* qh_build_withrestart duplicates next conditional */
-    if (qh IStracing != -1)
-      qh IStracing= 0;
-  }else if (qh TRACEpoint != -1 || qh TRACEdist < REALmax/2 || qh TRACEmerge) {
-    qh TRACElevel= (qh IStracing? qh IStracing : 3);
-    qh IStracing= 0;
-  }
-  if (qh ROTATErandom == 0 || qh ROTATErandom == -1) {
-    seed= time (&timedata);
-    if (qh ROTATErandom  == -1) {
-      seed= -seed;
-      qh_option ("QRandom-seed", &seed, NULL );
-    }else
-      qh_option ("QRotate-random", &seed, NULL);
-    qh ROTATErandom= seed;
-  }
-  seed= qh ROTATErandom;
-  if (seed == INT_MIN)    /* default value */
-    seed= 1;
-  else if (seed < 0)
-    seed= -seed;
-  qh_RANDOMseed_(seed);
-  randr= 0.0;
-  for (i= 1000; i--; ) {
-    randi= qh_RANDOMint;
-    randr += randi;
-    if (randi > qh_RANDOMmax) {
-      fprintf (qh ferr, "\
-qhull configuration error (qh_RANDOMmax in user.h):\n\
-   random integer %d > qh_RANDOMmax (%.8g)\n",
-	       randi, qh_RANDOMmax);
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-  }
-  qh_RANDOMseed_(seed);
-  randr = randr/1000;
-  if (randr < qh_RANDOMmax/10
-  || randr > qh_RANDOMmax * 5)
-    fprintf (qh ferr, "\
-qhull configuration warning (qh_RANDOMmax in user.h):\n\
-   average of 1000 random integers (%.2g) is much different than expected (%.2g).\n\
-   Is qh_RANDOMmax (%.2g) wrong?\n",
-	     randr, qh_RANDOMmax/2.0, qh_RANDOMmax);
-  qh RANDOMa= 2.0 * qh RANDOMfactor/qh_RANDOMmax;
-  qh RANDOMb= 1.0 - qh RANDOMfactor;
-  if (qh_HASHfactor < 1.1) {
-    fprintf(qh ferr, "qhull internal error (qh_initqhull_globals): qh_HASHfactor %d must be at least 1.1.  Qhull uses linear hash probing\n",
-      qh_HASHfactor);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  if (numpoints+extra < pointsneeded) {
-    fprintf(qh ferr,"qhull input error: not enough points (%d) to construct initial simplex (need %d)\n",
-	    numpoints, pointsneeded);
-    qh_errexit(qh_ERRinput, NULL, NULL);
-  }
-  if (qh PRINTtransparent) {
-    if (qh hull_dim != 4 || !qh DELAUNAY || qh VORONOI || qh DROPdim >= 0) {
-      fprintf(qh ferr,"qhull input error: transparent Delaunay ('Gt') needs 3-d Delaunay ('d') w/o 'GDn'\n");
-      qh_errexit(qh_ERRinput, NULL, NULL);
-    }
-    qh DROPdim = 3;
-    qh PRINTridges = True;
-  }
-  for (i= qh_PRINTEND; i--; ) {
-    if (qh PRINTout[i] == qh_PRINTgeom)
-      printgeom= True;
-    else if (qh PRINTout[i] == qh_PRINTmathematica || qh PRINTout[i] == qh_PRINTmaple)
-      printmath= True;
-    else if (qh PRINTout[i] == qh_PRINTcoplanars)
-      printcoplanar= True;
-    else if (qh PRINTout[i] == qh_PRINTpointnearest)
-      printcoplanar= True;
-    else if (qh PRINTout[i] == qh_PRINTpointintersect && !qh HALFspace) {
-      fprintf (qh ferr, "qhull input error: option 'Fp' is only used for \nhalfspace intersection ('Hn,n,n').\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }else if (qh PRINTout[i] == qh_PRINTtriangles && (qh HALFspace || qh VORONOI)) {
-      fprintf (qh ferr, "qhull input error: option 'Ft' is not available for Voronoi vertices or halfspace intersection\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }else if (qh PRINTout[i] == qh_PRINTcentrums && qh VORONOI) {
-      fprintf (qh ferr, "qhull input error: option 'FC' is not available for Voronoi vertices ('v')\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }else if (qh PRINTout[i] == qh_PRINTvertices) {
-      if (qh VORONOI)
-        qh_option ("Fvoronoi", NULL, NULL);
-      else 
-        qh_option ("Fvertices", NULL, NULL);
-    }
-  }
-  if (printcoplanar && qh DELAUNAY && qh JOGGLEmax < REALmax/2) {
-    if (qh PRINTprecision) 
-      fprintf (qh ferr, "qhull input warning: 'QJ' (joggle) will usually prevent coincident input sites for options 'Fc' and 'FP'\n");
-  }
-  if (!qh KEEPcoplanar && !qh KEEPinside && !qh ONLYgood) {
-    if ((qh PRINTcoplanar && qh PRINTspheres) || printcoplanar) {
-      qh KEEPcoplanar = True;
-      qh_option ("Qcoplanar", NULL, NULL);
-    }
-  }
-  if (printmath && (qh hull_dim > 3 || qh VORONOI)) {
-    fprintf (qh ferr, "qhull input error: Mathematica and Maple output is only available for 2-d and 3-d convex hulls and 2-d Delaunay triangulations\n");
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  if (printgeom) {
-    if (qh hull_dim > 4) {
-      fprintf (qh ferr, "qhull input error: Geomview output is only available for 2-d, 3-d and 4-d\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    if (qh PRINTnoplanes && !(qh PRINTcoplanar + qh PRINTcentrums
-     + qh PRINTdots + qh PRINTspheres + qh DOintersections + qh PRINTridges)) {
-      fprintf (qh ferr, "qhull input error: no output specified for Geomview\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    if (qh VORONOI && (qh hull_dim > 3 || qh DROPdim >= 0)) {
-      fprintf (qh ferr, "qhull input error: Geomview output for Voronoi diagrams only for 2-d\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    /* can not warn about furthest-site Geomview output: no lower_threshold */
-    if (qh hull_dim == 4 && qh DROPdim == -1 &&
-	(qh PRINTcoplanar || qh PRINTspheres || qh PRINTcentrums)) {
-      fprintf (qh ferr, "qhull input warning: coplanars, vertices, and centrums output not\n\
-available for 4-d output (ignored).  Could use 'GDn' instead.\n");
-      qh PRINTcoplanar= qh PRINTspheres= qh PRINTcentrums= False;
-    }
-  }
-  qh PRINTdim= qh hull_dim;
-  if (qh DROPdim >=0) {    /* after Geomview checks */
-    if (qh DROPdim < qh hull_dim) {
-      qh PRINTdim--;
-      if (!printgeom || qh hull_dim < 3)
-        fprintf (qh ferr, "qhull input warning: drop dimension 'GD%d' is only available for 3-d/4-d Geomview\n", qh DROPdim);
-    }else
-      qh DROPdim= -1;
-  }else if (qh VORONOI) {
-    qh DROPdim= qh hull_dim-1;
-    qh PRINTdim= qh hull_dim-1;
-  }
-} /* initqhull_globals */
- 
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="initqhull_mem">-</a>
-
-  qh_initqhull_mem(  )
-    initialize mem.c for qhull
-    qh.hull_dim and qh.normal_size determine some of the allocation sizes
-    if qh.MERGING,
-      includes ridgeT
-    calls qh_user_memsizes() to add up to 10 additional sizes for quick allocation
-      (see numsizes below)
-
-  returns:
-    mem.c already for qh_memalloc/qh_memfree (errors if called beforehand)
-
-  notes:
-    qh_produceoutput() prints memsizes
-
-*/
-void qh_initqhull_mem (void) {
-  int numsizes;
-  int i;
-
-  numsizes= 8+10;
-  qh_meminitbuffers (qh IStracing, qh_MEMalign, numsizes,
-                     qh_MEMbufsize,qh_MEMinitbuf);
-  qh_memsize(sizeof(vertexT));
-  if (qh MERGING) {
-    qh_memsize(sizeof(ridgeT));
-    qh_memsize(sizeof(mergeT));
-  }
-  qh_memsize(sizeof(facetT));
-  i= sizeof(setT) + (qh hull_dim - 1) * SETelemsize;  /* ridge.vertices */
-  qh_memsize(i);
-  qh_memsize(qh normal_size);        /* normal */
-  i += SETelemsize;                 /* facet.vertices, .ridges, .neighbors */
-  qh_memsize(i);
-  qh_user_memsizes();
-  qh_memsetup();
-} /* initqhull_mem */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="initqhull_start">-</a>
-
-  qh_initqhull_start( infile, outfile, errfile )
-    start initialization of qhull
-    initialize statistics, stdio, default values for global variables
-
-  see:
-    qh_maxmin() determines the precision constants
-*/
-void qh_initqhull_start (FILE *infile, FILE *outfile, FILE *errfile) {
-
-  qh_CPUclock; /* start the clock */
-#if qh_QHpointer
-  if (!(qh_qh= (qhT *)malloc (sizeof(qhT)))) {
-    fprintf (errfile, "qhull error (qh_initqhull_globals): insufficient memory\n");
-    exit (qh_ERRmem);  /* no error handler */
-  }
-  memset((char *)qh_qh, 0, sizeof(qhT));   /* every field is 0, FALSE, NULL */
-#else
-  memset((char *)&qh_qh, 0, sizeof(qhT));
-#endif
-  strcat (qh qhull, "qhull");
-  qh_initstatistics();
-  qh ANGLEmerge= True;
-  qh DROPdim= -1;
-  qh ferr= errfile;
-  qh fin= infile;
-  qh fout= outfile;
-  qh furthest_id= -1;
-  qh JOGGLEmax= REALmax;
-  qh KEEPminArea = REALmax;
-  qh last_low= REALmax;
-  qh last_high= REALmax;
-  qh last_newhigh= REALmax;
-  qh max_outside= 0.0;
-  qh max_vertex= 0.0;
-  qh MAXabs_coord= 0.0;
-  qh MAXsumcoord= 0.0;
-  qh MAXwidth= -REALmax;
-  qh MERGEindependent= True;
-  qh MINdenom_1= fmax_(1.0/REALmax, REALmin); /* used by qh_scalepoints */
-  qh MINoutside= 0.0;
-  qh MINvisible= REALmax;
-  qh MAXcoplanar= REALmax;
-  qh outside_err= REALmax;
-  qh premerge_centrum= 0.0;
-  qh premerge_cos= REALmax;
-  qh PRINTprecision= True;
-  qh PRINTradius= 0.0;
-  qh postmerge_cos= REALmax;
-  qh postmerge_centrum= 0.0;
-  qh ROTATErandom= INT_MIN;
-  qh MERGEvertices= True;
-  qh totarea= 0.0;
-  qh totvol= 0.0;
-  qh TRACEdist= REALmax;
-  qh TRACEpoint= -1; /* recompile or use 'TPn' */
-  qh tracefacet_id= UINT_MAX;  /* recompile to trace a facet */
-  qh tracevertex_id= UINT_MAX; /* recompile to trace a vertex */
-  qh_RANDOMseed_(1);
-} /* initqhull_start */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="initthresholds">-</a>
-
-  qh_initthresholds( commandString )
-    set thresholds for printing and scaling from commandString
-
-  returns:
-    sets qh.GOODthreshold or qh.SPLITthreshold if 'Pd0D1' used
-
-  see:
-    qh_initflags(), 'Qbk' 'QBk' 'Pdk' and 'PDk'
-    qh_inthresholds()
-
-  design:
-    for each 'Pdn' or 'PDn' option
-      check syntax
-      set qh.lower_threshold or qh.upper_threshold
-    set qh.GOODthreshold if an unbounded threshold is used
-    set qh.SPLITthreshold if a bounded threshold is used
-*/
-void qh_initthresholds(char *command) {
-  realT value;
-  int index, maxdim, k;
-  char *s= command;
-  char key;
-
-  maxdim= qh input_dim;
-  if (qh DELAUNAY && (qh PROJECTdelaunay || qh PROJECTinput))
-    maxdim++;
-  while (*s) {
-    if (*s == '-')
-      s++;
-    if (*s == 'P') {
-      s++;
-      while (*s && !isspace(key= *s++)) {
-	if (key == 'd' || key == 'D') {
-	  if (!isdigit(*s)) {
-	    fprintf(qh ferr, "qhull warning: no dimension given for Print option '%c' at: %s.  Ignored\n",
-		    key, s-1);
-	    continue;
-	  }
-	  index= qh_strtol (s, &s);
-	  if (index >= qh hull_dim) {
-	    fprintf(qh ferr, "qhull warning: dimension %d for Print option '%c' is >= %d.  Ignored\n",
-	        index, key, qh hull_dim);
-	    continue;
-	  }
-	  if (*s == ':') {
-	    s++;
-	    value= qh_strtod(s, &s);
-	    if (fabs((double)value) > 1.0) {
-	      fprintf(qh ferr, "qhull warning: value %2.4g for Print option %c is > +1 or < -1.  Ignored\n",
-	              value, key);
-	      continue;
-	    }
-	  }else
-	    value= 0.0;
-	  if (key == 'd')
-	    qh lower_threshold[index]= value;
-	  else
-	    qh upper_threshold[index]= value;
-	}
-      }
-    }else if (*s == 'Q') {
-      s++;
-      while (*s && !isspace(key= *s++)) {
-	if (key == 'b' && *s == 'B') {
-	  s++;
-	  for (k=maxdim; k--; ) {
-	    qh lower_bound[k]= -qh_DEFAULTbox;
-	    qh upper_bound[k]= qh_DEFAULTbox;
-	  }
-	}else if (key == 'b' && *s == 'b')
-	  s++;
-	else if (key == 'b' || key == 'B') {
-	  if (!isdigit(*s)) {
-	    fprintf(qh ferr, "qhull warning: no dimension given for Qhull option %c.  Ignored\n",
-		    key);
-	    continue;
-	  }
-	  index= qh_strtol (s, &s);
-	  if (index >= maxdim) {
-	    fprintf(qh ferr, "qhull warning: dimension %d for Qhull option %c is >= %d.  Ignored\n",
-	        index, key, maxdim);
-	    continue;
-	  }
-	  if (*s == ':') {
-	    s++;
-	    value= qh_strtod(s, &s);
-	  }else if (key == 'b')
-	    value= -qh_DEFAULTbox;
-	  else
-	    value= qh_DEFAULTbox;
-	  if (key == 'b')
-	    qh lower_bound[index]= value;
-	  else
-	    qh upper_bound[index]= value;
-	}
-      }
-    }else {
-      while (*s && !isspace (*s))
-        s++;
-    }
-    while (isspace (*s))
-      s++;
-  }
-  for (k= qh hull_dim; k--; ) {
-    if (qh lower_threshold[k] > -REALmax/2) {
-      qh GOODthreshold= True;
-      if (qh upper_threshold[k] < REALmax/2) {
-        qh SPLITthresholds= True;
-        qh GOODthreshold= False;
-        break;
-      }
-    }else if (qh upper_threshold[k] < REALmax/2)
-      qh GOODthreshold= True;
-  }
-} /* initthresholds */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="option">-</a>
-
-  qh_option( option, intVal, realVal )
-    add an option description to qh.qhull_options
-
-  notes:
-    will be printed with statistics ('Ts') and errors
-    strlen(option) < 40
-*/
-void qh_option (char *option, int *i, realT *r) {
-  char buf[200];
-  int len, maxlen;
-
-  sprintf (buf, "  %s", option);
-  if (i)
-    sprintf (buf+strlen(buf), " %d", *i);
-  if (r)
-    sprintf (buf+strlen(buf), " %2.2g", *r);
-  len= strlen(buf);
-  qh qhull_optionlen += len;
-  maxlen= sizeof (qh qhull_options) - len -1;
-  maximize_(maxlen, 0);
-  if (qh qhull_optionlen >= 80 && maxlen > 0) {
-    qh qhull_optionlen= len;
-    strncat (qh qhull_options, "\n", maxlen--);
-  }
-  strncat (qh qhull_options, buf, maxlen);
-} /* option */
-
-#if qh_QHpointer
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="restore_qhull">-</a>
-
-  qh_restore_qhull( oldqh )
-    restores a previously saved qhull
-    also restores qh_qhstat and qhmem.tempstack
-
-  notes:
-    errors if current qhull hasn't been saved or freed
-    uses qhmem for error reporting
-
-  NOTE 1998/5/11:
-    Freeing memory after qh_save_qhull and qh_restore_qhull
-    is complicated.  The procedures will be redesigned.
-
-  see:
-    qh_save_qhull()
-*/
-void qh_restore_qhull (qhT **oldqh) {
-
-  if (*oldqh && strcmp ((*oldqh)->qhull, "qhull")) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_restore_qhull): %p is not a qhull data structure\n",
-                  *oldqh);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  if (qh_qh) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_restore_qhull): did not save or free existing qhull\n");
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  if (!*oldqh || !(*oldqh)->old_qhstat) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_restore_qhull): did not previously save qhull %p\n",
-                  *oldqh);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  qh_qh= *oldqh;
-  *oldqh= NULL;
-  qh_qhstat= qh old_qhstat;
-  qhmem.tempstack= qh old_tempstack;
-  trace1((qh ferr, "qh_restore_qhull: restored qhull from %p\n", *oldqh));
-} /* restore_qhull */
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="save_qhull">-</a>
-
-  qh_save_qhull(  )
-    saves qhull for a later qh_restore_qhull
-    also saves qh_qhstat and qhmem.tempstack
-
-  returns:
-    qh_qh=NULL
-
-  notes:
-    need to initialize qhull or call qh_restore_qhull before continuing
-
-  NOTE 1998/5/11:
-    Freeing memory after qh_save_qhull and qh_restore_qhull
-    is complicated.  The procedures will be redesigned.
-
-  see:
-    qh_restore_qhull()
-*/
-qhT *qh_save_qhull (void) {
-  qhT *oldqh;
-
-  trace1((qhmem.ferr, "qh_save_qhull: save qhull %p\n", qh_qh));
-  if (!qh_qh) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_save_qhull): qhull not initialized\n");
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  qh old_qhstat= qh_qhstat;
-  qh_qhstat= NULL;
-  qh old_tempstack= qhmem.tempstack;
-  qhmem.tempstack= NULL;
-  oldqh= qh_qh;
-  qh_qh= NULL;
-  return oldqh;
-} /* save_qhull */
-
-#endif
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="strtol">-</a>
-
-  qh_strtol( s, endp) qh_strtod( s, endp)
-    internal versions of strtol() and strtod()
-    does not skip trailing spaces
-  notes:
-    some implementations of strtol()/strtod() skip trailing spaces
-*/
-double qh_strtod (const char *s, char **endp) {
-  double result;
-
-  result= strtod (s, endp);
-  if (s < (*endp) && (*endp)[-1] == ' ')
-    (*endp)--;
-  return result;
-} /* strtod */
-
-int qh_strtol (const char *s, char **endp) {
-  int result;
-
-  result= (int) strtol (s, endp, 10);
-  if (s< (*endp) && (*endp)[-1] == ' ')
-    (*endp)--;
-  return result;
-} /* strtol */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/index.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/index.htm
deleted file mode 100644
index cdd0c63f60b044ae0041fbf0067ee92ffdfacdb3..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/index.htm
+++ /dev/null
@@ -1,239 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>Qhull functions, macros, and data structures</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals</a><br>
-<b>To:</b> <a href="#TOC">Qhull files</a><br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-
-<hr>
-<!-- Main text of document. -->
-
-<h1>Qhull functions, macros, and data structures</h1>
-<blockquote>
-<p>The following sections provide an overview and index to
-Qhull's functions, macros, and data structures. Each 
-section starts with an introduction. Also see <a href=../html/qh-in.htm#library>Calling 
-Qhull from your program</a>.</p>
-
-<p>Qhull uses the following conventions:</p>
-<blockquote>
-
-<ul>
-<li>in code, global variables start with &quot;qh &quot;
-<li>in documentation, global variables start with 'qh.'
-<li>constants start with an upper case word
-<li>important globals include an '_'
-<li>functions, macros, and constants start with &quot;qh_&quot;</li>
-<li>data types end in &quot;T&quot;</li>
-<li>macros with arguments end in &quot;_&quot;</li>
-<li>iterators are macros that use local variables</li>
-<li>iterators for sets start with &quot;FOREACH&quot;</li>
-<li>iterators for lists start with &quot;FORALL&quot;</li>
-<li>qhull options are in single quotes (e.g., 'Pdn')</li>
-<li>lists are sorted alphabetically</li>
-<li>preprocessor directives on left margin for older compilers</li>
-</ul>
-</blockquote>
-<p>
-When reading the code, please note that the 
-global data structure, 'qh', is a macro.  It
-either expands to &quot;qh_qh.&quot; or to
-&quot;qh_qh-&gt;&quot;. The later is used for
-applications which run concurrent calls to qh_qhull().
-<p>
-When reading code with an editor, a search for 
-<i>&quot;procedure</i>
-will locate the header of <i>qh_procedure</i>.  A search for <i>* procedure</i>
-will locate the tail of <i>qh_procedure</i>.
-
-<p>A useful starting point is <a href="qhull.h">qhull.h</a>.  It defines most
-of Qhull data structures and top-level functions.  Search for <i>'PFn'</i> to
-determine the corresponding constant in Qhull.  Search for <i>'Fp'</i> to
-determine the corresponding <a href="qhull.h#qh_PRINT">qh_PRINT...</a> constant.
-Search <a href="io.c">io.c</a> to learn how the print function is implemented.</p>
-
-<p>If your web browser loads .c and .h files with an external application,
-change the MIME type of .c and .h files to "text/html".  
-Opera does not always work since it treats '&lt;' characters as HTML tags.
-<p>
-Please report documentation and link errors  
-to <a href="mailto:qhull-bug@qhull.org">qhull-bug@qhull.org</a>.
-<p>
-<i>Brad Barber, Cambridge MA, June 1, 2002</i>
-</p>
-</blockquote>
-
-<p><b>Copyright &copy; 1997-2003 The Geometry Center, Minneapolis MN</b></p>
-
-<hr>
-
-<h2><a href="#TOP">»</a><a name="TOC">Qhull files</a> </h2>
-<blockquote>
-
-<p>This sections lists the .c and .h files for Qhull. Please
-refer to these files for detailed information.</p>
-<blockquote>
-
-<dl>
-<dt><a href="qhull.h"><b>qhull.h</b></a> </dt>
-<dd>Include file for the Qhull library, <tt>qhull.a</tt>.
-Data structures are documented under <a href="qh-poly.htm">Poly</a>.
-Global variables are documented under <a href="qh-globa.htm">Global</a>.
-Other data structures and variables are documented under 
-<a href="qh-qhull.htm#TOC">Qhull</a> or <a href="qh-geom.htm"><b>Geom</b></a><b>.</b></dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-geom.htm"><b>Geom</b></a><b>, </b>
-<a href="geom.h"><b>geom.h</b></a><b>, </b>
-<a href="geom.c"><b>geom.c</b></a><b>, </b>
-<a href="geom2.c"><b>geom2.c</b></a> </dt>
-<dd>Geometric routines. These routines implement mathematical
-functions such as Gaussian elimination and geometric
-routines needed for Qhull. Frequently used routines are
-in <tt>geom.c</tt> while infrequent ones are in <tt>geom2.c</tt>.
-</dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-globa.htm"><b>Global</b></a><b>, </b>
-<a href="global.c"><b>global.c</b></a><b>, </b>
-<a href="qhull.h"><b>qhull.h</b></a> </dt>
-<dd>Global routines. Qhull uses a global data structure, <tt>qh</tt>,
-to store globally defined constants, lists, sets, and
-variables.   
-<tt>global.c</tt> initializes and frees these
-structures. </dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-io.htm"><b>Io</b></a><b>, </b><a href="io.h"><b>io.h</b></a><b>,
-</b><a href="io.c"><b>io.c</b></a> </dt>
-<dd>Input and output routines. Qhull provides a wide range of
-input and output options.</dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-mem.htm"><b>Mem</b></a><b>, </b>
-<a href="mem.h"><b>mem.h</b></a><b>, </b>
-<a href="mem.c"><b>mem.c</b></a> </dt>
-<dd>Memory routines. Qhull provides memory allocation and
-deallocation. It uses quick-fit allocation.</dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-merge.htm"><b>Merge</b></a><b>, </b>
-<a href="merge.h"><b>merge.h</b></a><b>, </b>
-<a href="merge.c"><b>merge.c</b></a> </dt>
-<dd>Merge routines. Qhull handles precision problems by
-merged facets or joggled input. These routines merge simplicial facets,
-merge non-simplicial facets, merge cycles of facets, and
-rename redundant vertices.</dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-poly.htm"><b>Poly</b></a><b>, </b>
-<a href="poly.h"><b>poly.h</b></a><b>, </b>
-<a href="poly.c"><b>poly.c</b></a><b>, </b>
-<a href="poly2.c"><b>poly2.c</b></a><b>, </b>
-<a href="qhull.h"><b>qhull.h</b></a> </dt>
-<dd>Polyhedral routines. Qhull produces a polyhedron as a
-list of facets with vertices, neighbors, ridges, and
-geometric information. <tt>Qhull.h</tt> defines the main
-data structures. Frequently used routines are in <tt>poly.c</tt>
-while infrequent ones are in <tt>poly2.c</tt>.</dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-qhull.htm#TOC"><b>Qhull</b></a><b>, </b>
-<a href="qhull.c"><b>qhull.c</b></a><b>, </b>
-<a href="qhull.h"><b>qhull.h</b></a><b>, </b>
-<a href="qhull_a.h"><b>qhull_a.h</b></a><b>, </b>
-<a href="unix.c"><b>unix.c</b></a> <b>, </b>
-<a href="qconvex.c"><b>qconvex.c</b></a> <b>, </b>
-<a href="qdelaun.c"><b>qdelaun.c</b></a> <b>, </b>
-<a href="qhalf.c"><b>qhalf.c</b></a> <b>, </b>
-<a href="qvoronoi.c"><b>qvoronoi.c</b></a> </dt>
-<dd>Top-level routines. The Quickhull algorithm is
-implemented by <tt>qhull.c</tt>. <tt>qhull_a.h</tt>
-includes all header files. </dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-set.htm"><b>Set</b></a><b>, </b>
-<a href="qset.h"><b>qset.h</b></a><b>, </b>
-<a href="qset.c"><b>qset.c</b></a> </dt>
-<dd>Set routines. Qhull implements its data structures as
-sets. A set is an array of pointers that is expanded as
-needed. This is a separate package that may be used in
-other applications. </dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-stat.htm"><b>Stat</b></a><b>, </b>
-<a href="stat.h"><b>stat.h</b></a><b>, </b>
-<a href="stat.c"><b>stat.c</b></a> </dt>
-<dd>Statistical routines. Qhull maintains statistics about
-its implementation. </dd>
-
-<dt>&nbsp;</dt>
-<dt><a href="qh-user.htm"><b>User</b></a><b>, </b>
-<a href="user.h"><b>user.h</b></a><b>, </b>
-<a href="user.c"><b>user.c</b></a><b>, </b>
-<a href="user_eg.c"><b>user_eg.c</b></a><b>, </b>
-<a href="qhull_interface.cpp#TOP"><b>qhull_interface.cpp</b></a></dt>
-<dd>User-defined routines. Qhull allows the user to configure
-the code with defined constants and specialized routines.
-</dd>
-</dl>
-</blockquote>
-
-</blockquote>
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="#TOC">Qhull files</a><br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/io.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/io.c
deleted file mode 100644
index ebb6528cf80d69df6f036180b4f4f1d41bd5b457..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/io.c
+++ /dev/null
@@ -1,4108 +0,0 @@
-/*<html><pre>  -<a                             href="qh-io.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   io.c 
-   Input/Output routines of qhull application
-
-   see qh-io.htm and io.h
-
-   see user.c for qh_errprint and qh_printfacetlist
-
-   unix.c calls qh_readpoints and qh_produce_output
-
-   unix.c and user.c are the only callers of io.c functions
-   This allows the user to avoid loading io.o from qhull.a
-
-   copyright (c) 1993-2003 The Geometry Center        
-*/
-
-#include "qhull_a.h"
-
-/*========= -functions in alphabetical order after qh_produce_output()  =====*/
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="produce_output">-</a>
-  
-  qh_produce_output()
-    prints out the result of qhull in desired format
-    if qh.GETarea
-      computes and prints area and volume
-    qh.PRINTout[] is an array of output formats
-
-  notes:
-    prints output in qh.PRINTout order
-*/
-void qh_produce_output(void) {
-  int i, tempsize= qh_setsize ((setT*)qhmem.tempstack), d_1;
-
-  if (qh VORONOI) {
-    qh_clearcenters (qh_ASvoronoi);
-    qh_vertexneighbors();
-  }
-  if (qh TRIangulate) {
-    qh_triangulate(); 
-    if (qh VERIFYoutput && !qh CHECKfrequently) 
-      qh_checkpolygon (qh facet_list);
-  }
-  qh_findgood_all (qh facet_list); 
-  if (qh GETarea)
-    qh_getarea(qh facet_list);
-  if (qh KEEParea || qh KEEPmerge || qh KEEPminArea < REALmax/2)
-    qh_markkeep (qh facet_list);
-  if (qh PRINTsummary)
-    qh_printsummary(qh ferr);
-  else if (qh PRINTout[0] == qh_PRINTnone)
-    qh_printsummary(qh fout);
-  for (i= 0; i < qh_PRINTEND; i++)
-    qh_printfacets (qh fout, qh PRINTout[i], qh facet_list, NULL, !qh_ALL);
-  qh_allstatistics();
-  if (qh PRINTprecision && !qh MERGING && (qh JOGGLEmax > REALmax/2 || qh RERUN))
-    qh_printstats (qh ferr, qhstat precision, NULL);
-  if (qh VERIFYoutput && (zzval_(Zridge) > 0 || zzval_(Zridgemid) > 0)) 
-    qh_printstats (qh ferr, qhstat vridges, NULL);
-  if (qh PRINTstatistics) {
-    qh_collectstatistics();
-    qh_printstatistics(qh ferr, "");
-    qh_memstatistics (qh ferr);
-    d_1= sizeof(setT) + (qh hull_dim - 1) * SETelemsize;
-    fprintf(qh ferr, "\
-    size in bytes: merge %lu ridge %lu vertex %lu facet %lu\n\
-         normal %d ridge vertices %d facet vertices or neighbors %lu\n",
-        sizeof(mergeT), sizeof(ridgeT),
-        sizeof(vertexT), sizeof(facetT),
-        qh normal_size, d_1, d_1 + SETelemsize);
-  }
-  if (qh_setsize ((setT*)qhmem.tempstack) != tempsize) {
-    fprintf (qh ferr, "qhull internal error (qh_produce_output): temporary sets not empty (%d)\n",
-	     qh_setsize ((setT*)qhmem.tempstack));
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-} /* produce_output */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="dfacet">-</a>
-  
-  dfacet( id )
-    print facet by id, for debugging
-
-*/
-void dfacet (unsigned id) {
-  facetT *facet;
-
-  FORALLfacets {
-    if (facet->id == id) {
-      qh_printfacet (qh fout, facet);
-      break;
-    }
-  }
-} /* dfacet */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="dvertex">-</a>
-  
-  dvertex( id )
-    print vertex by id, for debugging
-*/
-void dvertex (unsigned id) {
-  vertexT *vertex;
-
-  FORALLvertices {
-    if (vertex->id == id) {
-      qh_printvertex (qh fout, vertex);
-      break;
-    }
-  }
-} /* dvertex */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="compare_vertexpoint">-</a>
-  
-  qh_compare_vertexpoint( p1, p2 )
-    used by qsort() to order vertices by point id 
-*/
-int qh_compare_vertexpoint(const void *p1, const void *p2) {
-  vertexT *a= *((vertexT **)p1), *b= *((vertexT **)p2);
- 
-  return ((qh_pointid(a->point) > qh_pointid(b->point)?1:-1));
-} /* compare_vertexpoint */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="compare_facetarea">-</a>
-  
-  qh_compare_facetarea( p1, p2 )
-    used by qsort() to order facets by area
-*/
-int qh_compare_facetarea(const void *p1, const void *p2) {
-  facetT *a= *((facetT **)p1), *b= *((facetT **)p2);
-
-  if (!a->isarea)
-    return -1;
-  if (!b->isarea)
-    return 1; 
-  if (a->f.area > b->f.area)
-    return 1;
-  else if (a->f.area == b->f.area)
-    return 0;
-  return -1;
-} /* compare_facetarea */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="compare_facetmerge">-</a>
-  
-  qh_compare_facetmerge( p1, p2 )
-    used by qsort() to order facets by number of merges
-*/
-int qh_compare_facetmerge(const void *p1, const void *p2) {
-  facetT *a= *((facetT **)p1), *b= *((facetT **)p2);
- 
-  return (a->nummerge - b->nummerge);
-} /* compare_facetvisit */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="compare_facetvisit">-</a>
-  
-  qh_compare_facetvisit( p1, p2 )
-    used by qsort() to order facets by visit id or id
-*/
-int qh_compare_facetvisit(const void *p1, const void *p2) {
-  facetT *a= *((facetT **)p1), *b= *((facetT **)p2);
-  int i,j;
-
-  if (!(i= a->visitid))
-    i= - a->id; /* do not convert to int */
-  if (!(j= b->visitid))
-    j= - b->id;
-  return (i - j);
-} /* compare_facetvisit */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="countfacets">-</a>
-  
-  qh_countfacets( facetlist, facets, printall, 
-          numfacets, numsimplicial, totneighbors, numridges, numcoplanar, numtricoplanars  )
-    count good facets for printing and set visitid
-    if allfacets, ignores qh_skipfacet()
-
-  notes:
-    qh_printsummary and qh_countfacets must match counts
-
-  returns:
-    numfacets, numsimplicial, total neighbors, numridges, coplanars
-    each facet with ->visitid indicating 1-relative position
-      ->visitid==0 indicates not good
-  
-  notes
-    numfacets >= numsimplicial
-    if qh.NEWfacets, 
-      does not count visible facets (matches qh_printafacet)
-
-  design:
-    for all facets on facetlist and in facets set
-      unless facet is skipped or visible (i.e., will be deleted)
-        mark facet->visitid
-        update counts
-*/
-void qh_countfacets (facetT *facetlist, setT *facets, boolT printall,
-    int *numfacetsp, int *numsimplicialp, int *totneighborsp, int *numridgesp, int *numcoplanarsp, int *numtricoplanarsp) {
-  facetT *facet, **facetp;
-  int numfacets= 0, numsimplicial= 0, numridges= 0, totneighbors= 0, numcoplanars= 0, numtricoplanars= 0;
-
-  FORALLfacet_(facetlist) {
-    if ((facet->visible && qh NEWfacets)
-    || (!printall && qh_skipfacet(facet)))
-      facet->visitid= 0;
-    else {
-      facet->visitid= ++numfacets;
-      totneighbors += qh_setsize (facet->neighbors);
-      if (facet->simplicial) {
-        numsimplicial++;
-	if (facet->keepcentrum && facet->tricoplanar)
-	  numtricoplanars++;
-      }else
-        numridges += qh_setsize (facet->ridges);
-      if (facet->coplanarset)
-        numcoplanars += qh_setsize (facet->coplanarset);
-    }
-  }
-  FOREACHfacet_(facets) {
-    if ((facet->visible && qh NEWfacets)
-    || (!printall && qh_skipfacet(facet)))
-      facet->visitid= 0;
-    else {
-      facet->visitid= ++numfacets;
-      totneighbors += qh_setsize (facet->neighbors);
-      if (facet->simplicial){
-        numsimplicial++;
-	if (facet->keepcentrum && facet->tricoplanar)
-	  numtricoplanars++;
-      }else
-        numridges += qh_setsize (facet->ridges);
-      if (facet->coplanarset)
-        numcoplanars += qh_setsize (facet->coplanarset);
-    }
-  }
-  qh visit_id += numfacets+1;
-  *numfacetsp= numfacets;
-  *numsimplicialp= numsimplicial;
-  *totneighborsp= totneighbors;
-  *numridgesp= numridges;
-  *numcoplanarsp= numcoplanars;
-  *numtricoplanarsp= numtricoplanars;
-} /* countfacets */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="detvnorm">-</a>
-  
-  qh_detvnorm( vertex, vertexA, centers, offset )
-    compute separating plane of the Voronoi diagram for a pair of input sites
-    centers= set of facets (i.e., Voronoi vertices)
-      facet->visitid= 0 iff vertex-at-infinity (i.e., unbounded)
-        
-  assumes:
-    qh_ASvoronoi and qh_vertexneighbors() already set
-  
-  returns:
-    norm
-      a pointer into qh.gm_matrix to qh.hull_dim-1 reals
-      copy the data before reusing qh.gm_matrix
-    offset
-      if 'QVn'
-        sign adjusted so that qh.GOODvertexp is inside
-      else
-        sign adjusted so that vertex is inside
-      
-    qh.gm_matrix= simplex of points from centers relative to first center
-    
-  notes:
-    in io.c so that code for 'v Tv' can be removed by removing io.c
-    returns pointer into qh.gm_matrix to avoid tracking of temporary memory
-  
-  design:
-    determine midpoint of input sites
-    build points as the set of Voronoi vertices
-    select a simplex from points (if necessary)
-      include midpoint if the Voronoi region is unbounded
-    relocate the first vertex of the simplex to the origin
-    compute the normalized hyperplane through the simplex
-    orient the hyperplane toward 'QVn' or 'vertex'
-    if 'Tv' or 'Ts'
-      if bounded
-        test that hyperplane is the perpendicular bisector of the input sites
-      test that Voronoi vertices not in the simplex are still on the hyperplane
-    free up temporary memory
-*/
-pointT *qh_detvnorm (vertexT *vertex, vertexT *vertexA, setT *centers, realT *offsetp) {
-  facetT *facet, **facetp;
-  int  i, k, pointid, pointidA, point_i, point_n;
-  setT *simplex= NULL;
-  pointT *point, **pointp, *point0, *midpoint, *normal, *inpoint;
-  coordT *coord, *gmcoord, *normalp;
-  setT *points= qh_settemp (qh TEMPsize);
-  boolT nearzero= False;
-  boolT unbounded= False;
-  int numcenters= 0;
-  int dim= qh hull_dim - 1;
-  realT dist, offset, angle, zero= 0.0;
-
-  midpoint= qh gm_matrix + qh hull_dim * qh hull_dim;  /* last row */
-  for (k= 0; k < dim; k++)
-    midpoint[k]= (vertex->point[k] + vertexA->point[k])/2;
-  FOREACHfacet_(centers) {
-    numcenters++;
-    if (!facet->visitid)
-      unbounded= True;
-    else {
-      if (!facet->center)
-        facet->center= qh_facetcenter (facet->vertices);
-      qh_setappend (&points, facet->center);
-    }
-  }
-  if (numcenters > dim) {
-    simplex= qh_settemp (qh TEMPsize);
-    qh_setappend (&simplex, vertex->point);
-    if (unbounded)
-      qh_setappend (&simplex, midpoint);
-    qh_maxsimplex (dim, points, NULL, 0, &simplex);
-    qh_setdelnth (simplex, 0);
-  }else if (numcenters == dim) {
-    if (unbounded)
-      qh_setappend (&points, midpoint);
-    simplex= points; 
-  }else {
-    fprintf(qh ferr, "qh_detvnorm: too few points (%d) to compute separating plane\n", numcenters);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  i= 0;
-  gmcoord= qh gm_matrix;
-  point0= SETfirstt_(simplex, pointT);
-  FOREACHpoint_(simplex) {
-    if (qh IStracing >= 4)
-      qh_printmatrix(qh ferr, "qh_detvnorm: Voronoi vertex or midpoint", 
-                              &point, 1, dim);
-    if (point != point0) {
-      qh gm_row[i++]= gmcoord;
-      coord= point0;
-      for (k= dim; k--; )
-        *(gmcoord++)= *point++ - *coord++;
-    }
-  }
-  qh gm_row[i]= gmcoord;  /* does not overlap midpoint, may be used later for qh_areasimplex */
-  normal= gmcoord;
-  qh_sethyperplane_gauss (dim, qh gm_row, point0, True,
-           	normal, &offset, &nearzero);
-  if (qh GOODvertexp == vertexA->point)
-    inpoint= vertexA->point;
-  else
-    inpoint= vertex->point;
-  zinc_(Zdistio);
-  dist= qh_distnorm (dim, inpoint, normal, &offset);
-  if (dist > 0) {
-    offset= -offset;
-    normalp= normal;
-    for (k= dim; k--; ) {
-      *normalp= -(*normalp);
-      normalp++;
-    }
-  }
-  if (qh VERIFYoutput || qh PRINTstatistics) {
-    pointid= qh_pointid (vertex->point);
-    pointidA= qh_pointid (vertexA->point);
-    if (!unbounded) {
-      zinc_(Zdiststat);
-      dist= qh_distnorm (dim, midpoint, normal, &offset);
-      if (dist < 0)
-        dist= -dist;
-      zzinc_(Zridgemid);
-      wwmax_(Wridgemidmax, dist);
-      wwadd_(Wridgemid, dist);
-      trace4((qh ferr, "qh_detvnorm: points %d %d midpoint dist %2.2g\n",
-                 pointid, pointidA, dist));
-      for (k= 0; k < dim; k++) 
-        midpoint[k]= vertexA->point[k] - vertex->point[k];  /* overwrites midpoint! */
-      qh_normalize (midpoint, dim, False);
-      angle= qh_distnorm (dim, midpoint, normal, &zero); /* qh_detangle uses dim+1 */
-      if (angle < 0.0)
-	angle= angle + 1.0;
-      else
-	angle= angle - 1.0;
-      if (angle < 0.0)
-	angle -= angle;
-      trace4((qh ferr, "qh_detvnorm: points %d %d angle %2.2g nearzero %d\n",
-                 pointid, pointidA, angle, nearzero));
-      if (nearzero) {
-        zzinc_(Zridge0);
-        wwmax_(Wridge0max, angle);
-        wwadd_(Wridge0, angle);
-      }else {
-        zzinc_(Zridgeok)
-        wwmax_(Wridgeokmax, angle);
-        wwadd_(Wridgeok, angle);
-      }
-    }
-    if (simplex != points) {
-      FOREACHpoint_i_(points) {
-        if (!qh_setin (simplex, point)) {
-          facet= SETelemt_(centers, point_i, facetT);
-	  zinc_(Zdiststat);
-  	  dist= qh_distnorm (dim, point, normal, &offset);
-          if (dist < 0)
-            dist= -dist;
-	  zzinc_(Zridge);
-          wwmax_(Wridgemax, dist);
-          wwadd_(Wridge, dist);
-          trace4((qh ferr, "qh_detvnorm: points %d %d Voronoi vertex %d dist %2.2g\n",
-                             pointid, pointidA, facet->visitid, dist));
-        }
-      }
-    }
-  }
-  *offsetp= offset;
-  if (simplex != points)
-    qh_settempfree (&simplex);
-  qh_settempfree (&points);
-  return normal;
-} /* detvnorm */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="detvridge">-</a>
-
-  qh_detvridge( vertexA )
-    determine Voronoi ridge from 'seen' neighbors of vertexA
-    include one vertex-at-infinite if an !neighbor->visitid
-
-  returns:
-    temporary set of centers (facets, i.e., Voronoi vertices)
-    sorted by center id
-*/
-setT *qh_detvridge (vertexT *vertex) {
-  setT *centers= qh_settemp (qh TEMPsize);
-  setT *tricenters= qh_settemp (qh TEMPsize);
-  facetT *neighbor, **neighborp;
-  boolT firstinf= True;
-  
-  FOREACHneighbor_(vertex) {
-    if (neighbor->seen) {
-      if (neighbor->visitid) {
-	if (!neighbor->tricoplanar || qh_setunique (&tricenters, neighbor->center)) 
-	  qh_setappend (&centers, neighbor);
-      }else if (firstinf) {
-        firstinf= False;
-        qh_setappend (&centers, neighbor);
-      }
-    }
-  }
-  qsort (SETaddr_(centers, facetT), qh_setsize (centers),
-             sizeof (facetT *), qh_compare_facetvisit);
-  qh_settempfree (&tricenters);
-  return centers;
-} /* detvridge */      
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="detvridge3">-</a>
-
-  qh_detvridge3( atvertex, vertex )
-    determine 3-d Voronoi ridge from 'seen' neighbors of atvertex and vertex
-    include one vertex-at-infinite for !neighbor->visitid
-    assumes all facet->seen2= True
-
-  returns:
-    temporary set of centers (facets, i.e., Voronoi vertices)
-    listed in adjacency order (not oriented)
-    all facet->seen2= True
-
-  design:
-    mark all neighbors of atvertex
-    for each adjacent neighbor of both atvertex and vertex
-      if neighbor selected
-        add neighbor to set of Voronoi vertices
-*/
-setT *qh_detvridge3 (vertexT *atvertex, vertexT *vertex) {
-  setT *centers= qh_settemp (qh TEMPsize);
-  setT *tricenters= qh_settemp (qh TEMPsize);
-  facetT *neighbor, **neighborp, *facet= NULL;
-  boolT firstinf= True;
-  
-  FOREACHneighbor_(atvertex)
-    neighbor->seen2= False;
-  FOREACHneighbor_(vertex) {
-    if (!neighbor->seen2) {
-      facet= neighbor;
-      break;
-    }
-  }
-  while (facet) { 
-    facet->seen2= True;
-    if (neighbor->seen) {
-      if (facet->visitid) {
-	if (!facet->tricoplanar || qh_setunique (&tricenters, facet->center)) 
-	  qh_setappend (&centers, facet);
-      }else if (firstinf) {
-        firstinf= False;
-        qh_setappend (&centers, facet);
-      }
-    }
-    FOREACHneighbor_(facet) {
-      if (!neighbor->seen2) {
-	if (qh_setin (vertex->neighbors, neighbor))
-          break;
-	else
-	  neighbor->seen2= True;
-      }
-    }
-    facet= neighbor;
-  }
-  if (qh CHECKfrequently) {
-    FOREACHneighbor_(vertex) {
-      if (!neighbor->seen2) {
-	fprintf (stderr, "qh_detvridge3: neigbors of vertex p%d are not connected at facet %d\n",
-	         qh_pointid (vertex->point), neighbor->id);
-	qh_errexit (qh_ERRqhull, neighbor, NULL);
-      }
-    }
-  }
-  FOREACHneighbor_(atvertex) 
-    neighbor->seen2= True;
-  qh_settempfree (&tricenters);
-  return centers;
-} /* detvridge3 */      
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="eachvoronoi">-</a>
-  
-  qh_eachvoronoi( fp, printvridge, vertex, visitall, innerouter, inorder )
-    if visitall,
-      visit all Voronoi ridges for vertex (i.e., an input site)
-    else
-      visit all unvisited Voronoi ridges for vertex
-      all vertex->seen= False if unvisited
-    assumes
-      all facet->seen= False
-      all facet->seen2= True (for qh_detvridge3)
-      all facet->visitid == 0 if vertex_at_infinity
-                         == index of Voronoi vertex 
-                         >= qh.num_facets if ignored
-    innerouter:
-      qh_RIDGEall--  both inner (bounded) and outer (unbounded) ridges
-      qh_RIDGEinner- only inner
-      qh_RIDGEouter- only outer
-      
-    if inorder
-      orders vertices for 3-d Voronoi diagrams
-  
-  returns:
-    number of visited ridges (does not include previously visited ridges)
-    
-    if printvridge,
-      calls printvridge( fp, vertex, vertexA, centers)
-        fp== any pointer (assumes FILE*)
-        vertex,vertexA= pair of input sites that define a Voronoi ridge
-        centers= set of facets (i.e., Voronoi vertices)
-                 ->visitid == index or 0 if vertex_at_infinity
-                 ordered for 3-d Voronoi diagram
-  notes:
-    uses qh.vertex_visit
-  
-  see:
-    qh_eachvoronoi_all()
-  
-  design:
-    mark selected neighbors of atvertex
-    for each selected neighbor (either Voronoi vertex or vertex-at-infinity)
-      for each unvisited vertex 
-        if atvertex and vertex share more than d-1 neighbors
-          bump totalcount
-          if printvridge defined
-            build the set of shared neighbors (i.e., Voronoi vertices)
-            call printvridge
-*/
-int qh_eachvoronoi (FILE *fp, printvridgeT printvridge, vertexT *atvertex, boolT visitall, qh_RIDGE innerouter, boolT inorder) {
-  boolT unbounded;
-  int count;
-  facetT *neighbor, **neighborp, *neighborA, **neighborAp;
-  setT *centers;
-  setT *tricenters= qh_settemp (qh TEMPsize);
-
-  vertexT *vertex, **vertexp;
-  boolT firstinf;
-  unsigned int numfacets= (unsigned int)qh num_facets;
-  int totridges= 0;
-
-  qh vertex_visit++;
-  atvertex->seen= True;
-  if (visitall) {
-    FORALLvertices 
-      vertex->seen= False;
-  }
-  FOREACHneighbor_(atvertex) {
-    if (neighbor->visitid < numfacets) 
-      neighbor->seen= True;
-  }
-  FOREACHneighbor_(atvertex) {
-    if (neighbor->seen) {
-      FOREACHvertex_(neighbor->vertices) {
-        if (vertex->visitid != qh vertex_visit && !vertex->seen) {
-	  vertex->visitid= qh vertex_visit;
-          count= 0;
-          firstinf= True;
-	  qh_settruncate (tricenters, 0);
-          FOREACHneighborA_(vertex) {
-            if (neighborA->seen) {
-	      if (neighborA->visitid) {
-		if (!neighborA->tricoplanar || qh_setunique (&tricenters, neighborA->center))
-		  count++;
-              }else if (firstinf) {
-                count++;
-                firstinf= False;
-	      }
-	    }
-          }
-          if (count >= qh hull_dim - 1) {  /* e.g., 3 for 3-d Voronoi */
-            if (firstinf) {
-              if (innerouter == qh_RIDGEouter)
-                continue;
-              unbounded= False;
-            }else {
-              if (innerouter == qh_RIDGEinner)
-                continue;
-              unbounded= True;
-            }
-            totridges++;
-            trace4((qh ferr, "qh_eachvoronoi: Voronoi ridge of %d vertices between sites %d and %d\n",
-                  count, qh_pointid (atvertex->point), qh_pointid (vertex->point)));
-            if (printvridge) { 
-	      if (inorder && qh hull_dim == 3+1) /* 3-d Voronoi diagram */
-                centers= qh_detvridge3 (atvertex, vertex);
-	      else
-                centers= qh_detvridge (vertex);
-              (*printvridge) (fp, atvertex, vertex, centers, unbounded);
-              qh_settempfree (&centers);
-            }
-          }
-        }
-      }
-    }
-  }
-  FOREACHneighbor_(atvertex) 
-    neighbor->seen= False;
-  qh_settempfree (&tricenters);
-  return totridges;
-} /* eachvoronoi */
-  
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="eachvoronoi_all">-</a>
-  
-  qh_eachvoronoi_all( fp, printvridge, isupper, innerouter, inorder )
-    visit all Voronoi ridges
-    
-    innerouter:
-      see qh_eachvoronoi()
-      
-    if inorder
-      orders vertices for 3-d Voronoi diagrams
-    
-  returns
-    total number of ridges 
-
-    if isupper == facet->upperdelaunay  (i.e., a Vornoi vertex)
-      facet->visitid= Voronoi vertex index (same as 'o' format)
-    else 
-      facet->visitid= 0
-
-    if printvridge,
-      calls printvridge( fp, vertex, vertexA, centers)
-      [see qh_eachvoronoi]
-      
-  notes:
-    Not used for qhull.exe
-    same effect as qh_printvdiagram but ridges not sorted by point id
-*/
-int qh_eachvoronoi_all (FILE *fp, printvridgeT printvridge, boolT isupper, qh_RIDGE innerouter, boolT inorder) {
-  facetT *facet;
-  vertexT *vertex;
-  int numcenters= 1;  /* vertex 0 is vertex-at-infinity */
-  int totridges= 0;
-
-  qh_clearcenters (qh_ASvoronoi);
-  qh_vertexneighbors();
-  maximize_(qh visit_id, (unsigned) qh num_facets);
-  FORALLfacets {
-    facet->visitid= 0;
-    facet->seen= False;
-    facet->seen2= True;
-  }
-  FORALLfacets {
-    if (facet->upperdelaunay == isupper)
-      facet->visitid= numcenters++;
-  }
-  FORALLvertices 
-    vertex->seen= False;
-  FORALLvertices {
-    if (qh GOODvertex > 0 && qh_pointid(vertex->point)+1 != qh GOODvertex)
-      continue;
-    totridges += qh_eachvoronoi (fp, printvridge, vertex, 
-                   !qh_ALL, innerouter, inorder);
-  }
-  return totridges;
-} /* eachvoronoi_all */
-      
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="facet2point">-</a>
-  
-  qh_facet2point( facet, point0, point1, mindist )
-    return two projected temporary vertices for a 2-d facet
-    may be non-simplicial
-
-  returns:
-    point0 and point1 oriented and projected to the facet
-    returns mindist (maximum distance below plane)
-*/
-void qh_facet2point(facetT *facet, pointT **point0, pointT **point1, realT *mindist) {
-  vertexT *vertex0, *vertex1;
-  realT dist;
-  
-  if (facet->toporient ^ qh_ORIENTclock) {
-    vertex0= SETfirstt_(facet->vertices, vertexT);
-    vertex1= SETsecondt_(facet->vertices, vertexT);
-  }else {
-    vertex1= SETfirstt_(facet->vertices, vertexT);
-    vertex0= SETsecondt_(facet->vertices, vertexT);
-  }
-  zadd_(Zdistio, 2);
-  qh_distplane(vertex0->point, facet, &dist);
-  *mindist= dist;
-  *point0= qh_projectpoint(vertex0->point, facet, dist);
-  qh_distplane(vertex1->point, facet, &dist);
-  minimize_(*mindist, dist);		
-  *point1= qh_projectpoint(vertex1->point, facet, dist);
-} /* facet2point */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="facetvertices">-</a>
-  
-  qh_facetvertices( facetlist, facets, allfacets )
-    returns temporary set of vertices in a set and/or list of facets
-    if allfacets, ignores qh_skipfacet()
-
-  returns:
-    vertices with qh.vertex_visit
-    
-  notes:
-    optimized for allfacets of facet_list
-
-  design:
-    if allfacets of facet_list
-      create vertex set from vertex_list
-    else
-      for each selected facet in facets or facetlist
-        append unvisited vertices to vertex set
-*/
-setT *qh_facetvertices (facetT *facetlist, setT *facets, boolT allfacets) {
-  setT *vertices;
-  facetT *facet, **facetp;
-  vertexT *vertex, **vertexp;
-
-  qh vertex_visit++;
-  if (facetlist == qh facet_list && allfacets && !facets) {
-    vertices= qh_settemp (qh num_vertices);
-    FORALLvertices {
-      vertex->visitid= qh vertex_visit; 
-      qh_setappend (&vertices, vertex);
-    }
-  }else {
-    vertices= qh_settemp (qh TEMPsize);
-    FORALLfacet_(facetlist) {
-      if (!allfacets && qh_skipfacet (facet))
-        continue;
-      FOREACHvertex_(facet->vertices) {
-        if (vertex->visitid != qh vertex_visit) {
-          vertex->visitid= qh vertex_visit;
-          qh_setappend (&vertices, vertex);
-        }
-      }
-    }
-  }
-  FOREACHfacet_(facets) {
-    if (!allfacets && qh_skipfacet (facet))
-      continue;
-    FOREACHvertex_(facet->vertices) {
-      if (vertex->visitid != qh vertex_visit) {
-        vertex->visitid= qh vertex_visit;
-        qh_setappend (&vertices, vertex);
-      }
-    }
-  }
-  return vertices;
-} /* facetvertices */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >-------------------------------</a><a name="geomplanes">-</a>
-  
-  qh_geomplanes( facet, outerplane, innerplane )
-    return outer and inner planes for Geomview 
-    qh.PRINTradius is size of vertices and points (includes qh.JOGGLEmax)
-
-  notes:
-    assume precise calculations in io.c with roundoff covered by qh_GEOMepsilon
-*/
-void qh_geomplanes (facetT *facet, realT *outerplane, realT *innerplane) {
-  realT radius;
-
-  if (qh MERGING || qh JOGGLEmax < REALmax/2) {
-    qh_outerinner (facet, outerplane, innerplane);
-    radius= qh PRINTradius;
-    if (qh JOGGLEmax < REALmax/2)
-      radius -= qh JOGGLEmax * sqrt (qh hull_dim);  /* already accounted for in qh_outerinner() */
-    *outerplane += radius;
-    *innerplane -= radius;
-    if (qh PRINTcoplanar || qh PRINTspheres) {
-      *outerplane += qh MAXabs_coord * qh_GEOMepsilon;
-      *innerplane -= qh MAXabs_coord * qh_GEOMepsilon;
-    }
-  }else 
-    *innerplane= *outerplane= 0;
-} /* geomplanes */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="markkeep">-</a>
-  
-  qh_markkeep( facetlist )
-    mark good facets that meet qh.KEEParea, qh.KEEPmerge, and qh.KEEPminArea
-    ignores visible facets (not part of convex hull)
-
-  returns:
-    may clear facet->good
-    recomputes qh.num_good
-
-  design:
-    get set of good facets
-    if qh.KEEParea
-      sort facets by area
-      clear facet->good for all but n largest facets
-    if qh.KEEPmerge
-      sort facets by merge count
-      clear facet->good for all but n most merged facets
-    if qh.KEEPminarea
-      clear facet->good if area too small
-    update qh.num_good    
-*/
-void qh_markkeep (facetT *facetlist) {
-  facetT *facet, **facetp;
-  setT *facets= qh_settemp (qh num_facets);
-  int size, count;
-
-  trace2((qh ferr, "qh_markkeep: only keep %d largest and/or %d most merged facets and/or min area %.2g\n",
-          qh KEEParea, qh KEEPmerge, qh KEEPminArea));
-  FORALLfacet_(facetlist) {
-    if (!facet->visible && facet->good)
-      qh_setappend (&facets, facet);
-  }
-  size= qh_setsize (facets);
-  if (qh KEEParea) {
-    qsort (SETaddr_(facets, facetT), size,
-             sizeof (facetT *), qh_compare_facetarea);
-    if ((count= size - qh KEEParea) > 0) {
-      FOREACHfacet_(facets) {
-        facet->good= False;
-        if (--count == 0)
-          break;
-      }
-    }
-  }
-  if (qh KEEPmerge) {
-    qsort (SETaddr_(facets, facetT), size,
-             sizeof (facetT *), qh_compare_facetmerge);
-    if ((count= size - qh KEEPmerge) > 0) {
-      FOREACHfacet_(facets) {
-        facet->good= False;
-        if (--count == 0)
-          break;
-      }
-    }
-  }
-  if (qh KEEPminArea < REALmax/2) {
-    FOREACHfacet_(facets) {
-      if (!facet->isarea || facet->f.area < qh KEEPminArea)
-	facet->good= False;
-    }
-  }
-  qh_settempfree (&facets);
-  count= 0;
-  FORALLfacet_(facetlist) {
-    if (facet->good)
-      count++;
-  }
-  qh num_good= count;
-} /* markkeep */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="markvoronoi">-</a>
-  
-  qh_markvoronoi( facetlist, facets, printall, islower, numcenters )
-    mark voronoi vertices for printing by site pairs
-  
-  returns:
-    temporary set of vertices indexed by pointid
-    islower set if printing lower hull (i.e., at least one facet is lower hull)
-    numcenters= total number of Voronoi vertices
-    bumps qh.printoutnum for vertex-at-infinity
-    clears all facet->seen and sets facet->seen2
-    
-    if selected
-      facet->visitid= Voronoi vertex id
-    else if upper hull (or 'Qu' and lower hull)
-      facet->visitid= 0
-    else
-      facet->visitid >= qh num_facets
-  
-  notes:
-    ignores qh.ATinfinity, if defined
-*/
-setT *qh_markvoronoi (facetT *facetlist, setT *facets, boolT printall, boolT *islowerp, int *numcentersp) {
-  int numcenters=0;
-  facetT *facet, **facetp;
-  setT *vertices;
-  boolT islower= False;
-
-  qh printoutnum++;
-  qh_clearcenters (qh_ASvoronoi);  /* in case, qh_printvdiagram2 called by user */
-  qh_vertexneighbors();
-  vertices= qh_pointvertex();
-  if (qh ATinfinity) 
-    SETelem_(vertices, qh num_points-1)= NULL;
-  qh visit_id++;
-  maximize_(qh visit_id, (unsigned) qh num_facets);
-  FORALLfacet_(facetlist) { 
-    if (printall || !qh_skipfacet (facet)) {
-      if (!facet->upperdelaunay) {
-        islower= True;
-	break;
-      }
-    }
-  }
-  FOREACHfacet_(facets) {
-    if (printall || !qh_skipfacet (facet)) {
-      if (!facet->upperdelaunay) {
-        islower= True;
-	break;
-      }
-    }
-  }
-  FORALLfacets {
-    if (facet->normal && (facet->upperdelaunay == islower))
-      facet->visitid= 0;  /* facetlist or facets may overwrite */
-    else
-      facet->visitid= qh visit_id;
-    facet->seen= False;
-    facet->seen2= True;
-  }
-  numcenters++;  /* qh_INFINITE */
-  FORALLfacet_(facetlist) {
-    if (printall || !qh_skipfacet (facet))
-      facet->visitid= numcenters++;
-  }
-  FOREACHfacet_(facets) {
-    if (printall || !qh_skipfacet (facet))
-      facet->visitid= numcenters++;  
-  }
-  *islowerp= islower;
-  *numcentersp= numcenters;
-  trace2((qh ferr, "qh_markvoronoi: islower %d numcenters %d\n", islower, numcenters));
-  return vertices;
-} /* markvoronoi */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="order_vertexneighbors">-</a>
-  
-  qh_order_vertexneighbors( vertex )
-    order facet neighbors of a 2-d or 3-d vertex by adjacency
-
-  notes:
-    does not orient the neighbors
-
-  design:
-    initialize a new neighbor set with the first facet in vertex->neighbors
-    while vertex->neighbors non-empty
-      select next neighbor in the previous facet's neighbor set
-    set vertex->neighbors to the new neighbor set
-*/
-void qh_order_vertexneighbors(vertexT *vertex) {
-  setT *newset;
-  facetT *facet, *neighbor, **neighborp;
-
-  trace4((qh ferr, "qh_order_vertexneighbors: order neighbors of v%d for 3-d\n", vertex->id));
-  newset= qh_settemp (qh_setsize (vertex->neighbors));
-  facet= (facetT*)qh_setdellast (vertex->neighbors);
-  qh_setappend (&newset, facet);
-  while (qh_setsize (vertex->neighbors)) {
-    FOREACHneighbor_(vertex) {
-      if (qh_setin (facet->neighbors, neighbor)) {
-        qh_setdel(vertex->neighbors, neighbor);
-        qh_setappend (&newset, neighbor);
-        facet= neighbor;
-        break;
-      }
-    }
-    if (!neighbor) {
-      fprintf (qh ferr, "qhull internal error (qh_order_vertexneighbors): no neighbor of v%d for f%d\n",
-        vertex->id, facet->id);
-      qh_errexit (qh_ERRqhull, facet, NULL);
-    }
-  }
-  qh_setfree (&vertex->neighbors);
-  qh_settemppop ();
-  vertex->neighbors= newset;
-} /* order_vertexneighbors */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printafacet">-</a>
-  
-  qh_printafacet( fp, format, facet, printall )
-    print facet to fp in given output format (see qh.PRINTout)
-
-  returns:
-    nop if !printall and qh_skipfacet()
-    nop if visible facet and NEWfacets and format != PRINTfacets
-    must match qh_countfacets
-
-  notes
-    preserves qh.visit_id
-    facet->normal may be null if PREmerge/MERGEexact and STOPcone before merge
-
-  see
-    qh_printbegin() and qh_printend()
-
-  design:
-    test for printing facet
-    call appropriate routine for format
-    or output results directly
-*/
-void qh_printafacet(FILE *fp, int format, facetT *facet, boolT printall) {
-  realT color[4], offset, dist, outerplane, innerplane;
-  boolT zerodiv;
-  coordT *point, *normp, *coordp, **pointp, *feasiblep;
-  int k;
-  vertexT *vertex, **vertexp;
-  facetT *neighbor, **neighborp;
-
-  if (!printall && qh_skipfacet (facet))
-    return;
-  if (facet->visible && qh NEWfacets && format != qh_PRINTfacets)
-    return;
-  qh printoutnum++;
-  switch (format) {
-  case qh_PRINTarea:
-    if (facet->isarea) {
-      fprintf (fp, qh_REAL_1, facet->f.area);
-      fprintf (fp, "\n");
-    }else
-      fprintf (fp, "0\n");
-    break;
-  case qh_PRINTcoplanars:
-    fprintf (fp, "%d", qh_setsize (facet->coplanarset));
-    FOREACHpoint_(facet->coplanarset)
-      fprintf (fp, " %d", qh_pointid (point));
-    fprintf (fp, "\n");
-    break;
-  case qh_PRINTcentrums:
-    qh_printcenter (fp, format, NULL, facet);
-    break;
-  case qh_PRINTfacets:
-    qh_printfacet (fp, facet);
-    break;
-  case qh_PRINTfacets_xridge:
-    qh_printfacetheader (fp, facet);
-    break;
-  case qh_PRINTgeom:  /* either 2 , 3, or 4-d by qh_printbegin */
-    if (!facet->normal)
-      break;
-    for (k= qh hull_dim; k--; ) {
-      color[k]= (facet->normal[k]+1.0)/2.0;
-      maximize_(color[k], -1.0);
-      minimize_(color[k], +1.0);
-    }
-    qh_projectdim3 (color, color);
-    if (qh PRINTdim != qh hull_dim)
-      qh_normalize2 (color, 3, True, NULL, NULL);
-    if (qh hull_dim <= 2)
-      qh_printfacet2geom (fp, facet, color);
-    else if (qh hull_dim == 3) {
-      if (facet->simplicial)
-        qh_printfacet3geom_simplicial (fp, facet, color);
-      else
-        qh_printfacet3geom_nonsimplicial (fp, facet, color);
-    }else {
-      if (facet->simplicial)
-        qh_printfacet4geom_simplicial (fp, facet, color);
-      else
-        qh_printfacet4geom_nonsimplicial (fp, facet, color);
-    }
-    break;
-  case qh_PRINTids:
-    fprintf (fp, "%d\n", facet->id);
-    break;
-  case qh_PRINTincidences:
-  case qh_PRINToff:
-  case qh_PRINTtriangles:
-    if (qh hull_dim == 3 && format != qh_PRINTtriangles) 
-      qh_printfacet3vertex (fp, facet, format);
-    else if (facet->simplicial || qh hull_dim == 2 || format == qh_PRINToff)
-      qh_printfacetNvertex_simplicial (fp, facet, format);
-    else
-      qh_printfacetNvertex_nonsimplicial (fp, facet, qh printoutvar++, format);
-    break;
-  case qh_PRINTinner:
-    qh_outerinner (facet, NULL, &innerplane);
-    offset= facet->offset - innerplane;
-    goto LABELprintnorm;
-    break; /* prevent warning */
-  case qh_PRINTmerges:
-    fprintf (fp, "%d\n", facet->nummerge);
-    break;
-  case qh_PRINTnormals:
-    offset= facet->offset;
-    goto LABELprintnorm;
-    break; /* prevent warning */
-  case qh_PRINTouter:
-    qh_outerinner (facet, &outerplane, NULL);
-    offset= facet->offset - outerplane;
-  LABELprintnorm:
-    if (!facet->normal) {
-      fprintf (fp, "no normal for facet f%d\n", facet->id);
-      break;
-    }
-    if (qh CDDoutput) {
-      fprintf (fp, qh_REAL_1, -offset);
-      for (k=0; k < qh hull_dim; k++) 
-	fprintf (fp, qh_REAL_1, -facet->normal[k]);
-    }else {
-      for (k=0; k < qh hull_dim; k++) 
-	fprintf (fp, qh_REAL_1, facet->normal[k]);
-      fprintf (fp, qh_REAL_1, offset);
-    }
-    fprintf (fp, "\n");
-    break;
-  case qh_PRINTmathematica:  /* either 2 or 3-d by qh_printbegin */
-  case qh_PRINTmaple:
-    if (qh hull_dim == 2)
-      qh_printfacet2math (fp, facet, format, qh printoutvar++);
-    else 
-      qh_printfacet3math (fp, facet, format, qh printoutvar++);
-    break;
-  case qh_PRINTneighbors:
-    fprintf (fp, "%d", qh_setsize (facet->neighbors));
-    FOREACHneighbor_(facet)
-      fprintf (fp, " %d", 
-	       neighbor->visitid ? neighbor->visitid - 1: - neighbor->id);
-    fprintf (fp, "\n");
-    break;
-  case qh_PRINTpointintersect:
-    if (!qh feasible_point) {
-      fprintf (fp, "qhull input error (qh_printafacet): option 'Fp' needs qh feasible_point\n");
-      qh_errexit( qh_ERRinput, NULL, NULL);
-    }
-    if (facet->offset > 0)
-      goto LABELprintinfinite;
-    point= coordp= (coordT*)qh_memalloc (qh normal_size);
-    normp= facet->normal;
-    feasiblep= qh feasible_point;
-    if (facet->offset < -qh MINdenom) {
-      for (k= qh hull_dim; k--; )
-        *(coordp++)= (*(normp++) / - facet->offset) + *(feasiblep++);
-    }else {
-      for (k= qh hull_dim; k--; ) {
-        *(coordp++)= qh_divzero (*(normp++), facet->offset, qh MINdenom_1,
-				 &zerodiv) + *(feasiblep++);
-        if (zerodiv) {
-          qh_memfree (point, qh normal_size);
-          goto LABELprintinfinite;
-        }
-      }
-    }
-    qh_printpoint (fp, NULL, point);
-    qh_memfree (point, qh normal_size);
-    break;
-  LABELprintinfinite:
-    for (k= qh hull_dim; k--; )
-      fprintf (fp, qh_REAL_1, qh_INFINITE);
-    fprintf (fp, "\n");   
-    break;
-  case qh_PRINTpointnearest:
-    FOREACHpoint_(facet->coplanarset) {
-      int id, id2;
-      vertex= qh_nearvertex (facet, point, &dist);
-      id= qh_pointid (vertex->point);
-      id2= qh_pointid (point);
-      fprintf (fp, "%d %d %d " qh_REAL_1 "\n", id, id2, facet->id, dist);
-    }
-    break;
-  case qh_PRINTpoints:  /* VORONOI only by qh_printbegin */
-    if (qh CDDoutput)
-      fprintf (fp, "1 ");
-    qh_printcenter (fp, format, NULL, facet);
-    break;
-  case qh_PRINTvertices:
-    fprintf (fp, "%d", qh_setsize (facet->vertices));
-    FOREACHvertex_(facet->vertices)
-      fprintf (fp, " %d", qh_pointid (vertex->point));
-    fprintf (fp, "\n");
-    break;
-  }
-} /* printafacet */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printbegin">-</a>
-  
-  qh_printbegin(  )
-    prints header for all output formats
-
-  returns:
-    checks for valid format
-  
-  notes:
-    uses qh.visit_id for 3/4off
-    changes qh.interior_point if printing centrums
-    qh_countfacets clears facet->visitid for non-good facets
-    
-  see
-    qh_printend() and qh_printafacet()
-    
-  design:
-    count facets and related statistics
-    print header for format
-*/
-void qh_printbegin (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall) {
-  int numfacets, numsimplicial, numridges, totneighbors, numcoplanars, numtricoplanars;
-  int i, num;
-  facetT *facet, **facetp;
-  vertexT *vertex, **vertexp;
-  setT *vertices;
-  pointT *point, **pointp, *pointtemp;
-
-  qh printoutnum= 0;
-  qh_countfacets (facetlist, facets, printall, &numfacets, &numsimplicial, 
-      &totneighbors, &numridges, &numcoplanars, &numtricoplanars);
-  switch (format) {
-  case qh_PRINTnone:
-    break;
-  case qh_PRINTarea:
-    fprintf (fp, "%d\n", numfacets);
-    break;
-  case qh_PRINTcoplanars:
-    fprintf (fp, "%d\n", numfacets);
-    break;
-  case qh_PRINTcentrums:
-    if (qh CENTERtype == qh_ASnone)
-      qh_clearcenters (qh_AScentrum);
-    fprintf (fp, "%d\n%d\n", qh hull_dim, numfacets);
-    break;
-  case qh_PRINTfacets:
-  case qh_PRINTfacets_xridge:
-    if (facetlist)
-      qh_printvertexlist (fp, "Vertices and facets:\n", facetlist, facets, printall);
-    break;
-  case qh_PRINTgeom: 
-    if (qh hull_dim > 4)  /* qh_initqhull_globals also checks */
-      goto LABELnoformat;
-    if (qh VORONOI && qh hull_dim > 3)  /* PRINTdim == DROPdim == hull_dim-1 */
-      goto LABELnoformat;
-    if (qh hull_dim == 2 && (qh PRINTridges || qh DOintersections))
-      fprintf (qh ferr, "qhull warning: output for ridges and intersections not implemented in 2-d\n");
-    if (qh hull_dim == 4 && (qh PRINTinner || qh PRINTouter ||
-			     (qh PRINTdim == 4 && qh PRINTcentrums)))
-      fprintf (qh ferr, "qhull warning: output for outer/inner planes and centrums not implemented in 4-d\n");
-    if (qh PRINTdim == 4 && (qh PRINTspheres))
-      fprintf (qh ferr, "qhull warning: output for vertices not implemented in 4-d\n");
-    if (qh PRINTdim == 4 && qh DOintersections && qh PRINTnoplanes)
-      fprintf (qh ferr, "qhull warning: 'Gnh' generates no output in 4-d\n");
-    if (qh PRINTdim == 2) {
-      fprintf(fp, "{appearance {linewidth 3} LIST # %s | %s\n",
-	      qh rbox_command, qh qhull_command);
-    }else if (qh PRINTdim == 3) {
-      fprintf(fp, "{appearance {+edge -evert linewidth 2} LIST # %s | %s\n",
-	      qh rbox_command, qh qhull_command);
-    }else if (qh PRINTdim == 4) {
-      qh visit_id++;
-      num= 0;
-      FORALLfacet_(facetlist)    /* get number of ridges to be printed */
-        qh_printend4geom (NULL, facet, &num, printall);
-      FOREACHfacet_(facets)
-        qh_printend4geom (NULL, facet, &num, printall);
-      qh ridgeoutnum= num;
-      qh printoutvar= 0;  /* counts number of ridges in output */
-      fprintf (fp, "LIST # %s | %s\n", qh rbox_command, qh qhull_command);
-    }
-    if (qh PRINTdots) {
-      qh printoutnum++;
-      num= qh num_points + qh_setsize (qh other_points);
-      if (qh DELAUNAY && qh ATinfinity)
-	num--;
-      if (qh PRINTdim == 4)
-        fprintf (fp, "4VECT %d %d 1\n", num, num);
-      else
-	fprintf (fp, "VECT %d %d 1\n", num, num);
-      for (i= num; i--; ) {
-        if (i % 20 == 0)
-          fprintf (fp, "\n");
-	fprintf (fp, "1 ");
-      }
-      fprintf (fp, "# 1 point per line\n1 ");
-      for (i= num-1; i--; ) {
-        if (i % 20 == 0)
-          fprintf (fp, "\n");
-	fprintf (fp, "0 ");
-      }
-      fprintf (fp, "# 1 color for all\n");
-      FORALLpoints {
-        if (!qh DELAUNAY || !qh ATinfinity || qh_pointid(point) != qh num_points-1) {
-	  if (qh PRINTdim == 4)
-	    qh_printpoint (fp, NULL, point);
-	  else
-	    qh_printpoint3 (fp, point);
-	}
-      }
-      FOREACHpoint_(qh other_points) {
-	if (qh PRINTdim == 4)
-	  qh_printpoint (fp, NULL, point);
-	else
-	  qh_printpoint3 (fp, point);
-      }
-      fprintf (fp, "0 1 1 1  # color of points\n");
-    }
-    if (qh PRINTdim == 4  && !qh PRINTnoplanes)
-      /* 4dview loads up multiple 4OFF objects slowly */
-      fprintf(fp, "4OFF %d %d 1\n", 3*qh ridgeoutnum, qh ridgeoutnum);
-    qh PRINTcradius= 2 * qh DISTround;  /* include test DISTround */
-    if (qh PREmerge) {
-      maximize_(qh PRINTcradius, qh premerge_centrum + qh DISTround);
-    }else if (qh POSTmerge)
-      maximize_(qh PRINTcradius, qh postmerge_centrum + qh DISTround);
-    qh PRINTradius= qh PRINTcradius;
-    if (qh PRINTspheres + qh PRINTcoplanar)
-      maximize_(qh PRINTradius, qh MAXabs_coord * qh_MINradius);
-    if (qh premerge_cos < REALmax/2) {
-      maximize_(qh PRINTradius, (1- qh premerge_cos) * qh MAXabs_coord);
-    }else if (!qh PREmerge && qh POSTmerge && qh postmerge_cos < REALmax/2) {
-      maximize_(qh PRINTradius, (1- qh postmerge_cos) * qh MAXabs_coord);
-    }
-    maximize_(qh PRINTradius, qh MINvisible); 
-    if (qh JOGGLEmax < REALmax/2)
-      qh PRINTradius += qh JOGGLEmax * sqrt (qh hull_dim);
-    if (qh PRINTdim != 4 &&
-	(qh PRINTcoplanar || qh PRINTspheres || qh PRINTcentrums)) {
-      vertices= qh_facetvertices (facetlist, facets, printall);
-      if (qh PRINTspheres && qh PRINTdim <= 3)
-         qh_printspheres (fp, vertices, qh PRINTradius);
-      if (qh PRINTcoplanar || qh PRINTcentrums) {
-        qh firstcentrum= True;
-        if (qh PRINTcoplanar&& !qh PRINTspheres) {
-          FOREACHvertex_(vertices) 
-            qh_printpointvect2 (fp, vertex->point, NULL,
-				qh interior_point, qh PRINTradius);
-	}
-        FORALLfacet_(facetlist) {
-	  if (!printall && qh_skipfacet(facet))
-	    continue;
-	  if (!facet->normal)
-	    continue;
-          if (qh PRINTcentrums && qh PRINTdim <= 3)
-            qh_printcentrum (fp, facet, qh PRINTcradius);
-	  if (!qh PRINTcoplanar)
-	    continue;
-          FOREACHpoint_(facet->coplanarset)
-            qh_printpointvect2 (fp, point, facet->normal, NULL, qh PRINTradius);
-          FOREACHpoint_(facet->outsideset)
-            qh_printpointvect2 (fp, point, facet->normal, NULL, qh PRINTradius);
-        }
-        FOREACHfacet_(facets) {
-	  if (!printall && qh_skipfacet(facet))
-	    continue;
-	  if (!facet->normal)
-	    continue;
-          if (qh PRINTcentrums && qh PRINTdim <= 3)
-            qh_printcentrum (fp, facet, qh PRINTcradius);
-	  if (!qh PRINTcoplanar)
-	    continue;
-          FOREACHpoint_(facet->coplanarset)
-            qh_printpointvect2 (fp, point, facet->normal, NULL, qh PRINTradius);
-          FOREACHpoint_(facet->outsideset)
-            qh_printpointvect2 (fp, point, facet->normal, NULL, qh PRINTradius);
-        }
-      }
-      qh_settempfree (&vertices);
-    }
-    qh visit_id++; /* for printing hyperplane intersections */
-    break;
-  case qh_PRINTids:
-    fprintf (fp, "%d\n", numfacets);
-    break;
-  case qh_PRINTincidences:
-    if (qh VORONOI && qh PRINTprecision)
-      fprintf (qh ferr, "qhull warning: writing Delaunay.  Use 'p' or 'o' for Voronoi centers\n");
-    qh printoutvar= qh vertex_id;  /* centrum id for non-simplicial facets */
-    if (qh hull_dim <= 3)
-      fprintf(fp, "%d\n", numfacets);
-    else
-      fprintf(fp, "%d\n", numsimplicial+numridges);
-    break;
-  case qh_PRINTinner:
-  case qh_PRINTnormals:
-  case qh_PRINTouter:
-    if (qh CDDoutput)
-      fprintf (fp, "%s | %s\nbegin\n    %d %d real\n", qh rbox_command, 
-              qh qhull_command, numfacets, qh hull_dim+1);
-    else
-      fprintf (fp, "%d\n%d\n", qh hull_dim+1, numfacets);
-    break;
-  case qh_PRINTmathematica:  
-  case qh_PRINTmaple:
-    if (qh hull_dim > 3)  /* qh_initbuffers also checks */
-      goto LABELnoformat;
-    if (qh VORONOI)
-      fprintf (qh ferr, "qhull warning: output is the Delaunay triangulation\n");
-    if (format == qh_PRINTmaple) {
-      if (qh hull_dim == 2)
-	fprintf(fp, "PLOT(CURVES(\n");
-      else
-	fprintf(fp, "PLOT3D(POLYGONS(\n");
-    }else
-      fprintf(fp, "{\n");
-    qh printoutvar= 0;   /* counts number of facets for notfirst */
-    break;
-  case qh_PRINTmerges:
-    fprintf (fp, "%d\n", numfacets);
-    break;
-  case qh_PRINTpointintersect:
-    fprintf (fp, "%d\n%d\n", qh hull_dim, numfacets);
-    break;
-  case qh_PRINTneighbors:
-    fprintf (fp, "%d\n", numfacets);
-    break;
-  case qh_PRINToff:
-  case qh_PRINTtriangles:
-    if (qh VORONOI)
-      goto LABELnoformat;
-    num = qh hull_dim;
-    if (format == qh_PRINToff || qh hull_dim == 2)
-      fprintf (fp, "%d\n%d %d %d\n", num, 
-        qh num_points+qh_setsize (qh other_points), numfacets, totneighbors/2);
-    else { /* qh_PRINTtriangles */
-      qh printoutvar= qh num_points+qh_setsize (qh other_points); /* first centrum */
-      if (qh DELAUNAY)
-        num--;  /* drop last dimension */
-      fprintf (fp, "%d\n%d %d %d\n", num, qh printoutvar 
-	+ numfacets - numsimplicial, numsimplicial + numridges, totneighbors/2);
-    }
-    FORALLpoints
-      qh_printpointid (qh fout, NULL, num, point, -1);
-    FOREACHpoint_(qh other_points)
-      qh_printpointid (qh fout, NULL, num, point, -1);
-    if (format == qh_PRINTtriangles && qh hull_dim > 2) {
-      FORALLfacets {
-	if (!facet->simplicial && facet->visitid)
-          qh_printcenter (qh fout, format, NULL, facet);
-      }
-    }
-    break;
-  case qh_PRINTpointnearest:
-    fprintf (fp, "%d\n", numcoplanars);
-    break;
-  case qh_PRINTpoints:
-    if (!qh VORONOI)
-      goto LABELnoformat;
-    if (qh CDDoutput)
-      fprintf (fp, "%s | %s\nbegin\n%d %d real\n", qh rbox_command,
-             qh qhull_command, numfacets, qh hull_dim);
-    else
-      fprintf (fp, "%d\n%d\n", qh hull_dim-1, numfacets);
-    break;
-  case qh_PRINTvertices:
-    fprintf (fp, "%d\n", numfacets);
-    break;
-  case qh_PRINTsummary:
-  default:
-  LABELnoformat:
-    fprintf (qh ferr, "qhull internal error (qh_printbegin): can not use this format for dimension %d\n",
-         qh hull_dim);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-} /* printbegin */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printcenter">-</a>
-  
-  qh_printcenter( fp, string, facet )
-    print facet->center as centrum or Voronoi center
-    string may be NULL.  Don't include '%' codes.
-    nop if qh CENTERtype neither CENTERvoronoi nor CENTERcentrum
-    if upper envelope of Delaunay triangulation and point at-infinity
-      prints qh_INFINITE instead;
-
-  notes:
-    defines facet->center if needed
-    if format=PRINTgeom, adds a 0 if would otherwise be 2-d
-*/
-void qh_printcenter (FILE *fp, int format, char *string, facetT *facet) {
-  int k, num;
-
-  if (qh CENTERtype != qh_ASvoronoi && qh CENTERtype != qh_AScentrum)
-    return;
-  if (string)
-    fprintf (fp, string, facet->id);
-  if (qh CENTERtype == qh_ASvoronoi) {
-    num= qh hull_dim-1;
-    if (!facet->normal || !facet->upperdelaunay || !qh ATinfinity) {
-      if (!facet->center)
-        facet->center= qh_facetcenter (facet->vertices);
-      for (k=0; k < num; k++)
-        fprintf (fp, qh_REAL_1, facet->center[k]);
-    }else {
-      for (k=0; k < num; k++)
-        fprintf (fp, qh_REAL_1, qh_INFINITE);
-    }
-  }else /* qh CENTERtype == qh_AScentrum */ {
-    num= qh hull_dim;
-    if (format == qh_PRINTtriangles && qh DELAUNAY) 
-      num--;
-    if (!facet->center) 
-      facet->center= qh_getcentrum (facet);
-    for (k=0; k < num; k++)
-      fprintf (fp, qh_REAL_1, facet->center[k]);
-  }
-  if (format == qh_PRINTgeom && num == 2)
-    fprintf (fp, " 0\n");
-  else
-    fprintf (fp, "\n");
-} /* printcenter */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printcentrum">-</a>
-  
-  qh_printcentrum( fp, facet, radius )
-    print centrum for a facet in OOGL format
-    radius defines size of centrum
-    2-d or 3-d only
-
-  returns:
-    defines facet->center if needed
-*/
-void qh_printcentrum (FILE *fp, facetT *facet, realT radius) {
-  pointT *centrum, *projpt;
-  boolT tempcentrum= False;
-  realT xaxis[4], yaxis[4], normal[4], dist;
-  realT green[3]={0, 1, 0};
-  vertexT *apex;
-  int k;
-  
-  if (qh CENTERtype == qh_AScentrum) {
-    if (!facet->center)
-      facet->center= qh_getcentrum (facet);
-    centrum= facet->center;
-  }else {
-    centrum= qh_getcentrum (facet);
-    tempcentrum= True;
-  }
-  fprintf (fp, "{appearance {-normal -edge normscale 0} ");
-  if (qh firstcentrum) {
-    qh firstcentrum= False;
-    fprintf (fp, "{INST geom { define centrum CQUAD  # f%d\n\
--0.3 -0.3 0.0001     0 0 1 1\n\
- 0.3 -0.3 0.0001     0 0 1 1\n\
- 0.3  0.3 0.0001     0 0 1 1\n\
--0.3  0.3 0.0001     0 0 1 1 } transform { \n", facet->id);
-  }else
-    fprintf (fp, "{INST geom { : centrum } transform { # f%d\n", facet->id);
-  apex= SETfirstt_(facet->vertices, vertexT);
-  qh_distplane(apex->point, facet, &dist);
-  projpt= qh_projectpoint(apex->point, facet, dist);
-  for (k= qh hull_dim; k--; ) {
-    xaxis[k]= projpt[k] - centrum[k];
-    normal[k]= facet->normal[k];
-  }
-  if (qh hull_dim == 2) {
-    xaxis[2]= 0;
-    normal[2]= 0;
-  }else if (qh hull_dim == 4) {
-    qh_projectdim3 (xaxis, xaxis);
-    qh_projectdim3 (normal, normal);
-    qh_normalize2 (normal, qh PRINTdim, True, NULL, NULL);
-  }
-  qh_crossproduct (3, xaxis, normal, yaxis);
-  fprintf (fp, "%8.4g %8.4g %8.4g 0\n", xaxis[0], xaxis[1], xaxis[2]);
-  fprintf (fp, "%8.4g %8.4g %8.4g 0\n", yaxis[0], yaxis[1], yaxis[2]);
-  fprintf (fp, "%8.4g %8.4g %8.4g 0\n", normal[0], normal[1], normal[2]);
-  qh_printpoint3 (fp, centrum);
-  fprintf (fp, "1 }}}\n"); 
-  qh_memfree (projpt, qh normal_size);
-  qh_printpointvect (fp, centrum, facet->normal, NULL, radius, green);
-  if (tempcentrum)
-    qh_memfree (centrum, qh normal_size);
-} /* printcentrum */
-  
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printend">-</a>
-  
-  qh_printend( fp, format )
-    prints trailer for all output formats
-
-  see:
-    qh_printbegin() and qh_printafacet()
-      
-*/
-void qh_printend (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall) {
-  int num;
-  facetT *facet, **facetp;
-
-  if (!qh printoutnum)
-    fprintf (qh ferr, "qhull warning: no facets printed\n");
-  switch (format) {
-  case qh_PRINTgeom:
-    if (qh hull_dim == 4 && qh DROPdim < 0  && !qh PRINTnoplanes) {
-      qh visit_id++;
-      num= 0;
-      FORALLfacet_(facetlist)
-        qh_printend4geom (fp, facet,&num, printall);
-      FOREACHfacet_(facets) 
-        qh_printend4geom (fp, facet, &num, printall);
-      if (num != qh ridgeoutnum || qh printoutvar != qh ridgeoutnum) {
-	fprintf (qh ferr, "qhull internal error (qh_printend): number of ridges %d != number printed %d and at end %d\n", qh ridgeoutnum, qh printoutvar, num);
-	qh_errexit (qh_ERRqhull, NULL, NULL);
-      }
-    }else
-      fprintf(fp, "}\n");
-    break;
-  case qh_PRINTinner:
-  case qh_PRINTnormals:
-  case qh_PRINTouter:
-    if (qh CDDoutput) 
-      fprintf (fp, "end\n");
-    break;
-  case qh_PRINTmaple:
-    fprintf(fp, "));\n");
-    break;
-  case qh_PRINTmathematica:
-    fprintf(fp, "}\n");
-    break;
-  case qh_PRINTpoints:
-    if (qh CDDoutput)
-      fprintf (fp, "end\n");
-    break;
-  }
-} /* printend */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printend4geom">-</a>
-  
-  qh_printend4geom( fp, facet, numridges, printall )
-    helper function for qh_printbegin/printend
-
-  returns:
-    number of printed ridges
-  
-  notes:
-    just counts printed ridges if fp=NULL
-    uses facet->visitid
-    must agree with qh_printfacet4geom...
-
-  design:
-    computes color for facet from its normal
-    prints each ridge of facet 
-*/
-void qh_printend4geom (FILE *fp, facetT *facet, int *nump, boolT printall) {
-  realT color[3];
-  int i, num= *nump;
-  facetT *neighbor, **neighborp;
-  ridgeT *ridge, **ridgep;
-  
-  if (!printall && qh_skipfacet(facet))
-    return;
-  if (qh PRINTnoplanes || (facet->visible && qh NEWfacets))
-    return;
-  if (!facet->normal)
-    return;
-  if (fp) {
-    for (i=0; i < 3; i++) {
-      color[i]= (facet->normal[i]+1.0)/2.0;
-      maximize_(color[i], -1.0);
-      minimize_(color[i], +1.0);
-    }
-  }
-  facet->visitid= qh visit_id;
-  if (facet->simplicial) {
-    FOREACHneighbor_(facet) {
-      if (neighbor->visitid != qh visit_id) {
-	if (fp)
-          fprintf (fp, "3 %d %d %d %8.4g %8.4g %8.4g 1 # f%d f%d\n",
-		 3*num, 3*num+1, 3*num+2, color[0], color[1], color[2],
-		 facet->id, neighbor->id);
-	num++;
-      }
-    }
-  }else {
-    FOREACHridge_(facet->ridges) {
-      neighbor= otherfacet_(ridge, facet);
-      if (neighbor->visitid != qh visit_id) {
-	if (fp)
-          fprintf (fp, "3 %d %d %d %8.4g %8.4g %8.4g 1 #r%d f%d f%d\n",
-		 3*num, 3*num+1, 3*num+2, color[0], color[1], color[2],
-		 ridge->id, facet->id, neighbor->id);
-	num++;
-      }
-    }
-  }
-  *nump= num;
-} /* printend4geom */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printextremes">-</a>
-  
-  qh_printextremes( fp, facetlist, facets, printall )
-    print extreme points for convex hulls or halfspace intersections
-
-  notes:
-    #points, followed by ids, one per line
-    
-    sorted by id
-    same order as qh_printpoints_out if no coplanar/interior points
-*/
-void qh_printextremes (FILE *fp, facetT *facetlist, setT *facets, int printall) {
-  setT *vertices, *points;
-  pointT *point;
-  vertexT *vertex, **vertexp;
-  int id;
-  int numpoints=0, point_i, point_n;
-  int allpoints= qh num_points + qh_setsize (qh other_points);
-
-  points= qh_settemp (allpoints);
-  qh_setzero (points, 0, allpoints);
-  vertices= qh_facetvertices (facetlist, facets, printall);
-  FOREACHvertex_(vertices) {
-    id= qh_pointid (vertex->point);
-    if (id >= 0) {
-      SETelem_(points, id)= vertex->point;
-      numpoints++;
-    }
-  }
-  qh_settempfree (&vertices);
-  fprintf (fp, "%d\n", numpoints);
-  FOREACHpoint_i_(points) {
-    if (point) 
-      fprintf (fp, "%d\n", point_i);
-  }
-  qh_settempfree (&points);
-} /* printextremes */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printextremes_2d">-</a>
-  
-  qh_printextremes_2d( fp, facetlist, facets, printall )
-    prints point ids for facets in qh_ORIENTclock order
-
-  notes:
-    #points, followed by ids, one per line
-    if facetlist/facets are disjoint than the output includes skips
-    errors if facets form a loop
-    does not print coplanar points
-*/
-void qh_printextremes_2d (FILE *fp, facetT *facetlist, setT *facets, int printall) {
-  int numfacets, numridges, totneighbors, numcoplanars, numsimplicial, numtricoplanars;
-  setT *vertices;
-  facetT *facet, *startfacet, *nextfacet;
-  vertexT *vertexA, *vertexB;
-
-  qh_countfacets (facetlist, facets, printall, &numfacets, &numsimplicial, 
-      &totneighbors, &numridges, &numcoplanars, &numtricoplanars); /* marks qh visit_id */
-  vertices= qh_facetvertices (facetlist, facets, printall);
-  fprintf(fp, "%d\n", qh_setsize (vertices));
-  qh_settempfree (&vertices);
-  if (!numfacets)
-    return;
-  facet= startfacet= facetlist ? facetlist : SETfirstt_(facets, facetT);
-  qh vertex_visit++;
-  qh visit_id++;
-  do {
-    if (facet->toporient ^ qh_ORIENTclock) {
-      vertexA= SETfirstt_(facet->vertices, vertexT);
-      vertexB= SETsecondt_(facet->vertices, vertexT);
-      nextfacet= SETfirstt_(facet->neighbors, facetT);
-    }else {
-      vertexA= SETsecondt_(facet->vertices, vertexT);
-      vertexB= SETfirstt_(facet->vertices, vertexT);
-      nextfacet= SETsecondt_(facet->neighbors, facetT);
-    }
-    if (facet->visitid == qh visit_id) {
-      fprintf(qh ferr, "qh_printextremes_2d: loop in facet list.  facet %d nextfacet %d\n",
-                 facet->id, nextfacet->id);
-      qh_errexit2 (qh_ERRqhull, facet, nextfacet);
-    }
-    if (facet->visitid) {
-      if (vertexA->visitid != qh vertex_visit) {
-	vertexA->visitid= qh vertex_visit;
-	fprintf(fp, "%d\n", qh_pointid (vertexA->point));
-      }
-      if (vertexB->visitid != qh vertex_visit) {
-	vertexB->visitid= qh vertex_visit;
-	fprintf(fp, "%d\n", qh_pointid (vertexB->point));
-      }
-    }
-    facet->visitid= qh visit_id;
-    facet= nextfacet;
-  }while (facet && facet != startfacet);
-} /* printextremes_2d */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printextremes_d">-</a>
-  
-  qh_printextremes_d( fp, facetlist, facets, printall )
-    print extreme points of input sites for Delaunay triangulations
-
-  notes:
-    #points, followed by ids, one per line
-    
-    unordered
-*/
-void qh_printextremes_d (FILE *fp, facetT *facetlist, setT *facets, int printall) {
-  setT *vertices;
-  vertexT *vertex, **vertexp;
-  boolT upperseen, lowerseen;
-  facetT *neighbor, **neighborp;
-  int numpoints=0;
-
-  vertices= qh_facetvertices (facetlist, facets, printall);
-  qh_vertexneighbors();
-  FOREACHvertex_(vertices) {
-    upperseen= lowerseen= False;
-    FOREACHneighbor_(vertex) {
-      if (neighbor->upperdelaunay)
-        upperseen= True;
-      else
-        lowerseen= True;
-    }
-    if (upperseen && lowerseen) {
-      vertex->seen= True;
-      numpoints++;
-    }else
-      vertex->seen= False;
-  }
-  fprintf (fp, "%d\n", numpoints);
-  FOREACHvertex_(vertices) {
-    if (vertex->seen)
-      fprintf (fp, "%d\n", qh_pointid (vertex->point));
-  }
-  qh_settempfree (&vertices);
-} /* printextremes_d */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet">-</a>
-  
-  qh_printfacet( fp, facet )
-    prints all fields of a facet to fp
-
-  notes:
-    ridges printed in neighbor order
-*/
-void qh_printfacet(FILE *fp, facetT *facet) {
-
-  qh_printfacetheader (fp, facet);
-  if (facet->ridges)
-    qh_printfacetridges (fp, facet);
-} /* printfacet */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet2geom">-</a>
-  
-  qh_printfacet2geom( fp, facet, color )
-    print facet as part of a 2-d VECT for Geomview
-  
-    notes:
-      assume precise calculations in io.c with roundoff covered by qh_GEOMepsilon
-      mindist is calculated within io.c.  maxoutside is calculated elsewhere
-      so a DISTround error may have occured.
-*/
-void qh_printfacet2geom(FILE *fp, facetT *facet, realT color[3]) {
-  pointT *point0, *point1;
-  realT mindist, innerplane, outerplane;
-  int k;
-
-  qh_facet2point (facet, &point0, &point1, &mindist);
-  qh_geomplanes (facet, &outerplane, &innerplane);
-  if (qh PRINTouter || (!qh PRINTnoplanes && !qh PRINTinner))
-    qh_printfacet2geom_points(fp, point0, point1, facet, outerplane, color);
-  if (qh PRINTinner || (!qh PRINTnoplanes && !qh PRINTouter &&
-                outerplane - innerplane > 2 * qh MAXabs_coord * qh_GEOMepsilon)) {
-    for(k= 3; k--; )
-      color[k]= 1.0 - color[k];
-    qh_printfacet2geom_points(fp, point0, point1, facet, innerplane, color);
-  }
-  qh_memfree (point1, qh normal_size);
-  qh_memfree (point0, qh normal_size); 
-} /* printfacet2geom */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet2geom_points">-</a>
-  
-  qh_printfacet2geom_points( fp, point1, point2, facet, offset, color )
-    prints a 2-d facet as a VECT with 2 points at some offset.   
-    The points are on the facet's plane.
-*/
-void qh_printfacet2geom_points(FILE *fp, pointT *point1, pointT *point2,
-			       facetT *facet, realT offset, realT color[3]) {
-  pointT *p1= point1, *p2= point2;
-
-  fprintf(fp, "VECT 1 2 1 2 1 # f%d\n", facet->id);
-  if (offset != 0.0) {
-    p1= qh_projectpoint (p1, facet, -offset);
-    p2= qh_projectpoint (p2, facet, -offset);
-  }
-  fprintf(fp, "%8.4g %8.4g %8.4g\n%8.4g %8.4g %8.4g\n",
-           p1[0], p1[1], 0.0, p2[0], p2[1], 0.0);
-  if (offset != 0.0) {
-    qh_memfree (p1, qh normal_size);
-    qh_memfree (p2, qh normal_size);
-  }
-  fprintf(fp, "%8.4g %8.4g %8.4g 1.0\n", color[0], color[1], color[2]);
-} /* printfacet2geom_points */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet2math">-</a>
-  
-  qh_printfacet2math( fp, facet, format, notfirst )
-    print 2-d Maple or Mathematica output for a facet
-    may be non-simplicial
-
-  notes:
-    use %16.8f since Mathematica 2.2 does not handle exponential format
-    see qh_printfacet3math
-*/
-void qh_printfacet2math(FILE *fp, facetT *facet, int format, int notfirst) {
-  pointT *point0, *point1;
-  realT mindist;
-  char *pointfmt;
-  
-  qh_facet2point (facet, &point0, &point1, &mindist);
-  if (notfirst)
-    fprintf(fp, ",");
-  if (format == qh_PRINTmaple)
-    pointfmt= "[[%16.8f, %16.8f], [%16.8f, %16.8f]]\n";
-  else
-    pointfmt= "Line[{{%16.8f, %16.8f}, {%16.8f, %16.8f}}]\n";
-  fprintf(fp, pointfmt, point0[0], point0[1], point1[0], point1[1]);
-  qh_memfree (point1, qh normal_size);
-  qh_memfree (point0, qh normal_size);
-} /* printfacet2math */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet3geom_nonsimplicial">-</a>
-  
-  qh_printfacet3geom_nonsimplicial( fp, facet, color )
-    print Geomview OFF for a 3-d nonsimplicial facet.
-    if DOintersections, prints ridges to unvisited neighbors (qh visit_id) 
-
-  notes
-    uses facet->visitid for intersections and ridges
-*/
-void qh_printfacet3geom_nonsimplicial(FILE *fp, facetT *facet, realT color[3]) {
-  ridgeT *ridge, **ridgep;
-  setT *projectedpoints, *vertices;
-  vertexT *vertex, **vertexp, *vertexA, *vertexB;
-  pointT *projpt, *point, **pointp;
-  facetT *neighbor;
-  realT dist, outerplane, innerplane;
-  int cntvertices, k;
-  realT black[3]={0, 0, 0}, green[3]={0, 1, 0};
-
-  qh_geomplanes (facet, &outerplane, &innerplane); 
-  vertices= qh_facet3vertex (facet); /* oriented */
-  cntvertices= qh_setsize(vertices);
-  projectedpoints= qh_settemp(cntvertices);
-  FOREACHvertex_(vertices) {
-    zinc_(Zdistio);
-    qh_distplane(vertex->point, facet, &dist);
-    projpt= qh_projectpoint(vertex->point, facet, dist);
-    qh_setappend (&projectedpoints, projpt);
-  }
-  if (qh PRINTouter || (!qh PRINTnoplanes && !qh PRINTinner))
-    qh_printfacet3geom_points(fp, projectedpoints, facet, outerplane, color);
-  if (qh PRINTinner || (!qh PRINTnoplanes && !qh PRINTouter &&
-                outerplane - innerplane > 2 * qh MAXabs_coord * qh_GEOMepsilon)) {
-    for (k=3; k--; )
-      color[k]= 1.0 - color[k];
-    qh_printfacet3geom_points(fp, projectedpoints, facet, innerplane, color);
-  }
-  FOREACHpoint_(projectedpoints)
-    qh_memfree (point, qh normal_size);
-  qh_settempfree(&projectedpoints);
-  qh_settempfree(&vertices);
-  if ((qh DOintersections || qh PRINTridges)
-  && (!facet->visible || !qh NEWfacets)) {
-    facet->visitid= qh visit_id;
-    FOREACHridge_(facet->ridges) {
-      neighbor= otherfacet_(ridge, facet);
-      if (neighbor->visitid != qh visit_id) {
-        if (qh DOintersections)
-          qh_printhyperplaneintersection(fp, facet, neighbor, ridge->vertices, black);
-        if (qh PRINTridges) {
-          vertexA= SETfirstt_(ridge->vertices, vertexT);
-          vertexB= SETsecondt_(ridge->vertices, vertexT);
-          qh_printline3geom (fp, vertexA->point, vertexB->point, green);
-        }
-      }
-    }
-  }
-} /* printfacet3geom_nonsimplicial */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet3geom_points">-</a>
-  
-  qh_printfacet3geom_points( fp, points, facet, offset )
-    prints a 3-d facet as OFF Geomview object. 
-    offset is relative to the facet's hyperplane
-    Facet is determined as a list of points
-*/
-void qh_printfacet3geom_points(FILE *fp, setT *points, facetT *facet, realT offset, realT color[3]) {
-  int k, n= qh_setsize(points), i;
-  pointT *point, **pointp;
-  setT *printpoints;
-
-  fprintf(fp, "{ OFF %d 1 1 # f%d\n", n, facet->id);
-  if (offset != 0.0) {
-    printpoints= qh_settemp (n);
-    FOREACHpoint_(points) 
-      qh_setappend (&printpoints, qh_projectpoint(point, facet, -offset));
-  }else
-    printpoints= points;
-  FOREACHpoint_(printpoints) {
-    for (k=0; k < qh hull_dim; k++) {
-      if (k == qh DROPdim)
-        fprintf(fp, "0 ");
-      else
-        fprintf(fp, "%8.4g ", point[k]);
-    }
-    if (printpoints != points)
-      qh_memfree (point, qh normal_size);
-    fprintf (fp, "\n");
-  }
-  if (printpoints != points)
-    qh_settempfree (&printpoints);
-  fprintf(fp, "%d ", n);
-  for(i= 0; i < n; i++)
-    fprintf(fp, "%d ", i);
-  fprintf(fp, "%8.4g %8.4g %8.4g 1.0 }\n", color[0], color[1], color[2]);
-} /* printfacet3geom_points */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet3geom_simplicial">-</a>
-  
-  qh_printfacet3geom_simplicial(  )
-    print Geomview OFF for a 3-d simplicial facet.
-
-  notes:
-    may flip color
-    uses facet->visitid for intersections and ridges
-
-    assume precise calculations in io.c with roundoff covered by qh_GEOMepsilon
-    innerplane may be off by qh DISTround.  Maxoutside is calculated elsewhere
-    so a DISTround error may have occured.
-*/
-void qh_printfacet3geom_simplicial(FILE *fp, facetT *facet, realT color[3]) {
-  setT *points, *vertices;
-  vertexT *vertex, **vertexp, *vertexA, *vertexB;
-  facetT *neighbor, **neighborp;
-  realT outerplane, innerplane;
-  realT black[3]={0, 0, 0}, green[3]={0, 1, 0};
-  int k;
-
-  qh_geomplanes (facet, &outerplane, &innerplane); 
-  vertices= qh_facet3vertex (facet);
-  points= qh_settemp (qh TEMPsize);
-  FOREACHvertex_(vertices)
-    qh_setappend(&points, vertex->point);
-  if (qh PRINTouter || (!qh PRINTnoplanes && !qh PRINTinner))
-    qh_printfacet3geom_points(fp, points, facet, outerplane, color);
-  if (qh PRINTinner || (!qh PRINTnoplanes && !qh PRINTouter &&
-              outerplane - innerplane > 2 * qh MAXabs_coord * qh_GEOMepsilon)) {
-    for (k= 3; k--; )
-      color[k]= 1.0 - color[k];
-    qh_printfacet3geom_points(fp, points, facet, innerplane, color);
-  }
-  qh_settempfree(&points);
-  qh_settempfree(&vertices);
-  if ((qh DOintersections || qh PRINTridges)
-  && (!facet->visible || !qh NEWfacets)) {
-    facet->visitid= qh visit_id;
-    FOREACHneighbor_(facet) {
-      if (neighbor->visitid != qh visit_id) {
-	vertices= qh_setnew_delnthsorted (facet->vertices, qh hull_dim,
-	                  SETindex_(facet->neighbors, neighbor), 0);
-        if (qh DOintersections)
-	   qh_printhyperplaneintersection(fp, facet, neighbor, vertices, black); 
-        if (qh PRINTridges) {
-          vertexA= SETfirstt_(vertices, vertexT);
-          vertexB= SETsecondt_(vertices, vertexT);
-          qh_printline3geom (fp, vertexA->point, vertexB->point, green);
-        }
-	qh_setfree(&vertices);
-      }
-    }
-  }
-} /* printfacet3geom_simplicial */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet3math">-</a>
-  
-  qh_printfacet3math( fp, facet, notfirst )
-    print 3-d Maple or Mathematica output for a facet
-
-  notes:
-    may be non-simplicial
-    use %16.8f since Mathematica 2.2 does not handle exponential format
-    see qh_printfacet2math
-*/
-void qh_printfacet3math (FILE *fp, facetT *facet, int format, int notfirst) {
-  vertexT *vertex, **vertexp;
-  setT *points, *vertices;
-  pointT *point, **pointp;
-  boolT firstpoint= True;
-  realT dist;
-  char *pointfmt, *endfmt;
-  
-  if (notfirst)
-    fprintf(fp, ",\n");
-  vertices= qh_facet3vertex (facet);
-  points= qh_settemp (qh_setsize (vertices));
-  FOREACHvertex_(vertices) {
-    zinc_(Zdistio);
-    qh_distplane(vertex->point, facet, &dist);
-    point= qh_projectpoint(vertex->point, facet, dist);
-    qh_setappend (&points, point);
-  }
-  if (format == qh_PRINTmaple) {
-    fprintf(fp, "[");
-    pointfmt= "[%16.8f, %16.8f, %16.8f]";
-    endfmt= "]";
-  }else {
-    fprintf(fp, "Polygon[{");
-    pointfmt= "{%16.8f, %16.8f, %16.8f}";
-    endfmt= "}]";
-  }
-  FOREACHpoint_(points) {
-    if (firstpoint)
-      firstpoint= False;
-    else
-      fprintf(fp, ",\n");
-    fprintf(fp, pointfmt, point[0], point[1], point[2]);
-  }
-  FOREACHpoint_(points)
-    qh_memfree (point, qh normal_size);
-  qh_settempfree(&points);
-  qh_settempfree(&vertices);
-  fprintf(fp, endfmt);
-} /* printfacet3math */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet3vertex">-</a>
-  
-  qh_printfacet3vertex( fp, facet, format )
-    print vertices in a 3-d facet as point ids
-
-  notes:
-    prints number of vertices first if format == qh_PRINToff
-    the facet may be non-simplicial
-*/
-void qh_printfacet3vertex(FILE *fp, facetT *facet, int format) {
-  vertexT *vertex, **vertexp;
-  setT *vertices;
-
-  vertices= qh_facet3vertex (facet);
-  if (format == qh_PRINToff)
-    fprintf (fp, "%d ", qh_setsize (vertices));
-  FOREACHvertex_(vertices) 
-    fprintf (fp, "%d ", qh_pointid(vertex->point));
-  fprintf (fp, "\n");
-  qh_settempfree(&vertices);
-} /* printfacet3vertex */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet4geom_nonsimplicial">-</a>
-  
-  qh_printfacet4geom_nonsimplicial(  )
-    print Geomview 4OFF file for a 4d nonsimplicial facet
-    prints all ridges to unvisited neighbors (qh.visit_id)
-    if qh.DROPdim
-      prints in OFF format
-  
-  notes:
-    must agree with printend4geom()
-*/
-void qh_printfacet4geom_nonsimplicial(FILE *fp, facetT *facet, realT color[3]) {
-  facetT *neighbor;
-  ridgeT *ridge, **ridgep;
-  vertexT *vertex, **vertexp;
-  pointT *point;
-  int k;
-  realT dist;
-  
-  facet->visitid= qh visit_id;
-  if (qh PRINTnoplanes || (facet->visible && qh NEWfacets))
-    return;
-  FOREACHridge_(facet->ridges) {
-    neighbor= otherfacet_(ridge, facet);
-    if (neighbor->visitid == qh visit_id) 
-      continue;
-    if (qh PRINTtransparent && !neighbor->good)
-      continue;  
-    if (qh DOintersections)
-      qh_printhyperplaneintersection(fp, facet, neighbor, ridge->vertices, color);
-    else {
-      if (qh DROPdim >= 0) 
-	fprintf(fp, "OFF 3 1 1 # f%d\n", facet->id);
-      else {
-	qh printoutvar++;
-	fprintf (fp, "# r%d between f%d f%d\n", ridge->id, facet->id, neighbor->id);
-      }
-      FOREACHvertex_(ridge->vertices) {
-	zinc_(Zdistio);
-	qh_distplane(vertex->point,facet, &dist);
-	point=qh_projectpoint(vertex->point,facet, dist);
-	for(k= 0; k < qh hull_dim; k++) {
-	  if (k != qh DROPdim)
-  	    fprintf(fp, "%8.4g ", point[k]);
-  	}
-	fprintf (fp, "\n");
-	qh_memfree (point, qh normal_size);
-      }
-      if (qh DROPdim >= 0)
-        fprintf(fp, "3 0 1 2 %8.4g %8.4g %8.4g\n", color[0], color[1], color[2]);
-    }
-  }
-} /* printfacet4geom_nonsimplicial */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacet4geom_simplicial">-</a>
-  
-  qh_printfacet4geom_simplicial( fp, facet, color )
-    print Geomview 4OFF file for a 4d simplicial facet
-    prints triangles for unvisited neighbors (qh.visit_id)
-
-  notes:
-    must agree with printend4geom()
-*/
-void qh_printfacet4geom_simplicial(FILE *fp, facetT *facet, realT color[3]) {
-  setT *vertices;
-  facetT *neighbor, **neighborp;
-  vertexT *vertex, **vertexp;
-  int k;
-  
-  facet->visitid= qh visit_id;
-  if (qh PRINTnoplanes || (facet->visible && qh NEWfacets))
-    return;
-  FOREACHneighbor_(facet) {
-    if (neighbor->visitid == qh visit_id)
-      continue;
-    if (qh PRINTtransparent && !neighbor->good)
-      continue;  
-    vertices= qh_setnew_delnthsorted (facet->vertices, qh hull_dim,
-	                  SETindex_(facet->neighbors, neighbor), 0);
-    if (qh DOintersections)
-      qh_printhyperplaneintersection(fp, facet, neighbor, vertices, color);
-    else {
-      if (qh DROPdim >= 0) 
-	fprintf(fp, "OFF 3 1 1 # ridge between f%d f%d\n",
-		facet->id, neighbor->id);
-      else {
-	qh printoutvar++;
-	fprintf (fp, "# ridge between f%d f%d\n", facet->id, neighbor->id);
-      }
-      FOREACHvertex_(vertices) {
-	for(k= 0; k < qh hull_dim; k++) {
-	  if (k != qh DROPdim)
-  	    fprintf(fp, "%8.4g ", vertex->point[k]);
-  	}
-	fprintf (fp, "\n");
-      }
-      if (qh DROPdim >= 0) 
-        fprintf(fp, "3 0 1 2 %8.4g %8.4g %8.4g\n", color[0], color[1], color[2]);
-    }
-    qh_setfree(&vertices);
-  }
-} /* printfacet4geom_simplicial */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacetNvertex_nonsimplicial">-</a>
-  
-  qh_printfacetNvertex_nonsimplicial( fp, facet, id, format )
-    print vertices for an N-d non-simplicial facet
-    triangulates each ridge to the id
-*/
-void qh_printfacetNvertex_nonsimplicial(FILE *fp, facetT *facet, int id, int format) {
-  vertexT *vertex, **vertexp;
-  ridgeT *ridge, **ridgep;
-
-  if (facet->visible && qh NEWfacets)
-    return;
-  FOREACHridge_(facet->ridges) {
-    if (format == qh_PRINTtriangles)
-      fprintf(fp, "%d ", qh hull_dim);
-    fprintf(fp, "%d ", id);
-    if ((ridge->top == facet) ^ qh_ORIENTclock) {
-      FOREACHvertex_(ridge->vertices)
-        fprintf(fp, "%d ", qh_pointid(vertex->point));
-    }else {
-      FOREACHvertexreverse12_(ridge->vertices)
-        fprintf(fp, "%d ", qh_pointid(vertex->point));
-    }
-    fprintf(fp, "\n");
-  }
-} /* printfacetNvertex_nonsimplicial */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacetNvertex_simplicial">-</a>
-  
-  qh_printfacetNvertex_simplicial( fp, facet, format )
-    print vertices for an N-d simplicial facet
-    prints vertices for non-simplicial facets
-      2-d facets (orientation preserved by qh_mergefacet2d)
-      PRINToff ('o') for 4-d and higher
-*/
-void qh_printfacetNvertex_simplicial(FILE *fp, facetT *facet, int format) {
-  vertexT *vertex, **vertexp;
-
-  if (format == qh_PRINToff || format == qh_PRINTtriangles)
-    fprintf (fp, "%d ", qh_setsize (facet->vertices));
-  if ((facet->toporient ^ qh_ORIENTclock) 
-  || (qh hull_dim > 2 && !facet->simplicial)) {
-    FOREACHvertex_(facet->vertices)
-      fprintf(fp, "%d ", qh_pointid(vertex->point));
-  }else {
-    FOREACHvertexreverse12_(facet->vertices)
-      fprintf(fp, "%d ", qh_pointid(vertex->point));
-  }
-  fprintf(fp, "\n");
-} /* printfacetNvertex_simplicial */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacetheader">-</a>
-  
-  qh_printfacetheader( fp, facet )
-    prints header fields of a facet to fp
-    
-  notes:
-    for 'f' output and debugging
-*/
-void qh_printfacetheader(FILE *fp, facetT *facet) {
-  pointT *point, **pointp, *furthest;
-  facetT *neighbor, **neighborp;
-  realT dist;
-
-  if (facet == qh_MERGEridge) {
-    fprintf (fp, " MERGEridge\n");
-    return;
-  }else if (facet == qh_DUPLICATEridge) {
-    fprintf (fp, " DUPLICATEridge\n");
-    return;
-  }else if (!facet) {
-    fprintf (fp, " NULLfacet\n");
-    return;
-  }
-  qh old_randomdist= qh RANDOMdist;
-  qh RANDOMdist= False;
-  fprintf(fp, "- f%d\n", facet->id);
-  fprintf(fp, "    - flags:");
-  if (facet->toporient) 
-    fprintf(fp, " top");
-  else
-    fprintf(fp, " bottom");
-  if (facet->simplicial)
-    fprintf(fp, " simplicial");
-  if (facet->tricoplanar)
-    fprintf(fp, " tricoplanar");
-  if (facet->upperdelaunay)
-    fprintf(fp, " upperDelaunay");
-  if (facet->visible)
-    fprintf(fp, " visible");
-  if (facet->newfacet)
-    fprintf(fp, " new");
-  if (facet->tested)
-    fprintf(fp, " tested");
-  if (!facet->good)
-    fprintf(fp, " notG");
-  if (facet->seen)
-    fprintf(fp, " seen");
-  if (facet->coplanar)
-    fprintf(fp, " coplanar");
-  if (facet->mergehorizon)
-    fprintf(fp, " mergehorizon");
-  if (facet->keepcentrum)
-    fprintf(fp, " keepcentrum");
-  if (facet->dupridge)
-    fprintf(fp, " dupridge");
-  if (facet->mergeridge && !facet->mergeridge2)
-    fprintf(fp, " mergeridge1");
-  if (facet->mergeridge2)
-    fprintf(fp, " mergeridge2");
-  if (facet->newmerge)
-    fprintf(fp, " newmerge");
-  if (facet->flipped) 
-    fprintf(fp, " flipped");
-  if (facet->notfurthest) 
-    fprintf(fp, " notfurthest");
-  if (facet->degenerate)
-    fprintf(fp, " degenerate");
-  if (facet->redundant)
-    fprintf(fp, " redundant");
-  fprintf(fp, "\n");
-  if (facet->isarea)
-    fprintf(fp, "    - area: %2.2g\n", facet->f.area);
-  else if (qh NEWfacets && facet->visible && facet->f.replace)
-    fprintf(fp, "    - replacement: f%d\n", facet->f.replace->id);
-  else if (facet->newfacet) {
-    if (facet->f.samecycle && facet->f.samecycle != facet)
-      fprintf(fp, "    - shares same visible/horizon as f%d\n", facet->f.samecycle->id);
-  }else if (facet->tricoplanar /* !isarea */) {
-    if (facet->f.triowner)
-      fprintf(fp, "    - owner of normal & centrum is facet f%d\n", facet->f.triowner->id);
-  }else if (facet->f.newcycle)
-    fprintf(fp, "    - was horizon to f%d\n", facet->f.newcycle->id);
-  if (facet->nummerge)
-    fprintf(fp, "    - merges: %d\n", facet->nummerge);
-  qh_printpointid(fp, "    - normal: ", qh hull_dim, facet->normal, -1);
-  fprintf(fp, "    - offset: %10.7g\n", facet->offset);
-  if (qh CENTERtype == qh_ASvoronoi || facet->center)
-    qh_printcenter (fp, qh_PRINTfacets, "    - center: ", facet);
-#if qh_MAXoutside
-  if (facet->maxoutside > qh DISTround)
-    fprintf(fp, "    - maxoutside: %10.7g\n", facet->maxoutside);
-#endif
-  if (!SETempty_(facet->outsideset)) {
-    furthest= (pointT*)qh_setlast(facet->outsideset);
-    if (qh_setsize (facet->outsideset) < 6) {
-      fprintf(fp, "    - outside set (furthest p%d):\n", qh_pointid(furthest));
-      FOREACHpoint_(facet->outsideset)
-	qh_printpoint(fp, "     ", point);
-    }else if (qh_setsize (facet->outsideset) < 21) {
-      qh_printpoints(fp, "    - outside set:", facet->outsideset);
-    }else {
-      fprintf(fp, "    - outside set:  %d points.", qh_setsize(facet->outsideset));
-      qh_printpoint(fp, "  Furthest", furthest);
-    }
-#if !qh_COMPUTEfurthest
-    fprintf(fp, "    - furthest distance= %2.2g\n", facet->furthestdist);
-#endif
-  }
-  if (!SETempty_(facet->coplanarset)) {
-    furthest= (pointT*)qh_setlast(facet->coplanarset);
-    if (qh_setsize (facet->coplanarset) < 6) {
-      fprintf(fp, "    - coplanar set (furthest p%d):\n", qh_pointid(furthest));
-      FOREACHpoint_(facet->coplanarset)
-	qh_printpoint(fp, "     ", point);
-    }else if (qh_setsize (facet->coplanarset) < 21) {
-      qh_printpoints(fp, "    - coplanar set:", facet->coplanarset);
-    }else {
-      fprintf(fp, "    - coplanar set:  %d points.", qh_setsize(facet->coplanarset));
-      qh_printpoint(fp, "  Furthest", furthest);
-    }
-    zinc_(Zdistio);
-    qh_distplane (furthest, facet, &dist);
-    fprintf(fp, "      furthest distance= %2.2g\n", dist);
-  }
-  qh_printvertices (fp, "    - vertices:", facet->vertices);
-  fprintf(fp, "    - neighboring facets: ");
-  FOREACHneighbor_(facet) {
-    if (neighbor == qh_MERGEridge)
-      fprintf(fp, " MERGE");
-    else if (neighbor == qh_DUPLICATEridge)
-      fprintf(fp, " DUP");
-    else
-      fprintf(fp, " f%d", neighbor->id);
-  }
-  fprintf(fp, "\n");
-  qh RANDOMdist= qh old_randomdist;
-} /* printfacetheader */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacetridges">-</a>
-  
-  qh_printfacetridges( fp, facet )
-    prints ridges of a facet to fp
-
-  notes:
-    ridges printed in neighbor order
-    assumes the ridges exist
-    for 'f' output
-*/
-void qh_printfacetridges(FILE *fp, facetT *facet) {
-  facetT *neighbor, **neighborp;
-  ridgeT *ridge, **ridgep;
-  int numridges= 0;
-
-
-  if (facet->visible && qh NEWfacets) {
-    fprintf(fp, "    - ridges (ids may be garbage):");
-    FOREACHridge_(facet->ridges)
-      fprintf(fp, " r%d", ridge->id);
-    fprintf(fp, "\n");
-  }else {
-    fprintf(fp, "    - ridges:\n");
-    FOREACHridge_(facet->ridges)
-      ridge->seen= False;
-    if (qh hull_dim == 3) {
-      ridge= SETfirstt_(facet->ridges, ridgeT);
-      while (ridge && !ridge->seen) {
-	ridge->seen= True;
-	qh_printridge(fp, ridge);
-	numridges++;
-	ridge= qh_nextridge3d (ridge, facet, NULL);
-	}
-    }else {
-      FOREACHneighbor_(facet) {
-	FOREACHridge_(facet->ridges) {
-	  if (otherfacet_(ridge,facet) == neighbor) {
-	    ridge->seen= True;
-	    qh_printridge(fp, ridge);
-	    numridges++;
-	  }
-	}
-      }
-    }
-    if (numridges != qh_setsize (facet->ridges)) {
-      fprintf (fp, "     - all ridges:");
-      FOREACHridge_(facet->ridges) 
-	fprintf (fp, " r%d", ridge->id);
-        fprintf (fp, "\n");
-    }
-    FOREACHridge_(facet->ridges) {
-      if (!ridge->seen) 
-	qh_printridge(fp, ridge);
-    }
-  }
-} /* printfacetridges */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printfacets">-</a>
-  
-  qh_printfacets( fp, format, facetlist, facets, printall )
-    prints facetlist and/or facet set in output format
-  
-  notes:
-    also used for specialized formats ('FO' and summary)
-    turns off 'Rn' option since want actual numbers
-*/
-void qh_printfacets(FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall) {
-  int numfacets, numsimplicial, numridges, totneighbors, numcoplanars, numtricoplanars;
-  facetT *facet, **facetp;
-  setT *vertices;
-  coordT *center;
-  realT outerplane, innerplane;
-
-  qh old_randomdist= qh RANDOMdist;
-  qh RANDOMdist= False;
-  if (qh CDDoutput && (format == qh_PRINTcentrums || format == qh_PRINTpointintersect || format == qh_PRINToff))
-    fprintf (qh ferr, "qhull warning: CDD format is not available for centrums, halfspace\nintersections, and OFF file format.\n");
-  if (format == qh_PRINTnone)
-    ; /* print nothing */
-  else if (format == qh_PRINTaverage) {
-    vertices= qh_facetvertices (facetlist, facets, printall);
-    center= qh_getcenter (vertices);
-    fprintf (fp, "%d 1\n", qh hull_dim);
-    qh_printpointid (fp, NULL, qh hull_dim, center, -1);
-    qh_memfree (center, qh normal_size);
-    qh_settempfree (&vertices);
-  }else if (format == qh_PRINTextremes) {
-    if (qh DELAUNAY)
-      qh_printextremes_d (fp, facetlist, facets, printall);
-    else if (qh hull_dim == 2)
-      qh_printextremes_2d (fp, facetlist, facets, printall);
-    else 
-      qh_printextremes (fp, facetlist, facets, printall);
-  }else if (format == qh_PRINToptions)
-    fprintf(fp, "Options selected for Qhull %s:\n%s\n", qh_version, qh qhull_options);
-  else if (format == qh_PRINTpoints && !qh VORONOI)
-    qh_printpoints_out (fp, facetlist, facets, printall);
-  else if (format == qh_PRINTqhull)
-    fprintf (fp, "%s | %s\n", qh rbox_command, qh qhull_command);
-  else if (format == qh_PRINTsize) {
-    fprintf (fp, "0\n2 ");
-    fprintf (fp, qh_REAL_1, qh totarea);
-    fprintf (fp, qh_REAL_1, qh totvol);
-    fprintf (fp, "\n");
-  }else if (format == qh_PRINTsummary) {
-    qh_countfacets (facetlist, facets, printall, &numfacets, &numsimplicial, 
-      &totneighbors, &numridges, &numcoplanars, &numtricoplanars);
-    vertices= qh_facetvertices (facetlist, facets, printall); 
-    fprintf (fp, "10 %d %d %d %d %d %d %d %d %d %d\n2 ", qh hull_dim, 
-                qh num_points + qh_setsize (qh other_points),
-                qh num_vertices, qh num_facets - qh num_visible,
-                qh_setsize (vertices), numfacets, numcoplanars, 
-		numfacets - numsimplicial, zzval_(Zdelvertextot), 
-		numtricoplanars);
-    qh_settempfree (&vertices);
-    qh_outerinner (NULL, &outerplane, &innerplane);
-    fprintf (fp, qh_REAL_2n, outerplane, innerplane);
-  }else if (format == qh_PRINTvneighbors)
-    qh_printvneighbors (fp, facetlist, facets, printall);
-  else if (qh VORONOI && format == qh_PRINToff)
-    qh_printvoronoi (fp, format, facetlist, facets, printall);
-  else if (qh VORONOI && format == qh_PRINTgeom) {
-    qh_printbegin (fp, format, facetlist, facets, printall);
-    qh_printvoronoi (fp, format, facetlist, facets, printall);
-    qh_printend (fp, format, facetlist, facets, printall);
-  }else if (qh VORONOI 
-  && (format == qh_PRINTvertices || format == qh_PRINTinner || format == qh_PRINTouter))
-    qh_printvdiagram (fp, format, facetlist, facets, printall);
-  else {
-    qh_printbegin (fp, format, facetlist, facets, printall);
-    FORALLfacet_(facetlist)
-      qh_printafacet (fp, format, facet, printall);
-    FOREACHfacet_(facets) 
-      qh_printafacet (fp, format, facet, printall);
-    qh_printend (fp, format, facetlist, facets, printall);
-  }
-  qh RANDOMdist= qh old_randomdist;
-} /* printfacets */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printhelp_degenerate">-</a>
-  
-  qh_printhelp_degenerate( fp )
-    prints descriptive message for precision error
-
-  notes:
-    no message if qh_QUICKhelp
-*/
-void qh_printhelp_degenerate(FILE *fp) {
-  
-  if (qh MERGEexact || qh PREmerge || qh JOGGLEmax < REALmax/2) 
-    fprintf(fp, "\n\
-A Qhull error has occurred.  Qhull should have corrected the above\n\
-precision error.  Please send the input and all of the output to\n\
-qhull_bug@qhull.org\n");
-  else if (!qh_QUICKhelp) {
-    fprintf(fp, "\n\
-Precision problems were detected during construction of the convex hull.\n\
-This occurs because convex hull algorithms assume that calculations are\n\
-exact, but floating-point arithmetic has roundoff errors.\n\
-\n\
-To correct for precision problems, do not use 'Q0'.  By default, Qhull\n\
-selects 'C-0' or 'Qx' and merges non-convex facets.  With option 'QJ',\n\
-Qhull joggles the input to prevent precision problems.  See \"Imprecision\n\
-in Qhull\" (qh-impre.htm).\n\
-\n\
-If you use 'Q0', the output may include\n\
-coplanar ridges, concave ridges, and flipped facets.  In 4-d and higher,\n\
-Qhull may produce a ridge with four neighbors or two facets with the same \n\
-vertices.  Qhull reports these events when they occur.  It stops when a\n\
-concave ridge, flipped facet, or duplicate facet occurs.\n");
-#if REALfloat
-    fprintf (fp, "\
-\n\
-Qhull is currently using single precision arithmetic.  The following\n\
-will probably remove the precision problems:\n\
-  - recompile qhull for double precision (#define REALfloat 0 in user.h).\n");
-#endif
-    if (qh DELAUNAY && !qh SCALElast && qh MAXabs_coord > 1e4)
-      fprintf( fp, "\
-\n\
-When computing the Delaunay triangulation of coordinates > 1.0,\n\
-  - use 'Qbb' to scale the last coordinate to [0,m] (max previous coordinate)\n");
-    if (qh DELAUNAY && !qh ATinfinity) 
-      fprintf( fp, "\
-When computing the Delaunay triangulation:\n\
-  - use 'Qz' to add a point at-infinity.  This reduces precision problems.\n");
- 
-    fprintf(fp, "\
-\n\
-If you need triangular output:\n\
-  - use option 'Qt' to triangulate the output\n\
-  - use option 'QJ' to joggle the input points and remove precision errors\n\
-  - use option 'Ft'.  It triangulates non-simplicial facets with added points.\n\
-\n\
-If you must use 'Q0',\n\
-try one or more of the following options.  They can not guarantee an output.\n\
-  - use 'QbB' to scale the input to a cube.\n\
-  - use 'Po' to produce output and prevent partitioning for flipped facets\n\
-  - use 'V0' to set min. distance to visible facet as 0 instead of roundoff\n\
-  - use 'En' to specify a maximum roundoff error less than %2.2g.\n\
-  - options 'Qf', 'Qbb', and 'QR0' may also help\n",
-               qh DISTround);
-    fprintf(fp, "\
-\n\
-To guarantee simplicial output:\n\
-  - use option 'Qt' to triangulate the output\n\
-  - use option 'QJ' to joggle the input points and remove precision errors\n\
-  - use option 'Ft' to triangulate the output by adding points\n\
-  - use exact arithmetic (see \"Imprecision in Qhull\", qh-impre.htm)\n\
-");
-  }
-} /* printhelp_degenerate */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printhelp_singular">-</a>
-  
-  qh_printhelp_singular( fp )
-    prints descriptive message for singular input
-*/
-void qh_printhelp_singular(FILE *fp) {
-  facetT *facet;
-  vertexT *vertex, **vertexp;
-  realT min, max, *coord, dist;
-  int i,k;
-  
-  fprintf(fp, "\n\
-The input to qhull appears to be less than %d dimensional, or a\n\
-computation has overflowed.\n\n\
-Qhull could not construct a clearly convex simplex from points:\n",
-           qh hull_dim);
-  qh_printvertexlist (fp, "", qh facet_list, NULL, qh_ALL);
-  if (!qh_QUICKhelp)
-    fprintf(fp, "\n\
-The center point is coplanar with a facet, or a vertex is coplanar\n\
-with a neighboring facet.  The maximum round off error for\n\
-computing distances is %2.2g.  The center point, facets and distances\n\
-to the center point are as follows:\n\n", qh DISTround);
-  qh_printpointid (fp, "center point", qh hull_dim, qh interior_point, -1);
-  fprintf (fp, "\n");
-  FORALLfacets {
-    fprintf (fp, "facet");
-    FOREACHvertex_(facet->vertices)
-      fprintf (fp, " p%d", qh_pointid(vertex->point));
-    zinc_(Zdistio);
-    qh_distplane(qh interior_point, facet, &dist);
-    fprintf (fp, " distance= %4.2g\n", dist);
-  }
-  if (!qh_QUICKhelp) {
-    if (qh HALFspace) 
-      fprintf (fp, "\n\
-These points are the dual of the given halfspaces.  They indicate that\n\
-the intersection is degenerate.\n");
-    fprintf (fp,"\n\
-These points either have a maximum or minimum x-coordinate, or\n\
-they maximize the determinant for k coordinates.  Trial points\n\
-are first selected from points that maximize a coordinate.\n");
-    if (qh hull_dim >= qh_INITIALmax)
-      fprintf (fp, "\n\
-Because of the high dimension, the min x-coordinate and max-coordinate\n\
-points are used if the determinant is non-zero.  Option 'Qs' will\n\
-do a better, though much slower, job.  Instead of 'Qs', you can change\n\
-the points by randomly rotating the input with 'QR0'.\n");
-  }
-  fprintf (fp, "\nThe min and max coordinates for each dimension are:\n");
-  for (k=0; k < qh hull_dim; k++) {
-    min= REALmax;
-    max= -REALmin;
-    for (i=qh num_points, coord= qh first_point+k; i--; coord += qh hull_dim) {
-      maximize_(max, *coord);
-      minimize_(min, *coord);
-    }
-    fprintf (fp, "  %d:  %8.4g  %8.4g  difference= %4.4g\n", k, min, max, max-min);
-  }
-  if (!qh_QUICKhelp) {
-    fprintf (fp, "\n\
-If the input should be full dimensional, you have several options that\n\
-may determine an initial simplex:\n\
-  - use 'QJ'  to joggle the input and make it full dimensional\n\
-  - use 'QbB' to scale the points to the unit cube\n\
-  - use 'QR0' to randomly rotate the input for different maximum points\n\
-  - use 'Qs'  to search all points for the initial simplex\n\
-  - use 'En'  to specify a maximum roundoff error less than %2.2g.\n\
-  - trace execution with 'T3' to see the determinant for each point.\n",
-                     qh DISTround);
-#if REALfloat
-    fprintf (fp, "\
-  - recompile qhull for double precision (#define REALfloat 0 in qhull.h).\n");
-#endif
-    fprintf (fp, "\n\
-If the input is lower dimensional:\n\
-  - use 'QJ' to joggle the input and make it full dimensional\n\
-  - use 'Qbk:0Bk:0' to delete coordinate k from the input.  You should\n\
-    pick the coordinate with the least range.  The hull will have the\n\
-    correct topology.\n\
-  - determine the flat containing the points, rotate the points\n\
-    into a coordinate plane, and delete the other coordinates.\n\
-  - add one or more points to make the input full dimensional.\n\
-");
-    if (qh DELAUNAY && !qh ATinfinity)
-      fprintf (fp, "\n\n\
-This is a Delaunay triangulation and the input is co-circular or co-spherical:\n\
-  - use 'Qz' to add a point \"at infinity\" (i.e., above the paraboloid)\n\
-  - or use 'QJ' to joggle the input and avoid co-circular data\n");
-  }
-} /* printhelp_singular */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printhyperplaneintersection">-</a>
-  
-  qh_printhyperplaneintersection( fp, facet1, facet2, vertices, color )
-    print Geomview OFF or 4OFF for the intersection of two hyperplanes in 3-d or 4-d
-*/
-void qh_printhyperplaneintersection(FILE *fp, facetT *facet1, facetT *facet2,
-		   setT *vertices, realT color[3]) {
-  realT costheta, denominator, dist1, dist2, s, t, mindenom, p[4];
-  vertexT *vertex, **vertexp;
-  int i, k;
-  boolT nearzero1, nearzero2;
-  
-  costheta= qh_getangle(facet1->normal, facet2->normal);
-  denominator= 1 - costheta * costheta;
-  i= qh_setsize(vertices);
-  if (qh hull_dim == 3)
-    fprintf(fp, "VECT 1 %d 1 %d 1 ", i, i);
-  else if (qh hull_dim == 4 && qh DROPdim >= 0)
-    fprintf(fp, "OFF 3 1 1 ");
-  else
-    qh printoutvar++;
-  fprintf (fp, "# intersect f%d f%d\n", facet1->id, facet2->id);
-  mindenom= 1 / (10.0 * qh MAXabs_coord);
-  FOREACHvertex_(vertices) {
-    zadd_(Zdistio, 2);
-    qh_distplane(vertex->point, facet1, &dist1);
-    qh_distplane(vertex->point, facet2, &dist2);
-    s= qh_divzero (-dist1 + costheta * dist2, denominator,mindenom,&nearzero1);
-    t= qh_divzero (-dist2 + costheta * dist1, denominator,mindenom,&nearzero2);
-    if (nearzero1 || nearzero2)
-      s= t= 0.0;
-    for(k= qh hull_dim; k--; )
-      p[k]= vertex->point[k] + facet1->normal[k] * s + facet2->normal[k] * t;
-    if (qh PRINTdim <= 3) {
-      qh_projectdim3 (p, p);
-      fprintf(fp, "%8.4g %8.4g %8.4g # ", p[0], p[1], p[2]);
-    }else 
-      fprintf(fp, "%8.4g %8.4g %8.4g %8.4g # ", p[0], p[1], p[2], p[3]);
-    if (nearzero1+nearzero2)
-      fprintf (fp, "p%d (coplanar facets)\n", qh_pointid (vertex->point));
-    else
-      fprintf (fp, "projected p%d\n", qh_pointid (vertex->point));
-  }
-  if (qh hull_dim == 3)
-    fprintf(fp, "%8.4g %8.4g %8.4g 1.0\n", color[0], color[1], color[2]); 
-  else if (qh hull_dim == 4 && qh DROPdim >= 0)  
-    fprintf(fp, "3 0 1 2 %8.4g %8.4g %8.4g 1.0\n", color[0], color[1], color[2]);
-} /* printhyperplaneintersection */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printline3geom">-</a>
-  
-  qh_printline3geom( fp, pointA, pointB, color )
-    prints a line as a VECT
-    prints 0's for qh.DROPdim
-  
-  notes:
-    if pointA == pointB, 
-      it's a 1 point VECT
-*/
-void qh_printline3geom (FILE *fp, pointT *pointA, pointT *pointB, realT color[3]) {
-  int k;
-  realT pA[4], pB[4];
-
-  qh_projectdim3(pointA, pA);
-  qh_projectdim3(pointB, pB);
-  if ((fabs(pA[0] - pB[0]) > 1e-3) || 
-      (fabs(pA[1] - pB[1]) > 1e-3) || 
-      (fabs(pA[2] - pB[2]) > 1e-3)) {
-    fprintf (fp, "VECT 1 2 1 2 1\n");
-    for (k= 0; k < 3; k++)
-       fprintf (fp, "%8.4g ", pB[k]);
-    fprintf (fp, " # p%d\n", qh_pointid (pointB));
-  }else
-    fprintf (fp, "VECT 1 1 1 1 1\n");
-  for (k=0; k < 3; k++)
-    fprintf (fp, "%8.4g ", pA[k]);
-  fprintf (fp, " # p%d\n", qh_pointid (pointA));
-  fprintf (fp, "%8.4g %8.4g %8.4g 1\n", color[0], color[1], color[2]);
-}
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printneighborhood">-</a>
-  
-  qh_printneighborhood( fp, format, facetA, facetB, printall )
-    print neighborhood of one or two facets
-
-  notes:
-    calls qh_findgood_all() 
-    bumps qh.visit_id
-*/
-void qh_printneighborhood (FILE *fp, int format, facetT *facetA, facetT *facetB, boolT printall) {
-  facetT *neighbor, **neighborp, *facet;
-  setT *facets;
-
-  if (format == qh_PRINTnone)
-    return;
-  qh_findgood_all (qh facet_list);
-  if (facetA == facetB)
-    facetB= NULL;
-  facets= qh_settemp (2*(qh_setsize (facetA->neighbors)+1));
-  qh visit_id++;
-  for (facet= facetA; facet; facet= ((facet == facetA) ? facetB : NULL)) {
-    if (facet->visitid != qh visit_id) {
-      facet->visitid= qh visit_id;
-      qh_setappend (&facets, facet);
-    }
-    FOREACHneighbor_(facet) {
-      if (neighbor->visitid == qh visit_id)
-        continue;
-      neighbor->visitid= qh visit_id;
-      if (printall || !qh_skipfacet (neighbor))
-        qh_setappend (&facets, neighbor);
-    }
-  }
-  qh_printfacets (fp, format, NULL, facets, printall);
-  qh_settempfree (&facets);
-} /* printneighborhood */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printpoint">-</a>
-  
-  qh_printpoint( fp, string, point )
-  qh_printpointid( fp, string, dim, point, id )
-    prints the coordinates of a point
-
-  returns:
-    if string is defined
-      prints 'string p%d' (skips p%d if id=-1)
-
-  notes:
-    nop if point is NULL
-    prints id unless it is undefined (-1)
-*/
-void qh_printpoint(FILE *fp, char *string, pointT *point) {
-  int id= qh_pointid( point);
-
-  qh_printpointid( fp, string, qh hull_dim, point, id);
-} /* printpoint */
-
-void qh_printpointid(FILE *fp, char *string, int dim, pointT *point, int id) {
-  int k;
-  realT r; /*bug fix*/
-  
-  if (!point)
-    return;
-  if (string) {
-    fputs (string, fp);
-   if (id != -1)
-      fprintf(fp, " p%d: ", id);
-  }
-  for(k= dim; k--; ) {
-    r= *point++;
-    if (string)
-      fprintf(fp, " %8.4g", r);
-    else
-      fprintf(fp, qh_REAL_1, r);
-  }
-  fprintf(fp, "\n");
-} /* printpointid */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printpoint3">-</a>
-  
-  qh_printpoint3( fp, point )
-    prints 2-d, 3-d, or 4-d point as Geomview 3-d coordinates
-*/
-void qh_printpoint3 (FILE *fp, pointT *point) {
-  int k;
-  realT p[4];
-  
-  qh_projectdim3 (point, p);
-  for (k=0; k < 3; k++)
-    fprintf (fp, "%8.4g ", p[k]);
-  fprintf (fp, " # p%d\n", qh_pointid (point));
-} /* printpoint3 */
-
-/*----------------------------------------
--printpoints- print pointids for a set of points starting at index 
-   see geom.c
-*/
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printpoints_out">-</a>
-  
-  qh_printpoints_out( fp, facetlist, facets, printall )
-    prints vertices, coplanar/inside points, for facets by their point coordinates
-    allows qh.CDDoutput
-
-  notes:
-    same format as qhull input
-    if no coplanar/interior points,
-      same order as qh_printextremes
-*/
-void qh_printpoints_out (FILE *fp, facetT *facetlist, setT *facets, int printall) {
-  int allpoints= qh num_points + qh_setsize (qh other_points);
-  int numpoints=0, point_i, point_n;
-  setT *vertices, *points;
-  facetT *facet, **facetp;
-  pointT *point, **pointp;
-  vertexT *vertex, **vertexp;
-  int id;
-
-  points= qh_settemp (allpoints);
-  qh_setzero (points, 0, allpoints);
-  vertices= qh_facetvertices (facetlist, facets, printall);
-  FOREACHvertex_(vertices) {
-    id= qh_pointid (vertex->point);
-    if (id >= 0)
-      SETelem_(points, id)= vertex->point;
-  }
-  if (qh KEEPinside || qh KEEPcoplanar || qh KEEPnearinside) {
-    FORALLfacet_(facetlist) {
-      if (!printall && qh_skipfacet(facet))
-        continue;
-      FOREACHpoint_(facet->coplanarset) {
-        id= qh_pointid (point);
-        if (id >= 0)
-          SETelem_(points, id)= point;
-      }
-    }
-    FOREACHfacet_(facets) {
-      if (!printall && qh_skipfacet(facet))
-        continue;
-      FOREACHpoint_(facet->coplanarset) {
-        id= qh_pointid (point);
-        if (id >= 0)
-          SETelem_(points, id)= point;
-      }
-    }
-  }
-  qh_settempfree (&vertices);
-  FOREACHpoint_i_(points) {
-    if (point)
-      numpoints++;
-  }
-  if (qh CDDoutput)
-    fprintf (fp, "%s | %s\nbegin\n%d %d real\n", qh rbox_command,
-             qh qhull_command, numpoints, qh hull_dim + 1);
-  else
-    fprintf (fp, "%d\n%d\n", qh hull_dim, numpoints);
-  FOREACHpoint_i_(points) {
-    if (point) {
-      if (qh CDDoutput)
-	fprintf (fp, "1 ");
-      qh_printpoint (fp, NULL, point);
-    }
-  }
-  if (qh CDDoutput)
-    fprintf (fp, "end\n");
-  qh_settempfree (&points);
-} /* printpoints_out */
-  
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printpointvect">-</a>
-  
-  qh_printpointvect( fp, point, normal, center, radius, color )
-    prints a 2-d, 3-d, or 4-d point as 3-d VECT's relative to normal or to center point
-*/
-void qh_printpointvect (FILE *fp, pointT *point, coordT *normal, pointT *center, realT radius, realT color[3]) {
-  realT diff[4], pointA[4];
-  int k;
-  
-  for (k= qh hull_dim; k--; ) {
-    if (center)
-      diff[k]= point[k]-center[k];
-    else if (normal) 
-      diff[k]= normal[k];
-    else
-      diff[k]= 0;
-  }
-  if (center)
-    qh_normalize2 (diff, qh hull_dim, True, NULL, NULL);
-  for (k= qh hull_dim; k--; ) 
-    pointA[k]= point[k]+diff[k] * radius;
-  qh_printline3geom (fp, point, pointA, color);
-} /* printpointvect */  
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printpointvect2">-</a>
-  
-  qh_printpointvect2( fp, point, normal, center, radius )
-    prints a 2-d, 3-d, or 4-d point as 2 3-d VECT's for an imprecise point
-*/
-void qh_printpointvect2 (FILE *fp, pointT *point, coordT *normal, pointT *center, realT radius) {
-  realT red[3]={1, 0, 0}, yellow[3]={1, 1, 0};
-
-  qh_printpointvect (fp, point, normal, center, radius, red);
-  qh_printpointvect (fp, point, normal, center, -radius, yellow);
-} /* printpointvect2 */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printridge">-</a>
-  
-  qh_printridge( fp, ridge )
-    prints the information in a ridge
-
-  notes:
-    for qh_printfacetridges()
-*/
-void qh_printridge(FILE *fp, ridgeT *ridge) {
-  
-  fprintf(fp, "     - r%d", ridge->id);
-  if (ridge->tested)
-    fprintf (fp, " tested");
-  if (ridge->nonconvex)
-    fprintf (fp, " nonconvex");
-  fprintf (fp, "\n");
-  qh_printvertices (fp, "           vertices:", ridge->vertices);
-  if (ridge->top && ridge->bottom)
-    fprintf(fp, "           between f%d and f%d\n",
-	    ridge->top->id, ridge->bottom->id);
-} /* printridge */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printspheres">-</a>
-  
-  qh_printspheres( fp, vertices, radius )
-    prints 3-d vertices as OFF spheres
-
-  notes:
-    inflated octahedron from Stuart Levy earth/mksphere2
-*/
-void qh_printspheres(FILE *fp, setT *vertices, realT radius) {
-  vertexT *vertex, **vertexp;
-
-  qh printoutnum++;
-  fprintf (fp, "{appearance {-edge -normal normscale 0} {\n\
-INST geom {define vsphere OFF\n\
-18 32 48\n\
-\n\
-0 0 1\n\
-1 0 0\n\
-0 1 0\n\
--1 0 0\n\
-0 -1 0\n\
-0 0 -1\n\
-0.707107 0 0.707107\n\
-0 -0.707107 0.707107\n\
-0.707107 -0.707107 0\n\
--0.707107 0 0.707107\n\
--0.707107 -0.707107 0\n\
-0 0.707107 0.707107\n\
--0.707107 0.707107 0\n\
-0.707107 0.707107 0\n\
-0.707107 0 -0.707107\n\
-0 0.707107 -0.707107\n\
--0.707107 0 -0.707107\n\
-0 -0.707107 -0.707107\n\
-\n\
-3 0 6 11\n\
-3 0 7 6	\n\
-3 0 9 7	\n\
-3 0 11 9\n\
-3 1 6 8	\n\
-3 1 8 14\n\
-3 1 13 6\n\
-3 1 14 13\n\
-3 2 11 13\n\
-3 2 12 11\n\
-3 2 13 15\n\
-3 2 15 12\n\
-3 3 9 12\n\
-3 3 10 9\n\
-3 3 12 16\n\
-3 3 16 10\n\
-3 4 7 10\n\
-3 4 8 7\n\
-3 4 10 17\n\
-3 4 17 8\n\
-3 5 14 17\n\
-3 5 15 14\n\
-3 5 16 15\n\
-3 5 17 16\n\
-3 6 13 11\n\
-3 7 8 6\n\
-3 9 10 7\n\
-3 11 12 9\n\
-3 14 8 17\n\
-3 15 13 14\n\
-3 16 12 15\n\
-3 17 10 16\n} transforms { TLIST\n");
-  FOREACHvertex_(vertices) {
-    fprintf(fp, "%8.4g 0 0 0 # v%d\n 0 %8.4g 0 0\n0 0 %8.4g 0\n",
-      radius, vertex->id, radius, radius);
-    qh_printpoint3 (fp, vertex->point);
-    fprintf (fp, "1\n");
-  }
-  fprintf (fp, "}}}\n");
-} /* printspheres */
-
-
-/*----------------------------------------------
--printsummary-
-                see qhull.c
-*/
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvdiagram">-</a>
-  
-  qh_printvdiagram( fp, format, facetlist, facets, printall )
-    print voronoi diagram
-      # of pairs of input sites
-      #indices site1 site2 vertex1 ...
-    
-    sites indexed by input point id
-      point 0 is the first input point
-    vertices indexed by 'o' and 'p' order
-      vertex 0 is the 'vertex-at-infinity'
-      vertex 1 is the first Voronoi vertex
-
-  see:
-    qh_printvoronoi()
-    qh_eachvoronoi_all()
-
-  notes:
-    if all facets are upperdelaunay, 
-      prints upper hull (furthest-site Voronoi diagram)
-*/
-void qh_printvdiagram (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall) {
-  setT *vertices;
-  int totcount, numcenters;
-  boolT islower;
-  qh_RIDGE innerouter= qh_RIDGEall;
-  printvridgeT printvridge= NULL;
-
-  if (format == qh_PRINTvertices) {
-    innerouter= qh_RIDGEall;
-    printvridge= qh_printvridge;
-  }else if (format == qh_PRINTinner) {
-    innerouter= qh_RIDGEinner;
-    printvridge= qh_printvnorm;
-  }else if (format == qh_PRINTouter) {
-    innerouter= qh_RIDGEouter;
-    printvridge= qh_printvnorm;
-  }else {
-    fprintf(qh ferr, "qh_printvdiagram: unknown print format %d.\n", format);
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  vertices= qh_markvoronoi (facetlist, facets, printall, &islower, &numcenters);
-  totcount= qh_printvdiagram2 (NULL, NULL, vertices, innerouter, False);
-  fprintf (fp, "%d\n", totcount);
-  totcount= qh_printvdiagram2 (fp, printvridge, vertices, innerouter, True /* inorder*/);
-  qh_settempfree (&vertices);
-#if 0  /* for testing qh_eachvoronoi_all */
-  fprintf (fp, "\n");
-  totcount= qh_eachvoronoi_all(fp, printvridge, qh UPPERdelaunay, innerouter, True /* inorder*/);
-  fprintf (fp, "%d\n", totcount);
-#endif
-} /* printvdiagram */
-  
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvdiagram2">-</a>
-  
-  qh_printvdiagram2( fp, printvridge, vertices, innerouter, inorder )
-    visit all pairs of input sites (vertices) for selected Voronoi vertices
-    vertices may include NULLs
-  
-  innerouter:
-    qh_RIDGEall   print inner ridges (bounded) and outer ridges (unbounded)
-    qh_RIDGEinner print only inner ridges
-    qh_RIDGEouter print only outer ridges
-  
-  inorder:
-    print 3-d Voronoi vertices in order
-  
-  assumes:
-    qh_markvoronoi marked facet->visitid for Voronoi vertices
-    all facet->seen= False
-    all facet->seen2= True
-  
-  returns:
-    total number of Voronoi ridges 
-    if printvridge,
-      calls printvridge( fp, vertex, vertexA, centers) for each ridge
-      [see qh_eachvoronoi()]
-  
-  see:
-    qh_eachvoronoi_all()
-*/
-int qh_printvdiagram2 (FILE *fp, printvridgeT printvridge, setT *vertices, qh_RIDGE innerouter, boolT inorder) {
-  int totcount= 0;
-  int vertex_i, vertex_n;
-  vertexT *vertex;
-
-  FORALLvertices 
-    vertex->seen= False;
-  FOREACHvertex_i_(vertices) {
-    if (vertex) {
-      if (qh GOODvertex > 0 && qh_pointid(vertex->point)+1 != qh GOODvertex)
-	continue;
-      totcount += qh_eachvoronoi (fp, printvridge, vertex, !qh_ALL, innerouter, inorder);
-    }
-  }
-  return totcount;
-} /* printvdiagram2 */
-  
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvertex">-</a>
-  
-  qh_printvertex( fp, vertex )
-    prints the information in a vertex
-*/
-void qh_printvertex(FILE *fp, vertexT *vertex) {
-  pointT *point;
-  int k, count= 0;
-  facetT *neighbor, **neighborp;
-  realT r; /*bug fix*/
-
-  if (!vertex) {
-    fprintf (fp, "  NULLvertex\n");
-    return;
-  }
-  fprintf(fp, "- p%d (v%d):", qh_pointid(vertex->point), vertex->id);
-  point= vertex->point;
-  if (point) {
-    for(k= qh hull_dim; k--; ) {
-      r= *point++;
-      fprintf(fp, " %5.2g", r);
-    }
-  }
-  if (vertex->deleted)
-    fprintf(fp, " deleted");
-  if (vertex->delridge)
-    fprintf (fp, " ridgedeleted");
-  fprintf(fp, "\n");
-  if (vertex->neighbors) {
-    fprintf(fp, "  neighbors:");
-    FOREACHneighbor_(vertex) {
-      if (++count % 100 == 0)
-	fprintf (fp, "\n     ");
-      fprintf(fp, " f%d", neighbor->id);
-    }
-    fprintf(fp, "\n");
-  }
-} /* printvertex */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvertexlist">-</a>
-  
-  qh_printvertexlist( fp, string, facetlist, facets, printall )
-    prints vertices used by a facetlist or facet set
-    tests qh_skipfacet() if !printall
-*/
-void qh_printvertexlist (FILE *fp, char* string, facetT *facetlist, 
-                         setT *facets, boolT printall) {
-  vertexT *vertex, **vertexp;
-  setT *vertices;
-  
-  vertices= qh_facetvertices (facetlist, facets, printall);
-  fputs (string, fp);
-  FOREACHvertex_(vertices)
-    qh_printvertex(fp, vertex);
-  qh_settempfree (&vertices);
-} /* printvertexlist */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvertices">-</a>
-  
-  qh_printvertices( fp, string, vertices )
-    prints vertices in a set
-*/
-void qh_printvertices(FILE *fp, char* string, setT *vertices) {
-  vertexT *vertex, **vertexp;
-  
-  fputs (string, fp);
-  FOREACHvertex_(vertices) 
-    fprintf (fp, " p%d (v%d)", qh_pointid(vertex->point), vertex->id);
-  fprintf(fp, "\n");
-} /* printvertices */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvneighbors">-</a>
-  
-  qh_printvneighbors( fp, facetlist, facets, printall )
-    print vertex neighbors of vertices in facetlist and facets ('FN')
-
-  notes:
-    qh_countfacets clears facet->visitid for non-printed facets
-
-  design:
-    collect facet count and related statistics
-    if necessary, build neighbor sets for each vertex
-    collect vertices in facetlist and facets
-    build a point array for point->vertex and point->coplanar facet
-    for each point
-      list vertex neighbors or coplanar facet
-*/
-void qh_printvneighbors (FILE *fp, facetT* facetlist, setT *facets, boolT printall) {
-  int numfacets, numsimplicial, numridges, totneighbors, numneighbors, numcoplanars, numtricoplanars;
-  setT *vertices, *vertex_points, *coplanar_points;
-  int numpoints= qh num_points + qh_setsize (qh other_points);
-  vertexT *vertex, **vertexp;
-  int vertex_i, vertex_n;
-  facetT *facet, **facetp, *neighbor, **neighborp;
-  pointT *point, **pointp;
-
-  qh_countfacets (facetlist, facets, printall, &numfacets, &numsimplicial, 
-      &totneighbors, &numridges, &numcoplanars, &numtricoplanars);  /* sets facet->visitid */
-  fprintf (fp, "%d\n", numpoints);
-  qh_vertexneighbors();
-  vertices= qh_facetvertices (facetlist, facets, printall);
-  vertex_points= qh_settemp (numpoints);
-  coplanar_points= qh_settemp (numpoints);
-  qh_setzero (vertex_points, 0, numpoints);
-  qh_setzero (coplanar_points, 0, numpoints);
-  FOREACHvertex_(vertices)
-    qh_point_add (vertex_points, vertex->point, vertex);
-  FORALLfacet_(facetlist) {
-    FOREACHpoint_(facet->coplanarset)
-      qh_point_add (coplanar_points, point, facet);
-  }
-  FOREACHfacet_(facets) {
-    FOREACHpoint_(facet->coplanarset)
-      qh_point_add (coplanar_points, point, facet);
-  }
-  FOREACHvertex_i_(vertex_points) {
-    if (vertex) { 
-      numneighbors= qh_setsize (vertex->neighbors);
-      fprintf (fp, "%d", numneighbors);
-      if (qh hull_dim == 3)
-        qh_order_vertexneighbors (vertex);
-      else if (qh hull_dim >= 4)
-        qsort (SETaddr_(vertex->neighbors, facetT), numneighbors,
-             sizeof (facetT *), qh_compare_facetvisit);
-      FOREACHneighbor_(vertex) 
-        fprintf (fp, " %d", 
-		 neighbor->visitid ? neighbor->visitid - 1 : - neighbor->id);
-      fprintf (fp, "\n");
-    }else if ((facet= SETelemt_(coplanar_points, vertex_i, facetT)))
-      fprintf (fp, "1 %d\n",
-                  facet->visitid ? facet->visitid - 1 : - facet->id);
-    else
-      fprintf (fp, "0\n");
-  }
-  qh_settempfree (&coplanar_points);
-  qh_settempfree (&vertex_points);
-  qh_settempfree (&vertices);
-} /* printvneighbors */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvoronoi">-</a>
-  
-  qh_printvoronoi( fp, format, facetlist, facets, printall )
-    print voronoi diagram in 'o' or 'G' format
-    for 'o' format
-      prints voronoi centers for each facet and for infinity
-      for each vertex, lists ids of printed facets or infinity
-      assumes facetlist and facets are disjoint
-    for 'G' format
-      prints an OFF object
-      adds a 0 coordinate to center
-      prints infinity but does not list in vertices
-
-  see:
-    qh_printvdiagram()
-
-  notes:
-    if 'o', 
-      prints a line for each point except "at-infinity"
-    if all facets are upperdelaunay, 
-      reverses lower and upper hull
-*/
-void qh_printvoronoi (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall) {
-  int k, numcenters, numvertices= 0, numneighbors, numinf, vid=1, vertex_i, vertex_n;
-  facetT *facet, **facetp, *neighbor, **neighborp;
-  setT *vertices;
-  vertexT *vertex;
-  boolT islower;
-  unsigned int numfacets= (unsigned int) qh num_facets;
-
-  vertices= qh_markvoronoi (facetlist, facets, printall, &islower, &numcenters);
-  FOREACHvertex_i_(vertices) {
-    if (vertex) {
-      numvertices++;
-      numneighbors = numinf = 0;
-      FOREACHneighbor_(vertex) {
-        if (neighbor->visitid == 0)
-	  numinf= 1;
-        else if (neighbor->visitid < numfacets)
-          numneighbors++;
-      }
-      if (numinf && !numneighbors) {
-	SETelem_(vertices, vertex_i)= NULL;
-	numvertices--;
-      }
-    }
-  }
-  if (format == qh_PRINTgeom) 
-    fprintf (fp, "{appearance {+edge -face} OFF %d %d 1 # Voronoi centers and cells\n", 
-                numcenters, numvertices);
-  else
-    fprintf (fp, "%d\n%d %d 1\n", qh hull_dim-1, numcenters, qh_setsize(vertices));
-  if (format == qh_PRINTgeom) {
-    for (k= qh hull_dim-1; k--; )
-      fprintf (fp, qh_REAL_1, 0.0);
-    fprintf (fp, " 0 # infinity not used\n");
-  }else {
-    for (k= qh hull_dim-1; k--; )
-      fprintf (fp, qh_REAL_1, qh_INFINITE);
-    fprintf (fp, "\n");
-  }
-  FORALLfacet_(facetlist) {
-    if (facet->visitid && facet->visitid < numfacets) {
-      if (format == qh_PRINTgeom)
-        fprintf (fp, "# %d f%d\n", vid++, facet->id);
-      qh_printcenter (fp, format, NULL, facet);
-    }
-  }
-  FOREACHfacet_(facets) {
-    if (facet->visitid && facet->visitid < numfacets) {
-      if (format == qh_PRINTgeom)
-        fprintf (fp, "# %d f%d\n", vid++, facet->id);
-      qh_printcenter (fp, format, NULL, facet);
-    }
-  }
-  FOREACHvertex_i_(vertices) {
-    numneighbors= 0;
-    numinf=0;
-    if (vertex) {
-      if (qh hull_dim == 3)
-        qh_order_vertexneighbors(vertex);
-      else if (qh hull_dim >= 4)
-        qsort (SETaddr_(vertex->neighbors, vertexT), 
-	     qh_setsize (vertex->neighbors),
-	     sizeof (facetT *), qh_compare_facetvisit);
-      FOREACHneighbor_(vertex) {
-        if (neighbor->visitid == 0)
-	  numinf= 1;
-	else if (neighbor->visitid < numfacets)
-          numneighbors++;
-      }
-    }
-    if (format == qh_PRINTgeom) {
-      if (vertex) {
-	fprintf (fp, "%d", numneighbors);
-	if (vertex) {
-	  FOREACHneighbor_(vertex) {
-	    if (neighbor->visitid && neighbor->visitid < numfacets)
-	      fprintf (fp, " %d", neighbor->visitid);
-	  }
-	}
-	fprintf (fp, " # p%d (v%d)\n", vertex_i, vertex->id);
-      }else
-	fprintf (fp, " # p%d is coplanar or isolated\n", vertex_i);
-    }else {
-      if (numinf)
-	numneighbors++;
-      fprintf (fp, "%d", numneighbors);
-      if (vertex) {
-        FOREACHneighbor_(vertex) {
-  	  if (neighbor->visitid == 0) {
-  	    if (numinf) {
-  	      numinf= 0;
-	      fprintf (fp, " %d", neighbor->visitid);
-	    }
-	  }else if (neighbor->visitid < numfacets)
-	    fprintf (fp, " %d", neighbor->visitid);
-	}
-      }
-      fprintf (fp, "\n");
-    }
-  }
-  if (format == qh_PRINTgeom)
-    fprintf (fp, "}\n");
-  qh_settempfree (&vertices);
-} /* printvoronoi */
-  
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvnorm">-</a>
-  
-  qh_printvnorm( fp, vertex, vertexA, centers, unbounded )
-    print one separating plane of the Voronoi diagram for a pair of input sites
-    unbounded==True if centers includes vertex-at-infinity
-  
-  assumes:
-    qh_ASvoronoi and qh_vertexneighbors() already set
-    
-  see:
-    qh_printvdiagram()
-    qh_eachvoronoi()
-*/
-void qh_printvnorm (FILE *fp, vertexT *vertex, vertexT *vertexA, setT *centers, boolT unbounded) {
-  pointT *normal;
-  realT offset;
-  int k;
-  
-  normal= qh_detvnorm (vertex, vertexA, centers, &offset);
-  fprintf (fp, "%d %d %d ", 
-      2+qh hull_dim, qh_pointid (vertex->point), qh_pointid (vertexA->point));
-  for (k= 0; k< qh hull_dim-1; k++)
-    fprintf (fp, qh_REAL_1, normal[k]);
-  fprintf (fp, qh_REAL_1, offset);
-  fprintf (fp, "\n");
-} /* printvnorm */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="printvridge">-</a>
-  
-  qh_printvridge( fp, vertex, vertexA, centers, unbounded )
-    print one ridge of the Voronoi diagram for a pair of input sites
-    unbounded==True if centers includes vertex-at-infinity
-  
-  see:
-    qh_printvdiagram()
-  
-  notes:
-    the user may use a different function
-*/
-void qh_printvridge (FILE *fp, vertexT *vertex, vertexT *vertexA, setT *centers, boolT unbounded) {
-  facetT *facet, **facetp;
-
-  fprintf (fp, "%d %d %d", qh_setsize (centers)+2, 
-       qh_pointid (vertex->point), qh_pointid (vertexA->point));
-  FOREACHfacet_(centers) 
-    fprintf (fp, " %d", facet->visitid);
-  fprintf (fp, "\n");
-} /* printvridge */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="projectdim3">-</a>
-  
-  qh_projectdim3( source, destination )
-    project 2-d 3-d or 4-d point to a 3-d point
-    uses qh.DROPdim and qh.hull_dim
-    source and destination may be the same
-    
-  notes:
-    allocate 4 elements to destination just in case
-*/
-void qh_projectdim3 (pointT *source, pointT *destination) {
-  int i,k;
-
-  for (k= 0, i=0; k < qh hull_dim; k++) {
-    if (qh hull_dim == 4) {
-      if (k != qh DROPdim)
-        destination[i++]= source[k];
-    }else if (k == qh DROPdim)
-      destination[i++]= 0;
-    else
-      destination[i++]= source[k];
-  }
-  while (i < 3)
-    destination[i++]= 0.0;
-} /* projectdim3 */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="readfeasible">-</a>
-  
-  qh_readfeasible( dim, remainder )
-    read feasible point from remainder string and qh.fin
-
-  returns:
-    number of lines read from qh.fin
-    sets qh.FEASIBLEpoint with malloc'd coordinates
-
-  notes:
-    checks for qh.HALFspace
-    assumes dim > 1
-
-  see:
-    qh_setfeasible
-*/
-int qh_readfeasible (int dim, char *remainder) {
-  boolT isfirst= True;
-  int linecount= 0, tokcount= 0;
-  char *s, *t, firstline[qh_MAXfirst+1];
-  coordT *coords, value;
-
-  if (!qh HALFspace) {
-    fprintf  (qh ferr, "qhull input error: feasible point (dim 1 coords) is only valid for halfspace intersection\n");
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }  
-  if (qh feasible_string)
-    fprintf  (qh ferr, "qhull input warning: feasible point (dim 1 coords) overrides 'Hn,n,n' feasible point for halfspace intersection\n");
-  if (!(qh feasible_point= (coordT*)malloc (dim* sizeof(coordT)))) {
-    fprintf(qh ferr, "qhull error: insufficient memory for feasible point\n");
-    qh_errexit(qh_ERRmem, NULL, NULL);
-  }
-  coords= qh feasible_point;
-  while ((s= (isfirst ?  remainder : fgets(firstline, qh_MAXfirst, qh fin)))) {
-    if (isfirst)
-      isfirst= False;
-    else
-      linecount++;
-    while (*s) {
-      while (isspace(*s))
-        s++;
-      value= qh_strtod (s, &t);
-      if (s == t)
-        break;
-      s= t;
-      *(coords++)= value;
-      if (++tokcount == dim) {
-        while (isspace (*s))
-          s++;
-        qh_strtod (s, &t);
-        if (s != t) {
-          fprintf (qh ferr, "qhull input error: coordinates for feasible point do not finish out the line: %s\n",
-               s);
-          qh_errexit (qh_ERRinput, NULL, NULL);
-        }
-        return linecount;
-      }
-    }
-  }
-  fprintf (qh ferr, "qhull input error: only %d coordinates.  Could not read %d-d feasible point.\n",
-           tokcount, dim);
-  qh_errexit (qh_ERRinput, NULL, NULL);
-  return 0;
-} /* readfeasible */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="readpoints">-</a>
-  
-  qh_readpoints( numpoints, dimension, ismalloc )
-    read points from qh.fin into qh.first_point, qh.num_points
-    qh.fin is lines of coordinates, one per vertex, first line number of points
-    if 'rbox D4',
-      gives message
-    if qh.ATinfinity,
-      adds point-at-infinity for Delaunay triangulations
-
-  returns:
-    number of points, array of point coordinates, dimension, ismalloc True
-    if qh.DELAUNAY & !qh.PROJECTinput, projects points to paraboloid
-        and clears qh.PROJECTdelaunay
-    if qh.HALFspace, reads optional feasible point, reads halfspaces,
-        converts to dual.
-
-  for feasible point in "cdd format" in 3-d:
-    3 1
-    coordinates
-    comments
-    begin
-    n 4 real/integer
-    ...
-    end
-
-  notes:
-    dimension will change in qh_initqhull_globals if qh.PROJECTinput
-    uses malloc() since qh_mem not initialized
-    FIXUP: this routine needs rewriting
-*/
-coordT *qh_readpoints(int *numpoints, int *dimension, boolT *ismalloc) {
-  coordT *points, *coords, *infinity= NULL;
-  realT paraboloid, maxboloid= -REALmax, value;
-  realT *coordp= NULL, *offsetp= NULL, *normalp= NULL;
-  char *s, *t, firstline[qh_MAXfirst+1];
-  int diminput=0, numinput=0, dimfeasible= 0, newnum, k, tempi;
-  int firsttext=0, firstshort=0, firstlong=0, firstpoint=0;
-  int tokcount= 0, linecount=0, maxcount, coordcount=0;
-  boolT islong, isfirst= True, wasbegin= False;
-  boolT isdelaunay= qh DELAUNAY && !qh PROJECTinput;
-
-  if (qh CDDinput) {
-    while ((s= fgets(firstline, qh_MAXfirst, qh fin))) {
-      linecount++;
-      if (qh HALFspace && linecount == 1 && isdigit(*s)) {
-	dimfeasible= qh_strtol (s, &s);	
-	while (isspace(*s))
-          s++;
-        if (qh_strtol (s, &s) == 1)
-          linecount += qh_readfeasible (dimfeasible, s);
-        else
-          dimfeasible= 0;
-      }else if (!memcmp (firstline, "begin", 5) || !memcmp (firstline, "BEGIN", 5))
-        break;
-      else if (!*qh rbox_command)
-	strncat(qh rbox_command, s, sizeof (qh rbox_command)-1);
-    }
-    if (!s) {
-      fprintf (qh ferr, "qhull input error: missing \"begin\" for cdd-formated input\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-  }
-  while(!numinput && (s= fgets(firstline, qh_MAXfirst, qh fin))) {
-    linecount++;
-    if (!memcmp (s, "begin", 5) || !memcmp (s, "BEGIN", 5))
-      wasbegin= True;
-    while (*s) {
-      while (isspace(*s))
-        s++;
-      if (!*s)
-        break;
-      if (!isdigit(*s)) {
-        if (!*qh rbox_command) {
-          strncat(qh rbox_command, s, sizeof (qh rbox_command)-1);
-	  firsttext= linecount;
-        }
-        break;
-      }
-      if (!diminput) 
-        diminput= qh_strtol (s, &s);
-      else {
-        numinput= qh_strtol (s, &s);
-        if (numinput == 1 && diminput >= 2 && qh HALFspace && !qh CDDinput) {
-          linecount += qh_readfeasible (diminput, s); /* checks if ok */
-          dimfeasible= diminput;
-          diminput= numinput= 0;
-        }else 
-          break;
-      }
-    }
-  }
-  if (!s) {
-    fprintf(qh ferr, "qhull input error: short input file.  Did not find dimension and number of points\n");
-    qh_errexit(qh_ERRinput, NULL, NULL);
-  }
-  if (diminput > numinput) {
-    tempi= diminput;	/* exchange dim and n, e.g., for cdd input format */
-    diminput= numinput;
-    numinput= tempi;
-  }
-  if (diminput < 2) {
-    fprintf(qh ferr,"qhull input error: dimension %d (first number) should be at least 2\n",
-	    diminput);
-    qh_errexit(qh_ERRinput, NULL, NULL);
-  }
-  if (isdelaunay) {
-    qh PROJECTdelaunay= False;
-    if (qh CDDinput)
-      *dimension= diminput;
-    else
-      *dimension= diminput+1;
-    *numpoints= numinput;
-    if (qh ATinfinity)
-      (*numpoints)++;
-  }else if (qh HALFspace) {
-    *dimension= diminput - 1;
-    *numpoints= numinput;
-    if (diminput < 3) {
-      fprintf(qh ferr,"qhull input error: dimension %d (first number, includes offset) should be at least 3 for halfspaces\n",
-  	    diminput);
-      qh_errexit(qh_ERRinput, NULL, NULL);
-    }
-    if (dimfeasible) {
-      if (dimfeasible != *dimension) {
-        fprintf(qh ferr,"qhull input error: dimension %d of feasible point is not one less than dimension %d for halfspaces\n",
-          dimfeasible, diminput);
-        qh_errexit(qh_ERRinput, NULL, NULL);
-      }
-    }else 
-      qh_setfeasible (*dimension);
-  }else {
-    if (qh CDDinput) 
-      *dimension= diminput-1;
-    else
-      *dimension= diminput;
-    *numpoints= numinput;
-  }
-  qh normal_size= *dimension * sizeof(coordT); /* for tracing with qh_printpoint */
-  if (qh HALFspace) {
-    qh half_space= coordp= (coordT*) malloc (qh normal_size + sizeof(coordT));
-    if (qh CDDinput) {
-      offsetp= qh half_space;
-      normalp= offsetp + 1;
-    }else {
-      normalp= qh half_space;
-      offsetp= normalp + *dimension;
-    }
-  } 
-  qh maxline= diminput * (qh_REALdigits + 5);
-  maximize_(qh maxline, 500);
-  qh line= (char*)malloc ((qh maxline+1) * sizeof (char));
-  *ismalloc= True;  /* use malloc since memory not setup */
-  coords= points= qh temp_malloc= 
-        (coordT*)malloc((*numpoints)*(*dimension)*sizeof(coordT));
-  if (!coords || !qh line || (qh HALFspace && !qh half_space)) {
-    fprintf(qh ferr, "qhull error: insufficient memory to read %d points\n",
-	    numinput);
-    qh_errexit(qh_ERRmem, NULL, NULL);
-  }
-  if (isdelaunay && qh ATinfinity) {
-    infinity= points + numinput * (*dimension);
-    for (k= (*dimension) - 1; k--; )
-      infinity[k]= 0.0;
-  }
-  maxcount= numinput * diminput;
-  paraboloid= 0.0;
-  while ((s= (isfirst ?  s : fgets(qh line, qh maxline, qh fin)))) {
-    if (!isfirst) {
-      linecount++;
-      if (*s == 'e' || *s == 'E') {
-	if (!memcmp (s, "end", 3) || !memcmp (s, "END", 3)) {
-	  if (qh CDDinput )
-	    break;
-	  else if (wasbegin) 
-	    fprintf (qh ferr, "qhull input warning: the input appears to be in cdd format.  If so, use 'Fd'\n");
-	}
-      }
-    }
-    islong= False;
-    while (*s) {
-      while (isspace(*s))
-        s++;
-      value= qh_strtod (s, &t);
-      if (s == t) {
-        if (!*qh rbox_command)
- 	 strncat(qh rbox_command, s, sizeof (qh rbox_command)-1);
-        if (*s && !firsttext) 
-          firsttext= linecount;
-        if (!islong && !firstshort && coordcount)
-          firstshort= linecount;
-        break;
-      }
-      if (!firstpoint)
-	firstpoint= linecount;
-      s= t;
-      if (++tokcount > maxcount)
-        continue;
-      if (qh HALFspace) {
-	if (qh CDDinput) 
-	  *(coordp++)= -value; /* both coefficients and offset */
-	else
-	  *(coordp++)= value;
-      }else {
-        *(coords++)= value;
-        if (qh CDDinput && !coordcount) {
-          if (value != 1.0) {
-            fprintf (qh ferr, "qhull input error: for cdd format, point at line %d does not start with '1'\n",
-                   linecount);
-            qh_errexit (qh_ERRinput, NULL, NULL);
-          }
-          coords--;
-        }else if (isdelaunay) {
-	  paraboloid += value * value;
-	  if (qh ATinfinity) {
-	    if (qh CDDinput)
-	      infinity[coordcount-1] += value;
-	    else
-	      infinity[coordcount] += value;
-	  }
-	}
-      }
-      if (++coordcount == diminput) {
-        coordcount= 0;
-        if (isdelaunay) {
-          *(coords++)= paraboloid;
-          maximize_(maxboloid, paraboloid);
-          paraboloid= 0.0;
-        }else if (qh HALFspace) {
-          if (!qh_sethalfspace (*dimension, coords, &coords, normalp, offsetp, qh feasible_point)) {
-	    fprintf (qh ferr, "The halfspace was on line %d\n", linecount);
-	    if (wasbegin)
-	      fprintf (qh ferr, "The input appears to be in cdd format.  If so, you should use option 'Fd'\n");
-	    qh_errexit (qh_ERRinput, NULL, NULL);
-	  }
-          coordp= qh half_space;
-        }          
-        while (isspace(*s))
-          s++;
-        if (*s) {
-          islong= True;
-          if (!firstlong)
-            firstlong= linecount;
-	}
-      }
-    }
-    if (!islong && !firstshort && coordcount)
-      firstshort= linecount;
-    if (!isfirst && s - qh line >= qh maxline) {
-      fprintf(qh ferr, "qhull input error: line %d contained more than %d characters\n", 
-	      linecount, (int) (s - qh line));
-      qh_errexit(qh_ERRinput, NULL, NULL);
-    }
-    isfirst= False;
-  }
-  if (tokcount != maxcount) {
-    newnum= fmin_(numinput, tokcount/diminput);
-    fprintf(qh ferr,"\
-qhull warning: instead of %d %d-dimensional points, input contains\n\
-%d points and %d extra coordinates.  Line %d is the first\npoint",
-       numinput, diminput, tokcount/diminput, tokcount % diminput, firstpoint);
-    if (firsttext)
-      fprintf(qh ferr, ", line %d is the first comment", firsttext);
-    if (firstshort)
-      fprintf(qh ferr, ", line %d is the first short\nline", firstshort);
-    if (firstlong)
-      fprintf(qh ferr, ", line %d is the first long line", firstlong);
-    fprintf(qh ferr, ".  Continue with %d points.\n", newnum);
-    numinput= newnum;
-    if (isdelaunay && qh ATinfinity) {
-      for (k= tokcount % diminput; k--; )
-	infinity[k] -= *(--coords);
-      *numpoints= newnum+1;
-    }else {
-      coords -= tokcount % diminput;
-      *numpoints= newnum;
-    }
-  }
-  if (isdelaunay && qh ATinfinity) {
-    for (k= (*dimension) -1; k--; )
-      infinity[k] /= numinput;
-    if (coords == infinity)
-      coords += (*dimension) -1;
-    else {
-      for (k= 0; k < (*dimension) -1; k++)
-	*(coords++)= infinity[k];
-    }
-    *(coords++)= maxboloid * 1.1;
-  }
-  if (qh rbox_command[0]) {
-    qh rbox_command[strlen(qh rbox_command)-1]= '\0';
-    if (!strcmp (qh rbox_command, "./rbox D4")) 
-      fprintf (qh ferr, "\n\
-This is the qhull test case.  If any errors or core dumps occur,\n\
-recompile qhull with 'make new'.  If errors still occur, there is\n\
-an incompatibility.  You should try a different compiler.  You can also\n\
-change the choices in user.h.  If you discover the source of the problem,\n\
-please send mail to qhull_bug@qhull.org.\n\
-\n\
-Type 'qhull' for a short list of options.\n");
-  }
-  free (qh line);
-  qh line= NULL;
-  if (qh half_space) {
-    free (qh half_space);
-    qh half_space= NULL;
-  }
-  qh temp_malloc= NULL;
-  trace1((qh ferr,"qh_readpoints: read in %d %d-dimensional points\n",
-	  numinput, diminput));
-  return(points);
-} /* readpoints */
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="setfeasible">-</a>
-  
-  qh_setfeasible( dim )
-    set qh.FEASIBLEpoint from qh.feasible_string in "n,n,n" or "n n n" format
-
-  notes:
-    "n,n,n" already checked by qh_initflags()
-    see qh_readfeasible()
-*/
-void qh_setfeasible (int dim) {
-  int tokcount= 0;
-  char *s;
-  coordT *coords, value;
-
-  if (!(s= qh feasible_string)) {
-    fprintf(qh ferr, "\
-qhull input error: halfspace intersection needs a feasible point.\n\
-Either prepend the input with 1 point or use 'Hn,n,n'.  See manual.\n");
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  if (!(qh feasible_point= (pointT*)malloc (dim* sizeof(coordT)))) {
-    fprintf(qh ferr, "qhull error: insufficient memory for 'Hn,n,n'\n");
-    qh_errexit(qh_ERRmem, NULL, NULL);
-  }
-  coords= qh feasible_point;
-  while (*s) {
-    value= qh_strtod (s, &s);
-    if (++tokcount > dim) {
-      fprintf (qh ferr, "qhull input warning: more coordinates for 'H%s' than dimension %d\n",
-          qh feasible_string, dim);
-      break;
-    }
-    *(coords++)= value;
-    if (*s)
-      s++;
-  }
-  while (++tokcount <= dim)    
-    *(coords++)= 0.0;
-} /* setfeasible */
-
-/*-<a                             href="qh-io.htm#TOC"
-  >-------------------------------</a><a name="skipfacet">-</a>
-  
-  qh_skipfacet( facet )
-    returns 'True' if this facet is not to be printed 
-
-  notes:
-    based on the user provided slice thresholds and 'good' specifications
-*/
-boolT qh_skipfacet(facetT *facet) {
-  facetT *neighbor, **neighborp;
-
-  if (qh PRINTneighbors) {
-    if (facet->good)
-      return !qh PRINTgood;
-    FOREACHneighbor_(facet) {
-      if (neighbor->good)
-	return False;
-    }
-    return True;
-  }else if (qh PRINTgood)
-    return !facet->good;
-  else if (!facet->normal)
-    return True;
-  return (!qh_inthresholds (facet->normal, NULL));
-} /* skipfacet */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/io.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/io.h
deleted file mode 100644
index a2ca04499c442309eeddfeb3ad4557af40f3b707..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/io.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*<html><pre>  -<a                             href="qh-io.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   io.h
-   declarations of Input/Output functions
-
-   see README, qhull.h and io.c
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFio
-#define qhDEFio 1
-
-/*============ constants and flags ==================*/
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_MAXfirst">-</a>
-
-  qh_MAXfirst
-    maximum length of first two lines of stdin
-*/
-#define qh_MAXfirst  200
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_MINradius">-</a>
-
-  qh_MINradius
-    min radius for Gp and Gv, fraction of maxcoord
-*/
-#define qh_MINradius 0.02
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_GEOMepsilon">-</a>
-
-  qh_GEOMepsilon
-    adjust outer planes for 'lines closer' and geomview roundoff.
-    This prevents bleed through.
-*/
-#define qh_GEOMepsilon 2e-3
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="qh_WHITESPACE">-</a>
-
-  qh_WHITESPACE
-    possible values of white space
-*/
-#define qh_WHITESPACE " \n\t\v\r\f"
-
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="RIDGE">-</a>
-
-  qh_RIDGE
-    to select which ridges to print in qh_eachvoronoi
-*/
-typedef enum
-{
-    qh_RIDGEall = 0, qh_RIDGEinner, qh_RIDGEouter
-}
-qh_RIDGE;
-
-/*-<a                             href="qh-io.htm#TOC"
-  >--------------------------------</a><a name="printvridgeT">-</a>
-
-  printvridgeT
-    prints results of qh_printvdiagram
-
-  see:
-    <a href="io.c#printvridge">qh_printvridge</a> for an example
-*/
-typedef void (*printvridgeT)(FILE* fp, vertexT* vertex, vertexT* vertexA, setT* centers, boolT unbounded);
-
-/*============== -prototypes in alphabetical order =========*/
-
-void    dfacet(unsigned id);
-void    dvertex(unsigned id);
-int qh_compare_facetarea(const void* p1, const void* p2);
-int qh_compare_facetmerge(const void* p1, const void* p2);
-int qh_compare_facetvisit(const void* p1, const void* p2);
-int qh_compare_vertexpoint(const void* p1, const void* p2); /* not used */
-
-void    qh_countfacets(facetT* facetlist, setT* facets, boolT printall,
-                       int* numfacetsp, int* numsimplicialp, int* totneighborsp,
-                       int* numridgesp, int* numcoplanarsp, int* numnumtricoplanarsp);
-pointT* qh_detvnorm(vertexT* vertex, vertexT* vertexA, setT* centers, realT* offsetp);
-setT*   qh_detvridge(vertexT* vertex);
-setT*   qh_detvridge3(vertexT* atvertex, vertexT* vertex);
-int     qh_eachvoronoi(FILE* fp, printvridgeT printvridge, vertexT* atvertex, boolT visitall, qh_RIDGE innerouter, boolT inorder);
-int     qh_eachvoronoi_all(FILE* fp, printvridgeT printvridge, boolT isupper, qh_RIDGE innerouter, boolT inorder);
-void    qh_facet2point(facetT* facet, pointT** point0, pointT** point1, realT* mindist);
-setT*   qh_facetvertices(facetT* facetlist, setT* facets, boolT allfacets);
-void    qh_geomplanes(facetT* facet, realT* outerplane, realT* innerplane);
-void    qh_markkeep(facetT* facetlist);
-setT*   qh_markvoronoi(facetT* facetlist, setT* facets, boolT printall, boolT* islowerp, int* numcentersp);
-void    qh_order_vertexneighbors(vertexT* vertex);
-void    qh_printafacet(FILE* fp, int format, facetT* facet, boolT printall);
-void    qh_printbegin(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printcenter(FILE* fp, int format, char* string, facetT* facet);
-void    qh_printcentrum(FILE* fp, facetT* facet, realT radius);
-void    qh_printend(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printend4geom(FILE* fp, facetT* facet, int* num, boolT printall);
-void    qh_printextremes(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printextremes_2d(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printextremes_d(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printfacet(FILE* fp, facetT* facet);
-void    qh_printfacet2math(FILE* fp, facetT* facet, int format, int notfirst);
-void    qh_printfacet2geom(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet2geom_points(FILE* fp, pointT* point1, pointT* point2,
-                                  facetT* facet, realT offset, realT color[3]);
-void    qh_printfacet3math(FILE* fp, facetT* facet, int format, int notfirst);
-void    qh_printfacet3geom_nonsimplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet3geom_points(FILE* fp, setT* points, facetT* facet, realT offset, realT color[3]);
-void    qh_printfacet3geom_simplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet3vertex(FILE* fp, facetT* facet, int format);
-void    qh_printfacet4geom_nonsimplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacet4geom_simplicial(FILE* fp, facetT* facet, realT color[3]);
-void    qh_printfacetNvertex_nonsimplicial(FILE* fp, facetT* facet, int id, int format);
-void    qh_printfacetNvertex_simplicial(FILE* fp, facetT* facet, int format);
-void    qh_printfacetheader(FILE* fp, facetT* facet);
-void    qh_printfacetridges(FILE* fp, facetT* facet);
-void    qh_printfacets(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printhelp_degenerate(FILE* fp);
-void    qh_printhelp_singular(FILE* fp);
-void    qh_printhyperplaneintersection(FILE* fp, facetT* facet1, facetT* facet2,
-                                       setT* vertices, realT color[3]);
-void    qh_printneighborhood(FILE* fp, int format, facetT* facetA, facetT* facetB, boolT printall);
-void    qh_printline3geom(FILE* fp, pointT* pointA, pointT* pointB, realT color[3]);
-void    qh_printpoint(FILE* fp, char* string, pointT* point);
-void    qh_printpointid(FILE* fp, char* string, int dim, pointT* point, int id);
-void    qh_printpoint3(FILE* fp, pointT* point);
-void    qh_printpoints_out(FILE* fp, facetT* facetlist, setT* facets, int printall);
-void    qh_printpointvect(FILE* fp, pointT* point, coordT* normal, pointT* center, realT radius, realT color[3]);
-void    qh_printpointvect2(FILE* fp, pointT* point, coordT* normal, pointT* center, realT radius);
-void    qh_printridge(FILE* fp, ridgeT* ridge);
-void    qh_printspheres(FILE* fp, setT* vertices, realT radius);
-void    qh_printvdiagram(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-int     qh_printvdiagram2(FILE* fp, printvridgeT printvridge, setT* vertices, qh_RIDGE innerouter, boolT inorder);
-void    qh_printvertex(FILE* fp, vertexT* vertex);
-void    qh_printvertexlist(FILE* fp, char* string, facetT* facetlist,
-                           setT* facets, boolT printall);
-void    qh_printvertices(FILE* fp, char* string, setT* vertices);
-void    qh_printvneighbors(FILE* fp, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printvoronoi(FILE* fp, int format, facetT* facetlist, setT* facets, boolT printall);
-void    qh_printvnorm(FILE* fp, vertexT* vertex, vertexT* vertexA, setT* centers, boolT unbounded);
-void    qh_printvridge(FILE* fp, vertexT* vertex, vertexT* vertexA, setT* centers, boolT unbounded);
-void    qh_produce_output(void);
-void    qh_projectdim3(pointT* source, pointT* destination);
-int     qh_readfeasible(int dim, char* remainder);
-coordT* qh_readpoints(int* numpoints, int* dimension, boolT* ismalloc);
-void    qh_setfeasible(int dim);
-boolT   qh_skipfacet(facetT* facet);
-
-#endif /* qhDEFio */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/mem.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/mem.c
deleted file mode 100644
index f7fdde46cd3ebb6532977f7d0a15be58bfb61815..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/mem.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/*<html><pre>  -<a                             href="qh-mem.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-  mem.c 
-    memory management routines for qhull
-
-  This is a standalone program.
-   
-  To initialize memory:
-
-    qh_meminit (stderr);  
-    qh_meminitbuffers (qh IStracing, qh_MEMalign, 7, qh_MEMbufsize,qh_MEMinitbuf);
-    qh_memsize(sizeof(facetT));
-    qh_memsize(sizeof(facetT));
-    ...
-    qh_memsetup();
-    
-  To free up all memory buffers:
-    qh_memfreeshort (&curlong, &totlong);
-         
-  if qh_NOmem, 
-    malloc/free is used instead of mem.c
-
-  notes: 
-    uses Quickfit algorithm (freelists for commonly allocated sizes)
-    assumes small sizes for freelists (it discards the tail of memory buffers)
-   
-  see:
-    qh-mem.htm and mem.h
-    global.c (qh_initbuffers) for an example of using mem.c 
-   
-  copyright (c) 1993-2003 The Geometry Center
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "mem.h"
-
-#ifndef qhDEFqhull
-typedef struct ridgeT ridgeT;
-typedef struct facetT facetT;
-void    qh_errexit(int exitcode, facetT *, ridgeT *);
-#endif
-
-/*============ -global data structure ==============
-    see mem.h for definition
-*/
-
-qhmemT qhmem;
-/*= {0};
-/ * remove "= {0}" if this causes a compiler error */
-
-#ifndef qh_NOmem
-
-/*============= internal functions ==============*/
-  
-static int qh_intcompare(const void *i, const void *j);
-
-/*========== functions in alphabetical order ======== */
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="intcompare">-</a>
-  
-  qh_intcompare( i, j )
-    used by qsort and bsearch to compare two integers
-*/
-static int qh_intcompare(const void *i, const void *j) {
-  return(*((int *)i) - *((int *)j));
-} /* intcompare */
-
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="memalloc">-</a>
-   
-  qh_memalloc( insize )  
-    returns object of insize bytes
-    qhmem is the global memory structure 
-    
-  returns:
-    pointer to allocated memory 
-    errors if insufficient memory
-
-  notes:
-    use explicit type conversion to avoid type warnings on some compilers
-    actual object may be larger than insize
-    use qh_memalloc_() for inline code for quick allocations
-    logs allocations if 'T5'
-  
-  design:
-    if size < qhmem.LASTsize
-      if qhmem.freelists[size] non-empty
-        return first object on freelist
-      else
-        round up request to size of qhmem.freelists[size]
-        allocate new allocation buffer if necessary
-        allocate object from allocation buffer
-    else
-      allocate object with malloc()
-*/
-void *qh_memalloc(int insize) {
-  void **freelistp, *newbuffer;
-  int index, size;
-  int outsize, bufsize;
-  void *object;
-
-  if ((unsigned) insize <= (unsigned) qhmem.LASTsize) {
-    index= qhmem.indextable[insize];
-    freelistp= qhmem.freelists+index;
-    if ((object= *freelistp)) {
-      qhmem.cntquick++;  
-      *freelistp= *((void **)*freelistp);  /* replace freelist with next object */
-      return (object);
-    }else {
-      outsize= qhmem.sizetable[index];
-      qhmem.cntshort++;
-      if (outsize > qhmem .freesize) {
-	if (!qhmem.curbuffer)
-	  bufsize= qhmem.BUFinit;
-        else
-	  bufsize= qhmem.BUFsize;
-        qhmem.totshort += bufsize;
-	if (!(newbuffer= malloc(bufsize))) {
-	  fprintf(qhmem.ferr, "qhull error (qh_memalloc): insufficient memory\n");
-	  qh_errexit(qhmem_ERRmem, NULL, NULL);
-	} 
-	*((void **)newbuffer)= qhmem.curbuffer;  /* prepend newbuffer to curbuffer 
-						    list */
-	qhmem.curbuffer= newbuffer;
-        size= (sizeof(void **) + qhmem.ALIGNmask) & ~qhmem.ALIGNmask;
-	qhmem.freemem= (void *)((char *)newbuffer+size);
-	qhmem.freesize= bufsize - size;
-      }
-      object= qhmem.freemem;
-      qhmem.freemem= (void *)((char *)qhmem.freemem + outsize);
-      qhmem.freesize -= outsize;
-      return object;
-    }
-  }else {                     /* long allocation */
-    if (!qhmem.indextable) {
-      fprintf (qhmem.ferr, "qhull internal error (qh_memalloc): qhmem has not been initialized.\n");
-      qh_errexit(qhmem_ERRqhull, NULL, NULL);
-    }
-    outsize= insize;
-    qhmem .cntlong++;
-    qhmem .curlong++;
-    qhmem .totlong += outsize;
-    if (qhmem.maxlong < qhmem.totlong)
-      qhmem.maxlong= qhmem.totlong;
-    if (!(object= malloc(outsize))) {
-      fprintf(qhmem.ferr, "qhull error (qh_memalloc): insufficient memory\n");
-      qh_errexit(qhmem_ERRmem, NULL, NULL);
-    }
-    if (qhmem.IStracing >= 5)
-      fprintf (qhmem.ferr, "qh_memalloc long: %d bytes at %p\n", outsize, object);
-  }
-  return (object);
-} /* memalloc */
-
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="memfree">-</a>
-   
-  qh_memfree( object, size ) 
-    free up an object of size bytes
-    size is insize from qh_memalloc
-
-  notes:
-    object may be NULL
-    type checking warns if using (void **)object
-    use qh_memfree_() for quick free's of small objects
- 
-  design:
-    if size <= qhmem.LASTsize
-      append object to corresponding freelist
-    else
-      call free(object)
-*/
-void qh_memfree(void *object, int size) {
-  void **freelistp;
-
-  if (!object)
-    return;
-  if (size <= qhmem.LASTsize) {
-    qhmem .freeshort++;
-    freelistp= qhmem.freelists + qhmem.indextable[size];
-    *((void **)object)= *freelistp;
-    *freelistp= object;
-  }else {
-    qhmem .freelong++;
-    qhmem .totlong -= size;
-    free (object);
-    if (qhmem.IStracing >= 5)
-      fprintf (qhmem.ferr, "qh_memfree long: %d bytes at %p\n", size, object);
-  }
-} /* memfree */
-
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="memfreeshort">-</a>
-  
-  qh_memfreeshort( curlong, totlong )
-    frees up all short and qhmem memory allocations
-
-  returns:
-    number and size of current long allocations
-*/
-void qh_memfreeshort (int *curlong, int *totlong) {
-  void *buffer, *nextbuffer;
-  FILE *ferr;
-
-  *curlong= qhmem .cntlong - qhmem .freelong;
-  *totlong= qhmem .totlong;
-  for(buffer= qhmem.curbuffer; buffer; buffer= nextbuffer) {
-    nextbuffer= *((void **) buffer);
-    free(buffer);
-  }
-  qhmem.curbuffer= NULL;
-  if (qhmem .LASTsize) {
-    free (qhmem .indextable);
-    free (qhmem .freelists);
-    free (qhmem .sizetable);
-  }
-  ferr= qhmem.ferr;
-  memset((char *)&qhmem, 0, sizeof qhmem);  /* every field is 0, FALSE, NULL */
-  qhmem.ferr= ferr;
-} /* memfreeshort */
-
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="meminit">-</a>
-   
-  qh_meminit( ferr )
-    initialize qhmem and test sizeof( void*)
-*/
-void qh_meminit (FILE *ferr) {
-  
-  memset((char *)&qhmem, 0, sizeof qhmem);  /* every field is 0, FALSE, NULL */
-  qhmem.ferr= ferr;
-  if (sizeof(void*) < sizeof(int)) {
-    fprintf (ferr, "qhull internal error (qh_meminit): sizeof(void*) < sizeof(int).  qset.c will not work\n");
-    exit (1);  /* can not use qh_errexit() */
-  }
-} /* meminit */
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="meminitbuffers">-</a>
-  
-  qh_meminitbuffers( tracelevel, alignment, numsizes, bufsize, bufinit )
-    initialize qhmem
-    if tracelevel >= 5, trace memory allocations
-    alignment= desired address alignment for memory allocations
-    numsizes= number of freelists
-    bufsize=  size of additional memory buffers for short allocations
-    bufinit=  size of initial memory buffer for short allocations
-*/
-void qh_meminitbuffers (int tracelevel, int alignment, int numsizes, int bufsize, int bufinit) {
-
-  qhmem.IStracing= tracelevel;
-  qhmem.NUMsizes= numsizes;
-  qhmem.BUFsize= bufsize;
-  qhmem.BUFinit= bufinit;
-  qhmem.ALIGNmask= alignment-1;
-  if (qhmem.ALIGNmask & ~qhmem.ALIGNmask) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_meminit): memory alignment %d is not a power of 2\n", alignment);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  qhmem.sizetable= (int *) calloc (numsizes, sizeof(int));
-  qhmem.freelists= (void **) calloc (numsizes, sizeof(void *));
-  if (!qhmem.sizetable || !qhmem.freelists) {
-    fprintf(qhmem.ferr, "qhull error (qh_meminit): insufficient memory\n");
-    qh_errexit (qhmem_ERRmem, NULL, NULL);
-  }
-  if (qhmem.IStracing >= 1)
-    fprintf (qhmem.ferr, "qh_meminitbuffers: memory initialized with alignment %d\n", alignment);
-} /* meminitbuffers */
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="memsetup">-</a>
-  
-  qh_memsetup()
-    set up memory after running memsize()
-*/
-void qh_memsetup (void) {
-  int k,i;
-
-  qsort(qhmem.sizetable, qhmem.TABLEsize, sizeof(int), qh_intcompare);
-  qhmem.LASTsize= qhmem.sizetable[qhmem.TABLEsize-1];
-  if (qhmem .LASTsize >= qhmem .BUFsize || qhmem.LASTsize >= qhmem .BUFinit) {
-    fprintf (qhmem.ferr, "qhull error (qh_memsetup): largest mem size %d is >= buffer size %d or initial buffer size %d\n",
-            qhmem .LASTsize, qhmem .BUFsize, qhmem .BUFinit);
-    qh_errexit(qhmem_ERRmem, NULL, NULL);
-  }
-  if (!(qhmem.indextable= (int *)malloc((qhmem.LASTsize+1) * sizeof(int)))) {
-    fprintf(qhmem.ferr, "qhull error (qh_memsetup): insufficient memory\n");
-    qh_errexit(qhmem_ERRmem, NULL, NULL);
-  }
-  for(k=qhmem.LASTsize+1; k--; )
-    qhmem.indextable[k]= k;
-  i= 0;
-  for(k= 0; k <= qhmem.LASTsize; k++) {
-    if (qhmem.indextable[k] <= qhmem.sizetable[i])
-      qhmem.indextable[k]= i;
-    else
-      qhmem.indextable[k]= ++i;
-  }
-} /* memsetup */
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="memsize">-</a>
-  
-  qh_memsize( size )
-    define a free list for this size
-*/
-void qh_memsize(int size) {
-  int k;
-
-  if (qhmem .LASTsize) {
-    fprintf (qhmem .ferr, "qhull error (qh_memsize): called after qhmem_setup\n");
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  size= (size + qhmem.ALIGNmask) & ~qhmem.ALIGNmask;
-  for(k= qhmem.TABLEsize; k--; ) {
-    if (qhmem.sizetable[k] == size)
-      return;
-  }
-  if (qhmem.TABLEsize < qhmem.NUMsizes)
-    qhmem.sizetable[qhmem.TABLEsize++]= size;
-  else
-    fprintf(qhmem.ferr, "qhull warning (memsize): free list table has room for only %d sizes\n", qhmem.NUMsizes);
-} /* memsize */
-
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="memstatistics">-</a>
-  
-  qh_memstatistics( fp )
-    print out memory statistics
-
-  notes:
-    does not account for wasted memory at the end of each block
-*/
-void qh_memstatistics (FILE *fp) {
-  int i, count, totfree= 0;
-  void *object;
-  
-  for (i=0; i < qhmem.TABLEsize; i++) {
-    count=0;
-    for (object= qhmem .freelists[i]; object; object= *((void **)object))
-      count++;
-    totfree += qhmem.sizetable[i] * count;
-  }
-  fprintf (fp, "\nmemory statistics:\n\
-%7d quick allocations\n\
-%7d short allocations\n\
-%7d long allocations\n\
-%7d short frees\n\
-%7d long frees\n\
-%7d bytes of short memory in use\n\
-%7d bytes of short memory in freelists\n\
-%7d bytes of long memory allocated (except for input)\n\
-%7d bytes of long memory in use (in %d pieces)\n\
-%7d bytes per memory buffer (initially %d bytes)\n",
-	   qhmem .cntquick, qhmem.cntshort, qhmem.cntlong,
-	   qhmem .freeshort, qhmem.freelong, 
-	   qhmem .totshort - qhmem .freesize - totfree,
-	   totfree,
-	   qhmem .maxlong, qhmem .totlong, qhmem .cntlong - qhmem .freelong,
-	   qhmem .BUFsize, qhmem .BUFinit);
-  if (qhmem.cntlarger) {
-    fprintf (fp, "%7d calls to qh_setlarger\n%7.2g     average copy size\n",
-	   qhmem.cntlarger, ((float) qhmem.totlarger)/ qhmem.cntlarger);
-    fprintf (fp, "  freelists (bytes->count):");
-  }
-  for (i=0; i < qhmem.TABLEsize; i++) {
-    count=0;
-    for (object= qhmem .freelists[i]; object; object= *((void **)object))
-      count++;
-    fprintf (fp, " %d->%d", qhmem.sizetable[i], count);
-  }
-  fprintf (fp, "\n\n");
-} /* memstatistics */
-
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="NOmem">-</a>
-  
-  qh_NOmem
-    turn off quick-fit memory allocation
-
-  notes:
-    uses malloc() and free() instead
-*/
-#else /* qh_NOmem */
-
-void *qh_memalloc(int insize) {
-  void *object;
-
-  if (!(object= malloc(insize))) {
-    fprintf(qhmem.ferr, "qhull error (qh_memalloc): insufficient memory\n");
-    qh_errexit(qhmem_ERRmem, NULL, NULL);
-  }
-  if (qhmem.IStracing >= 5)
-    fprintf (qhmem.ferr, "qh_memalloc long: %d bytes at %p\n", insize, object);
-  return object;
-}
-
-void qh_memfree(void *object, int size) {
-
-  if (!object)
-    return;
-  free (object);
-  if (qhmem.IStracing >= 5)
-    fprintf (qhmem.ferr, "qh_memfree long: %d bytes at %p\n", size, object);
-}
-
-void qh_memfreeshort (int *curlong, int *totlong) {
-
-  memset((char *)&qhmem, 0, sizeof qhmem);  /* every field is 0, FALSE, NULL */
-  *curlong= 0;
-  *totlong= 0;
-}
-
-void qh_meminit (FILE *ferr) {
-
-  memset((char *)&qhmem, 0, sizeof qhmem);  /* every field is 0, FALSE, NULL */
-  qhmem.ferr= ferr;
-  if (sizeof(void*) < sizeof(int)) {
-    fprintf (ferr, "qhull internal error (qh_meminit): sizeof(void*) < sizeof(int).  qset.c will not work\n");
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-}
-
-void qh_meminitbuffers (int tracelevel, int alignment, int numsizes, int bufsize, int bufinit) {
-
-  qhmem.IStracing= tracelevel;
-
-}
-
-void qh_memsetup (void) {
-
-}
-
-void qh_memsize(int size) {
-
-}
-
-void qh_memstatistics (FILE *fp) {
-
-}
-
-#endif /* qh_NOmem */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/mem.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/mem.h
deleted file mode 100644
index 3283efe89efa77d661b47bf603c50317c611d5f8..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/mem.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*<html><pre>  -<a                             href="qh-mem.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   mem.h
-     prototypes for memory management functions
-
-   see qh-mem.htm, mem.c and qset.h
-
-   for error handling, writes message and calls
-     qh_errexit (qhmem_ERRmem, NULL, NULL) if insufficient memory
-       and
-     qh_errexit (qhmem_ERRqhull, NULL, NULL) otherwise
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#pragma once
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >-------------------------------</a><a name="NOmem">-</a>
-
-  qh_NOmem
-    turn off quick-fit memory allocation
-
-  notes:
-    mem.c implements Quickfit memory allocation for about 20% time
-    savings.  If it fails on your machine, try to locate the
-    problem, and send the answer to qhull@qhull.org.  If this can
-    not be done, define qh_NOmem to use malloc/free instead.
-
-   #define qh_NOmem
-*/
-
-/*-------------------------------------------
-    to avoid bus errors, memory allocation must consider alignment requirements.
-    malloc() automatically takes care of alignment.   Since mem.c manages
-    its own memory, we need to explicitly specify alignment in
-    qh_meminitbuffers().
-
-    A safe choice is sizeof(double).  sizeof(float) may be used if doubles
-    do not occur in data structures and pointers are the same size.  Be careful
-    of machines (e.g., DEC Alpha) with large pointers.  If gcc is available,
-    use __alignof__(double) or fmax_(__alignof__(float), __alignof__(void *)).
-
-   see <a href="user.h#MEMalign">qh_MEMalign</a> in user.h for qhull's alignment
-*/
-
-#define qhmem_ERRmem 4    /* matches qh_ERRmem in qhull.h */
-#define qhmem_ERRqhull 5  /* matches qh_ERRqhull in qhull.h */
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="ptr_intT">-</a>
-
-  ptr_intT
-    for casting a void* to an integer-type
-
-  notes:
-    On 64-bit machines, a pointer may be larger than an 'int'.
-    qh_meminit() checks that 'long' holds a 'void*'
-*/
-typedef unsigned long ptr_intT;
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="qhmemT">-</a>
-
-  qhmemT
-    global memory structure for mem.c
-
- notes:
-   users should ignore qhmem except for writing extensions
-   qhmem is allocated in mem.c
-
-   qhmem could be swapable like qh and qhstat, but then
-   multiple qh's and qhmem's would need to keep in synch.
-   A swapable qhmem would also waste memory buffers.  As long
-   as memory operations are atomic, there is no problem with
-   multiple qh structures being active at the same time.
-   If you need separate address spaces, you can swap the
-   contents of qhmem.
-*/
-typedef struct qhmemT qhmemT;
-extern qhmemT qhmem;
-
-struct qhmemT                 /* global memory management variables */
-{
-    int      BUFsize;       /* size of memory allocation buffer */
-    int      BUFinit;       /* initial size of memory allocation buffer */
-    int      TABLEsize;         /* actual number of sizes in free list table */
-    int      NUMsizes;          /* maximum number of sizes in free list table */
-    int      LASTsize;          /* last size in free list table */
-    int      ALIGNmask;         /* worst-case alignment, must be 2^n-1 */
-    void**   freelists;          /* free list table, linked by offset 0 */
-    int*     sizetable;         /* size of each freelist */
-    int*     indextable;        /* size->index table */
-    void*    curbuffer;         /* current buffer, linked by offset 0 */
-    void*    freemem;           /*   free memory in curbuffer */
-    int      freesize;          /*   size of free memory in bytes */
-    void*    tempstack;         /* stack of temporary memory, managed by users */
-    FILE*    ferr;              /* file for reporting errors */
-    int      IStracing;         /* =5 if tracing memory allocations */
-    int      cntquick;          /* count of quick allocations */
-    /* remove statistics doesn't effect speed */
-    int      cntshort;          /* count of short allocations */
-    int      cntlong;           /* count of long allocations */
-    int      curlong;           /* current count of inuse, long allocations */
-    int      freeshort;         /* count of short memfrees */
-    int      freelong;          /* count of long memfrees */
-    int      totshort;          /* total size of short allocations */
-    int      totlong;           /* total size of long allocations */
-    int      maxlong;           /* maximum totlong */
-    int      cntlarger;         /* count of setlarger's */
-    int      totlarger;         /* total copied by setlarger */
-};
-
-
-/*==================== -macros ====================*/
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="memalloc_">-</a>
-
-  qh_memalloc_(size, object, type)
-    returns object of size bytes
-    assumes size<=qhmem.LASTsize and void **freelistp is a temp
-*/
-
-#ifdef qh_NOmem
-#define qh_memalloc_(size, freelistp, object, type) {\
-        object= (type*)qh_memalloc (size); }
-#else /* !qh_NOmem */
-
-#define qh_memalloc_(size, freelistp, object, type) {\
-        freelistp= qhmem.freelists + qhmem.indextable[size];\
-        if ((object= (type*)*freelistp)) {\
-            qhmem.cntquick++;  \
-            *freelistp= *((void **)*freelistp);\
-        }else object= (type*)qh_memalloc (size);}
-#endif
-
-/*-<a                             href="qh-mem.htm#TOC"
-  >--------------------------------</a><a name="memfree_">-</a>
-
-  qh_memfree_(object, size)
-    free up an object
-
-  notes:
-    object may be NULL
-    assumes size<=qhmem.LASTsize and void **freelistp is a temp
-*/
-#ifdef qh_NOmem
-#define qh_memfree_(object, size, freelistp) {\
-        qh_memfree (object, size); }
-#else /* !qh_NOmem */
-
-#define qh_memfree_(object, size, freelistp) {\
-        if (object) { \
-            qhmem .freeshort++;\
-            freelistp= qhmem.freelists + qhmem.indextable[size];\
-            *((void **)object)= *freelistp;\
-            *freelistp= object;}}
-#endif
-
-/*=============== prototypes in alphabetical order ============*/
-
-void* qh_memalloc(int insize);
-void qh_memfree(void* object, int size);
-void qh_memfreeshort(int* curlong, int* totlong);
-void qh_meminit(FILE* ferr);
-void qh_meminitbuffers(int tracelevel, int alignment, int numsizes,
-                       int bufsize, int bufinit);
-void qh_memsetup(void);
-void qh_memsize(int size);
-void qh_memstatistics(FILE* fp);
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/merge.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/merge.c
deleted file mode 100644
index cb683dea1b28cd7944ff36ec15c192d4fb608d52..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/merge.c
+++ /dev/null
@@ -1,3619 +0,0 @@
-/*<html><pre>  -<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   merge.c 
-   merges non-convex facets
-
-   see qh-merge.htm and merge.h
-
-   other modules call qh_premerge() and qh_postmerge()
-
-   the user may call qh_postmerge() to perform additional merges.
-
-   To remove deleted facets and vertices (qhull() in qhull.c):
-     qh_partitionvisible (!qh_ALL, &numoutside);  // visible_list, newfacet_list
-     qh_deletevisible ();         // qh.visible_list
-     qh_resetlists (False, qh_RESETvisible);       // qh.visible_list newvertex_list newfacet_list 
-
-   assumes qh.CENTERtype= centrum
-
-   merges occur in qh_mergefacet and in qh_mergecycle
-   vertex->neighbors not set until the first merge occurs
-
-   copyright (c) 1993-2003 The Geometry Center        
-*/
-
-#include "qhull_a.h"
-
-#ifndef qh_NOmerge
-
-/*===== functions (alphabetical after premerge and postmerge) ======*/
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="premerge">-</a>
-  
-  qh_premerge( apex, maxcentrum )
-    pre-merge nonconvex facets in qh.newfacet_list for apex
-    maxcentrum defines coplanar and concave (qh_test_appendmerge)
-
-  returns:
-    deleted facets added to qh.visible_list with facet->visible set
-
-  notes:
-    uses globals, qh.MERGEexact, qh.PREmerge
-
-  design:
-    mark duplicate ridges in qh.newfacet_list
-    merge facet cycles in qh.newfacet_list
-    merge duplicate ridges and concave facets in qh.newfacet_list
-    check merged facet cycles for degenerate and redundant facets
-    merge degenerate and redundant facets
-    collect coplanar and concave facets
-    merge concave, coplanar, degenerate, and redundant facets
-*/
-void qh_premerge (vertexT *apex, realT maxcentrum, realT maxangle) {
-  boolT othermerge= False;
-  facetT *newfacet;
-  
-  if (qh ZEROcentrum && qh_checkzero(!qh_ALL))
-    return;    
-  trace2((qh ferr, "qh_premerge: premerge centrum %2.2g angle %2.2g for apex v%d facetlist f%d\n",
-	    maxcentrum, maxangle, apex->id, getid_(qh newfacet_list)));
-  if (qh IStracing >= 4 && qh num_facets < 50)
-    qh_printlists();
-  qh centrum_radius= maxcentrum;
-  qh cos_max= maxangle;
-  qh degen_mergeset= qh_settemp (qh TEMPsize);
-  qh facet_mergeset= qh_settemp (qh TEMPsize);
-  if (qh hull_dim >=3) { 
-    qh_mark_dupridges (qh newfacet_list); /* facet_mergeset */
-    qh_mergecycle_all (qh newfacet_list, &othermerge);
-    qh_forcedmerges (&othermerge /* qh facet_mergeset */); 
-    FORALLnew_facets {  /* test samecycle merges */
-      if (!newfacet->simplicial && !newfacet->mergeridge)
-	qh_degen_redundant_neighbors (newfacet, NULL);
-    }
-    if (qh_merge_degenredundant())
-      othermerge= True;
-  }else /* qh hull_dim == 2 */
-    qh_mergecycle_all (qh newfacet_list, &othermerge);
-  qh_flippedmerges (qh newfacet_list, &othermerge);
-  if (!qh MERGEexact || zzval_(Ztotmerge)) {
-    zinc_(Zpremergetot);
-    qh POSTmerging= False;
-    qh_getmergeset_initial (qh newfacet_list);
-    qh_all_merges (othermerge, False);
-  }
-  qh_settempfree(&qh facet_mergeset);
-  qh_settempfree(&qh degen_mergeset);
-} /* premerge */
-  
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="postmerge">-</a>
-  
-  qh_postmerge( reason, maxcentrum, maxangle, vneighbors )
-    post-merge nonconvex facets as defined by maxcentrum and maxangle
-    'reason' is for reporting progress
-    if vneighbors, 
-      calls qh_test_vneighbors at end of qh_all_merge 
-    if firstmerge, 
-      calls qh_reducevertices before qh_getmergeset
-
-  returns:
-    if first call (qh.visible_list != qh.facet_list), 
-      builds qh.facet_newlist, qh.newvertex_list
-    deleted facets added to qh.visible_list with facet->visible
-    qh.visible_list == qh.facet_list
-
-  notes:
-
-
-  design:
-    if first call
-      set qh.visible_list and qh.newfacet_list to qh.facet_list
-      add all facets to qh.newfacet_list
-      mark non-simplicial facets, facet->newmerge
-      set qh.newvertext_list to qh.vertex_list
-      add all vertices to qh.newvertex_list
-      if a pre-merge occured
-        set vertex->delridge {will retest the ridge}
-        if qh.MERGEexact
-          call qh_reducevertices()
-      if no pre-merging 
-        merge flipped facets
-    determine non-convex facets
-    merge all non-convex facets
-*/
-void qh_postmerge (char *reason, realT maxcentrum, realT maxangle, 
-                      boolT vneighbors) {
-  facetT *newfacet;
-  boolT othermerges= False;
-  vertexT *vertex;
-
-  if (qh REPORTfreq || qh IStracing) {
-    qh_buildtracing (NULL, NULL);
-    qh_printsummary (qh ferr);
-    if (qh PRINTstatistics) 
-      qh_printallstatistics (qh ferr, "reason");
-    fprintf (qh ferr, "\n%s with 'C%.2g' and 'A%.2g'\n", 
-        reason, maxcentrum, maxangle);
-  }
-  trace2((qh ferr, "qh_postmerge: postmerge.  test vneighbors? %d\n",
-	    vneighbors));
-  qh centrum_radius= maxcentrum;
-  qh cos_max= maxangle;
-  qh POSTmerging= True;
-  qh degen_mergeset= qh_settemp (qh TEMPsize);
-  qh facet_mergeset= qh_settemp (qh TEMPsize);
-  if (qh visible_list != qh facet_list) {  /* first call */
-    qh NEWfacets= True;
-    qh visible_list= qh newfacet_list= qh facet_list;
-    FORALLnew_facets {
-      newfacet->newfacet= True;
-       if (!newfacet->simplicial)
-        newfacet->newmerge= True;
-     zinc_(Zpostfacets);
-    }
-    qh newvertex_list= qh vertex_list;
-    FORALLvertices
-      vertex->newlist= True;
-    if (qh VERTEXneighbors) { /* a merge has occurred */
-      FORALLvertices
-	vertex->delridge= True; /* test for redundant, needed? */
-      if (qh MERGEexact) {
-	if (qh hull_dim <= qh_DIMreduceBuild)
-	  qh_reducevertices(); /* was skipped during pre-merging */
-      }
-    }
-    if (!qh PREmerge && !qh MERGEexact) 
-      qh_flippedmerges (qh newfacet_list, &othermerges);
-  }
-  qh_getmergeset_initial (qh newfacet_list);
-  qh_all_merges (False, vneighbors);
-  qh_settempfree(&qh facet_mergeset);
-  qh_settempfree(&qh degen_mergeset);
-} /* post_merge */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="all_merges">-</a>
-  
-  qh_all_merges( othermerge, vneighbors )
-    merge all non-convex facets
-    
-    set othermerge if already merged facets (for qh_reducevertices)
-    if vneighbors
-      tests vertex neighbors for convexity at end
-    qh.facet_mergeset lists the non-convex ridges in qh_newfacet_list
-    qh.degen_mergeset is defined
-    if qh.MERGEexact && !qh.POSTmerging, 
-      does not merge coplanar facets
-
-  returns:
-    deleted facets added to qh.visible_list with facet->visible
-    deleted vertices added qh.delvertex_list with vertex->delvertex
-  
-  notes:
-    unless !qh.MERGEindependent, 
-      merges facets in independent sets
-    uses qh.newfacet_list as argument since merges call qh_removefacet()
-
-  design:
-    while merges occur
-      for each merge in qh.facet_mergeset
-        unless one of the facets was already merged in this pass
-          merge the facets
-        test merged facets for additional merges
-        add merges to qh.facet_mergeset
-      if vertices record neighboring facets
-        rename redundant vertices
-          update qh.facet_mergeset
-    if vneighbors ??
-      tests vertex neighbors for convexity at end
-*/
-void qh_all_merges (boolT othermerge, boolT vneighbors) {
-  facetT *facet1, *facet2;
-  mergeT *merge;
-  boolT wasmerge= True, isreduce;
-  void **freelistp;  /* used !qh_NOmem */
-  vertexT *vertex;
-  mergeType mergetype;
-  int numcoplanar=0, numconcave=0, numdegenredun= 0, numnewmerges= 0;
-  
-  trace2((qh ferr, "qh_all_merges: starting to merge facets beginning from f%d\n",
-	    getid_(qh newfacet_list)));
-  while (True) {
-    wasmerge= False;
-    while (qh_setsize (qh facet_mergeset)) {
-      while ((merge= (mergeT*)qh_setdellast(qh facet_mergeset))) {
-	facet1= merge->facet1;
-	facet2= merge->facet2;
-	mergetype= merge->type;
-	qh_memfree_(merge, sizeof(mergeT), freelistp);
-	if (facet1->visible || facet2->visible) /*deleted facet*/
-	  continue;  
-	if ((facet1->newfacet && !facet1->tested)
-	        || (facet2->newfacet && !facet2->tested)) {
-	  if (qh MERGEindependent && mergetype <= MRGanglecoplanar)
-	    continue;      /* perform independent sets of merges */
-	}
-	qh_merge_nonconvex (facet1, facet2, mergetype);
-        numdegenredun += qh_merge_degenredundant();
-        numnewmerges++;
-        wasmerge= True;
-	if (mergetype == MRGconcave)
-	  numconcave++;
-	else /* MRGcoplanar or MRGanglecoplanar */
-	  numcoplanar++;
-      } /* while setdellast */
-      if (qh POSTmerging && qh hull_dim <= qh_DIMreduceBuild 
-      && numnewmerges > qh_MAXnewmerges) {
-	numnewmerges= 0;
-	qh_reducevertices();  /* otherwise large post merges too slow */
-      }
-      qh_getmergeset (qh newfacet_list); /* facet_mergeset */
-    } /* while mergeset */
-    if (qh VERTEXneighbors) {
-      isreduce= False;
-      if (qh hull_dim >=4 && qh POSTmerging) {
-	FORALLvertices  
-	  vertex->delridge= True;
-	isreduce= True;
-      }
-      if ((wasmerge || othermerge) && (!qh MERGEexact || qh POSTmerging) 
-	  && qh hull_dim <= qh_DIMreduceBuild) {
-	othermerge= False;
-	isreduce= True;
-      }
-      if (isreduce) {
-	if (qh_reducevertices()) {
-	  qh_getmergeset (qh newfacet_list); /* facet_mergeset */
-	  continue;
-	}
-      }
-    }
-    if (vneighbors && qh_test_vneighbors(/* qh newfacet_list */)) 
-      continue;
-    break;
-  } /* while (True) */
-  if (qh CHECKfrequently && !qh MERGEexact) {
-    qh old_randomdist= qh RANDOMdist;
-    qh RANDOMdist= False;
-    qh_checkconvex (qh newfacet_list, qh_ALGORITHMfault);
-    /* qh_checkconnect (); [this is slow and it changes the facet order] */
-    qh RANDOMdist= qh old_randomdist;
-  }
-  trace1((qh ferr, "qh_all_merges: merged %d coplanar facets %d concave facets and %d degen or redundant facets.\n",
-    numcoplanar, numconcave, numdegenredun));
-  if (qh IStracing >= 4 && qh num_facets < 50)
-    qh_printlists ();
-} /* all_merges */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="appendmergeset">-</a>
-  
-  qh_appendmergeset( facet, neighbor, mergetype, angle )
-    appends an entry to qh.facet_mergeset or qh.degen_mergeset
-
-    angle ignored if NULL or !qh.ANGLEmerge
-
-  returns:
-    merge appended to facet_mergeset or degen_mergeset
-      sets ->degenerate or ->redundant if degen_mergeset
-  
-  see:
-    qh_test_appendmerge()
-
-  design:
-    allocate merge entry
-    if regular merge
-      append to qh.facet_mergeset
-    else if degenerate merge and qh.facet_mergeset is all degenerate
-      append to qh.degen_mergeset 
-    else if degenerate merge
-      prepend to qh.degen_mergeset 
-    else if redundant merge
-      append to qh.degen_mergeset 
-*/
-void qh_appendmergeset(facetT *facet, facetT *neighbor, mergeType mergetype, realT *angle) {
-  mergeT *merge, *lastmerge;
-  void **freelistp; /* used !qh_NOmem */
-
-  if (facet->redundant)
-    return;
-  if (facet->degenerate && mergetype == MRGdegen)
-    return;
-  qh_memalloc_(sizeof(mergeT), freelistp, merge, mergeT);
-  merge->facet1= facet;
-  merge->facet2= neighbor;
-  merge->type= mergetype;
-  if (angle && qh ANGLEmerge)
-    merge->angle= *angle;
-  if (mergetype < MRGdegen)
-    qh_setappend (&(qh facet_mergeset), merge);
-  else if (mergetype == MRGdegen) {
-    facet->degenerate= True;
-    if (!(lastmerge= (mergeT*)qh_setlast (qh degen_mergeset)) 
-    || lastmerge->type == MRGdegen)
-      qh_setappend (&(qh degen_mergeset), merge);
-    else
-      qh_setaddnth (&(qh degen_mergeset), 0, merge);
-  }else if (mergetype == MRGredundant) {
-    facet->redundant= True;
-    qh_setappend (&(qh degen_mergeset), merge);
-  }else /* mergetype == MRGmirror */ {
-    if (facet->redundant || neighbor->redundant) {
-      fprintf(qh ferr, "qhull error (qh_appendmergeset): facet f%d or f%d is already a mirrored facet\n",
-	   facet->id, neighbor->id);
-      qh_errexit2 (qh_ERRqhull, facet, neighbor);
-    }
-    if (!qh_setequal (facet->vertices, neighbor->vertices)) {
-      fprintf(qh ferr, "qhull error (qh_appendmergeset): mirrored facets f%d and f%d do not have the same vertices\n",
-	   facet->id, neighbor->id);
-      qh_errexit2 (qh_ERRqhull, facet, neighbor);
-    }
-    facet->redundant= True;
-    neighbor->redundant= True;
-    qh_setappend (&(qh degen_mergeset), merge);
-  }
-} /* appendmergeset */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="basevertices">-</a>
-  
-  qh_basevertices( samecycle )
-    return temporary set of base vertices for samecycle
-    samecycle is first facet in the cycle
-    assumes apex is SETfirst_( samecycle->vertices )
-
-  returns:
-    vertices (settemp)
-    all ->seen are cleared
-
-  notes:
-    uses qh_vertex_visit;
-
-  design:
-    for each facet in samecycle
-      for each unseen vertex in facet->vertices
-        append to result  
-*/
-setT *qh_basevertices (facetT *samecycle) {
-  facetT *same;
-  vertexT *apex, *vertex, **vertexp;
-  setT *vertices= qh_settemp (qh TEMPsize);
-  
-  apex= SETfirstt_(samecycle->vertices, vertexT);
-  apex->visitid= ++qh vertex_visit;
-  FORALLsame_cycle_(samecycle) {
-    if (same->mergeridge)
-      continue;
-    FOREACHvertex_(same->vertices) {
-      if (vertex->visitid != qh vertex_visit) {
-        qh_setappend (&vertices, vertex);
-        vertex->visitid= qh vertex_visit;
-        vertex->seen= False;
-      }
-    }
-  }
-  trace4((qh ferr, "qh_basevertices: found %d vertices\n", 
-         qh_setsize (vertices)));
-  return vertices;
-} /* basevertices */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="checkconnect">-</a>
-  
-  qh_checkconnect()
-    check that new facets are connected
-    new facets are on qh.newfacet_list
-    
-  notes:
-    this is slow and it changes the order of the facets
-    uses qh.visit_id
-
-  design:
-    move first new facet to end of qh.facet_list
-    for all newly appended facets
-      append unvisited neighbors to end of qh.facet_list
-    for all new facets
-      report error if unvisited
-*/
-void qh_checkconnect (void /* qh newfacet_list */) {
-  facetT *facet, *newfacet, *errfacet= NULL, *neighbor, **neighborp;
-
-  facet= qh newfacet_list;
-  qh_removefacet (facet);
-  qh_appendfacet (facet);
-  facet->visitid= ++qh visit_id;
-  FORALLfacet_(facet) {
-    FOREACHneighbor_(facet) {
-      if (neighbor->visitid != qh visit_id) {
-        qh_removefacet (neighbor);
-        qh_appendfacet (neighbor);
-        neighbor->visitid= qh visit_id;
-      }
-    }
-  }
-  FORALLnew_facets {
-    if (newfacet->visitid == qh visit_id)
-      break;
-    fprintf(qh ferr, "qhull error: f%d is not attached to the new facets\n",
-         newfacet->id);
-    errfacet= newfacet;
-  }
-  if (errfacet)
-    qh_errexit (qh_ERRqhull, errfacet, NULL);
-} /* checkconnect */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="checkzero">-</a>
-  
-  qh_checkzero( testall )
-    check that facets are clearly convex for qh.DISTround with qh.MERGEexact
-
-    if testall, 
-      test all facets for qh.MERGEexact post-merging
-    else 
-      test qh.newfacet_list
-      
-    if qh.MERGEexact, 
-      allows coplanar ridges
-      skips convexity test while qh.ZEROall_ok
-
-  returns:
-    True if all facets !flipped, !dupridge, normal
-         if all horizon facets are simplicial
-         if all vertices are clearly below neighbor
-         if all opposite vertices of horizon are below 
-    clears qh.ZEROall_ok if any problems or coplanar facets
-
-  notes:
-    uses qh.vertex_visit
-    horizon facets may define multiple new facets
-
-  design:
-    for all facets in qh.newfacet_list or qh.facet_list
-      check for flagged faults (flipped, etc.)
-    for all facets in qh.newfacet_list or qh.facet_list
-      for each neighbor of facet
-        skip horizon facets for qh.newfacet_list
-        test the opposite vertex
-      if qh.newfacet_list
-        test the other vertices in the facet's horizon facet
-*/
-boolT qh_checkzero (boolT testall) {
-  facetT *facet, *neighbor, **neighborp;
-  facetT *horizon, *facetlist;
-  int neighbor_i;
-  vertexT *vertex, **vertexp;
-  realT dist;
-
-  if (testall) 
-    facetlist= qh facet_list;
-  else {
-    facetlist= qh newfacet_list;
-    FORALLfacet_(facetlist) {
-      horizon= SETfirstt_(facet->neighbors, facetT);
-      if (!horizon->simplicial)
-        goto LABELproblem;
-      if (facet->flipped || facet->dupridge || !facet->normal)
-        goto LABELproblem;
-    }
-    if (qh MERGEexact && qh ZEROall_ok) {
-      trace2((qh ferr, "qh_checkzero: skip convexity check until first pre-merge\n"));
-      return True;
-    }
-  }
-  FORALLfacet_(facetlist) {
-    qh vertex_visit++;
-    neighbor_i= 0;
-    horizon= NULL;
-    FOREACHneighbor_(facet) {
-      if (!neighbor_i && !testall) {
-        horizon= neighbor;
-	neighbor_i++;
-        continue; /* horizon facet tested in qh_findhorizon */
-      }
-      vertex= SETelemt_(facet->vertices, neighbor_i++, vertexT);
-      vertex->visitid= qh vertex_visit;
-      zzinc_(Zdistzero);
-      qh_distplane (vertex->point, neighbor, &dist);
-      if (dist >= -qh DISTround) {
-        qh ZEROall_ok= False;
-        if (!qh MERGEexact || testall || dist > qh DISTround)
-          goto LABELnonconvex;
-      }
-    }
-    if (!testall) {
-      FOREACHvertex_(horizon->vertices) {
-	if (vertex->visitid != qh vertex_visit) {
-	  zzinc_(Zdistzero);
-	  qh_distplane (vertex->point, facet, &dist);
-	  if (dist >= -qh DISTround) {
-	    qh ZEROall_ok= False;
-	    if (!qh MERGEexact || dist > qh DISTround)
-	      goto LABELnonconvex;
-	  }
-	  break;
-	}
-      }
-    }
-  }
-  trace2((qh ferr, "qh_checkzero: testall %d, facets are %s\n", testall,
-        (qh MERGEexact && !testall) ? 
-           "not concave, flipped, or duplicate ridged" : "clearly convex"));
-  return True;
-
- LABELproblem:
-  qh ZEROall_ok= False;
-  trace2((qh ferr, "qh_checkzero: facet f%d needs pre-merging\n",
-       facet->id));
-  return False;
-
- LABELnonconvex:
-  trace2((qh ferr, "qh_checkzero: facet f%d and f%d are not clearly convex.  v%d dist %.2g\n",
-         facet->id, neighbor->id, vertex->id, dist));
-  return False;
-} /* checkzero */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="compareangle">-</a>
-  
-  qh_compareangle( angle1, angle2 )
-    used by qsort() to order merges by angle
-*/
-int qh_compareangle(const void *p1, const void *p2) {
-  mergeT *a= *((mergeT **)p1), *b= *((mergeT **)p2);
- 
-  return ((a->angle > b->angle) ? 1 : -1);
-} /* compareangle */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="comparemerge">-</a>
-  
-  qh_comparemerge( merge1, merge2 )
-    used by qsort() to order merges
-*/
-int qh_comparemerge(const void *p1, const void *p2) {
-  mergeT *a= *((mergeT **)p1), *b= *((mergeT **)p2);
- 
-  return (a->type - b->type);
-} /* comparemerge */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="comparevisit">-</a>
-  
-  qh_comparevisit( vertex1, vertex2 )
-    used by qsort() to order vertices by their visitid
-*/
-int qh_comparevisit (const void *p1, const void *p2) {
-  vertexT *a= *((vertexT **)p1), *b= *((vertexT **)p2);
- 
-  return (a->visitid - b->visitid);
-} /* comparevisit */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="copynonconvex">-</a>
-  
-  qh_copynonconvex( atridge )
-    set non-convex flag on other ridges (if any) between same neighbors
-
-  notes:
-    may be faster if use smaller ridge set
-
-  design:
-    for each ridge of atridge's top facet
-      if ridge shares the same neighbor
-        set nonconvex flag
-*/
-void qh_copynonconvex (ridgeT *atridge) {
-  facetT *facet, *otherfacet;
-  ridgeT *ridge, **ridgep;
-
-  facet= atridge->top;
-  otherfacet= atridge->bottom;
-  FOREACHridge_(facet->ridges) {
-    if (otherfacet == otherfacet_(ridge, facet) && ridge != atridge) {
-      ridge->nonconvex= True;
-      trace4((qh ferr, "qh_copynonconvex: moved nonconvex flag from r%d to r%d\n",
-	      atridge->id, ridge->id));
-      break;
-    }
-  }
-} /* copynonconvex */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="degen_redundant_facet">-</a>
-  
-  qh_degen_redundant_facet( facet )
-    check facet for degen. or redundancy
-
-  notes:
-    bumps vertex_visit
-    called if a facet was redundant but no longer is (qh_merge_degenredundant)
-    qh_appendmergeset() only appends first reference to facet (i.e., redundant)
-
-  see:
-    qh_degen_redundant_neighbors()
-
-  design:
-    test for redundant neighbor
-    test for degenerate facet
-*/
-void qh_degen_redundant_facet (facetT *facet) {
-  vertexT *vertex, **vertexp;
-  facetT *neighbor, **neighborp;
-
-  trace4((qh ferr, "qh_degen_redundant_facet: test facet f%d for degen/redundant\n",
-	  facet->id));
-  FOREACHneighbor_(facet) {
-    qh vertex_visit++;
-    FOREACHvertex_(neighbor->vertices)
-      vertex->visitid= qh vertex_visit;
-    FOREACHvertex_(facet->vertices) {
-      if (vertex->visitid != qh vertex_visit)
-	break;
-    }
-    if (!vertex) {
-      qh_appendmergeset (facet, neighbor, MRGredundant, NULL);
-      trace2((qh ferr, "qh_degen_redundant_facet: f%d is contained in f%d.  merge\n", facet->id, neighbor->id)); 
-      return;
-    }
-  }
-  if (qh_setsize (facet->neighbors) < qh hull_dim) {
-    qh_appendmergeset (facet, facet, MRGdegen, NULL);
-    trace2((qh ferr, "qh_degen_redundant_neighbors: f%d is degenerate.\n", facet->id));
-  }
-} /* degen_redundant_facet */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="degen_redundant_neighbors">-</a>
-  
-  qh_degen_redundant_neighbors( facet, delfacet,  )
-    append degenerate and redundant neighbors to facet_mergeset
-    if delfacet, 
-      only checks neighbors of both delfacet and facet
-    also checks current facet for degeneracy
-
-  notes:
-    bumps vertex_visit
-    called for each qh_mergefacet() and qh_mergecycle()
-    merge and statistics occur in merge_nonconvex
-    qh_appendmergeset() only appends first reference to facet (i.e., redundant)
-      it appends redundant facets after degenerate ones
-
-    a degenerate facet has fewer than hull_dim neighbors
-    a redundant facet's vertices is a subset of its neighbor's vertices
-    tests for redundant merges first (appendmergeset is nop for others)
-    in a merge, only needs to test neighbors of merged facet
-  
-  see:
-    qh_merge_degenredundant() and qh_degen_redundant_facet()
-
-  design:
-    test for degenerate facet
-    test for redundant neighbor
-    test for degenerate neighbor
-*/
-void qh_degen_redundant_neighbors (facetT *facet, facetT *delfacet) {
-  vertexT *vertex, **vertexp;
-  facetT *neighbor, **neighborp;
-  int size;
-
-  trace4((qh ferr, "qh_degen_redundant_neighbors: test neighbors of f%d with delfacet f%d\n", 
-	  facet->id, getid_(delfacet)));
-  if ((size= qh_setsize (facet->neighbors)) < qh hull_dim) {
-    qh_appendmergeset (facet, facet, MRGdegen, NULL);
-    trace2((qh ferr, "qh_degen_redundant_neighbors: f%d is degenerate with %d neighbors.\n", facet->id, size));
-  }
-  if (!delfacet)
-    delfacet= facet;
-  qh vertex_visit++;
-  FOREACHvertex_(facet->vertices)
-    vertex->visitid= qh vertex_visit;
-  FOREACHneighbor_(delfacet) {
-    /* uses early out instead of checking vertex count */
-    if (neighbor == facet)
-      continue;
-    FOREACHvertex_(neighbor->vertices) {
-      if (vertex->visitid != qh vertex_visit)
-        break;
-    }
-    if (!vertex) {
-      qh_appendmergeset (neighbor, facet, MRGredundant, NULL);
-      trace2((qh ferr, "qh_degen_redundant_neighbors: f%d is contained in f%d.  merge\n", neighbor->id, facet->id)); 
-    }
-  }
-  FOREACHneighbor_(delfacet) {   /* redundant merges occur first */
-    if (neighbor == facet)
-      continue;
-    if ((size= qh_setsize (neighbor->neighbors)) < qh hull_dim) {
-      qh_appendmergeset (neighbor, neighbor, MRGdegen, NULL);
-      trace2((qh ferr, "qh_degen_redundant_neighbors: f%d is degenerate with %d neighbors.  Neighbor of f%d.\n", neighbor->id, size, facet->id)); 
-    }
-  }
-} /* degen_redundant_neighbors */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="find_newvertex">-</a>
-  
-  qh_find_newvertex( oldvertex, vertices, ridges )
-    locate new vertex for renaming old vertex
-    vertices is a set of possible new vertices
-      vertices sorted by number of deleted ridges
-
-  returns:
-    newvertex or NULL
-      each ridge includes both vertex and oldvertex
-    vertices sorted by number of deleted ridges
-      
-  notes:
-    modifies vertex->visitid
-    new vertex is in one of the ridges
-    renaming will not cause a duplicate ridge
-    renaming will minimize the number of deleted ridges
-    newvertex may not be adjacent in the dual (though unlikely)
-
-  design:
-    for each vertex in vertices
-      set vertex->visitid to number of references in ridges
-    remove unvisited vertices 
-    set qh.vertex_visit above all possible values
-    sort vertices by number of references in ridges
-    add each ridge to qh.hash_table
-    for each vertex in vertices
-      look for a vertex that would not cause a duplicate ridge after a rename
-*/
-vertexT *qh_find_newvertex (vertexT *oldvertex, setT *vertices, setT *ridges) {
-  vertexT *vertex, **vertexp;
-  setT *newridges;
-  ridgeT *ridge, **ridgep;
-  int size, hashsize;
-  int hash;
-
-#ifndef qh_NOtrace
-  if (qh IStracing >= 4) {
-    fprintf (qh ferr, "qh_find_newvertex: find new vertex for v%d from ",
-	     oldvertex->id);
-    FOREACHvertex_(vertices) 
-      fprintf (qh ferr, "v%d ", vertex->id);
-    FOREACHridge_(ridges)
-      fprintf (qh ferr, "r%d ", ridge->id);
-    fprintf (qh ferr, "\n");
-  }
-#endif
-  FOREACHvertex_(vertices) 
-    vertex->visitid= 0;
-  FOREACHridge_(ridges) {
-    FOREACHvertex_(ridge->vertices) 
-      vertex->visitid++;
-  }
-  FOREACHvertex_(vertices) {
-    if (!vertex->visitid) {
-      qh_setdelnth (vertices, SETindex_(vertices,vertex));
-      vertexp--; /* repeat since deleted this vertex */
-    }
-  }
-  qh vertex_visit += qh_setsize (ridges);
-  if (!qh_setsize (vertices)) {
-    trace4((qh ferr, "qh_find_newvertex: vertices not in ridges for v%d\n",
-	    oldvertex->id));
-    return NULL;
-  }
-  qsort (SETaddr_(vertices, vertexT), qh_setsize (vertices),
-	        sizeof (vertexT *), qh_comparevisit);
-  /* can now use qh vertex_visit */
-  if (qh PRINTstatistics) {
-    size= qh_setsize (vertices);
-    zinc_(Zintersect);
-    zadd_(Zintersecttot, size);
-    zmax_(Zintersectmax, size);
-  }
-  hashsize= qh_newhashtable (qh_setsize (ridges));
-  FOREACHridge_(ridges)
-    qh_hashridge (qh hash_table, hashsize, ridge, oldvertex);
-  FOREACHvertex_(vertices) {
-    newridges= qh_vertexridges (vertex);
-    FOREACHridge_(newridges) {
-      if (qh_hashridge_find (qh hash_table, hashsize, ridge, vertex, oldvertex, &hash)) {
-	zinc_(Zdupridge);
-	break;
-      }
-    }
-    qh_settempfree (&newridges);
-    if (!ridge)
-      break;  /* found a rename */
-  }
-  if (vertex) {
-    /* counted in qh_renamevertex */
-    trace2((qh ferr, "qh_find_newvertex: found v%d for old v%d from %d vertices and %d ridges.\n",
-      vertex->id, oldvertex->id, qh_setsize (vertices), qh_setsize (ridges)));
-  }else {
-    zinc_(Zfindfail);
-    trace0((qh ferr, "qh_find_newvertex: no vertex for renaming v%d (all duplicated ridges) during p%d\n",
-      oldvertex->id, qh furthest_id));
-  }
-  qh_setfree (&qh hash_table);
-  return vertex;
-} /* find_newvertex */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="findbest_test">-</a>
-  
-  qh_findbest_test( testcentrum, facet, neighbor, bestfacet, dist, mindist, maxdist )
-    test neighbor of facet for qh_findbestneighbor()
-    if testcentrum,
-      tests centrum (assumes it is defined)
-    else 
-      tests vertices
-
-  returns:
-    if a better facet (i.e., vertices/centrum of facet closer to neighbor)
-      updates bestfacet, dist, mindist, and maxdist
-*/
-void qh_findbest_test (boolT testcentrum, facetT *facet, facetT *neighbor,
-      facetT **bestfacet, realT *distp, realT *mindistp, realT *maxdistp) {
-  realT dist, mindist, maxdist;
-
-  if (testcentrum) {
-    zzinc_(Zbestdist);
-    qh_distplane(facet->center, neighbor, &dist);
-    dist *= qh hull_dim; /* estimate furthest vertex */
-    if (dist < 0) {
-      maxdist= 0;
-      mindist= dist;
-      dist= -dist;
-    }else
-      maxdist= dist;
-  }else
-    dist= qh_getdistance (facet, neighbor, &mindist, &maxdist);
-  if (dist < *distp) {
-    *bestfacet= neighbor;
-    *mindistp= mindist;
-    *maxdistp= maxdist;
-    *distp= dist;
-  }
-} /* findbest_test */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="findbestneighbor">-</a>
-  
-  qh_findbestneighbor( facet, dist, mindist, maxdist )
-    finds best neighbor (least dist) of a facet for merging
-
-  returns:
-    returns min and max distances and their max absolute value
-  
-  notes:
-    avoids merging old into new
-    assumes ridge->nonconvex only set on one ridge between a pair of facets
-    could use an early out predicate but not worth it
-
-  design:
-    if a large facet
-      will test centrum
-    else
-      will test vertices
-    if a large facet
-      test nonconvex neighbors for best merge
-    else
-      test all neighbors for the best merge
-    if testing centrum
-      get distance information
-*/
-facetT *qh_findbestneighbor(facetT *facet, realT *distp, realT *mindistp, realT *maxdistp) {
-  facetT *neighbor, **neighborp, *bestfacet= NULL;
-  ridgeT *ridge, **ridgep;
-  boolT nonconvex= True, testcentrum= False;
-  int size= qh_setsize (facet->vertices);
-
-  *distp= REALmax;
-  if (size > qh_BESTcentrum2 * qh hull_dim + qh_BESTcentrum) {
-    testcentrum= True;
-    zinc_(Zbestcentrum);
-    if (!facet->center)
-       facet->center= qh_getcentrum (facet);
-  }
-  if (size > qh hull_dim + qh_BESTnonconvex) {
-    FOREACHridge_(facet->ridges) {
-      if (ridge->nonconvex) {
-        neighbor= otherfacet_(ridge, facet);
-	qh_findbest_test (testcentrum, facet, neighbor,
-			  &bestfacet, distp, mindistp, maxdistp);
-      }
-    }
-  }
-  if (!bestfacet) {     
-    nonconvex= False;
-    FOREACHneighbor_(facet)
-      qh_findbest_test (testcentrum, facet, neighbor,
-			&bestfacet, distp, mindistp, maxdistp);
-  }
-  if (!bestfacet) {
-    fprintf (qh ferr, "qhull internal error (qh_findbestneighbor): no neighbors for f%d\n", facet->id);
-    
-    qh_errexit (qh_ERRqhull, facet, NULL);
-  }
-  if (testcentrum) 
-    qh_getdistance (facet, bestfacet, mindistp, maxdistp);
-  trace3((qh ferr, "qh_findbestneighbor: f%d is best neighbor for f%d testcentrum? %d nonconvex? %d dist %2.2g min %2.2g max %2.2g\n",
-     bestfacet->id, facet->id, testcentrum, nonconvex, *distp, *mindistp, *maxdistp));
-  return(bestfacet);
-} /* findbestneighbor */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="flippedmerges">-</a>
-  
-  qh_flippedmerges( facetlist, wasmerge )
-    merge flipped facets into best neighbor
-    assumes qh.facet_mergeset at top of temporary stack
-
-  returns:
-    no flipped facets on facetlist
-    sets wasmerge if merge occurred
-    degen/redundant merges passed through
-
-  notes:
-    othermerges not needed since qh.facet_mergeset is empty before & after
-      keep it in case of change
-
-  design:
-    append flipped facets to qh.facetmergeset
-    for each flipped merge
-      find best neighbor
-      merge facet into neighbor
-      merge degenerate and redundant facets
-    remove flipped merges from qh.facet_mergeset
-*/
-void qh_flippedmerges(facetT *facetlist, boolT *wasmerge) {
-  facetT *facet, *neighbor, *facet1;
-  realT dist, mindist, maxdist;
-  mergeT *merge, **mergep;
-  setT *othermerges;
-  int nummerge=0;
-
-  trace4((qh ferr, "qh_flippedmerges: begin\n"));
-  FORALLfacet_(facetlist) {
-    if (facet->flipped && !facet->visible) 
-      qh_appendmergeset (facet, facet, MRGflip, NULL);
-  }
-  othermerges= qh_settemppop(); /* was facet_mergeset */
-  qh facet_mergeset= qh_settemp (qh TEMPsize);
-  qh_settemppush (othermerges);
-  FOREACHmerge_(othermerges) {
-    facet1= merge->facet1;
-    if (merge->type != MRGflip || facet1->visible) 
-      continue;
-    if (qh TRACEmerge-1 == zzval_(Ztotmerge))
-      qhmem.IStracing= qh IStracing= qh TRACElevel;
-    neighbor= qh_findbestneighbor (facet1, &dist, &mindist, &maxdist);
-    trace0((qh ferr, "qh_flippedmerges: merge flipped f%d into f%d dist %2.2g during p%d\n",
-      facet1->id, neighbor->id, dist, qh furthest_id));
-    qh_mergefacet (facet1, neighbor, &mindist, &maxdist, !qh_MERGEapex);
-    nummerge++;
-    if (qh PRINTstatistics) {
-      zinc_(Zflipped);
-      wadd_(Wflippedtot, dist);
-      wmax_(Wflippedmax, dist);
-    }
-    qh_merge_degenredundant();
-  }
-  FOREACHmerge_(othermerges) {
-    if (merge->facet1->visible || merge->facet2->visible)
-      qh_memfree (merge, sizeof(mergeT));
-    else
-      qh_setappend (&qh facet_mergeset, merge);
-  }
-  qh_settempfree (&othermerges);
-  if (nummerge)
-    *wasmerge= True;
-  trace1((qh ferr, "qh_flippedmerges: merged %d flipped facets into a good neighbor\n", nummerge));
-} /* flippedmerges */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="forcedmerges">-</a>
-  
-  qh_forcedmerges( wasmerge )
-    merge duplicated ridges
-
-  returns:
-    removes all duplicate ridges on facet_mergeset
-    wasmerge set if merge
-    qh.facet_mergeset may include non-forced merges (none for now)
-    qh.degen_mergeset includes degen/redun merges
-
-  notes: 
-    duplicate ridges occur when the horizon is pinched,
-        i.e. a subridge occurs in more than two horizon ridges.
-     could rename vertices that pinch the horizon
-    assumes qh_merge_degenredundant() has not be called
-    othermerges isn't needed since facet_mergeset is empty afterwards
-      keep it in case of change
-
-  design:
-    for each duplicate ridge
-      find current facets by chasing f.replace links
-      determine best direction for facet
-      merge one facet into the other
-      remove duplicate ridges from qh.facet_mergeset
-*/
-void qh_forcedmerges(boolT *wasmerge) {
-  facetT *facet1, *facet2;
-  mergeT *merge, **mergep;
-  realT dist1, dist2, mindist1, mindist2, maxdist1, maxdist2;
-  setT *othermerges;
-  int nummerge=0, numflip=0;
-
-  if (qh TRACEmerge-1 == zzval_(Ztotmerge))
-    qhmem.IStracing= qh IStracing= qh TRACElevel;
-  trace4((qh ferr, "qh_forcedmerges: begin\n"));  
-  othermerges= qh_settemppop(); /* was facet_mergeset */
-  qh facet_mergeset= qh_settemp (qh TEMPsize);
-  qh_settemppush (othermerges);
-  FOREACHmerge_(othermerges) {
-    if (merge->type != MRGridge) 
-    	continue;
-    facet1= merge->facet1;
-    facet2= merge->facet2;
-    while (facet1->visible)    	 /* must exist, no qh_merge_degenredunant */
-      facet1= facet1->f.replace; /* previously merged facet */
-    while (facet2->visible)
-      facet2= facet2->f.replace; /* previously merged facet */
-    if (facet1 == facet2)
-      continue;
-    if (!qh_setin (facet2->neighbors, facet1)) {
-      fprintf (qh ferr, "qhull internal error (qh_forcedmerges): f%d and f%d had a duplicate ridge but as f%d and f%d they are no longer neighbors\n",
-	       merge->facet1->id, merge->facet2->id, facet1->id, facet2->id);
-      qh_errexit2 (qh_ERRqhull, facet1, facet2);
-    }
-    if (qh TRACEmerge-1 == zzval_(Ztotmerge))
-      qhmem.IStracing= qh IStracing= qh TRACElevel;
-    dist1= qh_getdistance (facet1, facet2, &mindist1, &maxdist1);
-    dist2= qh_getdistance (facet2, facet1, &mindist2, &maxdist2);
-    trace0((qh ferr, "qh_forcedmerges: duplicate ridge between f%d and f%d, dist %2.2g and reverse dist %2.2g during p%d\n",
-	    facet1->id, facet2->id, dist1, dist2, qh furthest_id));
-    if (dist1 < dist2) 
-      qh_mergefacet (facet1, facet2, &mindist1, &maxdist1, !qh_MERGEapex);
-    else {
-      qh_mergefacet (facet2, facet1, &mindist2, &maxdist2, !qh_MERGEapex);
-      dist1= dist2;
-      facet1= facet2;
-    }
-    if (facet1->flipped) {
-      zinc_(Zmergeflipdup);
-      numflip++;
-    }else
-      nummerge++;
-    if (qh PRINTstatistics) {
-      zinc_(Zduplicate);
-      wadd_(Wduplicatetot, dist1);
-      wmax_(Wduplicatemax, dist1);
-    }
-  }
-  FOREACHmerge_(othermerges) {
-    if (merge->type == MRGridge)
-      qh_memfree (merge, sizeof(mergeT));
-    else
-      qh_setappend (&qh facet_mergeset, merge);
-  }
-  qh_settempfree (&othermerges);
-  if (nummerge)
-    *wasmerge= True;
-  trace1((qh ferr, "qh_forcedmerges: merged %d facets and %d flipped facets across duplicated ridges\n", 
-                nummerge, numflip));
-} /* forcedmerges */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="getmergeset">-</a>
-  
-  qh_getmergeset( facetlist )
-    determines nonconvex facets on facetlist
-    tests !tested ridges and nonconvex ridges of !tested facets
-
-  returns:
-    returns sorted qh.facet_mergeset of facet-neighbor pairs to be merged
-    all ridges tested
-  
-  notes:
-    assumes no nonconvex ridges with both facets tested
-    uses facet->tested/ridge->tested to prevent duplicate tests
-    can not limit tests to modified ridges since the centrum changed
-    uses qh.visit_id
-  
-  see:
-    qh_getmergeset_initial()
-
-  design:
-    for each facet on facetlist
-      for each ridge of facet
-        if untested ridge
-          test ridge for convexity
-          if non-convex
-            append ridge to qh.facet_mergeset
-    sort qh.facet_mergeset by angle  
-*/
-void qh_getmergeset(facetT *facetlist) {
-  facetT *facet, *neighbor, **neighborp;
-  ridgeT *ridge, **ridgep;
-  int nummerges;
-  
-  nummerges= qh_setsize (qh facet_mergeset);
-  trace4((qh ferr, "qh_getmergeset: started.\n"));
-  qh visit_id++;
-  FORALLfacet_(facetlist) {
-    if (facet->tested)
-      continue;
-    facet->visitid= qh visit_id;
-    facet->tested= True;  /* must be non-simplicial due to merge */
-    FOREACHneighbor_(facet)
-      neighbor->seen= False;
-    FOREACHridge_(facet->ridges) {
-      if (ridge->tested && !ridge->nonconvex)
-	continue;
-      /* if tested & nonconvex, need to append merge */
-      neighbor= otherfacet_(ridge, facet);
-      if (neighbor->seen) {
-	ridge->tested= True;
-	ridge->nonconvex= False;
-      }else if (neighbor->visitid != qh visit_id) {
-        ridge->tested= True;
-        ridge->nonconvex= False;
-	neighbor->seen= True;      /* only one ridge is marked nonconvex */
-	if (qh_test_appendmerge (facet, neighbor))
-	  ridge->nonconvex= True;
-      }
-    }
-  }
-  nummerges= qh_setsize (qh facet_mergeset);
-  if (qh ANGLEmerge)
-    qsort(SETaddr_(qh facet_mergeset, mergeT), nummerges,sizeof(mergeT *),qh_compareangle);
-  else
-    qsort(SETaddr_(qh facet_mergeset, mergeT), nummerges,sizeof(mergeT *),qh_comparemerge);
-  if (qh POSTmerging) {
-    zadd_(Zmergesettot2, nummerges);
-  }else {
-    zadd_(Zmergesettot, nummerges);
-    zmax_(Zmergesetmax, nummerges);
-  }
-  trace2((qh ferr, "qh_getmergeset: %d merges found\n", nummerges));
-} /* getmergeset */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="getmergeset_initial">-</a>
-  
-  qh_getmergeset_initial( facetlist )
-    determine initial qh.facet_mergeset for facets
-    tests all facet/neighbor pairs on facetlist
-
-  returns:
-    sorted qh.facet_mergeset with nonconvex ridges
-    sets facet->tested, ridge->tested, and ridge->nonconvex
-
-  notes:
-    uses visit_id, assumes ridge->nonconvex is False
-
-  see:
-    qh_getmergeset()
-
-  design:
-    for each facet on facetlist
-      for each untested neighbor of facet
-        test facet and neighbor for convexity
-        if non-convex
-          append merge to qh.facet_mergeset
-          mark one of the ridges as nonconvex
-    sort qh.facet_mergeset by angle
-*/
-void qh_getmergeset_initial (facetT *facetlist) {
-  facetT *facet, *neighbor, **neighborp;
-  ridgeT *ridge, **ridgep;
-  int nummerges;
-
-  qh visit_id++;
-  FORALLfacet_(facetlist) {
-    facet->visitid= qh visit_id;
-    facet->tested= True;
-    FOREACHneighbor_(facet) {
-      if (neighbor->visitid != qh visit_id) {
-        if (qh_test_appendmerge (facet, neighbor)) {
-          FOREACHridge_(neighbor->ridges) {
-            if (facet == otherfacet_(ridge, neighbor)) {
-              ridge->nonconvex= True;
-              break;	/* only one ridge is marked nonconvex */
-            }
-          }
-        }
-      }
-    }
-    FOREACHridge_(facet->ridges)
-      ridge->tested= True;
-  }
-  nummerges= qh_setsize (qh facet_mergeset);
-  if (qh ANGLEmerge)
-    qsort(SETaddr_(qh facet_mergeset, mergeT), nummerges,sizeof(mergeT *),qh_compareangle);
-  else
-    qsort(SETaddr_(qh facet_mergeset, mergeT), nummerges,sizeof(mergeT *),qh_comparemerge);
-  if (qh POSTmerging) {
-    zadd_(Zmergeinittot2, nummerges);
-  }else {
-    zadd_(Zmergeinittot, nummerges);
-    zmax_(Zmergeinitmax, nummerges);
-  }
-  trace2((qh ferr, "qh_getmergeset_initial: %d merges found\n", nummerges));
-} /* getmergeset_initial */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="hashridge">-</a>
-  
-  qh_hashridge( hashtable, hashsize, ridge, oldvertex )
-    add ridge to hashtable without oldvertex
-
-  notes:
-    assumes hashtable is large enough
-
-  design:
-    determine hash value for ridge without oldvertex
-    find next empty slot for ridge
-*/
-void qh_hashridge (setT *hashtable, int hashsize, ridgeT *ridge, vertexT *oldvertex) {
-  int hash;
-  ridgeT *ridgeA;
-
-  hash= (int)qh_gethash (hashsize, ridge->vertices, qh hull_dim-1, 0, oldvertex);
-  while (True) {
-    if (!(ridgeA= SETelemt_(hashtable, hash, ridgeT))) {
-      SETelem_(hashtable, hash)= ridge;
-      break;
-    }else if (ridgeA == ridge)
-      break;
-    if (++hash == hashsize)
-      hash= 0;
-  }
-} /* hashridge */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="hashridge_find">-</a>
-  
-  qh_hashridge_find( hashtable, hashsize, ridge, vertex, oldvertex, hashslot )
-    returns matching ridge without oldvertex in hashtable 
-      for ridge without vertex
-    if oldvertex is NULL 
-      matches with any one skip
-
-  returns:
-    matching ridge or NULL
-    if no match,
-      if ridge already in   table
-        hashslot= -1 
-      else 
-        hashslot= next NULL index
-        
-  notes:
-    assumes hashtable is large enough
-    can't match ridge to itself
-
-  design:
-    get hash value for ridge without vertex
-    for each hashslot
-      return match if ridge matches ridgeA without oldvertex
-*/
-ridgeT *qh_hashridge_find (setT *hashtable, int hashsize, ridgeT *ridge, 
-              vertexT *vertex, vertexT *oldvertex, int *hashslot) {
-  int hash;
-  ridgeT *ridgeA;
-
-  *hashslot= 0;
-  zinc_(Zhashridge);
-  hash= (int)qh_gethash (hashsize, ridge->vertices, qh hull_dim-1, 0, vertex);
-  while ((ridgeA= SETelemt_(hashtable, hash, ridgeT))) {
-    if (ridgeA == ridge)
-      *hashslot= -1;      
-    else {
-      zinc_(Zhashridgetest);
-      if (qh_setequal_except (ridge->vertices, vertex, ridgeA->vertices, oldvertex))
-        return ridgeA;
-    }
-    if (++hash == hashsize)
-      hash= 0;
-  }
-  if (!*hashslot)
-    *hashslot= hash;
-  return NULL;
-} /* hashridge_find */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="makeridges">-</a>
-  
-  qh_makeridges( facet )
-    creates explicit ridges between simplicial facets
-
-  returns:
-    facet with ridges and without qh_MERGEridge
-    ->simplicial is False
-  
-  notes:
-    allows qh_MERGEridge flag
-    uses existing ridges
-    duplicate neighbors ok if ridges already exist (qh_mergecycle_ridges)
-
-  see:
-    qh_mergecycle_ridges()
-
-  design:
-    look for qh_MERGEridge neighbors
-    mark neighbors that already have ridges
-    for each unprocessed neighbor of facet    
-      create a ridge for neighbor and facet
-    if any qh_MERGEridge neighbors
-      delete qh_MERGEridge flags (already handled by qh_mark_dupridges)
-*/
-void qh_makeridges(facetT *facet) {
-  facetT *neighbor, **neighborp;
-  ridgeT *ridge, **ridgep;
-  int neighbor_i, neighbor_n;
-  boolT toporient, mergeridge= False;
-  
-  if (!facet->simplicial)
-    return;
-  trace4((qh ferr, "qh_makeridges: make ridges for f%d\n", facet->id));
-  facet->simplicial= False;
-  FOREACHneighbor_(facet) {
-    if (neighbor == qh_MERGEridge)
-      mergeridge= True;
-    else
-      neighbor->seen= False;
-  }
-  FOREACHridge_(facet->ridges)
-    otherfacet_(ridge, facet)->seen= True;
-  FOREACHneighbor_i_(facet) {
-    if (neighbor == qh_MERGEridge)
-      continue;  /* fixed by qh_mark_dupridges */
-    else if (!neighbor->seen) {  /* no current ridges */
-      ridge= qh_newridge();
-      ridge->vertices= qh_setnew_delnthsorted (facet->vertices, qh hull_dim,
-					                  neighbor_i, 0);
-      toporient= facet->toporient ^ (neighbor_i & 0x1);
-      if (toporient) {
-        ridge->top= facet;
-        ridge->bottom= neighbor;
-      }else {
-        ridge->top= neighbor;
-        ridge->bottom= facet;
-      }
-#if 0 /* this also works */
-      flip= (facet->toporient ^ neighbor->toporient)^(skip1 & 0x1) ^ (skip2 & 0x1);
-      if (facet->toporient ^ (skip1 & 0x1) ^ flip) {
-        ridge->top= neighbor;
-        ridge->bottom= facet;
-      }else {
-        ridge->top= facet;
-        ridge->bottom= neighbor;
-      }
-#endif
-      qh_setappend(&(facet->ridges), ridge);
-      qh_setappend(&(neighbor->ridges), ridge);
-    }
-  }
-  if (mergeridge) {
-    while (qh_setdel (facet->neighbors, qh_MERGEridge))
-      ; /* delete each one */
-  }
-} /* makeridges */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mark_dupridges">-</a>
-  
-  qh_mark_dupridges( facetlist )
-    add duplicated ridges to qh.facet_mergeset
-    facet->dupridge is true
-
-  returns:
-    duplicate ridges on qh.facet_mergeset
-    ->mergeridge/->mergeridge2 set
-    duplicate ridges marked by qh_MERGEridge and both sides facet->dupridge
-    no MERGEridges in neighbor sets
-    
-  notes:
-    duplicate ridges occur when the horizon is pinched,
-        i.e. a subridge occurs in more than two horizon ridges.
-    could rename vertices that pinch the horizon
-    uses qh.visit_id
-
-  design:
-    for all facets on facetlist
-      if facet contains a duplicate ridge
-        for each neighbor of facet
-          if neighbor marked qh_MERGEridge (one side of the merge)
-            set facet->mergeridge      
-          else
-            if neighbor contains a duplicate ridge 
-            and the back link is qh_MERGEridge
-              append duplicate ridge to qh.facet_mergeset
-   for each duplicate ridge
-     make ridge sets in preparation for merging
-     remove qh_MERGEridge from neighbor set
-   for each duplicate ridge
-     restore the missing neighbor from the neighbor set that was qh_MERGEridge
-     add the missing ridge for this neighbor
-*/
-void qh_mark_dupridges(facetT *facetlist) {
-  facetT *facet, *neighbor, **neighborp;
-  int nummerge=0;
-  mergeT *merge, **mergep;
-  
-
-  trace4((qh ferr, "qh_mark_dupridges: identify duplicate ridges\n"));  
-  FORALLfacet_(facetlist) {
-    if (facet->dupridge) {
-      FOREACHneighbor_(facet) {
-        if (neighbor == qh_MERGEridge) {
-	  facet->mergeridge= True;
-	  continue;
-	}
-        if (neighbor->dupridge
-	&& !qh_setin (neighbor->neighbors, facet)) { /* qh_MERGEridge */
-	  qh_appendmergeset (facet, neighbor, MRGridge, NULL);
-	  facet->mergeridge2= True;
-	  facet->mergeridge= True;
-	  nummerge++;
-	}
-      }
-    }
-  }
-  if (!nummerge)
-    return;
-  FORALLfacet_(facetlist) {            /* gets rid of qh_MERGEridge */
-    if (facet->mergeridge && !facet->mergeridge2)   
-      qh_makeridges (facet);
-  }
-  FOREACHmerge_(qh facet_mergeset) {   /* restore the missing neighbors */
-    if (merge->type == MRGridge) {
-      qh_setappend (&merge->facet2->neighbors, merge->facet1);
-      qh_makeridges (merge->facet1);   /* and the missing ridges */
-    }
-  }
-  trace1((qh ferr, "qh_mark_dupridges: found %d duplicated ridges\n", 
-                nummerge));
-} /* mark_dupridges */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="maydropneighbor">-</a>
-  
-  qh_maydropneighbor( facet )
-    drop neighbor relationship if no ridge between facet and neighbor
-
-  returns:
-    neighbor sets updated
-    appends degenerate facets to qh.facet_mergeset
-  
-  notes:
-    won't cause redundant facets since vertex inclusion is the same
-    may drop vertex and neighbor if no ridge
-    uses qh.visit_id
-
-  design:
-    visit all neighbors with ridges
-    for each unvisited neighbor of facet
-      delete neighbor and facet from the neighbor sets
-      if neighbor becomes degenerate
-        append neighbor to qh.degen_mergeset
-    if facet is degenerate
-      append facet to qh.degen_mergeset
-*/
-void qh_maydropneighbor (facetT *facet) {
-  ridgeT *ridge, **ridgep;
-  realT angledegen= qh_ANGLEdegen;
-  facetT *neighbor, **neighborp;
-
-  qh visit_id++;
-  trace4((qh ferr, "qh_maydropneighbor: test f%d for no ridges to a neighbor\n",
-	  facet->id));
-  FOREACHridge_(facet->ridges) {
-    ridge->top->visitid= qh visit_id;
-    ridge->bottom->visitid= qh visit_id;
-  }
-  FOREACHneighbor_(facet) {
-    if (neighbor->visitid != qh visit_id) {
-      trace0((qh ferr, "qh_maydropneighbor: facets f%d and f%d are no longer neighbors during p%d\n",
-	    facet->id, neighbor->id, qh furthest_id));
-      zinc_(Zdropneighbor);
-      qh_setdel (facet->neighbors, neighbor);
-      neighborp--;  /* repeat, deleted a neighbor */
-      qh_setdel (neighbor->neighbors, facet);
-      if (qh_setsize (neighbor->neighbors) < qh hull_dim) {
-        zinc_(Zdropdegen);
-        qh_appendmergeset (neighbor, neighbor, MRGdegen, &angledegen);
-        trace2((qh ferr, "qh_maydropneighbors: f%d is degenerate.\n", neighbor->id));
-      }
-    }
-  }
-  if (qh_setsize (facet->neighbors) < qh hull_dim) {
-    zinc_(Zdropdegen);
-    qh_appendmergeset (facet, facet, MRGdegen, &angledegen);
-    trace2((qh ferr, "qh_maydropneighbors: f%d is degenerate.\n", facet->id));
-  }
-} /* maydropneighbor */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="merge_degenredundant">-</a>
-  
-  qh_merge_degenredundant()
-    merge all degenerate and redundant facets
-    qh.degen_mergeset contains merges from qh_degen_redundant_neighbors()
-
-  returns:
-    number of merges performed
-    resets facet->degenerate/redundant
-    if deleted (visible) facet has no neighbors
-      sets ->f.replace to NULL
-
-  notes:
-    redundant merges happen before degenerate ones
-    merging and renaming vertices can result in degen/redundant facets
-
-  design:
-    for each merge on qh.degen_mergeset
-      if redundant merge
-        if non-redundant facet merged into redundant facet
-          recheck facet for redundancy
-        else
-          merge redundant facet into other facet
-*/
-int qh_merge_degenredundant (void) {
-  int size;
-  mergeT *merge;
-  facetT *bestneighbor, *facet1, *facet2;
-  realT dist, mindist, maxdist;
-  vertexT *vertex, **vertexp;
-  int nummerges= 0;
-  mergeType mergetype;
-
-  while ((merge= (mergeT*)qh_setdellast (qh degen_mergeset))) {
-    facet1= merge->facet1;
-    facet2= merge->facet2;
-    mergetype= merge->type;
-    qh_memfree (merge, sizeof(mergeT));
-    if (facet1->visible)
-      continue;
-    facet1->degenerate= False; 
-    facet1->redundant= False; 
-    if (qh TRACEmerge-1 == zzval_(Ztotmerge))
-      qhmem.IStracing= qh IStracing= qh TRACElevel;
-    if (mergetype == MRGredundant) {
-      zinc_(Zneighbor);
-      while (facet2->visible) {
-        if (!facet2->f.replace) {
-          fprintf (qh ferr, "qhull internal error (qh_merge_degenredunant): f%d redundant but f%d has no replacement\n",
-	       facet1->id, facet2->id);
-          qh_errexit2 (qh_ERRqhull, facet1, facet2);
-        }
-        facet2= facet2->f.replace;
-      }
-      if (facet1 == facet2) {
-	qh_degen_redundant_facet (facet1); /* in case of others */
-	continue;
-      }
-      trace2((qh ferr, "qh_merge_degenredundant: facet f%d is contained in f%d, will merge\n",
-	    facet1->id, facet2->id));
-      qh_mergefacet(facet1, facet2, NULL, NULL, !qh_MERGEapex);
-      /* merge distance is already accounted for */
-      nummerges++;
-    }else {  /* mergetype == MRGdegen, other merges may have fixed */
-      if (!(size= qh_setsize (facet1->neighbors))) {
-        zinc_(Zdelfacetdup);
-        trace2((qh ferr, "qh_merge_degenredundant: facet f%d has no neighbors.  Deleted\n", facet1->id));
-        qh_willdelete (facet1, NULL);
-        FOREACHvertex_(facet1->vertices) {
-  	  qh_setdel (vertex->neighbors, facet1);
-	  if (!SETfirst_(vertex->neighbors)) {
-	    zinc_(Zdegenvertex);
-	    trace2((qh ferr, "qh_merge_degenredundant: deleted v%d because f%d has no neighbors\n",
-         	 vertex->id, facet1->id));
-	    vertex->deleted= True;
-	    qh_setappend (&qh del_vertices, vertex);
-	  }
-        }
-        nummerges++;
-      }else if (size < qh hull_dim) {
-        bestneighbor= qh_findbestneighbor(facet1, &dist, &mindist, &maxdist);
-        trace2((qh ferr, "qh_merge_degenredundant: facet f%d has %d neighbors, merge into f%d dist %2.2g\n",
-	      facet1->id, size, bestneighbor->id, dist));
-        qh_mergefacet(facet1, bestneighbor, &mindist, &maxdist, !qh_MERGEapex);
-        nummerges++;
-        if (qh PRINTstatistics) {
-	  zinc_(Zdegen);
-	  wadd_(Wdegentot, dist);
-	  wmax_(Wdegenmax, dist);
-        }
-      }	/* else, another merge fixed the degeneracy and redundancy tested */
-    }
-  }
-  return nummerges;
-} /* merge_degenredundant */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="merge_nonconvex">-</a>
-  
-  qh_merge_nonconvex( facet1, facet2, mergetype )
-    remove non-convex ridge between facet1 into facet2 
-    mergetype gives why the facet's are non-convex
-
-  returns:
-    merges one of the facets into the best neighbor
-    
-  design:
-    if one of the facets is a new facet
-      prefer merging new facet into old facet
-    find best neighbors for both facets
-    merge the nearest facet into its best neighbor
-    update the statistics
-*/
-void qh_merge_nonconvex (facetT *facet1, facetT *facet2, mergeType mergetype) {
-  facetT *bestfacet, *bestneighbor, *neighbor;
-  realT dist, dist2, mindist, mindist2, maxdist, maxdist2;
-
-  if (qh TRACEmerge-1 == zzval_(Ztotmerge))
-    qhmem.IStracing= qh IStracing= qh TRACElevel;
-  trace3((qh ferr, "qh_merge_nonconvex: merge #%d for f%d and f%d type %d\n",
-      zzval_(Ztotmerge) + 1, facet1->id, facet2->id, mergetype));
-  /* concave or coplanar */
-  if (!facet1->newfacet) {
-    bestfacet= facet2;   /* avoid merging old facet if new is ok */
-    facet2= facet1;
-    facet1= bestfacet;
-  }else
-    bestfacet= facet1;
-  bestneighbor= qh_findbestneighbor(bestfacet, &dist, &mindist, &maxdist);
-  neighbor= qh_findbestneighbor(facet2, &dist2, &mindist2, &maxdist2);
-  if (dist < dist2) {
-    qh_mergefacet(bestfacet, bestneighbor, &mindist, &maxdist, !qh_MERGEapex);
-  }else if (qh AVOIDold && !facet2->newfacet
-  && ((mindist >= -qh MAXcoplanar && maxdist <= qh max_outside)
-       || dist * 1.5 < dist2)) {
-    zinc_(Zavoidold);
-    wadd_(Wavoidoldtot, dist);
-    wmax_(Wavoidoldmax, dist);
-    trace2((qh ferr, "qh_merge_nonconvex: avoid merging old facet f%d dist %2.2g.  Use f%d dist %2.2g instead\n",
-           facet2->id, dist2, facet1->id, dist2));
-    qh_mergefacet(bestfacet, bestneighbor, &mindist, &maxdist, !qh_MERGEapex);
-  }else {
-    qh_mergefacet(facet2, neighbor, &mindist2, &maxdist2, !qh_MERGEapex);
-    dist= dist2;
-  }
-  if (qh PRINTstatistics) {
-    if (mergetype == MRGanglecoplanar) {
-      zinc_(Zacoplanar);
-      wadd_(Wacoplanartot, dist);
-      wmax_(Wacoplanarmax, dist);
-    }else if (mergetype == MRGconcave) {
-      zinc_(Zconcave);
-      wadd_(Wconcavetot, dist);
-      wmax_(Wconcavemax, dist);
-    }else { /* MRGcoplanar */
-      zinc_(Zcoplanar);
-      wadd_(Wcoplanartot, dist);
-      wmax_(Wcoplanarmax, dist);
-    }
-  }
-} /* merge_nonconvex */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergecycle">-</a>
-  
-  qh_mergecycle( samecycle, newfacet )
-    merge a cycle of facets starting at samecycle into a newfacet 
-    newfacet is a horizon facet with ->normal
-    samecycle facets are simplicial from an apex
-
-  returns:
-    initializes vertex neighbors on first merge
-    samecycle deleted (placed on qh.visible_list)
-    newfacet at end of qh.facet_list
-    deleted vertices on qh.del_vertices
-
-  see:
-    qh_mergefacet()
-    called by qh_mergecycle_all() for multiple, same cycle facets
-
-  design:
-    make vertex neighbors if necessary
-    make ridges for newfacet
-    merge neighbor sets of samecycle into newfacet
-    merge ridges of samecycle into newfacet
-    merge vertex neighbors of samecycle into newfacet
-    make apex of samecycle the apex of newfacet
-    if newfacet wasn't a new facet
-      add its vertices to qh.newvertex_list
-    delete samecycle facets a make newfacet a newfacet
-*/
-void qh_mergecycle (facetT *samecycle, facetT *newfacet) {
-  int traceonce= False, tracerestore= 0;
-  vertexT *apex;
-#ifndef qh_NOtrace
-  facetT *same;
-#endif
-
-  if (newfacet->tricoplanar) {
-    if (!qh TRInormals) {
-      fprintf (qh ferr, "qh_mergecycle: does not work for tricoplanar facets.  Use option 'Q11'\n");
-      qh_errexit (qh_ERRqhull, newfacet, NULL);
-    }
-    newfacet->tricoplanar= False;
-    newfacet->keepcentrum= False;
-  }
-  if (!qh VERTEXneighbors)
-    qh_vertexneighbors();
-  zzinc_(Ztotmerge);
-  if (qh REPORTfreq2 && qh POSTmerging) {
-    if (zzval_(Ztotmerge) > qh mergereport + qh REPORTfreq2)
-      qh_tracemerging();
-  }
-#ifndef qh_NOtrace
-  if (qh TRACEmerge == zzval_(Ztotmerge))
-    qhmem.IStracing= qh IStracing= qh TRACElevel;
-  trace2((qh ferr, "qh_mergecycle: merge #%d for facets from cycle f%d into coplanar horizon f%d\n", 
-        zzval_(Ztotmerge), samecycle->id, newfacet->id));
-  if (newfacet == qh tracefacet) {
-    tracerestore= qh IStracing;
-    qh IStracing= 4;
-    fprintf (qh ferr, "qh_mergecycle: ========= trace merge %d of samecycle %d into trace f%d, furthest is p%d\n",
-	       zzval_(Ztotmerge), samecycle->id, newfacet->id,  qh furthest_id);
-    traceonce= True;
-  }
-  if (qh IStracing >=4) {
-    fprintf (qh ferr, "  same cycle:");
-    FORALLsame_cycle_(samecycle)
-      fprintf(qh ferr, " f%d", same->id);
-    fprintf (qh ferr, "\n");
-  }
-  if (qh IStracing >=4)
-    qh_errprint ("MERGING CYCLE", samecycle, newfacet, NULL, NULL);
-#endif /* !qh_NOtrace */
-  apex= SETfirstt_(samecycle->vertices, vertexT);
-  qh_makeridges (newfacet);
-  qh_mergecycle_neighbors (samecycle, newfacet);
-  qh_mergecycle_ridges (samecycle, newfacet);
-  qh_mergecycle_vneighbors (samecycle, newfacet);
-  if (SETfirstt_(newfacet->vertices, vertexT) != apex) 
-    qh_setaddnth (&newfacet->vertices, 0, apex);  /* apex has last id */
-  if (!newfacet->newfacet)
-    qh_newvertices (newfacet->vertices);
-  qh_mergecycle_facets (samecycle, newfacet);
-  qh_tracemerge (samecycle, newfacet);
-  /* check for degen_redundant_neighbors after qh_forcedmerges() */
-  if (traceonce) {
-    fprintf (qh ferr, "qh_mergecycle: end of trace facet\n");
-    qh IStracing= tracerestore;
-  }
-} /* mergecycle */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergecycle_all">-</a>
-  
-  qh_mergecycle_all( facetlist, wasmerge )
-    merge all samecycles of coplanar facets into horizon
-    don't merge facets with ->mergeridge (these already have ->normal)
-    all facets are simplicial from apex
-    all facet->cycledone == False
-
-  returns:
-    all newfacets merged into coplanar horizon facets
-    deleted vertices on  qh.del_vertices
-    sets wasmerge if any merge
-
-  see:
-    calls qh_mergecycle for multiple, same cycle facets
-
-  design:
-    for each facet on facetlist
-      skip facets with duplicate ridges and normals
-      check that facet is in a samecycle (->mergehorizon)
-      if facet only member of samecycle
-	sets vertex->delridge for all vertices except apex
-        merge facet into horizon
-      else
-        mark all facets in samecycle
-        remove facets with duplicate ridges from samecycle
-        merge samecycle into horizon (deletes facets from facetlist)
-*/
-void qh_mergecycle_all (facetT *facetlist, boolT *wasmerge) {
-  facetT *facet, *same, *prev, *horizon;
-  facetT *samecycle= NULL, *nextfacet, *nextsame;
-  vertexT *apex, *vertex, **vertexp;
-  int cycles=0, total=0, facets, nummerge;
-
-  trace2((qh ferr, "qh_mergecycle_all: begin\n"));
-  for (facet= facetlist; facet && (nextfacet= facet->next); facet= nextfacet) {
-    if (facet->normal)
-      continue;
-    if (!facet->mergehorizon) {
-      fprintf (qh ferr, "qh_mergecycle_all: f%d without normal\n", facet->id);
-      qh_errexit (qh_ERRqhull, facet, NULL);
-    }
-    horizon= SETfirstt_(facet->neighbors, facetT);
-    if (facet->f.samecycle == facet) {
-      zinc_(Zonehorizon);  
-      /* merge distance done in qh_findhorizon */
-      apex= SETfirstt_(facet->vertices, vertexT);
-      FOREACHvertex_(facet->vertices) {
-	if (vertex != apex)
-          vertex->delridge= True;
-      }
-      horizon->f.newcycle= NULL;
-      qh_mergefacet (facet, horizon, NULL, NULL, qh_MERGEapex);
-    }else {
-      samecycle= facet;
-      facets= 0;
-      prev= facet;
-      for (same= facet->f.samecycle; same;  /* FORALLsame_cycle_(facet) */
-	   same= (same == facet ? NULL :nextsame)) { /* ends at facet */
-	nextsame= same->f.samecycle;
-        if (same->cycledone || same->visible)
-          qh_infiniteloop (same);
-        same->cycledone= True;
-        if (same->normal) { 
-          prev->f.samecycle= same->f.samecycle; /* unlink ->mergeridge */
-	  same->f.samecycle= NULL;
-        }else {
-          prev= same;
-	  facets++;
-	}
-      }
-      while (nextfacet && nextfacet->cycledone)  /* will delete samecycle */
-	nextfacet= nextfacet->next;
-      horizon->f.newcycle= NULL;
-      qh_mergecycle (samecycle, horizon);
-      nummerge= horizon->nummerge + facets;
-      if (nummerge > qh_MAXnummerge) 
-      	horizon->nummerge= qh_MAXnummerge;
-      else
-        horizon->nummerge= nummerge;
-      zzinc_(Zcyclehorizon);
-      total += facets;
-      zzadd_(Zcyclefacettot, facets);
-      zmax_(Zcyclefacetmax, facets);
-    }
-    cycles++;
-  }
-  if (cycles)
-    *wasmerge= True;
-  trace1((qh ferr, "qh_mergecycle_all: merged %d same cycles or facets into coplanar horizons\n", cycles));
-} /* mergecycle_all */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergecycle_facets">-</a>
-  
-  qh_mergecycle_facets( samecycle, newfacet )
-    finish merge of samecycle into newfacet
-
-  returns:
-    samecycle prepended to visible_list for later deletion and partitioning
-      each facet->f.replace == newfacet
-      
-    newfacet moved to end of qh.facet_list
-      makes newfacet a newfacet (get's facet1->id if it was old)
-      sets newfacet->newmerge
-      clears newfacet->center (unless merging into a large facet)
-      clears newfacet->tested and ridge->tested for facet1
-      
-    adds neighboring facets to facet_mergeset if redundant or degenerate
-
-  design:
-    make newfacet a new facet and set its flags
-    move samecycle facets to qh.visible_list for later deletion
-    unless newfacet is large
-      remove its centrum
-*/
-void qh_mergecycle_facets (facetT *samecycle, facetT *newfacet) {
-  facetT *same, *next;
-  
-  trace4((qh ferr, "qh_mergecycle_facets: make newfacet new and samecycle deleted\n"));  
-  qh_removefacet(newfacet);  /* append as a newfacet to end of qh facet_list */
-  qh_appendfacet(newfacet);
-  newfacet->newfacet= True;
-  newfacet->simplicial= False;
-  newfacet->newmerge= True;
-  
-  for (same= samecycle->f.samecycle; same; same= (same == samecycle ?  NULL : next)) {
-    next= same->f.samecycle;  /* reused by willdelete */
-    qh_willdelete (same, newfacet);
-  }
-  if (newfacet->center 
-      && qh_setsize (newfacet->vertices) <= qh hull_dim + qh_MAXnewcentrum) {
-    qh_memfree (newfacet->center, qh normal_size);
-    newfacet->center= NULL;
-  }
-  trace3((qh ferr, "qh_mergecycle_facets: merged facets from cycle f%d into f%d\n", 
-             samecycle->id, newfacet->id));
-} /* mergecycle_facets */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergecycle_neighbors">-</a>
-  
-  qh_mergecycle_neighbors( samecycle, newfacet )
-    add neighbors for samecycle facets to newfacet
-
-  returns:
-    newfacet with updated neighbors and vice-versa
-    newfacet has ridges
-    all neighbors of newfacet marked with qh.visit_id
-    samecycle facets marked with qh.visit_id-1
-    ridges updated for simplicial neighbors of samecycle with a ridge
-
-  notes:
-    assumes newfacet not in samecycle
-    usually, samecycle facets are new, simplicial facets without internal ridges 
-      not so if horizon facet is coplanar to two different samecycles
-  
-  see:
-    qh_mergeneighbors()
-
-  design:
-    check samecycle
-    delete neighbors from newfacet that are also in samecycle
-    for each neighbor of a facet in samecycle
-      if neighbor is simplicial
-        if first visit
-          move the neighbor relation to newfacet
-          update facet links for its ridges
-        else
-          make ridges for neighbor
-          remove samecycle reference
-      else
-        update neighbor sets
-*/
-void qh_mergecycle_neighbors(facetT *samecycle, facetT *newfacet) {
-  facetT *same, *neighbor, **neighborp;
-  int delneighbors= 0, newneighbors= 0;
-  unsigned int samevisitid;
-  ridgeT *ridge, **ridgep;
-
-  samevisitid= ++qh visit_id;
-  FORALLsame_cycle_(samecycle) {
-    if (same->visitid == samevisitid || same->visible)
-      qh_infiniteloop (samecycle);
-    same->visitid= samevisitid;
-  }
-  newfacet->visitid= ++qh visit_id;
-  trace4((qh ferr, "qh_mergecycle_neighbors: delete shared neighbors from newfacet\n"));  
-  FOREACHneighbor_(newfacet) {
-    if (neighbor->visitid == samevisitid) {
-      SETref_(neighbor)= NULL;  /* samecycle neighbors deleted */
-      delneighbors++;
-    }else
-      neighbor->visitid= qh visit_id;
-  }
-  qh_setcompact (newfacet->neighbors);
-
-  trace4((qh ferr, "qh_mergecycle_neighbors: update neighbors\n"));  
-  FORALLsame_cycle_(samecycle) {
-    FOREACHneighbor_(same) {
-      if (neighbor->visitid == samevisitid)
-	continue;
-      if (neighbor->simplicial) {
-	if (neighbor->visitid != qh visit_id) {
-	  qh_setappend (&newfacet->neighbors, neighbor);
-	  qh_setreplace (neighbor->neighbors, same, newfacet);
-	  newneighbors++;
-	  neighbor->visitid= qh visit_id;
-	  FOREACHridge_(neighbor->ridges) { /* update ridge in case of qh_makeridges */
-	    if (ridge->top == same) {
-	      ridge->top= newfacet;
-	      break;
-	    }else if (ridge->bottom == same) {
-	      ridge->bottom= newfacet;
-	      break;
-	    }
-	  }
-	}else {
-	  qh_makeridges (neighbor);
-	  qh_setdel (neighbor->neighbors, same);
-	  /* same can't be horizon facet for neighbor */
-	}
-      }else { /* non-simplicial neighbor */
-        qh_setdel (neighbor->neighbors, same);
-        if (neighbor->visitid != qh visit_id) {
-          qh_setappend (&neighbor->neighbors, newfacet);
-          qh_setappend (&newfacet->neighbors, neighbor);
-          neighbor->visitid= qh visit_id;
-          newneighbors++;
-        } 
-      }
-    }
-  }
-  trace2((qh ferr, "qh_mergecycle_neighbors: deleted %d neighbors and added %d\n", 
-             delneighbors, newneighbors));
-} /* mergecycle_neighbors */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergecycle_ridges">-</a>
-  
-  qh_mergecycle_ridges( samecycle, newfacet )
-    add ridges/neighbors for facets in samecycle to newfacet
-    all new/old neighbors of newfacet marked with qh.visit_id
-    facets in samecycle marked with qh.visit_id-1
-    newfacet marked with qh.visit_id
-
-  returns:
-    newfacet has merged ridges
-  
-  notes:
-    ridge already updated for simplicial neighbors of samecycle with a ridge
-
-  see:
-    qh_mergeridges()
-    qh_makeridges()
-
-  design:
-    remove ridges between newfacet and samecycle
-    for each facet in samecycle
-      for each ridge in facet
-        update facet pointers in ridge
-        skip ridges processed in qh_mergecycle_neighors
-        free ridges between newfacet and samecycle
-        free ridges between facets of samecycle (on 2nd visit)
-        append remaining ridges to newfacet
-      if simpilicial facet
-        for each neighbor of facet
-          if simplicial facet
-          and not samecycle facet or newfacet
-            make ridge between neighbor and newfacet
-*/
-void qh_mergecycle_ridges(facetT *samecycle, facetT *newfacet) {
-  facetT *same, *neighbor= NULL;
-  int numold=0, numnew=0;
-  int neighbor_i, neighbor_n;
-  unsigned int samevisitid;
-  ridgeT *ridge, **ridgep;
-  boolT toporient;
-  void **freelistp; /* used !qh_NOmem */
-
-  trace4((qh ferr, "qh_mergecycle_ridges: delete shared ridges from newfacet\n"));  
-  samevisitid= qh visit_id -1;
-  FOREACHridge_(newfacet->ridges) {
-    neighbor= otherfacet_(ridge, newfacet);
-    if (neighbor->visitid == samevisitid)
-      SETref_(ridge)= NULL; /* ridge free'd below */  
-  }
-  qh_setcompact (newfacet->ridges);
-  
-  trace4((qh ferr, "qh_mergecycle_ridges: add ridges to newfacet\n"));  
-  FORALLsame_cycle_(samecycle) {
-    FOREACHridge_(same->ridges) {
-      if (ridge->top == same) {
-        ridge->top= newfacet;
-	neighbor= ridge->bottom;
-      }else if (ridge->bottom == same) {
-	ridge->bottom= newfacet;
-	neighbor= ridge->top;
-      }else if (ridge->top == newfacet || ridge->bottom == newfacet) {
-        qh_setappend (&newfacet->ridges, ridge);
-        numold++;  /* already set by qh_mergecycle_neighbors */
-	continue;  
-      }else {
-	fprintf (qh ferr, "qhull internal error (qh_mergecycle_ridges): bad ridge r%d\n", ridge->id);
-	qh_errexit (qh_ERRqhull, NULL, ridge);
-      }
-      if (neighbor == newfacet) {
-        qh_setfree(&(ridge->vertices)); 
-        qh_memfree_(ridge, sizeof(ridgeT), freelistp);
-        numold++;
-      }else if (neighbor->visitid == samevisitid) {
-	qh_setdel (neighbor->ridges, ridge);
-	qh_setfree(&(ridge->vertices)); 
-	qh_memfree_(ridge, sizeof(ridgeT), freelistp);
-	numold++;
-      }else {
-        qh_setappend (&newfacet->ridges, ridge);
-        numold++;
-      }
-    }
-    if (same->ridges)
-      qh_settruncate (same->ridges, 0);
-    if (!same->simplicial)
-      continue;
-    FOREACHneighbor_i_(same) {       /* note: !newfact->simplicial */
-      if (neighbor->visitid != samevisitid && neighbor->simplicial) {
-        ridge= qh_newridge();
-        ridge->vertices= qh_setnew_delnthsorted (same->vertices, qh hull_dim,
-  					                  neighbor_i, 0);
-        toporient= same->toporient ^ (neighbor_i & 0x1);
-        if (toporient) {
-          ridge->top= newfacet;
-          ridge->bottom= neighbor;
-        }else {
-          ridge->top= neighbor;
-          ridge->bottom= newfacet;
-        }
-        qh_setappend(&(newfacet->ridges), ridge);
-        qh_setappend(&(neighbor->ridges), ridge);
-        numnew++;
-      }
-    }
-  }
-
-  trace2((qh ferr, "qh_mergecycle_ridges: found %d old ridges and %d new ones\n", 
-             numold, numnew));
-} /* mergecycle_ridges */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergecycle_vneighbors">-</a>
-  
-  qh_mergecycle_vneighbors( samecycle, newfacet )
-    create vertex neighbors for newfacet from vertices of facets in samecycle
-    samecycle marked with visitid == qh.visit_id - 1
-
-  returns:
-    newfacet vertices with updated neighbors
-    marks newfacet with qh.visit_id-1
-    deletes vertices that are merged away
-    sets delridge on all vertices (faster here than in mergecycle_ridges)
-
-  see:
-    qh_mergevertex_neighbors()
-
-  design:
-    for each vertex of samecycle facet
-      set vertex->delridge
-      delete samecycle facets from vertex neighbors
-      append newfacet to vertex neighbors
-      if vertex only in newfacet
-        delete it from newfacet
-        add it to qh.del_vertices for later deletion
-*/
-void qh_mergecycle_vneighbors (facetT *samecycle, facetT *newfacet) {
-  facetT *neighbor, **neighborp;
-  unsigned int mergeid;
-  vertexT *vertex, **vertexp, *apex;
-  setT *vertices;
-  
-  trace4((qh ferr, "qh_mergecycle_vneighbors: update vertex neighbors for newfacet\n"));  
-  mergeid= qh visit_id - 1;
-  newfacet->visitid= mergeid;
-  vertices= qh_basevertices (samecycle); /* temp */
-  apex= SETfirstt_(samecycle->vertices, vertexT);
-  qh_setappend (&vertices, apex);
-  FOREACHvertex_(vertices) {
-    vertex->delridge= True;
-    FOREACHneighbor_(vertex) {
-      if (neighbor->visitid == mergeid)
-        SETref_(neighbor)= NULL;
-    }
-    qh_setcompact (vertex->neighbors);
-    qh_setappend (&vertex->neighbors, newfacet);
-    if (!SETsecond_(vertex->neighbors)) {
-      zinc_(Zcyclevertex);
-      trace2((qh ferr, "qh_mergecycle_vneighbors: deleted v%d when merging cycle f%d into f%d\n",
-        vertex->id, samecycle->id, newfacet->id));
-      qh_setdelsorted (newfacet->vertices, vertex);
-      vertex->deleted= True;
-      qh_setappend (&qh del_vertices, vertex);
-    }
-  }
-  qh_settempfree (&vertices);
-  trace3((qh ferr, "qh_mergecycle_vneighbors: merged vertices from cycle f%d into f%d\n", 
-             samecycle->id, newfacet->id));
-} /* mergecycle_vneighbors */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergefacet">-</a>
-  
-  qh_mergefacet( facet1, facet2, mindist, maxdist, mergeapex )
-    merges facet1 into facet2
-    mergeapex==qh_MERGEapex if merging new facet into coplanar horizon
-    
-  returns:
-    qh.max_outside and qh.min_vertex updated
-    initializes vertex neighbors on first merge
-
-  returns:
-    facet2 contains facet1's vertices, neighbors, and ridges
-      facet2 moved to end of qh.facet_list
-      makes facet2 a newfacet
-      sets facet2->newmerge set
-      clears facet2->center (unless merging into a large facet)
-      clears facet2->tested and ridge->tested for facet1
-
-    facet1 prepended to visible_list for later deletion and partitioning
-      facet1->f.replace == facet2
-
-    adds neighboring facets to facet_mergeset if redundant or degenerate
-
-  notes: 
-    mindist/maxdist may be NULL
-    traces merge if fmax_(maxdist,-mindist) > TRACEdist
-
-  see: 
-    qh_mergecycle()
-
-  design:
-    trace merge and check for degenerate simplex
-    make ridges for both facets
-    update qh.max_outside, qh.max_vertex, qh.min_vertex
-    update facet2->maxoutside and keepcentrum
-    update facet2->nummerge
-    update tested flags for facet2
-    if facet1 is simplicial
-      merge facet1 into facet2
-    else
-      merge facet1's neighbors into facet2
-      merge facet1's ridges into facet2
-      merge facet1's vertices into facet2
-      merge facet1's vertex neighbors into facet2
-      add facet2's vertices to qh.new_vertexlist
-      unless qh_MERGEapex
-        test facet2 for degenerate or redundant neighbors
-      move facet1 to qh.visible_list for later deletion
-      move facet2 to end of qh.newfacet_list
-*/
-void qh_mergefacet(facetT *facet1, facetT *facet2, realT *mindist, realT *maxdist, boolT mergeapex) {
-  boolT traceonce= False;
-  vertexT *vertex, **vertexp;
-  int tracerestore=0, nummerge;
-
-  if (facet1->tricoplanar || facet2->tricoplanar) {
-    if (!qh TRInormals) {
-      fprintf (qh ferr, "qh_mergefacet: does not work for tricoplanar facets.  Use option 'Q11'\n");
-      qh_errexit2 (qh_ERRqhull, facet1, facet2);
-    }
-    if (facet2->tricoplanar) {
-      facet2->tricoplanar= False;
-      facet2->keepcentrum= False;
-    }
-  }
-  zzinc_(Ztotmerge);
-  if (qh REPORTfreq2 && qh POSTmerging) {
-    if (zzval_(Ztotmerge) > qh mergereport + qh REPORTfreq2)
-      qh_tracemerging();
-  }
-#ifndef qh_NOtrace
-  if (qh build_cnt >= qh RERUN) {
-    if (mindist && (-*mindist > qh TRACEdist || *maxdist > qh TRACEdist)) {
-      tracerestore= 0;
-      qh IStracing= qh TRACElevel;
-      traceonce= True;
-      fprintf (qh ferr, "qh_mergefacet: ========= trace wide merge #%d (%2.2g) for f%d into f%d, last point was p%d\n", zzval_(Ztotmerge),
-	     fmax_(-*mindist, *maxdist), facet1->id, facet2->id, qh furthest_id);
-    }else if (facet1 == qh tracefacet || facet2 == qh tracefacet) {
-      tracerestore= qh IStracing;
-      qh IStracing= 4;
-      traceonce= True;
-      fprintf (qh ferr, "qh_mergefacet: ========= trace merge #%d involving f%d, furthest is p%d\n",
-		 zzval_(Ztotmerge), qh tracefacet_id,  qh furthest_id);
-    }
-  }
-  if (qh IStracing >= 2) {
-    realT mergemin= -2;
-    realT mergemax= -2;
-    
-    if (mindist) {
-      mergemin= *mindist;
-      mergemax= *maxdist;
-    }
-    fprintf (qh ferr, "qh_mergefacet: #%d merge f%d into f%d, mindist= %2.2g, maxdist= %2.2g\n", 
-    zzval_(Ztotmerge), facet1->id, facet2->id, mergemin, mergemax);
-  }
-#endif /* !qh_NOtrace */
-  if (facet1 == facet2 || facet1->visible || facet2->visible) {
-    fprintf (qh ferr, "qhull internal error (qh_mergefacet): either f%d and f%d are the same or one is a visible facet\n",
-	     facet1->id, facet2->id);
-    qh_errexit2 (qh_ERRqhull, facet1, facet2);
-  }
-  if (qh num_facets - qh num_visible <= qh hull_dim + 1) {
-    fprintf(qh ferr, "\n\
-qhull precision error: Only %d facets remain.  Can not merge another\n\
-pair.  The input is too degenerate or the convexity constraints are\n\
-too strong.\n", qh hull_dim+1);
-    if (qh hull_dim >= 5 && !qh MERGEexact)
-      fprintf(qh ferr, "Option 'Qx' may avoid this problem.\n");
-    qh_errexit(qh_ERRinput, NULL, NULL);
-  }
-  if (!qh VERTEXneighbors)
-    qh_vertexneighbors();
-  qh_makeridges(facet1);
-  qh_makeridges(facet2);
-  if (qh IStracing >=4)
-    qh_errprint ("MERGING", facet1, facet2, NULL, NULL);
-  if (mindist) {
-    maximize_(qh max_outside, *maxdist);
-    maximize_(qh max_vertex, *maxdist);
-#if qh_MAXoutside
-    maximize_(facet2->maxoutside, *maxdist);
-#endif
-    minimize_(qh min_vertex, *mindist);
-    if (!facet2->keepcentrum 
-    && (*maxdist > qh WIDEfacet || *mindist < -qh WIDEfacet)) {
-      facet2->keepcentrum= True;
-      zinc_(Zwidefacet);
-    }
-  }
-  nummerge= facet1->nummerge + facet2->nummerge + 1;
-  if (nummerge >= qh_MAXnummerge) 
-    facet2->nummerge= qh_MAXnummerge;
-  else
-    facet2->nummerge= nummerge;
-  facet2->newmerge= True;
-  facet2->dupridge= False;
-  qh_updatetested  (facet1, facet2);
-  if (qh hull_dim > 2 && qh_setsize (facet1->vertices) == qh hull_dim)
-    qh_mergesimplex (facet1, facet2, mergeapex);
-  else {
-    qh vertex_visit++;
-    FOREACHvertex_(facet2->vertices)
-      vertex->visitid= qh vertex_visit;
-    if (qh hull_dim == 2) 
-      qh_mergefacet2d(facet1, facet2);
-    else {
-      qh_mergeneighbors(facet1, facet2);
-      qh_mergevertices(facet1->vertices, &facet2->vertices);
-    }
-    qh_mergeridges(facet1, facet2);
-    qh_mergevertex_neighbors(facet1, facet2);
-    if (!facet2->newfacet)
-      qh_newvertices (facet2->vertices);
-  }
-  if (!mergeapex)
-    qh_degen_redundant_neighbors (facet2, facet1);
-  if (facet2->coplanar || !facet2->newfacet) {
-    zinc_(Zmergeintohorizon);
-  }else if (!facet1->newfacet && facet2->newfacet) {
-    zinc_(Zmergehorizon);
-  }else {
-    zinc_(Zmergenew);
-  }
-  qh_willdelete (facet1, facet2);
-  qh_removefacet(facet2);  /* append as a newfacet to end of qh facet_list */
-  qh_appendfacet(facet2);
-  facet2->newfacet= True;
-  facet2->tested= False;
-  qh_tracemerge (facet1, facet2);
-  if (traceonce) {
-    fprintf (qh ferr, "qh_mergefacet: end of wide tracing\n");
-    qh IStracing= tracerestore;
-  }
-} /* mergefacet */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergefacet2d">-</a>
-  
-  qh_mergefacet2d( facet1, facet2 )
-    in 2d, merges neighbors and vertices of facet1 into facet2
-    
-  returns:
-    build ridges for neighbors if necessary
-    facet2 looks like a simplicial facet except for centrum, ridges
-      neighbors are opposite the corresponding vertex
-      maintains orientation of facet2
-
-  notes:
-    qh_mergefacet() retains non-simplicial structures
-      they are not needed in 2d, but later routines may use them
-    preserves qh.vertex_visit for qh_mergevertex_neighbors()
-  
-  design:
-    get vertices and neighbors
-    determine new vertices and neighbors
-    set new vertices and neighbors and adjust orientation
-    make ridges for new neighbor if needed
-*/
-void qh_mergefacet2d (facetT *facet1, facetT *facet2) {
-  vertexT *vertex1A, *vertex1B, *vertex2A, *vertex2B, *vertexA, *vertexB;
-  facetT *neighbor1A, *neighbor1B, *neighbor2A, *neighbor2B, *neighborA, *neighborB;
-
-  vertex1A= SETfirstt_(facet1->vertices, vertexT);
-  vertex1B= SETsecondt_(facet1->vertices, vertexT);
-  vertex2A= SETfirstt_(facet2->vertices, vertexT);
-  vertex2B= SETsecondt_(facet2->vertices, vertexT);
-  neighbor1A= SETfirstt_(facet1->neighbors, facetT);
-  neighbor1B= SETsecondt_(facet1->neighbors, facetT);
-  neighbor2A= SETfirstt_(facet2->neighbors, facetT);
-  neighbor2B= SETsecondt_(facet2->neighbors, facetT);
-  if (vertex1A == vertex2A) {
-    vertexA= vertex1B;
-    vertexB= vertex2B;
-    neighborA= neighbor2A;
-    neighborB= neighbor1A;
-  }else if (vertex1A == vertex2B) {
-    vertexA= vertex1B;
-    vertexB= vertex2A;
-    neighborA= neighbor2B;
-    neighborB= neighbor1A;
-  }else if (vertex1B == vertex2A) {
-    vertexA= vertex1A;
-    vertexB= vertex2B;
-    neighborA= neighbor2A;
-    neighborB= neighbor1B;
-  }else { /* 1B == 2B */
-    vertexA= vertex1A;
-    vertexB= vertex2A;
-    neighborA= neighbor2B;
-    neighborB= neighbor1B;
-  }
-  /* vertexB always from facet2, neighborB always from facet1 */
-  if (vertexA->id > vertexB->id) {
-    SETfirst_(facet2->vertices)= vertexA;
-    SETsecond_(facet2->vertices)= vertexB;
-    if (vertexB == vertex2A)
-      facet2->toporient= !facet2->toporient;
-    SETfirst_(facet2->neighbors)= neighborA;
-    SETsecond_(facet2->neighbors)= neighborB;
-  }else {
-    SETfirst_(facet2->vertices)= vertexB;
-    SETsecond_(facet2->vertices)= vertexA;
-    if (vertexB == vertex2B)
-      facet2->toporient= !facet2->toporient;
-    SETfirst_(facet2->neighbors)= neighborB;
-    SETsecond_(facet2->neighbors)= neighborA;
-  }
-  qh_makeridges (neighborB);
-  qh_setreplace(neighborB->neighbors, facet1, facet2);
-  trace4((qh ferr, "qh_mergefacet2d: merged v%d and neighbor f%d of f%d into f%d\n",
-       vertexA->id, neighborB->id, facet1->id, facet2->id));
-} /* mergefacet2d */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergeneighbors">-</a>
-  
-  qh_mergeneighbors( facet1, facet2 )
-    merges the neighbors of facet1 into facet2
-
-  see: 
-    qh_mergecycle_neighbors()
-
-  design:
-    for each neighbor of facet1
-      if neighbor is also a neighbor of facet2
-        if neighbor is simpilicial
-          make ridges for later deletion as a degenerate facet
-        update its neighbor set
-      else
-        move the neighbor relation to facet2
-    remove the neighbor relation for facet1 and facet2
-*/
-void qh_mergeneighbors(facetT *facet1, facetT *facet2) {
-  facetT *neighbor, **neighborp;
-
-  trace4((qh ferr, "qh_mergeneighbors: merge neighbors of f%d and f%d\n",
-	  facet1->id, facet2->id));
-  qh visit_id++;
-  FOREACHneighbor_(facet2) {
-    neighbor->visitid= qh visit_id;
-  }
-  FOREACHneighbor_(facet1) {
-    if (neighbor->visitid == qh visit_id) {
-      if (neighbor->simplicial)    /* is degen, needs ridges */
-	qh_makeridges (neighbor);
-      if (SETfirstt_(neighbor->neighbors, facetT) != facet1) /*keep newfacet->horizon*/
-	qh_setdel (neighbor->neighbors, facet1);
-      else {
-        qh_setdel(neighbor->neighbors, facet2);
-        qh_setreplace(neighbor->neighbors, facet1, facet2);
-      }
-    }else if (neighbor != facet2) {
-      qh_setappend(&(facet2->neighbors), neighbor);
-      qh_setreplace(neighbor->neighbors, facet1, facet2);
-    }
-  }
-  qh_setdel(facet1->neighbors, facet2);  /* here for makeridges */
-  qh_setdel(facet2->neighbors, facet1);
-} /* mergeneighbors */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergeridges">-</a>
-  
-  qh_mergeridges( facet1, facet2 )
-    merges the ridge set of facet1 into facet2
-
-  returns:
-    may delete all ridges for a vertex
-    sets vertex->delridge on deleted ridges
-
-  see:
-    qh_mergecycle_ridges()
-
-  design:
-    delete ridges between facet1 and facet2
-      mark (delridge) vertices on these ridges for later testing   
-    for each remaining ridge
-      rename facet1 to facet2  
-*/
-void qh_mergeridges(facetT *facet1, facetT *facet2) {
-  ridgeT *ridge, **ridgep;
-  vertexT *vertex, **vertexp;
-
-  trace4((qh ferr, "qh_mergeridges: merge ridges of f%d and f%d\n",
-	  facet1->id, facet2->id));
-  FOREACHridge_(facet2->ridges) {
-    if ((ridge->top == facet1) || (ridge->bottom == facet1)) {
-      FOREACHvertex_(ridge->vertices)
-        vertex->delridge= True;
-      qh_delridge(ridge);  /* expensive in high-d, could rebuild */
-      ridgep--; /*repeat*/
-    }
-  }
-  FOREACHridge_(facet1->ridges) {
-    if (ridge->top == facet1)
-      ridge->top= facet2;
-    else
-      ridge->bottom= facet2;
-    qh_setappend(&(facet2->ridges), ridge);
-  }
-} /* mergeridges */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergesimplex">-</a>
-  
-  qh_mergesimplex( facet1, facet2, mergeapex )
-    merge simplicial facet1 into facet2
-    mergeapex==qh_MERGEapex if merging samecycle into horizon facet
-      vertex id is latest (most recently created)
-    facet1 may be contained in facet2
-    ridges exist for both facets
-
-  returns:
-    facet2 with updated vertices, ridges, neighbors
-    updated neighbors for facet1's vertices
-    facet1 not deleted
-    sets vertex->delridge on deleted ridges
-  
-  notes:
-    special case code since this is the most common merge
-    called from qh_mergefacet()
-
-  design:
-    if qh_MERGEapex
-      add vertices of facet2 to qh.new_vertexlist if necessary
-      add apex to facet2
-    else
-      for each ridge between facet1 and facet2
-        set vertex->delridge
-      determine the apex for facet1 (i.e., vertex to be merged)
-      unless apex already in facet2
-        insert apex into vertices for facet2
-      add vertices of facet2 to qh.new_vertexlist if necessary
-      add apex to qh.new_vertexlist if necessary
-      for each vertex of facet1
-        if apex
-          rename facet1 to facet2 in its vertex neighbors
-        else
-          delete facet1 from vertex neighors
-          if only in facet2
-            add vertex to qh.del_vertices for later deletion
-      for each ridge of facet1
-        delete ridges between facet1 and facet2
-        append other ridges to facet2 after renaming facet to facet2
-*/
-void qh_mergesimplex(facetT *facet1, facetT *facet2, boolT mergeapex) {
-  vertexT *vertex, **vertexp, *apex;
-  ridgeT *ridge, **ridgep;
-  boolT issubset= False;
-  int vertex_i= -1, vertex_n;
-  facetT *neighbor, **neighborp, *otherfacet;
-
-  if (mergeapex) {
-    if (!facet2->newfacet)
-      qh_newvertices (facet2->vertices);  /* apex is new */
-    apex= SETfirstt_(facet1->vertices, vertexT);
-    if (SETfirstt_(facet2->vertices, vertexT) != apex) 
-      qh_setaddnth (&facet2->vertices, 0, apex);  /* apex has last id */
-    else
-      issubset= True;
-  }else {
-    zinc_(Zmergesimplex);
-    FOREACHvertex_(facet1->vertices)
-      vertex->seen= False;
-    FOREACHridge_(facet1->ridges) {
-      if (otherfacet_(ridge, facet1) == facet2) {
-	FOREACHvertex_(ridge->vertices) {
-	  vertex->seen= True;
-	  vertex->delridge= True;
-	}
-	break;
-      }
-    }
-    FOREACHvertex_(facet1->vertices) {
-      if (!vertex->seen)
-	break;  /* must occur */
-    }
-    apex= vertex;
-    trace4((qh ferr, "qh_mergesimplex: merge apex v%d of f%d into facet f%d\n",
-	  apex->id, facet1->id, facet2->id));
-    FOREACHvertex_i_(facet2->vertices) {
-      if (vertex->id < apex->id) {
-	break;
-      }else if (vertex->id == apex->id) {
-	issubset= True;
-	break;
-      }
-    }
-    if (!issubset)
-      qh_setaddnth (&facet2->vertices, vertex_i, apex);
-    if (!facet2->newfacet)
-      qh_newvertices (facet2->vertices);
-    else if (!apex->newlist) {
-      qh_removevertex (apex);
-      qh_appendvertex (apex);
-    }
-  }
-  trace4((qh ferr, "qh_mergesimplex: update vertex neighbors of f%d\n",
-	  facet1->id));
-  FOREACHvertex_(facet1->vertices) {
-    if (vertex == apex && !issubset)
-      qh_setreplace (vertex->neighbors, facet1, facet2);
-    else {
-      qh_setdel (vertex->neighbors, facet1);
-      if (!SETsecond_(vertex->neighbors))
-	qh_mergevertex_del (vertex, facet1, facet2);
-    }
-  }
-  trace4((qh ferr, "qh_mergesimplex: merge ridges and neighbors of f%d into f%d\n",
-	  facet1->id, facet2->id));
-  qh visit_id++;
-  FOREACHneighbor_(facet2)
-    neighbor->visitid= qh visit_id;
-  FOREACHridge_(facet1->ridges) {
-    otherfacet= otherfacet_(ridge, facet1);
-    if (otherfacet == facet2) {
-      qh_setdel (facet2->ridges, ridge);
-      qh_setfree(&(ridge->vertices)); 
-      qh_memfree (ridge, sizeof(ridgeT));
-      qh_setdel (facet2->neighbors, facet1);
-    }else {
-      qh_setappend (&facet2->ridges, ridge);
-      if (otherfacet->visitid != qh visit_id) {
-	qh_setappend (&facet2->neighbors, otherfacet);
-	qh_setreplace (otherfacet->neighbors, facet1, facet2);
-	otherfacet->visitid= qh visit_id;
-      }else {
-	if (otherfacet->simplicial)    /* is degen, needs ridges */
-	  qh_makeridges (otherfacet);
-	if (SETfirstt_(otherfacet->neighbors, facetT) != facet1)
-	  qh_setdel (otherfacet->neighbors, facet1);
-	else {   /*keep newfacet->neighbors->horizon*/
-	  qh_setdel(otherfacet->neighbors, facet2);
-	  qh_setreplace(otherfacet->neighbors, facet1, facet2);
-	}
-      }
-      if (ridge->top == facet1) /* wait until after qh_makeridges */
-	ridge->top= facet2;
-      else 
-	ridge->bottom= facet2;
-    }
-  }
-  SETfirst_(facet1->ridges)= NULL; /* it will be deleted */
-  trace3((qh ferr, "qh_mergesimplex: merged simplex f%d apex v%d into facet f%d\n",
-	  facet1->id, getid_(apex), facet2->id));
-} /* mergesimplex */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergevertex_del">-</a>
-  
-  qh_mergevertex_del( vertex, facet1, facet2 )
-    delete a vertex because of merging facet1 into facet2
-
-  returns:
-    deletes vertex from facet2
-    adds vertex to qh.del_vertices for later deletion 
-*/
-void qh_mergevertex_del (vertexT *vertex, facetT *facet1, facetT *facet2) {
-
-  zinc_(Zmergevertex);
-  trace2((qh ferr, "qh_mergevertex_del: deleted v%d when merging f%d into f%d\n",
-          vertex->id, facet1->id, facet2->id));
-  qh_setdelsorted (facet2->vertices, vertex);
-  vertex->deleted= True;
-  qh_setappend (&qh del_vertices, vertex);
-} /* mergevertex_del */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergevertex_neighbors">-</a>
-  
-  qh_mergevertex_neighbors( facet1, facet2 )
-    merge the vertex neighbors of facet1 to facet2
-
-  returns:
-    if vertex is current qh.vertex_visit
-      deletes facet1 from vertex->neighbors
-    else
-      renames facet1 to facet2 in vertex->neighbors 
-    deletes vertices if only one neighbor
-  
-  notes:
-    assumes vertex neighbor sets are good
-*/
-void qh_mergevertex_neighbors(facetT *facet1, facetT *facet2) {
-  vertexT *vertex, **vertexp;
-
-  trace4((qh ferr, "qh_mergevertex_neighbors: merge vertex neighbors of f%d and f%d\n",
-	  facet1->id, facet2->id));
-  if (qh tracevertex) {
-    fprintf (qh ferr, "qh_mergevertex_neighbors: of f%d and f%d at furthest p%d f0= %p\n",
-	     facet1->id, facet2->id, qh furthest_id, qh tracevertex->neighbors->e[0].p);
-    qh_errprint ("TRACE", NULL, NULL, NULL, qh tracevertex);
-  }
-  FOREACHvertex_(facet1->vertices) {
-    if (vertex->visitid != qh vertex_visit) 
-      qh_setreplace(vertex->neighbors, facet1, facet2);
-    else {
-      qh_setdel(vertex->neighbors, facet1);
-      if (!SETsecond_(vertex->neighbors))
-	qh_mergevertex_del (vertex, facet1, facet2);
-    }
-  }
-  if (qh tracevertex) 
-    qh_errprint ("TRACE", NULL, NULL, NULL, qh tracevertex);
-} /* mergevertex_neighbors */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="mergevertices">-</a>
-  
-  qh_mergevertices( vertices1, vertices2 )
-    merges the vertex set of facet1 into facet2
-
-  returns:
-    replaces vertices2 with merged set
-    preserves vertex_visit for qh_mergevertex_neighbors
-    updates qh.newvertex_list
-
-  design:
-    create a merged set of both vertices (in inverse id order)
-*/
-void qh_mergevertices(setT *vertices1, setT **vertices2) {
-  int newsize= qh_setsize(vertices1)+qh_setsize(*vertices2) - qh hull_dim + 1;
-  setT *mergedvertices;
-  vertexT *vertex, **vertexp, **vertex2= SETaddr_(*vertices2, vertexT);
-
-  mergedvertices= qh_settemp (newsize);
-  FOREACHvertex_(vertices1) {
-    if (!*vertex2 || vertex->id > (*vertex2)->id)
-      qh_setappend (&mergedvertices, vertex);
-    else {
-      while (*vertex2 && (*vertex2)->id > vertex->id)
-	qh_setappend (&mergedvertices, *vertex2++);
-      if (!*vertex2 || (*vertex2)->id < vertex->id)
-	qh_setappend (&mergedvertices, vertex);
-      else
-	qh_setappend (&mergedvertices, *vertex2++);
-    }
-  }
-  while (*vertex2)
-    qh_setappend (&mergedvertices, *vertex2++);
-  if (newsize < qh_setsize (mergedvertices)) {
-    fprintf (qh ferr, "qhull internal error (qh_mergevertices): facets did not share a ridge\n");
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  qh_setfree(vertices2);
-  *vertices2= mergedvertices;
-  qh_settemppop ();
-} /* mergevertices */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="neighbor_intersections">-</a>
-  
-  qh_neighbor_intersections( vertex )
-    return intersection of all vertices in vertex->neighbors except for vertex
-
-  returns:
-    returns temporary set of vertices
-    does not include vertex
-    NULL if a neighbor is simplicial
-    NULL if empty set
-    
-  notes:
-    used for renaming vertices
-
-  design:
-    initialize the intersection set with vertices of the first two neighbors
-    delete vertex from the intersection
-    for each remaining neighbor
-      intersect its vertex set with the intersection set
-      return NULL if empty
-    return the intersection set  
-*/
-setT *qh_neighbor_intersections (vertexT *vertex) {
-  facetT *neighbor, **neighborp, *neighborA, *neighborB;
-  setT *intersect;
-  int neighbor_i, neighbor_n;
-
-  FOREACHneighbor_(vertex) {
-    if (neighbor->simplicial)
-      return NULL;
-  }
-  neighborA= SETfirstt_(vertex->neighbors, facetT);
-  neighborB= SETsecondt_(vertex->neighbors, facetT);
-  zinc_(Zintersectnum);
-  if (!neighborA)
-    return NULL;
-  if (!neighborB)
-    intersect= qh_setcopy (neighborA->vertices, 0);
-  else
-    intersect= qh_vertexintersect_new (neighborA->vertices, neighborB->vertices);
-  qh_settemppush (intersect);
-  qh_setdelsorted (intersect, vertex);
-  FOREACHneighbor_i_(vertex) {
-    if (neighbor_i >= 2) {
-      zinc_(Zintersectnum);
-      qh_vertexintersect (&intersect, neighbor->vertices);
-      if (!SETfirst_(intersect)) {
-        zinc_(Zintersectfail);
-        qh_settempfree (&intersect);
-        return NULL;
-      }
-    }
-  }
-  trace3((qh ferr, "qh_neighbor_intersections: %d vertices in neighbor intersection of v%d\n", 
-          qh_setsize (intersect), vertex->id));
-  return intersect;
-} /* neighbor_intersections */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="newvertices">-</a>
-  
-  qh_newvertices( vertices )
-    add vertices to end of qh.vertex_list (marks as new vertices)
-
-  returns:
-    vertices on qh.newvertex_list
-    vertex->newlist set
-*/
-void qh_newvertices (setT *vertices) {
-  vertexT *vertex, **vertexp;
-
-  FOREACHvertex_(vertices) {
-    if (!vertex->newlist) {
-      qh_removevertex (vertex);
-      qh_appendvertex (vertex);
-    }
-  }
-} /* newvertices */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="reducevertices">-</a>
-  
-  qh_reducevertices()
-    reduce extra vertices, shared vertices, and redundant vertices
-    facet->newmerge is set if merged since last call
-    if !qh.MERGEvertices, only removes extra vertices
-
-  returns:
-    True if also merged degen_redundant facets
-    vertices are renamed if possible
-    clears facet->newmerge and vertex->delridge
-
-  notes:
-    ignored if 2-d
-
-  design:
-    merge any degenerate or redundant facets
-    for each newly merged facet
-      remove extra vertices
-    if qh.MERGEvertices
-      for each newly merged facet
-        for each vertex
-          if vertex was on a deleted ridge
-            rename vertex if it is shared
-      remove delridge flag from new vertices
-*/
-boolT qh_reducevertices (void) {
-  int numshare=0, numrename= 0;
-  boolT degenredun= False;
-  facetT *newfacet;
-  vertexT *vertex, **vertexp;
-
-  if (qh hull_dim == 2) 
-    return False;
-  if (qh_merge_degenredundant())
-    degenredun= True;
- LABELrestart:
-  FORALLnew_facets {
-    if (newfacet->newmerge) { 
-      if (!qh MERGEvertices)
-        newfacet->newmerge= False;
-      qh_remove_extravertices (newfacet);
-    }
-  }
-  if (!qh MERGEvertices)
-    return False;
-  FORALLnew_facets {
-    if (newfacet->newmerge) {
-      newfacet->newmerge= False;
-      FOREACHvertex_(newfacet->vertices) {
-	if (vertex->delridge) {
-	  if (qh_rename_sharedvertex (vertex, newfacet)) {
-	    numshare++;
-	    vertexp--; /* repeat since deleted vertex */
-	  }
-        }
-      }
-    }
-  }
-  FORALLvertex_(qh newvertex_list) {
-    if (vertex->delridge && !vertex->deleted) {
-      vertex->delridge= False;
-      if (qh hull_dim >= 4 && qh_redundant_vertex (vertex)) {
-	numrename++;
-	if (qh_merge_degenredundant()) {
-	  degenredun= True;
-	  goto LABELrestart;
-	}
-      }
-    }
-  }
-  trace1((qh ferr, "qh_reducevertices: renamed %d shared vertices and %d redundant vertices. Degen? %d\n",
-	  numshare, numrename, degenredun));
-  return degenredun;
-} /* reducevertices */
-      
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="redundant_vertex">-</a>
-  
-  qh_redundant_vertex( vertex )
-    detect and rename a redundant vertex
-    vertices have full vertex->neighbors 
-
-  returns:
-    returns true if find a redundant vertex
-      deletes vertex (vertex->deleted)
-  
-  notes:
-    only needed if vertex->delridge and hull_dim >= 4
-    may add degenerate facets to qh.facet_mergeset
-    doesn't change vertex->neighbors or create redundant facets
-
-  design:
-    intersect vertices of all facet neighbors of vertex
-    determine ridges for these vertices
-    if find a new vertex for vertex amoung these ridges and vertices
-      rename vertex to the new vertex
-*/
-vertexT *qh_redundant_vertex (vertexT *vertex) {
-  vertexT *newvertex= NULL;
-  setT *vertices, *ridges;
-
-  trace3((qh ferr, "qh_redundant_vertex: check if v%d can be renamed\n", vertex->id));  
-  if ((vertices= qh_neighbor_intersections (vertex))) {
-    ridges= qh_vertexridges (vertex);
-    if ((newvertex= qh_find_newvertex (vertex, vertices, ridges)))
-      qh_renamevertex (vertex, newvertex, ridges, NULL, NULL);
-    qh_settempfree (&ridges);
-    qh_settempfree (&vertices);
-  }
-  return newvertex;
-} /* redundant_vertex */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="remove_extravertices">-</a>
-  
-  qh_remove_extravertices( facet )
-    remove extra vertices from non-simplicial facets
-
-  returns:
-    returns True if it finds them
-
-  design:
-    for each vertex in facet
-      if vertex not in a ridge (i.e., no longer used)
-        delete vertex from facet
-        delete facet from vertice's neighbors
-        unless vertex in another facet
-          add vertex to qh.del_vertices for later deletion
-*/
-boolT qh_remove_extravertices (facetT *facet) {
-  ridgeT *ridge, **ridgep;
-  vertexT *vertex, **vertexp;
-  boolT foundrem= False;
-
-  trace4((qh ferr, "qh_remove_extravertices: test f%d for extra vertices\n",
-	  facet->id));
-  FOREACHvertex_(facet->vertices)
-    vertex->seen= False;
-  FOREACHridge_(facet->ridges) { 
-    FOREACHvertex_(ridge->vertices)
-      vertex->seen= True;
-  }
-  FOREACHvertex_(facet->vertices) {
-    if (!vertex->seen) {
-      foundrem= True;
-      zinc_(Zremvertex);
-      qh_setdelsorted (facet->vertices, vertex);
-      qh_setdel (vertex->neighbors, facet);
-      if (!qh_setsize (vertex->neighbors)) {
-	vertex->deleted= True;
-	qh_setappend (&qh del_vertices, vertex);
-	zinc_(Zremvertexdel);
-	trace2((qh ferr, "qh_remove_extravertices: v%d deleted because it's lost all ridges\n", vertex->id));
-      }else
-	trace3((qh ferr, "qh_remove_extravertices: v%d removed from f%d because it's lost all ridges\n", vertex->id, facet->id));
-      vertexp--; /*repeat*/
-    }
-  }
-  return foundrem;
-} /* remove_extravertices */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="rename_sharedvertex">-</a>
-  
-  qh_rename_sharedvertex( vertex, facet )
-    detect and rename if shared vertex in facet
-    vertices have full ->neighbors
-
-  returns:
-    newvertex or NULL
-    the vertex may still exist in other facets (i.e., a neighbor was pinched)
-    does not change facet->neighbors
-    updates vertex->neighbors
-  
-  notes:
-    a shared vertex for a facet is only in ridges to one neighbor
-    this may undo a pinched facet
- 
-    it does not catch pinches involving multiple facets.  These appear
-      to be difficult to detect, since an exhaustive search is too expensive.
-
-  design:
-    if vertex only has two neighbors
-      determine the ridges that contain the vertex
-      determine the vertices shared by both neighbors
-      if can find a new vertex in this set
-        rename the vertex to the new vertex
-*/
-vertexT *qh_rename_sharedvertex (vertexT *vertex, facetT *facet) {
-  facetT *neighbor, **neighborp, *neighborA= NULL;
-  setT *vertices, *ridges;
-  vertexT *newvertex;
-
-  if (qh_setsize (vertex->neighbors) == 2) {
-    neighborA= SETfirstt_(vertex->neighbors, facetT);
-    if (neighborA == facet)
-      neighborA= SETsecondt_(vertex->neighbors, facetT);
-  }else if (qh hull_dim == 3)
-    return NULL;
-  else {
-    qh visit_id++;
-    FOREACHneighbor_(facet)
-      neighbor->visitid= qh visit_id;
-    FOREACHneighbor_(vertex) {
-      if (neighbor->visitid == qh visit_id) {
-        if (neighborA)
-          return NULL;
-        neighborA= neighbor;
-      }
-    }
-    if (!neighborA) {
-      fprintf (qh ferr, "qhull internal error (qh_rename_sharedvertex): v%d's neighbors not in f%d\n",
-        vertex->id, facet->id);
-      qh_errprint ("ERRONEOUS", facet, NULL, NULL, vertex);
-      qh_errexit (qh_ERRqhull, NULL, NULL);
-    }
-  }
-  /* the vertex is shared by facet and neighborA */
-  ridges= qh_settemp (qh TEMPsize);
-  neighborA->visitid= ++qh visit_id;
-  qh_vertexridges_facet (vertex, facet, &ridges);
-  trace2((qh ferr, "qh_rename_sharedvertex: p%d (v%d) is shared by f%d (%d ridges) and f%d\n",
-    qh_pointid(vertex->point), vertex->id, facet->id, qh_setsize (ridges), neighborA->id));
-  zinc_(Zintersectnum);
-  vertices= qh_vertexintersect_new (facet->vertices, neighborA->vertices);
-  qh_setdel (vertices, vertex);
-  qh_settemppush (vertices);
-  if ((newvertex= qh_find_newvertex (vertex, vertices, ridges))) 
-    qh_renamevertex (vertex, newvertex, ridges, facet, neighborA);
-  qh_settempfree (&vertices);
-  qh_settempfree (&ridges);
-  return newvertex;
-} /* rename_sharedvertex */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="renameridgevertex">-</a>
-  
-  qh_renameridgevertex( ridge, oldvertex, newvertex )
-    renames oldvertex as newvertex in ridge
-
-  returns:
-  
-  design:
-    delete oldvertex from ridge
-    if newvertex already in ridge
-      copy ridge->noconvex to another ridge if possible
-      delete the ridge
-    else
-      insert newvertex into the ridge
-      adjust the ridge's orientation
-*/
-void qh_renameridgevertex(ridgeT *ridge, vertexT *oldvertex, vertexT *newvertex) {
-  int nth= 0, oldnth;
-  facetT *temp;
-  vertexT *vertex, **vertexp;
-
-  oldnth= qh_setindex (ridge->vertices, oldvertex);
-  qh_setdelnthsorted (ridge->vertices, oldnth);
-  FOREACHvertex_(ridge->vertices) {
-    if (vertex == newvertex) {
-      zinc_(Zdelridge);
-      if (ridge->nonconvex) /* only one ridge has nonconvex set */
-	qh_copynonconvex (ridge);
-      qh_delridge (ridge);
-      trace2((qh ferr, "qh_renameridgevertex: ridge r%d deleted.  It contained both v%d and v%d\n",
-        ridge->id, oldvertex->id, newvertex->id));
-      return;
-    }
-    if (vertex->id < newvertex->id)
-      break;
-    nth++;
-  }
-  qh_setaddnth(&ridge->vertices, nth, newvertex);
-  if (abs(oldnth - nth)%2) {
-    trace3((qh ferr, "qh_renameridgevertex: swapped the top and bottom of ridge r%d\n", 
-	    ridge->id));
-    temp= ridge->top;
-    ridge->top= ridge->bottom;
-    ridge->bottom= temp;
-  }
-} /* renameridgevertex */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="renamevertex">-</a>
-  
-  qh_renamevertex( oldvertex, newvertex, ridges, oldfacet, neighborA )
-    renames oldvertex as newvertex in ridges 
-    gives oldfacet/neighborA if oldvertex is shared between two facets
-
-  returns:
-    oldvertex may still exist afterwards
-    
-
-  notes:
-    can not change neighbors of newvertex (since it's a subset)
-
-  design:
-    for each ridge in ridges
-      rename oldvertex to newvertex and delete degenerate ridges
-    if oldfacet not defined
-      for each neighbor of oldvertex
-        delete oldvertex from neighbor's vertices
-        remove extra vertices from neighbor
-      add oldvertex to qh.del_vertices
-    else if oldvertex only between oldfacet and neighborA
-      delete oldvertex from oldfacet and neighborA
-      add oldvertex to qh.del_vertices
-    else oldvertex is in oldfacet and neighborA and other facets (i.e., pinched)
-      delete oldvertex from oldfacet
-      delete oldfacet from oldvertice's neighbors
-      remove extra vertices (e.g., oldvertex) from neighborA
-*/
-void qh_renamevertex(vertexT *oldvertex, vertexT *newvertex, setT *ridges, facetT *oldfacet, facetT *neighborA) {
-  facetT *neighbor, **neighborp;
-  ridgeT *ridge, **ridgep;
-  boolT istrace= False;
-
-  if (qh IStracing >= 2 || oldvertex->id == qh tracevertex_id ||
-	newvertex->id == qh tracevertex_id)
-    istrace= True;
-  FOREACHridge_(ridges) 
-    qh_renameridgevertex (ridge, oldvertex, newvertex);
-  if (!oldfacet) {
-    zinc_(Zrenameall);
-    if (istrace)
-      fprintf (qh ferr, "qh_renamevertex: renamed v%d to v%d in several facets\n",
-               oldvertex->id, newvertex->id);
-    FOREACHneighbor_(oldvertex) {
-      qh_maydropneighbor (neighbor);
-      qh_setdelsorted (neighbor->vertices, oldvertex);
-      if (qh_remove_extravertices (neighbor))
-        neighborp--; /* neighbor may be deleted */
-    }
-    if (!oldvertex->deleted) {
-      oldvertex->deleted= True;
-      qh_setappend (&qh del_vertices, oldvertex);
-    }
-  }else if (qh_setsize (oldvertex->neighbors) == 2) {
-    zinc_(Zrenameshare);
-    if (istrace)
-      fprintf (qh ferr, "qh_renamevertex: renamed v%d to v%d in oldfacet f%d\n", 
-               oldvertex->id, newvertex->id, oldfacet->id);
-    FOREACHneighbor_(oldvertex)
-      qh_setdelsorted (neighbor->vertices, oldvertex);
-    oldvertex->deleted= True;
-    qh_setappend (&qh del_vertices, oldvertex);
-  }else {
-    zinc_(Zrenamepinch);
-    if (istrace || qh IStracing)
-      fprintf (qh ferr, "qh_renamevertex: renamed pinched v%d to v%d between f%d and f%d\n", 
-               oldvertex->id, newvertex->id, oldfacet->id, neighborA->id);
-    qh_setdelsorted (oldfacet->vertices, oldvertex);
-    qh_setdel (oldvertex->neighbors, oldfacet);
-    qh_remove_extravertices (neighborA);
-  }
-} /* renamevertex */
-
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="test_appendmerge">-</a>
-  
-  qh_test_appendmerge( facet, neighbor )
-    tests facet/neighbor for convexity
-    appends to mergeset if non-convex
-    if pre-merging, 
-      nop if qh.SKIPconvex, or qh.MERGEexact and coplanar
-
-  returns:
-    true if appends facet/neighbor to mergeset
-    sets facet->center as needed
-    does not change facet->seen
-
-  design:
-    if qh.cos_max is defined
-      if the angle between facet normals is too shallow
-        append an angle-coplanar merge to qh.mergeset
-        return True
-    make facet's centrum if needed
-    if facet's centrum is above the neighbor
-      set isconcave
-    else
-      if facet's centrum is not below the neighbor
-        set iscoplanar
-      make neighbor's centrum if needed
-      if neighbor's centrum is above the facet
-        set isconcave
-      else if neighbor's centrum is not below the facet
-        set iscoplanar
-   if isconcave or iscoplanar
-     get angle if needed
-     append concave or coplanar merge to qh.mergeset
-*/
-boolT qh_test_appendmerge (facetT *facet, facetT *neighbor) {
-  realT dist, dist2= -REALmax, angle= -REALmax;
-  boolT isconcave= False, iscoplanar= False, okangle= False;
-
-  if (qh SKIPconvex && !qh POSTmerging)
-    return False;
-  if ((!qh MERGEexact || qh POSTmerging) && qh cos_max < REALmax/2) {
-    angle= qh_getangle(facet->normal, neighbor->normal);
-    zinc_(Zangletests);
-    if (angle > qh cos_max) {
-      zinc_(Zcoplanarangle);
-      qh_appendmergeset(facet, neighbor, MRGanglecoplanar, &angle);
-      trace2((qh ferr, "qh_test_appendmerge: coplanar angle %4.4g between f%d and f%d\n",
-         angle, facet->id, neighbor->id));
-      return True;
-    }else
-      okangle= True;
-  }
-  if (!facet->center)
-    facet->center= qh_getcentrum (facet);
-  zzinc_(Zcentrumtests);
-  qh_distplane(facet->center, neighbor, &dist);
-  if (dist > qh centrum_radius)
-    isconcave= True;
-  else {
-    if (dist > -qh centrum_radius)
-      iscoplanar= True;
-    if (!neighbor->center)
-      neighbor->center= qh_getcentrum (neighbor);
-    zzinc_(Zcentrumtests);
-    qh_distplane(neighbor->center, facet, &dist2);
-    if (dist2 > qh centrum_radius)
-      isconcave= True;
-    else if (!iscoplanar && dist2 > -qh centrum_radius)
-      iscoplanar= True;
-  }
-  if (!isconcave && (!iscoplanar || (qh MERGEexact && !qh POSTmerging)))
-    return False;
-  if (!okangle && qh ANGLEmerge) {
-    angle= qh_getangle(facet->normal, neighbor->normal);
-    zinc_(Zangletests);
-  }
-  if (isconcave) {
-    zinc_(Zconcaveridge);
-    if (qh ANGLEmerge)
-      angle += qh_ANGLEconcave + 0.5;
-    qh_appendmergeset(facet, neighbor, MRGconcave, &angle);
-    trace0((qh ferr, "qh_test_appendmerge: concave f%d to f%d dist %4.4g and reverse dist %4.4g angle %4.4g during p%d\n",
-	   facet->id, neighbor->id, dist, dist2, angle, qh furthest_id));
-  }else /* iscoplanar */ {
-    zinc_(Zcoplanarcentrum);
-    qh_appendmergeset(facet, neighbor, MRGcoplanar, &angle);
-    trace2((qh ferr, "qh_test_appendmerge: coplanar f%d to f%d dist %4.4g, reverse dist %4.4g angle %4.4g\n",
-	      facet->id, neighbor->id, dist, dist2, angle));
-  }
-  return True;
-} /* test_appendmerge */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="test_vneighbors">-</a>
-  
-  qh_test_vneighbors()
-    test vertex neighbors for convexity
-    tests all facets on qh.newfacet_list
-
-  returns:
-    true if non-convex vneighbors appended to qh.facet_mergeset
-    initializes vertex neighbors if needed
-
-  notes:
-    assumes all facet neighbors have been tested
-    this can be expensive
-    this does not guarantee that a centrum is below all facets
-      but it is unlikely
-    uses qh.visit_id
-
-  design:
-    build vertex neighbors if necessary
-    for all new facets
-      for all vertices
-        for each unvisited facet neighbor of the vertex
-          test new facet and neighbor for convexity
-*/
-boolT qh_test_vneighbors (void /* qh newfacet_list */) {
-  facetT *newfacet, *neighbor, **neighborp;
-  vertexT *vertex, **vertexp;
-  int nummerges= 0;
-
-  trace1((qh ferr, "qh_test_vneighbors: testing vertex neighbors for convexity\n"));
-  if (!qh VERTEXneighbors)
-    qh_vertexneighbors();
-  FORALLnew_facets 
-    newfacet->seen= False;
-  FORALLnew_facets {
-    newfacet->seen= True;
-    newfacet->visitid= qh visit_id++;
-    FOREACHneighbor_(newfacet)
-      newfacet->visitid= qh visit_id;
-    FOREACHvertex_(newfacet->vertices) {
-      FOREACHneighbor_(vertex) {
-      	if (neighbor->seen || neighbor->visitid == qh visit_id)
-      	  continue;
-      	if (qh_test_appendmerge (newfacet, neighbor))
-          nummerges++;
-      }
-    }
-  }
-  zadd_(Ztestvneighbor, nummerges);
-  trace1((qh ferr, "qh_test_vneighbors: found %d non-convex, vertex neighbors\n",
-           nummerges));
-  return (nummerges > 0);    
-} /* test_vneighbors */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="tracemerge">-</a>
-  
-  qh_tracemerge( facet1, facet2 )
-    print trace message after merge
-*/
-void qh_tracemerge (facetT *facet1, facetT *facet2) {
-  boolT waserror= False;
-
-#ifndef qh_NOtrace
-  if (qh IStracing >= 4) 
-    qh_errprint ("MERGED", facet2, NULL, NULL, NULL);
-  if (facet2 == qh tracefacet || (qh tracevertex && qh tracevertex->newlist)) {
-    fprintf (qh ferr, "qh_tracemerge: trace facet and vertex after merge of f%d and f%d, furthest p%d\n", facet1->id, facet2->id, qh furthest_id);
-    if (facet2 != qh tracefacet)
-      qh_errprint ("TRACE", qh tracefacet, 
-        (qh tracevertex && qh tracevertex->neighbors) ? 
-           SETfirstt_(qh tracevertex->neighbors, facetT) : NULL,
-        NULL, qh tracevertex);      
-  }
-  if (qh tracevertex) {
-    if (qh tracevertex->deleted)
-      fprintf (qh ferr, "qh_tracemerge: trace vertex deleted at furthest p%d\n",
-	    qh furthest_id);
-    else
-      qh_checkvertex (qh tracevertex);
-  }
-  if (qh tracefacet) {
-    qh_checkfacet (qh tracefacet, True, &waserror);
-    if (waserror)
-      qh_errexit (qh_ERRqhull, qh tracefacet, NULL);
-  }
-#endif /* !qh_NOtrace */
-  if (qh CHECKfrequently || qh IStracing >= 4) { /* can't check polygon here */
-    qh_checkfacet (facet2, True, &waserror);
-    if (waserror)
-      qh_errexit(qh_ERRqhull, NULL, NULL);
-  }
-} /* tracemerge */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="tracemerging">-</a>
-  
-  qh_tracemerging()
-    print trace message during POSTmerging
-
-  returns:
-    updates qh.mergereport
-  
-  notes:
-    called from qh_mergecycle() and qh_mergefacet()
-  
-  see:
-    qh_buildtracing()
-*/
-void qh_tracemerging (void) {
-  realT cpu;
-  int total;
-  time_t timedata;
-  struct tm *tp;
-
-  qh mergereport= zzval_(Ztotmerge);
-  time (&timedata);
-  tp= localtime (&timedata);
-  cpu= qh_CPUclock;
-  cpu /= qh_SECticks;
-  total= zzval_(Ztotmerge) - zzval_(Zcyclehorizon) + zzval_(Zcyclefacettot);
-  fprintf (qh ferr, "\n\
-At %d:%d:%d & %2.5g CPU secs, qhull has merged %d facets.  The hull\n\
-  contains %d facets and %d vertices.\n",
-      tp->tm_hour, tp->tm_min, tp->tm_sec, cpu,
-      total, qh num_facets - qh num_visible,
-      qh num_vertices-qh_setsize (qh del_vertices));
-} /* tracemerging */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="updatetested">-</a>
-  
-  qh_updatetested( facet1, facet2 )
-    clear facet2->tested and facet1->ridge->tested for merge
-
-  returns:
-    deletes facet2->center unless it's already large
-      if so, clears facet2->ridge->tested
-
-  design:
-    clear facet2->tested
-    clear ridge->tested for facet1's ridges
-    if facet2 has a centrum
-      if facet2 is large
-        set facet2->keepcentrum 
-      else if facet2 has 3 vertices due to many merges, or not large and post merging
-        clear facet2->keepcentrum
-      unless facet2->keepcentrum
-        clear facet2->center to recompute centrum later
-        clear ridge->tested for facet2's ridges
-*/
-void qh_updatetested (facetT *facet1, facetT *facet2) {
-  ridgeT *ridge, **ridgep;
-  int size;
-  
-  facet2->tested= False;
-  FOREACHridge_(facet1->ridges)
-    ridge->tested= False;
-  if (!facet2->center)
-    return;
-  size= qh_setsize (facet2->vertices);
-  if (!facet2->keepcentrum) {
-    if (size > qh hull_dim + qh_MAXnewcentrum) {
-      facet2->keepcentrum= True;
-      zinc_(Zwidevertices);
-    }
-  }else if (size <= qh hull_dim + qh_MAXnewcentrum) {
-    /* center and keepcentrum was set */
-    if (size == qh hull_dim || qh POSTmerging)
-      facet2->keepcentrum= False; /* if many merges need to recompute centrum */
-  }
-  if (!facet2->keepcentrum) {
-    qh_memfree (facet2->center, qh normal_size);
-    facet2->center= NULL;
-    FOREACHridge_(facet2->ridges)
-      ridge->tested= False;
-  }
-} /* updatetested */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="vertexridges">-</a>
-  
-  qh_vertexridges( vertex )
-    return temporary set of ridges adjacent to a vertex
-    vertex->neighbors defined
-
-  ntoes:
-    uses qh.visit_id
-    does not include implicit ridges for simplicial facets
-
-  design:
-    for each neighbor of vertex
-      add ridges that include the vertex to ridges  
-*/
-setT *qh_vertexridges (vertexT *vertex) {
-  facetT *neighbor, **neighborp;
-  setT *ridges= qh_settemp (qh TEMPsize);
-  int size;
-
-  qh visit_id++;
-  FOREACHneighbor_(vertex)
-    neighbor->visitid= qh visit_id;
-  FOREACHneighbor_(vertex) {
-    if (*neighborp)   /* no new ridges in last neighbor */
-      qh_vertexridges_facet (vertex, neighbor, &ridges);
-  }
-  if (qh PRINTstatistics || qh IStracing) {
-    size= qh_setsize (ridges);
-    zinc_(Zvertexridge);
-    zadd_(Zvertexridgetot, size);
-    zmax_(Zvertexridgemax, size);
-    trace3((qh ferr, "qh_vertexridges: found %d ridges for v%d\n",
-             size, vertex->id));
-  }
-  return ridges;
-} /* vertexridges */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="vertexridges_facet">-</a>
-  
-  qh_vertexridges_facet( vertex, facet, ridges )
-    add adjacent ridges for vertex in facet
-    neighbor->visitid==qh.visit_id if it hasn't been visited
-
-  returns:
-    ridges updated
-    sets facet->visitid to qh.visit_id-1
-
-  design:
-    for each ridge of facet
-      if ridge of visited neighbor (i.e., unprocessed)
-        if vertex in ridge
-          append ridge to vertex
-    mark facet processed
-*/
-void qh_vertexridges_facet (vertexT *vertex, facetT *facet, setT **ridges) {
-  ridgeT *ridge, **ridgep;
-  facetT *neighbor;
-
-  FOREACHridge_(facet->ridges) {
-    neighbor= otherfacet_(ridge, facet);
-    if (neighbor->visitid == qh visit_id 
-    && qh_setin (ridge->vertices, vertex))
-      qh_setappend (ridges, ridge);
-  }
-  facet->visitid= qh visit_id-1;
-} /* vertexridges_facet */
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >-------------------------------</a><a name="willdelete">-</a>
-  
-  qh_willdelete( facet, replace )
-    moves facet to visible list
-    sets facet->f.replace to replace (may be NULL)
-
-  returns:
-    bumps qh.num_visible
-*/
-void qh_willdelete (facetT *facet, facetT *replace) {
-
-  qh_removefacet(facet);
-  qh_prependfacet (facet, &qh visible_list);
-  qh num_visible++;
-  facet->visible= True;
-  facet->f.replace= replace;
-} /* willdelete */
-
-#else /* qh_NOmerge */
-void qh_premerge (vertexT *apex, realT maxcentrum, realT maxangle) {
-}
-void qh_postmerge (char *reason, realT maxcentrum, realT maxangle, 
-                      boolT vneighbors) {
-}
-boolT qh_checkzero (boolT testall) {
-   }
-#endif /* qh_NOmerge */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/merge.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/merge.h
deleted file mode 100644
index 8b689576dbb05d1627d116b360599a866b2cc93c..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/merge.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*<html><pre>  -<a                             href="qh-merge.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   merge.h
-   header file for merge.c
-
-   see qh-merge.htm and merge.c
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFmerge
-#define qhDEFmerge 1
-
-
-/*============ -constants- ==============*/
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_ANGLEredundant">-</a>
-
-  qh_ANGLEredundant
-    indicates redundant merge in mergeT->angle
-*/
-#define qh_ANGLEredundant 6.0
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_ANGLEdegen">-</a>
-
-  qh_ANGLEdegen
-    indicates degenerate facet in mergeT->angle
-*/
-#define qh_ANGLEdegen     5.0
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_ANGLEconcave">-</a>
-
-  qh_ANGLEconcave
-    offset to indicate concave facets in mergeT->angle
-
-  notes:
-    concave facets are assigned the range of [2,4] in mergeT->angle
-    roundoff error may make the angle less than 2
-*/
-#define qh_ANGLEconcave  1.5
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="MRG">-</a>
-
-  MRG... (mergeType)
-    indicates the type of a merge (mergeT->type)
-*/
-typedef enum    /* in sort order for facet_mergeset */
-{
-    MRGnone = 0,
-    MRGcoplanar,      /* centrum coplanar */
-    MRGanglecoplanar, /* angle coplanar */
-    /* could detect half concave ridges */
-    MRGconcave,       /* concave ridge */
-    MRGflip,      /* flipped facet. facet1 == facet2 */
-    MRGridge,     /* duplicate ridge (qh_MERGEridge) */
-    /* degen and redundant go onto degen_mergeset */
-    MRGdegen,     /* degenerate facet (not enough neighbors) facet1 == facet2 */
-    MRGredundant,     /* redundant facet (vertex subset) */
-    /* merge_degenredundant assumes degen < redundant */
-    MRGmirror,            /* mirror facet from qh_triangulate */
-    ENDmrg
-} mergeType;
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="qh_MERGEapex">-</a>
-
-  qh_MERGEapex
-    flag for qh_mergefacet() to indicate an apex merge
-*/
-#define qh_MERGEapex     True
-
-/*============ -structures- ====================*/
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="mergeT">-</a>
-
-  mergeT
-    structure used to merge facets
-*/
-
-typedef struct mergeT mergeT;
-struct mergeT       /* initialize in qh_appendmergeset */
-{
-    realT   angle;        /* angle between normals of facet1 and facet2 */
-    facetT* facet1;   /* will merge facet1 into facet2 */
-    facetT* facet2;
-    mergeType type;
-};
-
-
-/*=========== -macros- =========================*/
-
-/*-<a                             href="qh-merge.htm#TOC"
-  >--------------------------------</a><a name="FOREACHmerge_">-</a>
-
-  FOREACHmerge_( merges ) {...}
-    assign 'merge' to each merge in merges
-
-  notes:
-    uses 'mergeT *merge, **mergep;'
-    if qh_mergefacet(),
-      restart since qh.facet_mergeset may change
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHmerge_( merges ) FOREACHsetelement_(mergeT, merges, merge)
-
-/*============ prototypes in alphabetical order after pre/postmerge =======*/
-
-void    qh_premerge(vertexT* apex, realT maxcentrum, realT maxangle);
-void    qh_postmerge(char* reason, realT maxcentrum, realT maxangle,
-                     boolT vneighbors);
-void    qh_all_merges(boolT othermerge, boolT vneighbors);
-void    qh_appendmergeset(facetT* facet, facetT* neighbor, mergeType mergetype, realT* angle);
-setT*   qh_basevertices(facetT* samecycle);
-void    qh_checkconnect(void /* qh new_facets */);
-boolT   qh_checkzero(boolT testall);
-int     qh_compareangle(const void* p1, const void* p2);
-int     qh_comparemerge(const void* p1, const void* p2);
-int     qh_comparevisit(const void* p1, const void* p2);
-void    qh_copynonconvex(ridgeT* atridge);
-void    qh_degen_redundant_facet(facetT* facet);
-void    qh_degen_redundant_neighbors(facetT* facet, facetT* delfacet);
-vertexT* qh_find_newvertex(vertexT* oldvertex, setT* vertices, setT* ridges);
-void    qh_findbest_test(boolT testcentrum, facetT* facet, facetT* neighbor,
-                         facetT** bestfacet, realT* distp, realT* mindistp, realT* maxdistp);
-facetT* qh_findbestneighbor(facetT* facet, realT* distp, realT* mindistp, realT* maxdistp);
-void    qh_flippedmerges(facetT* facetlist, boolT* wasmerge);
-void    qh_forcedmerges(boolT* wasmerge);
-void    qh_getmergeset(facetT* facetlist);
-void    qh_getmergeset_initial(facetT* facetlist);
-void    qh_hashridge(setT* hashtable, int hashsize, ridgeT* ridge, vertexT* oldvertex);
-ridgeT* qh_hashridge_find(setT* hashtable, int hashsize, ridgeT* ridge,
-                          vertexT* vertex, vertexT* oldvertex, int* hashslot);
-void    qh_makeridges(facetT* facet);
-void    qh_mark_dupridges(facetT* facetlist);
-void    qh_maydropneighbor(facetT* facet);
-int     qh_merge_degenredundant(void);
-void    qh_merge_nonconvex(facetT* facet1, facetT* facet2, mergeType mergetype);
-void    qh_mergecycle(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_all(facetT* facetlist, boolT* wasmerge);
-void    qh_mergecycle_facets(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_neighbors(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_ridges(facetT* samecycle, facetT* newfacet);
-void    qh_mergecycle_vneighbors(facetT* samecycle, facetT* newfacet);
-void    qh_mergefacet(facetT* facet1, facetT* facet2, realT* mindist, realT* maxdist, boolT mergeapex);
-void    qh_mergefacet2d(facetT* facet1, facetT* facet2);
-void    qh_mergeneighbors(facetT* facet1, facetT* facet2);
-void    qh_mergeridges(facetT* facet1, facetT* facet2);
-void    qh_mergesimplex(facetT* facet1, facetT* facet2, boolT mergeapex);
-void    qh_mergevertex_del(vertexT* vertex, facetT* facet1, facetT* facet2);
-void    qh_mergevertex_neighbors(facetT* facet1, facetT* facet2);
-void    qh_mergevertices(setT* vertices1, setT** vertices);
-setT*   qh_neighbor_intersections(vertexT* vertex);
-void    qh_newvertices(setT* vertices);
-boolT   qh_reducevertices(void);
-vertexT* qh_redundant_vertex(vertexT* vertex);
-boolT   qh_remove_extravertices(facetT* facet);
-vertexT* qh_rename_sharedvertex(vertexT* vertex, facetT* facet);
-void    qh_renameridgevertex(ridgeT* ridge, vertexT* oldvertex, vertexT* newvertex);
-void    qh_renamevertex(vertexT* oldvertex, vertexT* newvertex, setT* ridges,
-                        facetT* oldfacet, facetT* neighborA);
-boolT   qh_test_appendmerge(facetT* facet, facetT* neighbor);
-boolT   qh_test_vneighbors(void /* qh newfacet_list */);
-void    qh_tracemerge(facetT* facet1, facetT* facet2);
-void    qh_tracemerging(void);
-void    qh_updatetested(facetT* facet1, facetT* facet2);
-setT*   qh_vertexridges(vertexT* vertex);
-void    qh_vertexridges_facet(vertexT* vertex, facetT* facet, setT** ridges);
-void    qh_willdelete(facetT* facet, facetT* replace);
-
-#endif /* qhDEFmerge */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly.c
deleted file mode 100644
index c2791341d506bf01a64d2d1bcd5a10584f5dbf70..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly.c
+++ /dev/null
@@ -1,1191 +0,0 @@
-/*<html><pre>  -<a                             href="qh-poly.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   poly.c 
-   implements polygons and simplices
-
-   see qh-poly.htm, poly.h and qhull.h
-
-   infrequent code is in poly2.c 
-   (all but top 50 and their callers 12/3/95)
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include "qhull_a.h"
-
-/*======== functions in alphabetical order ==========*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="appendfacet">-</a>
-  
-  qh_appendfacet( facet )
-    appends facet to end of qh.facet_list,
-
-  returns:
-    updates qh.newfacet_list, facet_next, facet_list
-    increments qh.numfacets
-  
-  notes:
-    assumes qh.facet_list/facet_tail is defined (createsimplex)
-
-  see:
-    qh_removefacet()
-
-*/
-void qh_appendfacet(facetT *facet) {
-  facetT *tail= qh facet_tail;
-
-  if (tail == qh newfacet_list)
-    qh newfacet_list= facet;
-  if (tail == qh facet_next)
-    qh facet_next= facet;
-  facet->previous= tail->previous;
-  facet->next= tail;
-  if (tail->previous)
-    tail->previous->next= facet;
-  else
-    qh facet_list= facet;
-  tail->previous= facet;
-  qh num_facets++;
-  trace4((qh ferr, "qh_appendfacet: append f%d to facet_list\n", facet->id));
-} /* appendfacet */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="appendvertex">-</a>
-  
-  qh_appendvertex( vertex )
-    appends vertex to end of qh.vertex_list,
-
-  returns:
-    sets vertex->newlist
-    updates qh.vertex_list, newvertex_list
-    increments qh.num_vertices
-
-  notes:
-    assumes qh.vertex_list/vertex_tail is defined (createsimplex)
-
-*/
-void qh_appendvertex (vertexT *vertex) {
-  vertexT *tail= qh vertex_tail;
-
-  if (tail == qh newvertex_list)
-    qh newvertex_list= vertex;
-  vertex->newlist= True;
-  vertex->previous= tail->previous;
-  vertex->next= tail;
-  if (tail->previous)
-    tail->previous->next= vertex;
-  else
-    qh vertex_list= vertex;
-  tail->previous= vertex;
-  qh num_vertices++;
-  trace4((qh ferr, "qh_appendvertex: append v%d to vertex_list\n", vertex->id));
-} /* appendvertex */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="attachnewfacets">-</a>
-  
-  qh_attachnewfacets( )
-    attach horizon facets to new facets in qh.newfacet_list
-    newfacets have neighbor and ridge links to horizon but not vice versa
-    only needed for qh.ONLYgood
-
-  returns:
-    set qh.NEWfacets
-    horizon facets linked to new facets 
-      ridges changed from visible facets to new facets
-      simplicial ridges deleted
-    qh.visible_list, no ridges valid
-    facet->f.replace is a newfacet (if any)
-
-  design:
-    delete interior ridges and neighbor sets by
-      for each visible, non-simplicial facet
-        for each ridge
-          if last visit or if neighbor is simplicial
-            if horizon neighbor
-              delete ridge for horizon's ridge set
-            delete ridge
-        erase neighbor set
-    attach horizon facets and new facets by
-      for all new facets
-        if corresponding horizon facet is simplicial
-          locate corresponding visible facet {may be more than one}
-          link visible facet to new facet
-          replace visible facet with new facet in horizon
-        else it's non-simplicial
-          for all visible neighbors of the horizon facet
-            link visible neighbor to new facet
-            delete visible neighbor from horizon facet
-          append new facet to horizon's neighbors
-          the first ridge of the new facet is the horizon ridge
-          link the new facet into the horizon ridge
-*/
-void qh_attachnewfacets (void ) {
-  facetT *newfacet= NULL, *neighbor, **neighborp, *horizon, *visible;
-  ridgeT *ridge, **ridgep;
-
-  qh NEWfacets= True;
-  trace3((qh ferr, "qh_attachnewfacets: delete interior ridges\n"));
-  qh visit_id++;
-  FORALLvisible_facets {
-    visible->visitid= qh visit_id;
-    if (visible->ridges) {
-      FOREACHridge_(visible->ridges) {
-	neighbor= otherfacet_(ridge, visible);
-	if (neighbor->visitid == qh visit_id
-	    || (!neighbor->visible && neighbor->simplicial)) {
-	  if (!neighbor->visible)  /* delete ridge for simplicial horizon */
-	    qh_setdel (neighbor->ridges, ridge);
-	  qh_setfree (&(ridge->vertices)); /* delete on 2nd visit */
-	  qh_memfree (ridge, sizeof(ridgeT));
-	}
-      }
-      SETfirst_(visible->ridges)= NULL;
-    }
-    SETfirst_(visible->neighbors)= NULL;
-  }
-  trace1((qh ferr, "qh_attachnewfacets: attach horizon facets to new facets\n"));
-  FORALLnew_facets {
-    horizon= SETfirstt_(newfacet->neighbors, facetT);
-    if (horizon->simplicial) {
-      visible= NULL;
-      FOREACHneighbor_(horizon) {   /* may have more than one horizon ridge */
-	if (neighbor->visible) {
-	  if (visible) {
-	    if (qh_setequal_skip (newfacet->vertices, 0, horizon->vertices,
-				  SETindex_(horizon->neighbors, neighbor))) {
-	      visible= neighbor;
-	      break;
-	    }
-	  }else
-	    visible= neighbor;
-	}
-      }
-      if (visible) {
-	visible->f.replace= newfacet;
-	qh_setreplace (horizon->neighbors, visible, newfacet);
-      }else {
-	fprintf (qh ferr, "qhull internal error (qh_attachnewfacets): couldn't find visible facet for horizon f%d of newfacet f%d\n",
-		 horizon->id, newfacet->id);
-	qh_errexit2 (qh_ERRqhull, horizon, newfacet);
-      }
-    }else { /* non-simplicial, with a ridge for newfacet */
-      FOREACHneighbor_(horizon) {    /* may hold for many new facets */
-	if (neighbor->visible) {
-	  neighbor->f.replace= newfacet;
-	  qh_setdelnth (horizon->neighbors,
-			SETindex_(horizon->neighbors, neighbor));
-	  neighborp--; /* repeat */
-	}
-      }
-      qh_setappend (&horizon->neighbors, newfacet);
-      ridge= SETfirstt_(newfacet->ridges, ridgeT);
-      if (ridge->top == horizon)
-	ridge->bottom= newfacet;
-      else
-	ridge->top= newfacet;
-      }
-  } /* newfacets */
-  if (qh PRINTstatistics) {
-    FORALLvisible_facets {
-      if (!visible->f.replace) 
-	zinc_(Zinsidevisible);
-    }
-  }
-} /* attachnewfacets */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="checkflipped">-</a>
-  
-  qh_checkflipped( facet, dist, allerror )
-    checks facet orientation to interior point
-
-    if allerror set,
-      tests against qh.DISTround
-    else
-      tests against 0 since tested against DISTround before
-
-  returns:
-    False if it flipped orientation (sets facet->flipped)
-    distance if non-NULL
-*/
-boolT qh_checkflipped (facetT *facet, realT *distp, boolT allerror) {
-  realT dist;
-
-  if (facet->flipped && !distp)
-    return False;
-  zzinc_(Zdistcheck);
-  qh_distplane(qh interior_point, facet, &dist);
-  if (distp)
-    *distp= dist;
-  if ((allerror && dist > -qh DISTround)|| (!allerror && dist >= 0.0)) {
-    facet->flipped= True;
-    zzinc_(Zflippedfacets);
-    trace0((qh ferr, "qh_checkflipped: facet f%d is flipped, distance= %6.12g during p%d\n",
-              facet->id, dist, qh furthest_id));
-    qh_precision ("flipped facet");
-    return False;
-  }
-  return True;
-} /* checkflipped */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="delfacet">-</a>
-  
-  qh_delfacet( facet )
-    removes facet from facet_list and frees up its memory
-
-  notes:
-    assumes vertices and ridges already freed
-*/
-void qh_delfacet(facetT *facet) {
-  void **freelistp; /* used !qh_NOmem */
-
-  trace4((qh ferr, "qh_delfacet: delete f%d\n", facet->id));
-  if (facet == qh tracefacet)
-    qh tracefacet= NULL;
-  if (facet == qh GOODclosest)
-    qh GOODclosest= NULL;
-  qh_removefacet(facet);
-  if (!facet->tricoplanar || facet->keepcentrum) {
-    qh_memfree_(facet->normal, qh normal_size, freelistp);
-    if (qh CENTERtype == qh_ASvoronoi) {   /* uses macro calls */
-      qh_memfree_(facet->center, qh center_size, freelistp);
-    }else /* AScentrum */ {
-      qh_memfree_(facet->center, qh normal_size, freelistp);
-    }
-  }
-  qh_setfree(&(facet->neighbors));
-  if (facet->ridges)
-    qh_setfree(&(facet->ridges));
-  qh_setfree(&(facet->vertices));
-  if (facet->outsideset)
-    qh_setfree(&(facet->outsideset));
-  if (facet->coplanarset)
-    qh_setfree(&(facet->coplanarset));
-  qh_memfree_(facet, sizeof(facetT), freelistp);
-} /* delfacet */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="deletevisible">-</a>
-  
-  qh_deletevisible()
-    delete visible facets and vertices
-
-  returns:
-    deletes each facet and removes from facetlist
-    at exit, qh.visible_list empty (== qh.newfacet_list)
-
-  notes:
-    ridges already deleted
-    horizon facets do not reference facets on qh.visible_list
-    new facets in qh.newfacet_list
-    uses   qh.visit_id;
-*/
-void qh_deletevisible (void /*qh visible_list*/) {
-  facetT *visible, *nextfacet;
-  vertexT *vertex, **vertexp;
-  int numvisible= 0, numdel= qh_setsize(qh del_vertices);
-
-  trace1((qh ferr, "qh_deletevisible: delete %d visible facets and %d vertices\n",
-         qh num_visible, numdel));
-  for (visible= qh visible_list; visible && visible->visible; 
-                visible= nextfacet) { /* deleting current */
-    nextfacet= visible->next;        
-    numvisible++;
-    qh_delfacet(visible);
-  }
-  if (numvisible != qh num_visible) {
-    fprintf (qh ferr, "qhull internal error (qh_deletevisible): qh num_visible %d is not number of visible facets %d\n",
-             qh num_visible, numvisible);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  qh num_visible= 0;
-  zadd_(Zvisfacettot, numvisible);
-  zmax_(Zvisfacetmax, numvisible);
-  zzadd_(Zdelvertextot, numdel);
-  zmax_(Zdelvertexmax, numdel);
-  FOREACHvertex_(qh del_vertices) 
-    qh_delvertex (vertex);
-  qh_settruncate (qh del_vertices, 0);
-} /* deletevisible */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="facetintersect">-</a>
-  
-  qh_facetintersect( facetA, facetB, skipa, skipB, prepend )
-    return vertices for intersection of two simplicial facets
-    may include 1 prepended entry (if more, need to settemppush)
-    
-  returns:
-    returns set of qh.hull_dim-1 + prepend vertices
-    returns skipped index for each test and checks for exactly one
-
-  notes:
-    does not need settemp since set in quick memory
-  
-  see also:
-    qh_vertexintersect and qh_vertexintersect_new
-    use qh_setnew_delnthsorted to get nth ridge (no skip information)
-
-  design:
-    locate skipped vertex by scanning facet A's neighbors
-    locate skipped vertex by scanning facet B's neighbors
-    intersect the vertex sets
-*/
-setT *qh_facetintersect (facetT *facetA, facetT *facetB,
-			 int *skipA,int *skipB, int prepend) {
-  setT *intersect;
-  int dim= qh hull_dim, i, j;
-  facetT **neighborsA, **neighborsB;
-
-  neighborsA= SETaddr_(facetA->neighbors, facetT);
-  neighborsB= SETaddr_(facetB->neighbors, facetT);
-  i= j= 0;
-  if (facetB == *neighborsA++)
-    *skipA= 0;
-  else if (facetB == *neighborsA++)
-    *skipA= 1;
-  else if (facetB == *neighborsA++)
-    *skipA= 2;
-  else {
-    for (i= 3; i < dim; i++) {
-      if (facetB == *neighborsA++) {
-        *skipA= i;
-        break;
-      }
-    }
-  }
-  if (facetA == *neighborsB++)
-    *skipB= 0;
-  else if (facetA == *neighborsB++)
-    *skipB= 1;
-  else if (facetA == *neighborsB++)
-    *skipB= 2;
-  else {
-    for (j= 3; j < dim; j++) {
-      if (facetA == *neighborsB++) {
-        *skipB= j;
-        break;
-      }
-    }
-  }
-  if (i >= dim || j >= dim) {
-    fprintf (qh ferr, "qhull internal error (qh_facetintersect): f%d or f%d not in others neighbors\n",
-            facetA->id, facetB->id);
-    qh_errexit2 (qh_ERRqhull, facetA, facetB);
-  }
-  intersect= qh_setnew_delnthsorted (facetA->vertices, qh hull_dim, *skipA, prepend);
-  trace4((qh ferr, "qh_facetintersect: f%d skip %d matches f%d skip %d\n",
-	  facetA->id, *skipA, facetB->id, *skipB));
-  return(intersect);
-} /* facetintersect */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="gethash">-</a>
-  
-  qh_gethash( hashsize, set, size, firstindex, skipelem )
-    return hashvalue for a set with firstindex and skipelem
-
-  notes:
-    assumes at least firstindex+1 elements
-    assumes skipelem is NULL, in set, or part of hash
-    
-    hashes memory addresses which may change over different runs of the same data
-    using sum for hash does badly in high d
-*/
-unsigned qh_gethash (int hashsize, setT *set, int size, int firstindex, void *skipelem) {
-  void **elemp= SETelemaddr_(set, firstindex, void);
-  ptr_intT hash = 0, elem;
-  int i;
-  // !! PATCHED TO 2010.1 version!!
-  unsigned result;
-  // !! PATCHED TO 2010.1 version!!
-
-  switch (size-firstindex) {
-  case 1:
-    hash= (ptr_intT)(*elemp) - (ptr_intT) skipelem;
-    break;
-  case 2:
-    hash= (ptr_intT)(*elemp) + (ptr_intT)elemp[1] - (ptr_intT) skipelem;
-    break;
-  case 3:
-    hash= (ptr_intT)(*elemp) + (ptr_intT)elemp[1] + (ptr_intT)elemp[2]
-      - (ptr_intT) skipelem;
-    break;
-  case 4:
-    hash= (ptr_intT)(*elemp) + (ptr_intT)elemp[1] + (ptr_intT)elemp[2]
-      + (ptr_intT)elemp[3] - (ptr_intT) skipelem;
-    break;
-  case 5:
-    hash= (ptr_intT)(*elemp) + (ptr_intT)elemp[1] + (ptr_intT)elemp[2]
-      + (ptr_intT)elemp[3] + (ptr_intT)elemp[4] - (ptr_intT) skipelem;
-    break;
-  case 6:
-    hash= (ptr_intT)(*elemp) + (ptr_intT)elemp[1] + (ptr_intT)elemp[2]
-      + (ptr_intT)elemp[3] + (ptr_intT)elemp[4]+ (ptr_intT)elemp[5]
-      - (ptr_intT) skipelem;
-    break;
-  default:
-    hash= 0;
-    i= 3;
-    do {     /* this is about 10% in 10-d */
-      if ((elem= (ptr_intT)*elemp++) != (ptr_intT)skipelem) {
-        hash ^= (elem << i) + (elem >> (32-i));
-	i += 3;
-	if (i >= 32)
-	  i -= 32;
-      }
-    }while(*elemp);
-    break;
-  }
-  
-  // !! PATCHED TO 2010.1 version!!
-  //hash %= (ptr_intT) hashsize;
-  ///* hash= 0; for debugging purposes */
-  //return hash;
-  result= (unsigned)hash;
-  result %= (unsigned)hashsize;
-  /* result= 0; for debugging purposes */
-  return result;
-  // !! PATCHED TO 2010.1 version!!
-  
-} /* gethash */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="makenewfacet">-</a>
-  
-  qh_makenewfacet( vertices, toporient, horizon )
-    creates a toporient? facet from vertices
-
-  returns:
-    returns newfacet
-      adds newfacet to qh.facet_list
-      newfacet->vertices= vertices
-      if horizon
-        newfacet->neighbor= horizon, but not vice versa
-    newvertex_list updated with vertices
-*/
-facetT *qh_makenewfacet(setT *vertices, boolT toporient,facetT *horizon) {
-  facetT *newfacet;
-  vertexT *vertex, **vertexp;
-
-  FOREACHvertex_(vertices) {
-    if (!vertex->newlist) {
-      qh_removevertex (vertex);
-      qh_appendvertex (vertex);
-    }
-  }
-  newfacet= qh_newfacet();
-  newfacet->vertices= vertices;
-  newfacet->toporient= toporient;
-  if (horizon)
-    qh_setappend(&(newfacet->neighbors), horizon);
-  qh_appendfacet(newfacet);
-  return(newfacet);
-} /* makenewfacet */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="makenewplanes">-</a>
-  
-  qh_makenewplanes()
-    make new hyperplanes for facets on qh.newfacet_list
-
-  returns:
-    all facets have hyperplanes or are marked for   merging
-    doesn't create hyperplane if horizon is coplanar (will merge)
-    updates qh.min_vertex if qh.JOGGLEmax
-
-  notes:
-    facet->f.samecycle is defined for facet->mergehorizon facets
-*/
-void qh_makenewplanes (void /* newfacet_list */) {
-  facetT *newfacet;
-
-  FORALLnew_facets {
-    if (!newfacet->mergehorizon)
-      qh_setfacetplane (newfacet);  
-  }
-  if (qh JOGGLEmax < REALmax/2)  
-    minimize_(qh min_vertex, -wwval_(Wnewvertexmax));
-} /* makenewplanes */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="makenew_nonsimplicial">-</a>
-  
-  qh_makenew_nonsimplicial( visible, apex, numnew )
-    make new facets for ridges of a visible facet
-    
-  returns:
-    first newfacet, bumps numnew as needed
-    attaches new facets if !qh.ONLYgood
-    marks ridge neighbors for simplicial visible
-    if (qh.ONLYgood)
-      ridges on newfacet, horizon, and visible
-    else
-      ridge and neighbors between newfacet and   horizon
-      visible facet's ridges are deleted    
-
-  notes:
-    qh.visit_id if visible has already been processed
-    sets neighbor->seen for building f.samecycle
-      assumes all 'seen' flags initially false
-    
-  design:
-    for each ridge of visible facet
-      get neighbor of visible facet
-      if neighbor was already processed
-        delete the ridge (will delete all visible facets later)
-      if neighbor is a horizon facet
-        create a new facet
-        if neighbor coplanar
-          adds newfacet to f.samecycle for later merging
-        else 
-          updates neighbor's neighbor set
-          (checks for non-simplicial facet with multiple ridges to visible facet)
-        updates neighbor's ridge set
-        (checks for simplicial neighbor to non-simplicial visible facet)
-	(deletes ridge if neighbor is simplicial)
-          
-*/
-#ifndef qh_NOmerge
-facetT *qh_makenew_nonsimplicial (facetT *visible, vertexT *apex, int *numnew) {
-  void **freelistp; /* used !qh_NOmem */
-  ridgeT *ridge, **ridgep;
-  facetT *neighbor, *newfacet= NULL, *samecycle;
-  setT *vertices;
-  boolT toporient;
-  int ridgeid;
-
-  FOREACHridge_(visible->ridges) {
-    ridgeid= ridge->id;
-    neighbor= otherfacet_(ridge, visible);
-    if (neighbor->visible) {
-      if (!qh ONLYgood) {
-        if (neighbor->visitid == qh visit_id) {
-          qh_setfree (&(ridge->vertices));  /* delete on 2nd visit */
-	  qh_memfree_(ridge, sizeof(ridgeT), freelistp);
-	}
-      }
-    }else {  /* neighbor is an horizon facet */
-      toporient= (ridge->top == visible);
-      vertices= qh_setnew (qh hull_dim); /* makes sure this is quick */
-      qh_setappend (&vertices, apex);
-      qh_setappend_set (&vertices, ridge->vertices);
-      newfacet= qh_makenewfacet(vertices, toporient, neighbor);
-      (*numnew)++;
-      if (neighbor->coplanar) {
-	newfacet->mergehorizon= True;
-        if (!neighbor->seen) {
-          newfacet->f.samecycle= newfacet;
-          neighbor->f.newcycle= newfacet;
-        }else {
-          samecycle= neighbor->f.newcycle;
-          newfacet->f.samecycle= samecycle->f.samecycle;
-          samecycle->f.samecycle= newfacet;
-	}
-      }
-      if (qh ONLYgood) {
-        if (!neighbor->simplicial)
- 	  qh_setappend(&(newfacet->ridges), ridge);
-      }else {  /* qh_attachnewfacets */
-        if (neighbor->seen) {
-	  if (neighbor->simplicial) {
-	    fprintf (qh ferr, "qhull internal error (qh_makenew_nonsimplicial): simplicial f%d sharing two ridges with f%d\n", 
-	           neighbor->id, visible->id);
-	    qh_errexit2 (qh_ERRqhull, neighbor, visible);
-	  }
-	  qh_setappend (&(neighbor->neighbors), newfacet);
-	}else
-          qh_setreplace (neighbor->neighbors, visible, newfacet);
-        if (neighbor->simplicial) {
-          qh_setdel (neighbor->ridges, ridge);
-          qh_setfree (&(ridge->vertices)); 
-	  qh_memfree (ridge, sizeof(ridgeT));
-	}else {
- 	  qh_setappend(&(newfacet->ridges), ridge);
- 	  if (toporient)
- 	    ridge->top= newfacet;
- 	  else
- 	    ridge->bottom= newfacet;
- 	}
-      trace4((qh ferr, "qh_makenew_nonsimplicial: created facet f%d from v%d and r%d of horizon f%d\n",
-	    newfacet->id, apex->id, ridgeid, neighbor->id));
-      }
-    }
-    neighbor->seen= True;        
-  } /* for each ridge */
-  if (!qh ONLYgood)
-    SETfirst_(visible->ridges)= NULL;
-  return newfacet;
-} /* makenew_nonsimplicial */
-#else /* qh_NOmerge */
-facetT *qh_makenew_nonsimplicial (facetT *visible, vertexT *apex, int *numnew) {
-  return NULL;
-}
-#endif /* qh_NOmerge */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="makenew_simplicial">-</a>
-  
-  qh_makenew_simplicial( visible, apex, numnew )
-    make new facets for simplicial visible facet and apex
-
-  returns:
-    attaches new facets if (!qh.ONLYgood)
-      neighbors between newfacet and horizon
-
-  notes:
-    nop if neighbor->seen or neighbor->visible (see qh_makenew_nonsimplicial)
-
-  design:
-    locate neighboring horizon facet for visible facet
-    determine vertices and orientation
-    create new facet
-    if coplanar,
-      add new facet to f.samecycle
-    update horizon facet's neighbor list        
-*/
-facetT *qh_makenew_simplicial (facetT *visible, vertexT *apex, int *numnew) {
-  facetT *neighbor, **neighborp, *newfacet= NULL;
-  setT *vertices;
-  boolT flip, toporient;
-  int horizonskip, visibleskip;
-
-  FOREACHneighbor_(visible) {
-    if (!neighbor->seen && !neighbor->visible) {
-      vertices= qh_facetintersect(neighbor,visible, &horizonskip, &visibleskip, 1);
-      SETfirst_(vertices)= apex;
-      flip= ((horizonskip & 0x1) ^ (visibleskip & 0x1));
-      if (neighbor->toporient)         
-	toporient= horizonskip & 0x1;
-      else
-	toporient= (horizonskip & 0x1) ^ 0x1;
-      newfacet= qh_makenewfacet(vertices, toporient, neighbor);
-      (*numnew)++;
-      if (neighbor->coplanar && (qh PREmerge || qh MERGEexact)) {
-#ifndef qh_NOmerge
-	newfacet->f.samecycle= newfacet;
-	newfacet->mergehorizon= True;
-#endif
-      }
-      if (!qh ONLYgood)
-        SETelem_(neighbor->neighbors, horizonskip)= newfacet;
-      trace4((qh ferr, "qh_makenew_simplicial: create facet f%d top %d from v%d and horizon f%d skip %d top %d and visible f%d skip %d, flip? %d\n",
-	    newfacet->id, toporient, apex->id, neighbor->id, horizonskip,
-	      neighbor->toporient, visible->id, visibleskip, flip));
-    }
-  }
-  return newfacet;
-} /* makenew_simplicial */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="matchneighbor">-</a>
-  
-  qh_matchneighbor( newfacet, newskip, hashsize, hashcount )
-    either match subridge of newfacet with neighbor or add to hash_table
-
-  returns:
-    duplicate ridges are unmatched and marked by qh_DUPLICATEridge
-
-  notes:
-    ridge is newfacet->vertices w/o newskip vertex
-    do not allocate memory (need to free hash_table cleanly)
-    uses linear hash chains
-  
-  see also:
-    qh_matchduplicates
-
-  design:
-    for each possible matching facet in qh.hash_table
-      if vertices match
-        set ismatch, if facets have opposite orientation
-        if ismatch and matching facet doesn't have a match
-          match the facets by updating their neighbor sets
-        else
-          indicate a duplicate ridge
-          set facet hyperplane for later testing
-          add facet to hashtable
-          unless the other facet was already a duplicate ridge
-            mark both facets with a duplicate ridge
-            add other facet (if defined) to hash table
-*/
-void qh_matchneighbor (facetT *newfacet, int newskip, int hashsize, int *hashcount) {
-  boolT newfound= False;   /* True, if new facet is already in hash chain */
-  boolT same, ismatch;
-  int hash, scan;
-  facetT *facet, *matchfacet;
-  int skip, matchskip;
-
-  hash= (int)qh_gethash (hashsize, newfacet->vertices, qh hull_dim, 1, 
-                     SETelem_(newfacet->vertices, newskip));
-  trace4((qh ferr, "qh_matchneighbor: newfacet f%d skip %d hash %d hashcount %d\n",
-	  newfacet->id, newskip, hash, *hashcount));
-  zinc_(Zhashlookup);
-  for (scan= hash; (facet= SETelemt_(qh hash_table, scan, facetT)); 
-       scan= (++scan >= hashsize ? 0 : scan)) {
-    if (facet == newfacet) {
-      newfound= True;
-      continue;
-    }
-    zinc_(Zhashtests);
-    if (qh_matchvertices (1, newfacet->vertices, newskip, facet->vertices, &skip, &same)) {
-      if (SETelem_(newfacet->vertices, newskip) == 
-          SETelem_(facet->vertices, skip)) {
-        qh_precision ("two facets with the same vertices");
-        fprintf (qh ferr, "qhull precision error: Vertex sets are the same for f%d and f%d.  Can not force output.\n",
-          facet->id, newfacet->id);
-        qh_errexit2 (qh_ERRprec, facet, newfacet);
-      }
-      ismatch= (same == (newfacet->toporient ^ facet->toporient));
-      matchfacet= SETelemt_(facet->neighbors, skip, facetT);
-      if (ismatch && !matchfacet) {
-        SETelem_(facet->neighbors, skip)= newfacet;
-        SETelem_(newfacet->neighbors, newskip)= facet;
-        (*hashcount)--;
-        trace4((qh ferr, "qh_matchneighbor: f%d skip %d matched with new f%d skip %d\n",
-           facet->id, skip, newfacet->id, newskip));
-        return;
-      }
-      if (!qh PREmerge && !qh MERGEexact) {
-        qh_precision ("a ridge with more than two neighbors");
-	fprintf (qh ferr, "qhull precision error: facets f%d, f%d and f%d meet at a ridge with more than 2 neighbors.  Can not continue.\n",
-		 facet->id, newfacet->id, getid_(matchfacet));
-	qh_errexit2 (qh_ERRprec, facet, newfacet);
-      }
-      SETelem_(newfacet->neighbors, newskip)= qh_DUPLICATEridge;
-      newfacet->dupridge= True;
-      if (!newfacet->normal)
-	qh_setfacetplane (newfacet);
-      qh_addhash (newfacet, qh hash_table, hashsize, hash);
-      (*hashcount)++;
-      if (!facet->normal)
-	qh_setfacetplane (facet);
-      if (matchfacet != qh_DUPLICATEridge) {
-	SETelem_(facet->neighbors, skip)= qh_DUPLICATEridge;
-	facet->dupridge= True;
-	if (!facet->normal)
-	  qh_setfacetplane (facet);
-	if (matchfacet) {
-	  matchskip= qh_setindex (matchfacet->neighbors, facet);
-	  SETelem_(matchfacet->neighbors, matchskip)= qh_DUPLICATEridge;
-	  matchfacet->dupridge= True;
-	  if (!matchfacet->normal)
-	    qh_setfacetplane (matchfacet);
-	  qh_addhash (matchfacet, qh hash_table, hashsize, hash);
-	  *hashcount += 2;
-	}
-      }
-      trace4((qh ferr, "qh_matchneighbor: new f%d skip %d duplicates ridge for f%d skip %d matching f%d ismatch %d at hash %d\n",
-	   newfacet->id, newskip, facet->id, skip, 
-	   (matchfacet == qh_DUPLICATEridge ? -2 : getid_(matchfacet)), 
-	   ismatch, hash));
-      return; /* end of duplicate ridge */
-    }
-  }
-  if (!newfound) 
-    SETelem_(qh hash_table, scan)= newfacet;  /* same as qh_addhash */
-  (*hashcount)++;
-  trace4((qh ferr, "qh_matchneighbor: no match for f%d skip %d at hash %d\n",
-           newfacet->id, newskip, hash));
-} /* matchneighbor */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="matchnewfacets">-</a>
-  
-  qh_matchnewfacets()
-    match newfacets in qh.newfacet_list to their newfacet neighbors
-
-  returns:
-    qh.newfacet_list with full neighbor sets
-      get vertices with nth neighbor by deleting nth vertex
-    if qh.PREmerge/MERGEexact or qh.FORCEoutput 
-      sets facet->flippped if flipped normal (also prevents point partitioning)
-    if duplicate ridges and qh.PREmerge/MERGEexact
-      sets facet->dupridge
-      missing neighbor links identifies extra ridges to be merging (qh_MERGEridge)
-
-  notes:
-    newfacets already have neighbor[0] (horizon facet)
-    assumes qh.hash_table is NULL
-    vertex->neighbors has not been updated yet
-    do not allocate memory after qh.hash_table (need to free it cleanly)
-
-  design:
-    delete neighbor sets for all new facets
-    initialize a hash table
-    for all new facets
-      match facet with neighbors
-    if unmatched facets (due to duplicate ridges)
-      for each new facet with a duplicate ridge
-        match it with a facet
-    check for flipped facets
-*/
-void qh_matchnewfacets (void /* qh newfacet_list */) {
-  int numnew=0, hashcount=0, newskip;
-  facetT *newfacet, *neighbor;
-  int dim= qh hull_dim, hashsize, neighbor_i, neighbor_n;
-  setT *neighbors;
-#ifndef qh_NOtrace
-  int facet_i, facet_n, numfree= 0;
-  facetT *facet;
-#endif
-  
-  trace1((qh ferr, "qh_matchnewfacets: match neighbors for new facets.\n"));
-  FORALLnew_facets {
-    numnew++;
-    {  /* inline qh_setzero (newfacet->neighbors, 1, qh hull_dim); */
-      neighbors= newfacet->neighbors;
-      neighbors->e[neighbors->maxsize].i= dim+1; /*may be overwritten*/
-      memset ((char *)SETelemaddr_(neighbors, 1, void), 0, dim * SETelemsize);
-    }    
-  }
-  qh_newhashtable (numnew*(qh hull_dim-1)); /* twice what is normally needed,
-                                     but every ridge could be DUPLICATEridge */
-  hashsize= qh_setsize (qh hash_table);
-  FORALLnew_facets {
-    for (newskip=1; newskip<qh hull_dim; newskip++) /* furthest/horizon already matched */
-      qh_matchneighbor (newfacet, newskip, hashsize, &hashcount);
-#if 0   /* use the following to trap hashcount errors */
-    {
-      int count= 0, k;
-      facetT *facet, *neighbor;
-
-      count= 0;
-      FORALLfacet_(qh newfacet_list) {  /* newfacet already in use */
-	for (k=1; k < qh hull_dim; k++) {
-	  neighbor= SETelemt_(facet->neighbors, k, facetT);
-	  if (!neighbor || neighbor == qh_DUPLICATEridge)
-	    count++;
-	}
-	if (facet == newfacet)
-	  break;
-      }
-      if (count != hashcount) {
-	fprintf (qh ferr, "qh_matchnewfacets: after adding facet %d, hashcount %d != count %d\n",
-		 newfacet->id, hashcount, count);
-	qh_errexit (qh_ERRqhull, newfacet, NULL);
-      }
-    }
-#endif  /* end of trap code */
-  }
-  if (hashcount) {
-    FORALLnew_facets {
-      if (newfacet->dupridge) {
-        FOREACHneighbor_i_(newfacet) {
-          if (neighbor == qh_DUPLICATEridge) {
-            qh_matchduplicates (newfacet, neighbor_i, hashsize, &hashcount);
-         	    /* this may report MERGEfacet */
-	  }
-        }
-      }
-    }
-  }
-  if (hashcount) {
-    fprintf (qh ferr, "qhull internal error (qh_matchnewfacets): %d neighbors did not match up\n",
-        hashcount);
-    qh_printhashtable (qh ferr);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-#ifndef qh_NOtrace
-  if (qh IStracing >= 2) {
-    FOREACHfacet_i_(qh hash_table) {
-      if (!facet)
-        numfree++;
-    }
-    fprintf (qh ferr, "qh_matchnewfacets: %d new facets, %d unused hash entries .  hashsize %d\n",
-	     numnew, numfree, qh_setsize (qh hash_table));
-  }
-#endif /* !qh_NOtrace */
-  qh_setfree (&qh hash_table);
-  if (qh PREmerge || qh MERGEexact) {
-    if (qh IStracing >= 4)
-      qh_printfacetlist (qh newfacet_list, NULL, qh_ALL);
-    FORALLnew_facets {
-      if (newfacet->normal)
-	qh_checkflipped (newfacet, NULL, qh_ALL);
-    }
-  }else if (qh FORCEoutput)
-    qh_checkflipped_all (qh newfacet_list);  /* prints warnings for flipped */
-} /* matchnewfacets */
-
-    
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="matchvertices">-</a>
-  
-  qh_matchvertices( firstindex, verticesA, skipA, verticesB, skipB, same )
-    tests whether vertices match with a single skip
-    starts match at firstindex since all new facets have a common vertex
-
-  returns:
-    true if matched vertices
-    skip index for each set
-    sets same iff vertices have the same orientation
-
-  notes:
-    assumes skipA is in A and both sets are the same size
-
-  design:
-    set up pointers
-    scan both sets checking for a match
-    test orientation
-*/
-boolT qh_matchvertices (int firstindex, setT *verticesA, int skipA, 
-       setT *verticesB, int *skipB, boolT *same) {
-  vertexT **elemAp, **elemBp, **skipBp=NULL, **skipAp;
-
-  elemAp= SETelemaddr_(verticesA, firstindex, vertexT);
-  elemBp= SETelemaddr_(verticesB, firstindex, vertexT);
-  skipAp= SETelemaddr_(verticesA, skipA, vertexT);
-  do if (elemAp != skipAp) {
-    while (*elemAp != *elemBp++) {
-      if (skipBp)
-        return False;
-      skipBp= elemBp;  /* one extra like FOREACH */
-    }
-  }while(*(++elemAp));
-  if (!skipBp)
-    skipBp= ++elemBp;
-  *skipB= SETindex_(verticesB, skipB);
-  *same= !(((ptr_intT)skipA & 0x1) ^ ((ptr_intT)*skipB & 0x1));
-  trace4((qh ferr, "qh_matchvertices: matched by skip %d (v%d) and skip %d (v%d) same? %d\n",
-	  skipA, (*skipAp)->id, *skipB, (*(skipBp-1))->id, *same));
-  return (True);
-} /* matchvertices */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="newfacet">-</a>
-  
-  qh_newfacet()
-    return a new facet 
-
-  returns:
-    all fields initialized or cleared   (NULL)
-    preallocates neighbors set
-*/
-facetT *qh_newfacet(void) {
-  facetT *facet;
-  void **freelistp; /* used !qh_NOmem */
-  
-  qh_memalloc_(sizeof(facetT), freelistp, facet, facetT);
-  memset ((char *)facet, 0, sizeof(facetT));
-  if (qh facet_id == qh tracefacet_id)
-    qh tracefacet= facet;
-  facet->id= qh facet_id++;
-  facet->neighbors= qh_setnew(qh hull_dim);
-#if !qh_COMPUTEfurthest
-  facet->furthestdist= 0.0;
-#endif
-#if qh_MAXoutside
-  if (qh FORCEoutput && qh APPROXhull)
-    facet->maxoutside= qh MINoutside;
-  else
-    facet->maxoutside= qh DISTround;
-#endif
-  facet->simplicial= True;
-  facet->good= True;
-  facet->newfacet= True;
-  trace4((qh ferr, "qh_newfacet: created facet f%d\n", facet->id));
-  return (facet);
-} /* newfacet */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="newridge">-</a>
-  
-  qh_newridge()
-    return a new ridge
-*/
-ridgeT *qh_newridge(void) {
-  ridgeT *ridge;
-  void **freelistp;   /* used !qh_NOmem */
-
-  qh_memalloc_(sizeof(ridgeT), freelistp, ridge, ridgeT);
-  memset ((char *)ridge, 0, sizeof(ridgeT));
-  zinc_(Ztotridges);
-  if (qh ridge_id == 0xFFFFFF) {
-    fprintf(qh ferr, "\
-qhull warning: more than %d ridges.  ID field overflows and two ridges\n\
-may have the same identifier.  Otherwise output ok.\n", 0xFFFFFF);
-  }
-  ridge->id= qh ridge_id++;     
-  trace4((qh ferr, "qh_newridge: created ridge r%d\n", ridge->id));
-  return (ridge);
-} /* newridge */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="pointid">-</a>
-  
-  qh_pointid(  )
-    return id for a point, 
-    returns -3 if null, -2 if interior, or -1 if not known
-
-  alternative code:
-    unsigned long id;
-    id= ((unsigned long)point - (unsigned long)qh.first_point)/qh.normal_size;
-
-  notes:
-    if point not in point array
-      the code does a comparison of unrelated pointers.
-*/
-int qh_pointid (pointT *point) {
-  long offset, id;
-
-  if (!point)
-    id= -3;
-  else if (point == qh interior_point)
-    id= -2;
-  else if (point >= qh first_point
-  && point < qh first_point + qh num_points * qh hull_dim) {
-    offset= point - qh first_point;
-    id= offset / qh hull_dim;
-  }else if ((id= qh_setindex (qh other_points, point)) != -1)
-    id += qh num_points;
-  else
-    id= -1;
-  return (int) id;
-} /* pointid */
-  
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="removefacet">-</a>
-  
-  qh_removefacet( facet )
-    unlinks facet from qh.facet_list,
-
-  returns:
-    updates qh.facet_list .newfacet_list .facet_next visible_list
-    decrements qh.num_facets
-
-  see:
-    qh_appendfacet
-*/
-void qh_removefacet(facetT *facet) {
-  facetT *next= facet->next, *previous= facet->previous;
-  
-  if (facet == qh newfacet_list)
-    qh newfacet_list= next;
-  if (facet == qh facet_next)
-    qh facet_next= next;
-  if (facet == qh visible_list)
-    qh visible_list= next; 
-  if (previous) {
-    previous->next= next;
-    next->previous= previous;
-  }else {  /* 1st facet in qh facet_list */
-    qh facet_list= next;
-    qh facet_list->previous= NULL;
-  }
-  qh num_facets--;
-  trace4((qh ferr, "qh_removefacet: remove f%d from facet_list\n", facet->id));
-} /* removefacet */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="removevertex">-</a>
-  
-  qh_removevertex( vertex )
-    unlinks vertex from qh.vertex_list,
-
-  returns:
-    updates qh.vertex_list .newvertex_list 
-    decrements qh.num_vertices
-*/
-void qh_removevertex(vertexT *vertex) {
-  vertexT *next= vertex->next, *previous= vertex->previous;
-  
-  if (vertex == qh newvertex_list)
-    qh newvertex_list= next;
-  if (previous) {
-    previous->next= next;
-    next->previous= previous;
-  }else {  /* 1st vertex in qh vertex_list */
-    qh vertex_list= vertex->next;
-    qh vertex_list->previous= NULL;
-  }
-  qh num_vertices--;
-  trace4((qh ferr, "qh_removevertex: remove v%d from vertex_list\n", vertex->id));
-} /* removevertex */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="updatevertices">-</a>
-  
-  qh_updatevertices()
-    update vertex neighbors and delete interior vertices
-
-  returns:
-    if qh.VERTEXneighbors, updates neighbors for each vertex
-      if qh.newvertex_list, 
-         removes visible neighbors  from vertex neighbors
-      if qh.newfacet_list
-         adds new facets to vertex neighbors
-    if qh.visible_list
-       interior vertices added to qh.del_vertices for later partitioning
-
-  design:
-    if qh.VERTEXneighbors
-      deletes references to visible facets from vertex neighbors
-      appends new facets to the neighbor list for each vertex
-      checks all vertices of visible facets
-        removes visible facets from neighbor lists
-        marks unused vertices for deletion
-*/
-void qh_updatevertices (void /*qh newvertex_list, newfacet_list, visible_list*/) {
-  facetT *newfacet= NULL, *neighbor, **neighborp, *visible;
-  vertexT *vertex, **vertexp;
-
-  trace3((qh ferr, "qh_updatevertices: delete interior vertices and update vertex->neighbors\n"));
-  if (qh VERTEXneighbors) {
-    FORALLvertex_(qh newvertex_list) {
-      FOREACHneighbor_(vertex) {
-	if (neighbor->visible) 
-	  SETref_(neighbor)= NULL;
-      }
-      qh_setcompact (vertex->neighbors);
-    }
-    FORALLnew_facets {
-      FOREACHvertex_(newfacet->vertices)
-        qh_setappend (&vertex->neighbors, newfacet);
-    }
-    FORALLvisible_facets {
-      FOREACHvertex_(visible->vertices) {
-        if (!vertex->newlist && !vertex->deleted) {
-  	  FOREACHneighbor_(vertex) { /* this can happen under merging */
-	    if (!neighbor->visible)
-	      break;
-	  }
-	  if (neighbor)
-	    qh_setdel (vertex->neighbors, visible);
-	  else {
-	    vertex->deleted= True;
-	    qh_setappend (&qh del_vertices, vertex);
-	    trace2((qh ferr, "qh_updatevertices: delete vertex p%d (v%d) in f%d\n",
-		  qh_pointid(vertex->point), vertex->id, visible->id));
-  	  }
-        }
-      }
-    }
-  }else {  /* !VERTEXneighbors */
-    FORALLvisible_facets {
-      FOREACHvertex_(visible->vertices) {
-        if (!vertex->newlist && !vertex->deleted) {
-          vertex->deleted= True;
-	  qh_setappend (&qh del_vertices, vertex);
-	  trace2((qh ferr, "qh_updatevertices: delete vertex p%d (v%d) in f%d\n",
-		  qh_pointid(vertex->point), vertex->id, visible->id));
-  	}
-      }
-    }
-  }
-} /* updatevertices */
-
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly.h
deleted file mode 100644
index 109b5b3eab4c055084faca92bd9fc8561ec59259..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/*<html><pre>  -<a                             href="qh-poly.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   poly.h
-   header file for poly.c and poly2.c
-
-   see qh-poly.htm, qhull.h and poly.c
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFpoly
-#define qhDEFpoly 1
-
-/*===============   constants ========================== */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="ALGORITHMfault">-</a>
-
-  ALGORITHMfault
-    use as argument to checkconvex() to report errors during buildhull
-*/
-#define qh_ALGORITHMfault 0
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="DATAfault">-</a>
-
-  DATAfault
-    use as argument to checkconvex() to report errors during initialhull
-*/
-#define qh_DATAfault 1
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="DUPLICATEridge">-</a>
-
-  DUPLICATEridge
-    special value for facet->neighbor to indicate a duplicate ridge
-
-  notes:
-    set by matchneighbor, used by matchmatch and mark_dupridge
-*/
-#define qh_DUPLICATEridge ( facetT * ) 1L
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="MERGEridge">-</a>
-
-  MERGEridge       flag in facet
-    special value for facet->neighbor to indicate a merged ridge
-
-  notes:
-    set by matchneighbor, used by matchmatch and mark_dupridge
-*/
-#define qh_MERGEridge ( facetT * ) 2L
-
-
-/*============ -structures- ====================*/
-
-/*=========== -macros- =========================*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLfacet_">-</a>
-
-  FORALLfacet_( facetlist ) { ... }
-    assign 'facet' to each facet in facetlist
-
-  notes:
-    uses 'facetT *facet;'
-    assumes last facet is a sentinel
-
-  see:
-    FORALLfacets
-*/
-#define FORALLfacet_( facetlist ) if ( facetlist ) for( facet=( facetlist );facet && facet->next;facet=facet->next )
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLnew_facets">-</a>
-
-  FORALLnew_facets { ... }
-    assign 'newfacet' to each facet in qh.newfacet_list
-
-  notes:
-    uses 'facetT *newfacet;'
-    at exit, newfacet==NULL
-*/
-#define FORALLnew_facets for( newfacet=qh newfacet_list;newfacet && newfacet->next;newfacet=newfacet->next )
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLvertex_">-</a>
-
-  FORALLvertex_( vertexlist ) { ... }
-    assign 'vertex' to each vertex in vertexlist
-
-  notes:
-    uses 'vertexT *vertex;'
-    at exit, vertex==NULL
-*/
-#define FORALLvertex_( vertexlist ) for ( vertex=( vertexlist );vertex && vertex->next;vertex= vertex->next )
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLvisible_facets">-</a>
-
-  FORALLvisible_facets { ... }
-    assign 'visible' to each visible facet in qh.visible_list
-
-  notes:
-    uses 'vacetT *visible;'
-    at exit, visible==NULL
-*/
-#define FORALLvisible_facets for (visible=qh visible_list; visible && visible->visible; visible= visible->next)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLsame_">-</a>
-
-  FORALLsame_( newfacet ) { ... }
-    assign 'same' to each facet in newfacet->f.samecycle
-
-  notes:
-    uses 'facetT *same;'
-    stops when it returns to newfacet
-*/
-#define FORALLsame_(newfacet) for (same= newfacet->f.samecycle; same != newfacet; same= same->f.samecycle)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLsame_cycle_">-</a>
-
-  FORALLsame_cycle_( newfacet ) { ... }
-    assign 'same' to each facet in newfacet->f.samecycle
-
-  notes:
-    uses 'facetT *same;'
-    at exit, same == NULL
-*/
-#define FORALLsame_cycle_(newfacet) \
-    for (same= newfacet->f.samecycle; \
-         same; same= (same == newfacet ?  NULL : same->f.samecycle))
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHneighborA_">-</a>
-
-  FOREACHneighborA_( facet ) { ... }
-    assign 'neighborA' to each neighbor in facet->neighbors
-
-  FOREACHneighborA_( vertex ) { ... }
-    assign 'neighborA' to each neighbor in vertex->neighbors
-
-  declare:
-    facetT *neighborA, **neighborAp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHneighborA_(facet)  FOREACHsetelement_(facetT, facet->neighbors, neighborA)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvisible_">-</a>
-
-  FOREACHvisible_( facets ) { ... }
-    assign 'visible' to each facet in facets
-
-  notes:
-    uses 'facetT *facet, *facetp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvisible_(facets) FOREACHsetelement_(facetT, facets, visible)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHnewfacet_">-</a>
-
-  FOREACHnewfacet_( facets ) { ... }
-    assign 'newfacet' to each facet in facets
-
-  notes:
-    uses 'facetT *newfacet, *newfacetp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHnewfacet_(facets) FOREACHsetelement_(facetT, facets, newfacet)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertexA_">-</a>
-
-  FOREACHvertexA_( vertices ) { ... }
-    assign 'vertexA' to each vertex in vertices
-
-  notes:
-    uses 'vertexT *vertexA, *vertexAp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertexA_(vertices) FOREACHsetelement_(vertexT, vertices, vertexA)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertexreverse12_">-</a>
-
-  FOREACHvertexreverse12_( vertices ) { ... }
-    assign 'vertex' to each vertex in vertices
-    reverse order of first two vertices
-
-  notes:
-    uses 'vertexT *vertex, *vertexp;'
-    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertexreverse12_(vertices) FOREACHsetelementreverse12_(vertexT, vertices, vertex)
-
-
-/*=============== prototypes poly.c in alphabetical order ================*/
-
-void    qh_appendfacet(facetT* facet);
-void    qh_appendvertex(vertexT* vertex);
-void    qh_attachnewfacets(void);
-boolT   qh_checkflipped(facetT* facet, realT* dist, boolT allerror);
-void    qh_delfacet(facetT* facet);
-void    qh_deletevisible(void /*qh visible_list, qh horizon_list*/);
-setT*   qh_facetintersect(facetT* facetA, facetT* facetB, int* skipAp, int* skipBp, int extra);
-unsigned qh_gethash(int hashsize, setT* set, int size, int firstindex, void* skipelem);
-facetT* qh_makenewfacet(setT* vertices, boolT toporient, facetT* facet);
-void    qh_makenewplanes(void /* newfacet_list */);
-facetT* qh_makenew_nonsimplicial(facetT* visible, vertexT* apex, int* numnew);
-facetT* qh_makenew_simplicial(facetT* visible, vertexT* apex, int* numnew);
-void    qh_matchneighbor(facetT* newfacet, int newskip, int hashsize,
-                         int* hashcount);
-void    qh_matchnewfacets(void);
-boolT   qh_matchvertices(int firstindex, setT* verticesA, int skipA,
-                         setT* verticesB, int* skipB, boolT* same);
-facetT* qh_newfacet(void);
-ridgeT* qh_newridge(void);
-int     qh_pointid(pointT* point);
-void    qh_removefacet(facetT* facet);
-void    qh_removevertex(vertexT* vertex);
-void    qh_updatevertices(void);
-
-
-/*========== -prototypes poly2.c in alphabetical order ===========*/
-
-void    qh_addhash(void* newelem, setT* hashtable, int hashsize, unsigned hash);
-void    qh_check_bestdist(void);
-void    qh_check_maxout(void);
-void    qh_check_output(void);
-void    qh_check_point(pointT* point, facetT* facet, realT* maxoutside, realT* maxdist, facetT** errfacet1, facetT** errfacet2);
-void    qh_check_points(void);
-void    qh_checkconvex(facetT* facetlist, int fault);
-void    qh_checkfacet(facetT* facet, boolT newmerge, boolT* waserrorp);
-void    qh_checkflipped_all(facetT* facetlist);
-void    qh_checkpolygon(facetT* facetlist);
-void    qh_checkvertex(vertexT* vertex);
-void    qh_clearcenters(qh_CENTER type);
-void    qh_createsimplex(setT* vertices);
-void    qh_delridge(ridgeT* ridge);
-void    qh_delvertex(vertexT* vertex);
-setT*   qh_facet3vertex(facetT* facet);
-facetT* qh_findbestfacet(pointT* point, boolT bestoutside,
-                         realT* bestdist, boolT* isoutside);
-facetT* qh_findbestlower(facetT* upperfacet, pointT* point, realT* bestdistp, int* numpart);
-facetT* qh_findfacet_all(pointT* point, realT* bestdist, boolT* isoutside,
-                         int* numpart);
-int     qh_findgood(facetT* facetlist, int goodhorizon);
-void    qh_findgood_all(facetT* facetlist);
-void    qh_furthestnext(void /* qh facet_list */);
-void    qh_furthestout(facetT* facet);
-void    qh_infiniteloop(facetT* facet);
-void    qh_initbuild(void);
-void    qh_initialhull(setT* vertices);
-setT*   qh_initialvertices(int dim, setT* maxpoints, pointT* points, int numpoints);
-vertexT* qh_isvertex(pointT* point, setT* vertices);
-vertexT* qh_makenewfacets(pointT* point /*horizon_list, visible_list*/);
-void    qh_matchduplicates(facetT* atfacet, int atskip, int hashsize, int* hashcount);
-void    qh_nearcoplanar(void /* qh.facet_list */);
-vertexT* qh_nearvertex(facetT* facet, pointT* point, realT* bestdistp);
-int     qh_newhashtable(int newsize);
-vertexT* qh_newvertex(pointT* point);
-ridgeT* qh_nextridge3d(ridgeT* atridge, facetT* facet, vertexT** vertexp);
-void    qh_outcoplanar(void /* facet_list */);
-pointT* qh_point(int id);
-void    qh_point_add(setT* set, pointT* point, void* elem);
-setT*   qh_pointfacet(void /*qh facet_list*/);
-setT*   qh_pointvertex(void /*qh facet_list*/);
-void    qh_prependfacet(facetT* facet, facetT** facetlist);
-void    qh_printhashtable(FILE* fp);
-void    qh_printlists(void);
-void    qh_resetlists(boolT stats, boolT resetVisible /*qh newvertex_list newfacet_list visible_list*/);
-void    qh_setvoronoi_all(void);
-void    qh_triangulate(void /*qh facet_list*/);
-void    qh_triangulate_facet(facetT* facetA, vertexT** first_vertex);
-void    qh_triangulate_link(facetT* oldfacetA, facetT* facetA, facetT* oldfacetB, facetT* facetB);
-void    qh_triangulate_mirror(facetT* facetA, facetT* facetB);
-void    qh_triangulate_null(facetT* facetA);
-void    qh_vertexintersect(setT** vertexsetA, setT* vertexsetB);
-setT*   qh_vertexintersect_new(setT* vertexsetA, setT* vertexsetB);
-void    qh_vertexneighbors(void /*qh facet_list*/);
-boolT   qh_vertexsubset(setT* vertexsetA, setT* vertexsetB);
-
-
-#endif /* qhDEFpoly */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly2.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly2.c
deleted file mode 100644
index 79ce4afa83a92b4836101a782ecb417a4ce8c5df..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/poly2.c
+++ /dev/null
@@ -1,3137 +0,0 @@
-/*<html><pre>  -<a                             href="qh-poly.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   poly2.c 
-   implements polygons and simplices
-
-   see qh-poly.htm, poly.h and qhull.h
-
-   frequently used code is in poly.c
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include "qhull_a.h"
-
-/*======== functions in alphabetical order ==========*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="addhash">-</a>
-  
-  qh_addhash( newelem, hashtable, hashsize, hash )
-    add newelem to linear hash table at hash if not already there
-*/
-void qh_addhash (void* newelem, setT *hashtable, int hashsize, unsigned hash) {
-  int scan;
-  void *elem;
-
-  for (scan= (int)hash; (elem= SETelem_(hashtable, scan)); 
-       scan= (++scan >= hashsize ? 0 : scan)) {
-    if (elem == newelem)
-      break;
-  }
-  /* loop terminates because qh_HASHfactor >= 1.1 by qh_initbuffers */
-  if (!elem)
-    SETelem_(hashtable, scan)= newelem;
-} /* addhash */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="check_bestdist">-</a>
-  
-  qh_check_bestdist()
-    check that all points are within max_outside of the nearest facet
-    if qh.ONLYgood,
-      ignores !good facets
-
-  see: 
-    qh_check_maxout(), qh_outerinner()
-
-  notes:
-    only called from qh_check_points()
-      seldom used since qh.MERGING is almost always set
-    if notverified>0 at end of routine
-      some points were well inside the hull.  If the hull contains
-      a lens-shaped component, these points were not verified.  Use
-      options 'Qi Tv' to verify all points.  (Exhaustive check also verifies)
-
-  design:
-    determine facet for each point (if any)
-    for each point
-      start with the assigned facet or with the first facet
-      find the best facet for the point and check all coplanar facets
-      error if point is outside of facet
-*/
-void qh_check_bestdist (void) {
-  boolT waserror= False, unassigned;
-  facetT *facet, *bestfacet, *errfacet1= NULL, *errfacet2= NULL;
-  facetT *facetlist; 
-  realT dist, maxoutside, maxdist= -REALmax;
-  pointT *point;
-  int numpart= 0, facet_i, facet_n, notgood= 0, notverified= 0;
-  setT *facets;
-
-  trace1((qh ferr, "qh_check_bestdist: check points below nearest facet.  Facet_list f%d\n",
-      qh facet_list->id));
-  maxoutside= qh_maxouter();
-  maxoutside += qh DISTround;
-  /* one more qh.DISTround for check computation */
-  trace1((qh ferr, "qh_check_bestdist: check that all points are within %2.2g of best facet\n", maxoutside));
-  facets= qh_pointfacet (/*qh facet_list*/);
-  if (!qh_QUICKhelp && qh PRINTprecision)
-    fprintf (qh ferr, "\n\
-qhull output completed.  Verifying that %d points are\n\
-below %2.2g of the nearest %sfacet.\n",
-	     qh_setsize(facets), maxoutside, (qh ONLYgood ?  "good " : ""));
-  FOREACHfacet_i_(facets) {  /* for each point with facet assignment */
-    if (facet)
-      unassigned= False;
-    else {
-      unassigned= True;
-      facet= qh facet_list;
-    }
-    point= qh_point(facet_i);
-    if (point == qh GOODpointp)
-      continue;
-    qh_distplane(point, facet, &dist);
-    numpart++;
-    bestfacet= qh_findbesthorizon (!qh_IScheckmax, point, facet, qh_NOupper, &dist, &numpart);
-    /* occurs after statistics reported */
-    maximize_(maxdist, dist);
-    if (dist > maxoutside) {
-      if (qh ONLYgood && !bestfacet->good 
-	  && !((bestfacet= qh_findgooddist (point, bestfacet, &dist, &facetlist))
-	       && dist > maxoutside))
-	notgood++;
-      else {
-	waserror= True;
-	fprintf(qh ferr, "qhull precision error: point p%d is outside facet f%d, distance= %6.8g maxoutside= %6.8g\n", 
-		facet_i, bestfacet->id, dist, maxoutside);
-	if (errfacet1 != bestfacet) {
-	  errfacet2= errfacet1;
-	  errfacet1= bestfacet;
-	}
-      }
-    }else if (unassigned && dist < -qh MAXcoplanar)
-      notverified++;
-  }
-  qh_settempfree (&facets);
-  if (notverified && !qh DELAUNAY && !qh_QUICKhelp && qh PRINTprecision) 
-    fprintf(qh ferr, "\n%d points were well inside the hull.  If the hull contains\n\
-a lens-shaped component, these points were not verified.  Use\n\
-options 'Qci Tv' to verify all points.\n", notverified); 
-  if (maxdist > qh outside_err) {
-    fprintf( qh ferr, "qhull precision error (qh_check_bestdist): a coplanar point is %6.2g from convex hull.  The maximum value (qh.outside_err) is %6.2g\n",
-              maxdist, qh outside_err);
-    qh_errexit2 (qh_ERRprec, errfacet1, errfacet2);
-  }else if (waserror && qh outside_err > REALmax/2)
-    qh_errexit2 (qh_ERRprec, errfacet1, errfacet2);
-  else if (waserror)
-    ;                       /* the error was logged to qh.ferr but does not effect the output */
-  trace0((qh ferr, "qh_check_bestdist: max distance outside %2.2g\n", maxdist));
-} /* check_bestdist */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="check_maxout">-</a>
-  
-  qh_check_maxout()
-    updates qh.max_outside by checking all points against bestfacet
-    if qh.ONLYgood, ignores !good facets
-
-  returns:
-    updates facet->maxoutside via qh_findbesthorizon()
-    sets qh.maxoutdone
-    if printing qh.min_vertex (qh_outerinner), 
-      it is updated to the current vertices
-    removes inside/coplanar points from coplanarset as needed
-
-  notes:
-    defines coplanar as min_vertex instead of MAXcoplanar 
-    may not need to check near-inside points because of qh.MAXcoplanar 
-      and qh.KEEPnearinside (before it was -DISTround)
-
-  see also:
-    qh_check_bestdist()
-
-  design:
-    if qh.min_vertex is needed
-      for all neighbors of all vertices
-        test distance from vertex to neighbor
-    determine facet for each point (if any)
-    for each point with an assigned facet
-      find the best facet for the point and check all coplanar facets
-        (updates outer planes)
-    remove near-inside points from coplanar sets
-*/
-#ifndef qh_NOmerge
-void qh_check_maxout (void) {
-  facetT *facet, *bestfacet, *neighbor, **neighborp, *facetlist;
-  realT dist, maxoutside, minvertex, old_maxoutside;
-  pointT *point;
-  int numpart= 0, facet_i, facet_n, notgood= 0;
-  setT *facets, *vertices;
-  vertexT *vertex;
-
-  trace1((qh ferr, "qh_check_maxout: check and update maxoutside for each facet.\n"));
-  maxoutside= minvertex= 0;
-  if (qh VERTEXneighbors 
-  && (qh PRINTsummary || qh KEEPinside || qh KEEPcoplanar 
-	|| qh TRACElevel || qh PRINTstatistics
-	|| qh PRINTout[0] == qh_PRINTsummary || qh PRINTout[0] == qh_PRINTnone)) { 
-    trace1((qh ferr, "qh_check_maxout: determine actual maxoutside and minvertex\n"));
-    vertices= qh_pointvertex (/*qh facet_list*/);
-    FORALLvertices {
-      FOREACHneighbor_(vertex) {
-        zinc_(Zdistvertex);  /* distance also computed by main loop below */
-	qh_distplane (vertex->point, neighbor, &dist);
-	minimize_(minvertex, dist);
-	if (-dist > qh TRACEdist || dist > qh TRACEdist 
-	|| neighbor == qh tracefacet || vertex == qh tracevertex)
-	  fprintf (qh ferr, "qh_check_maxout: p%d (v%d) is %.2g from f%d\n",
-		    qh_pointid (vertex->point), vertex->id, dist, neighbor->id);
-      }
-    }
-    if (qh MERGING) {
-      wmin_(Wminvertex, qh min_vertex);
-    }
-    qh min_vertex= minvertex;
-    qh_settempfree (&vertices);  
-  }
-  facets= qh_pointfacet (/*qh facet_list*/);
-  do {
-    old_maxoutside= fmax_(qh max_outside, maxoutside);
-    FOREACHfacet_i_(facets) {     /* for each point with facet assignment */
-      if (facet) { 
-	point= qh_point(facet_i);
-	if (point == qh GOODpointp)
-	  continue;
-	zinc_(Ztotcheck);
-	qh_distplane(point, facet, &dist);
-	numpart++;
-	bestfacet= qh_findbesthorizon (qh_IScheckmax, point, facet, !qh_NOupper, &dist, &numpart);
-	if (bestfacet && dist > maxoutside) {
-	  if (qh ONLYgood && !bestfacet->good 
-	  && !((bestfacet= qh_findgooddist (point, bestfacet, &dist, &facetlist))
-	       && dist > maxoutside))
-	    notgood++;
-	  else
-	    maxoutside= dist;
-	}
-	if (dist > qh TRACEdist || (bestfacet && bestfacet == qh tracefacet))
-	  fprintf (qh ferr, "qh_check_maxout: p%d is %.2g above f%d\n",
-		     qh_pointid (point), dist, bestfacet->id);
-      }
-    }
-  }while 
-    (maxoutside > 2*old_maxoutside);
-    /* if qh.maxoutside increases substantially, qh_SEARCHdist is not valid 
-          e.g., RBOX 5000 s Z1 G1e-13 t1001200614 | qhull */
-  zzadd_(Zcheckpart, numpart);
-  qh_settempfree (&facets);
-  wval_(Wmaxout)= maxoutside - qh max_outside;
-  wmax_(Wmaxoutside, qh max_outside);
-  qh max_outside= maxoutside;
-  qh_nearcoplanar (/*qh.facet_list*/);
-  qh maxoutdone= True;
-  trace1((qh ferr, "qh_check_maxout: maxoutside %2.2g, min_vertex %2.2g, outside of not good %d\n",
-       maxoutside, qh min_vertex, notgood));
-} /* check_maxout */
-#else /* qh_NOmerge */
-void qh_check_maxout (void) {
-}
-#endif
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="check_output">-</a>
-  
-  qh_check_output()
-    performs the checks at the end of qhull algorithm
-    Maybe called after voronoi output.  Will recompute otherwise centrums are Voronoi centers instead
-*/
-void qh_check_output (void) {
-  int i;
-
-  if (qh STOPcone)
-    return;
-  if (qh VERIFYoutput | qh IStracing | qh CHECKfrequently) {
-    qh_checkpolygon (qh facet_list);
-    qh_checkflipped_all (qh facet_list);
-    qh_checkconvex (qh facet_list, qh_ALGORITHMfault);
-  }else if (!qh MERGING && qh_newstats (qhstat precision, &i)) {
-    qh_checkflipped_all (qh facet_list);
-    qh_checkconvex (qh facet_list, qh_ALGORITHMfault);
-  }
-} /* check_output */
-
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="check_point">-</a>
-  
-  qh_check_point( point, facet, maxoutside, maxdist, errfacet1, errfacet2 )
-    check that point is less than maxoutside from facet
-*/
-void qh_check_point (pointT *point, facetT *facet, realT *maxoutside, realT *maxdist, facetT **errfacet1, facetT **errfacet2) {
-  realT dist;
-
-  /* occurs after statistics reported */
-  qh_distplane(point, facet, &dist);
-  if (dist > *maxoutside) {
-    if (*errfacet1 != facet) {
-      *errfacet2= *errfacet1;
-      *errfacet1= facet;
-    }
-    fprintf(qh ferr, "qhull precision error: point p%d is outside facet f%d, distance= %6.8g maxoutside= %6.8g\n", 
-	      qh_pointid(point), facet->id, dist, *maxoutside);
-  }
-  maximize_(*maxdist, dist);
-} /* qh_check_point */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="check_points">-</a>
-  
-  qh_check_points()
-    checks that all points are inside all facets
-
-  notes:
-    if many points and qh_check_maxout not called (i.e., !qh.MERGING), 
-       calls qh_findbesthorizon (seldom done).
-    ignores flipped facets
-    maxoutside includes 2 qh.DISTrounds
-      one qh.DISTround for the computed distances in qh_check_points
-    qh_printafacet and qh_printsummary needs only one qh.DISTround
-    the computation for qh.VERIFYdirect does not account for qh.other_points
-
-  design:
-    if many points
-      use qh_check_bestdist()
-    else
-      for all facets
-        for all points
-          check that point is inside facet
-*/
-void qh_check_points (void) {
-  facetT *facet, *errfacet1= NULL, *errfacet2= NULL;
-  realT total, maxoutside, maxdist= -REALmax;
-  pointT *point, **pointp, *pointtemp;
-  boolT testouter;
-
-  maxoutside= qh_maxouter();
-  maxoutside += qh DISTround;
-  /* one more qh.DISTround for check computation */
-  trace1((qh ferr, "qh_check_points: check all points below %2.2g of all facet planes\n",
-	  maxoutside));
-  if (qh num_good)   /* miss counts other_points and !good facets */
-     total= (float) qh num_good * qh num_points;
-  else
-     total= (float) qh num_facets * qh num_points;
-  if (total >= qh_VERIFYdirect && !qh maxoutdone) {
-    if (!qh_QUICKhelp && qh SKIPcheckmax && qh MERGING)
-      fprintf (qh ferr, "\n\
-qhull input warning: merging without checking outer planes ('Q5' or 'Po').\n\
-Verify may report that a point is outside of a facet.\n");
-    qh_check_bestdist();
-  }else {
-    if (qh_MAXoutside && qh maxoutdone)
-      testouter= True;
-    else
-      testouter= False;
-    if (!qh_QUICKhelp) {
-      if (qh MERGEexact)
-	fprintf (qh ferr, "\n\
-qhull input warning: exact merge ('Qx').  Verify may report that a point\n\
-is outside of a facet.  See qh-optq.htm#Qx\n");
-      else if (qh SKIPcheckmax || qh NOnearinside)
-	fprintf (qh ferr, "\n\
-qhull input warning: no outer plane check ('Q5') or no processing of\n\
-near-inside points ('Q8').  Verify may report that a point is outside\n\
-of a facet.\n");
-    }
-    if (qh PRINTprecision) {
-      if (testouter)
-	fprintf (qh ferr, "\n\
-Output completed.  Verifying that all points are below outer planes of\n\
-all %sfacets.  Will make %2.0f distance computations.\n", 
-	      (qh ONLYgood ?  "good " : ""), total);
-      else
-	fprintf (qh ferr, "\n\
-Output completed.  Verifying that all points are below %2.2g of\n\
-all %sfacets.  Will make %2.0f distance computations.\n", 
-	      maxoutside, (qh ONLYgood ?  "good " : ""), total);
-    }
-    FORALLfacets {
-      if (!facet->good && qh ONLYgood)
-        continue;
-      if (facet->flipped)
-        continue;
-      if (!facet->normal) {
-	fprintf( qh ferr, "qhull warning (qh_check_points): missing normal for facet f%d\n", facet->id);
-        continue;
-      }
-      if (testouter) {
-#if qh_MAXoutside
-	maxoutside= facet->maxoutside + 2* qh DISTround;
-	/* one DISTround to actual point and another to computed point */
-#endif
-      }
-      FORALLpoints {
-	if (point != qh GOODpointp)
-	  qh_check_point (point, facet, &maxoutside, &maxdist, &errfacet1, &errfacet2);
-      }
-      FOREACHpoint_(qh other_points) {
-	if (point != qh GOODpointp)
-	  qh_check_point (point, facet, &maxoutside, &maxdist, &errfacet1, &errfacet2);
-      }
-    }
-    if (maxdist > qh outside_err) {
-      fprintf( qh ferr, "qhull precision error (qh_check_points): a coplanar point is %6.2g from convex hull.  The maximum value (qh.outside_err) is %6.2g\n",
-                maxdist, qh outside_err );
-      qh_errexit2( qh_ERRprec, errfacet1, errfacet2 );
-    }else if (errfacet1 && qh outside_err > REALmax/2)
-        qh_errexit2( qh_ERRprec, errfacet1, errfacet2 );
-    else if (errfacet1)
-        ;  /* the error was logged to qh.ferr but does not effect the output */
-    trace0((qh ferr, "qh_check_points: max distance outside %2.2g\n", maxdist));
-  }
-} /* check_points */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="checkconvex">-</a>
-  
-  qh_checkconvex( facetlist, fault )
-    check that each ridge in facetlist is convex
-    fault = qh_DATAfault if reporting errors
-          = qh_ALGORITHMfault otherwise
-
-  returns:
-    counts Zconcaveridges and Zcoplanarridges
-    errors if concaveridge or if merging an coplanar ridge
-
-  note:
-    if not merging, 
-      tests vertices for neighboring simplicial facets
-    else if ZEROcentrum, 
-      tests vertices for neighboring simplicial   facets
-    else 
-      tests centrums of neighboring facets
-
-  design:
-    for all facets
-      report flipped facets
-      if ZEROcentrum and simplicial neighbors
-        test vertices for neighboring simplicial facets
-      else
-        test centrum against all neighbors 
-*/
-void qh_checkconvex(facetT *facetlist, int fault) {
-  facetT *facet, *neighbor, **neighborp, *errfacet1=NULL, *errfacet2=NULL;
-  vertexT *vertex;
-  realT dist;
-  pointT *centrum;
-  boolT waserror= False, centrum_warning= False, tempcentrum= False, allsimplicial;
-  int neighbor_i;
-
-  trace1((qh ferr, "qh_checkconvex: check all ridges are convex\n"));
-  if (!qh RERUN) {
-    zzval_(Zconcaveridges)= 0;
-    zzval_(Zcoplanarridges)= 0;
-  }
-  FORALLfacet_(facetlist) {
-    if (facet->flipped) {
-      qh_precision ("flipped facet");
-      fprintf (qh ferr, "qhull precision error: f%d is flipped (interior point is outside)\n",
-	       facet->id);
-      errfacet1= facet;
-      waserror= True;
-      continue;
-    }
-    if (qh MERGING && (!qh ZEROcentrum || !facet->simplicial || facet->tricoplanar))
-      allsimplicial= False;
-    else {
-      allsimplicial= True;
-      neighbor_i= 0;
-      FOREACHneighbor_(facet) {
-        vertex= SETelemt_(facet->vertices, neighbor_i++, vertexT);
-	if (!neighbor->simplicial || neighbor->tricoplanar) {
-	  allsimplicial= False;
-	  continue;
-	}
-        qh_distplane (vertex->point, neighbor, &dist);
-        if (dist > -qh DISTround) {
-	  if (fault == qh_DATAfault) {
-            qh_precision ("coplanar or concave ridge");
-	    fprintf (qh ferr, "qhull precision error: initial simplex is not convex. Distance=%.2g\n", dist);
-	    qh_errexit(qh_ERRsingular, NULL, NULL);
-	  }
-          if (dist > qh DISTround) {
-            zzinc_(Zconcaveridges);
-            qh_precision ("concave ridge");
-            fprintf (qh ferr, "qhull precision error: f%d is concave to f%d, since p%d (v%d) is %6.4g above\n",
-              facet->id, neighbor->id, qh_pointid(vertex->point), vertex->id, dist);
-            errfacet1= facet;
-            errfacet2= neighbor;
-            waserror= True;
-          }else if (qh ZEROcentrum) {
-            if (dist > 0) {     /* qh_checkzero checks that dist < - qh DISTround */
-              zzinc_(Zcoplanarridges); 
-              qh_precision ("coplanar ridge");
-              fprintf (qh ferr, "qhull precision error: f%d is clearly not convex to f%d, since p%d (v%d) is %6.4g above\n",
-                facet->id, neighbor->id, qh_pointid(vertex->point), vertex->id, dist);
-              errfacet1= facet;
-              errfacet2= neighbor;
-              waserror= True;
-	    }
-	  }else {              
-            zzinc_(Zcoplanarridges);
-            qh_precision ("coplanar ridge");
-            trace0((qh ferr, "qhull precision error: f%d may be coplanar to f%d, since p%d (v%d) is within %6.4g during p%d\n",
-              facet->id, neighbor->id, qh_pointid(vertex->point), vertex->id, dist, qh furthest_id));
-          }
-        }
-      }
-    }
-    if (!allsimplicial) {
-      if (qh CENTERtype == qh_AScentrum) {
-        if (!facet->center)
-          facet->center= qh_getcentrum (facet);
-        centrum= facet->center;
-      }else {
-	if (!centrum_warning && (!facet->simplicial || facet->tricoplanar)) {
-	   centrum_warning= True;
-	   fprintf (qh ferr, "qhull note: recomputing centrums for convexity test.  This may lead to false, precision errors.\n");
-	}
-        centrum= qh_getcentrum(facet);
-        tempcentrum= True;
-      }
-      FOREACHneighbor_(facet) {
-	if (qh ZEROcentrum && facet->simplicial && neighbor->simplicial)
-	  continue;
-	if (facet->tricoplanar || neighbor->tricoplanar)
-	  continue;
-        zzinc_(Zdistconvex);
-        qh_distplane (centrum, neighbor, &dist);
-        if (dist > qh DISTround) {
-          zzinc_(Zconcaveridges);
-          qh_precision ("concave ridge");
-          fprintf (qh ferr, "qhull precision error: f%d is concave to f%d.  Centrum of f%d is %6.4g above f%d\n",
-            facet->id, neighbor->id, facet->id, dist, neighbor->id);
-          errfacet1= facet;
-          errfacet2= neighbor;
-          waserror= True;
-	}else if (dist >= 0.0) {   /* if arithmetic always rounds the same,
-				     can test against centrum radius instead */
-          zzinc_(Zcoplanarridges);
-          qh_precision ("coplanar ridge");
-          fprintf (qh ferr, "qhull precision error: f%d is coplanar or concave to f%d.  Centrum of f%d is %6.4g above f%d\n",
-            facet->id, neighbor->id, facet->id, dist, neighbor->id);
-	  errfacet1= facet;
-	  errfacet2= neighbor;
-	  waserror= True;
-        }
-      }
-      if (tempcentrum)
-        qh_memfree(centrum, qh normal_size);
-    }
-  }
-  if (waserror && !qh FORCEoutput)
-    qh_errexit2 (qh_ERRprec, errfacet1, errfacet2);
-} /* checkconvex */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="checkfacet">-</a>
-  
-  qh_checkfacet( facet, newmerge, waserror )
-    checks for consistency errors in facet
-    newmerge set if from merge.c
-
-  returns:
-    sets waserror if any error occurs
-
-  checks:
-    vertex ids are inverse sorted
-    unless newmerge, at least hull_dim neighbors and vertices (exactly if simplicial)
-    if non-simplicial, at least as many ridges as neighbors
-    neighbors are not duplicated
-    ridges are not duplicated
-    in 3-d, ridges=verticies
-    (qh.hull_dim-1) ridge vertices
-    neighbors are reciprocated
-    ridge neighbors are facet neighbors and a ridge for every neighbor
-    simplicial neighbors match facetintersect
-    vertex intersection matches vertices of common ridges 
-    vertex neighbors and facet vertices agree
-    all ridges have distinct vertex sets
-
-  notes:  
-    uses neighbor->seen
-
-  design:
-    check sets
-    check vertices
-    check sizes of neighbors and vertices
-    check for qh_MERGEridge and qh_DUPLICATEridge flags
-    check neighbor set
-    check ridge set
-    check ridges, neighbors, and vertices
-*/
-void qh_checkfacet(facetT *facet, boolT newmerge, boolT *waserrorp) {
-  facetT *neighbor, **neighborp, *errother=NULL;
-  ridgeT *ridge, **ridgep, *errridge= NULL, *ridge2;
-  vertexT *vertex, **vertexp;
-  unsigned previousid= INT_MAX;
-  int numneighbors, numvertices, numridges=0, numRvertices=0;
-  boolT waserror= False;
-  int skipA, skipB, ridge_i, ridge_n, i;
-  setT *intersection;
-
-  if (facet->visible) {
-    fprintf (qh ferr, "qhull internal error (qh_checkfacet): facet f%d is on the visible_list\n",
-      facet->id);
-    qh_errexit (qh_ERRqhull, facet, NULL);
-  }
-  if (!facet->normal) {
-    fprintf (qh ferr, "qhull internal error (qh_checkfacet): facet f%d does not have  a normal\n",
-      facet->id);
-    waserror= True;
-  }
-  qh_setcheck (facet->vertices, "vertices for f", facet->id);
-  qh_setcheck (facet->ridges, "ridges for f", facet->id);
-  qh_setcheck (facet->outsideset, "outsideset for f", facet->id);
-  qh_setcheck (facet->coplanarset, "coplanarset for f", facet->id);
-  qh_setcheck (facet->neighbors, "neighbors for f", facet->id);
-  FOREACHvertex_(facet->vertices) {
-    if (vertex->deleted) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): deleted vertex v%d in f%d\n", vertex->id, facet->id);
-      qh_errprint ("ERRONEOUS", NULL, NULL, NULL, vertex);
-      waserror= True;
-    }
-    if (vertex->id >= previousid) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): vertices of f%d are not in descending id order at v%d\n", facet->id, vertex->id);
-      waserror= True;
-      break;
-    }
-    previousid= vertex->id;
-  }
-  numneighbors= qh_setsize(facet->neighbors);
-  numvertices= qh_setsize(facet->vertices);
-  numridges= qh_setsize(facet->ridges);
-  if (facet->simplicial) {
-    if (numvertices+numneighbors != 2*qh hull_dim 
-    && !facet->degenerate && !facet->redundant) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): for simplicial facet f%d, #vertices %d + #neighbors %d != 2*qh hull_dim\n", 
-                facet->id, numvertices, numneighbors);
-      qh_setprint (qh ferr, "", facet->neighbors);
-      waserror= True;
-    }
-  }else { /* non-simplicial */
-    if (!newmerge 
-    &&(numvertices < qh hull_dim || numneighbors < qh hull_dim)
-    && !facet->degenerate && !facet->redundant) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): for facet f%d, #vertices %d or #neighbors %d < qh hull_dim\n",
-         facet->id, numvertices, numneighbors);
-       waserror= True;
-    }
-    /* in 3-d, can get a vertex twice in an edge list, e.g., RBOX 1000 s W1e-13 t995849315 D2 | QHULL d Tc Tv TP624 TW1e-13 T4 */
-    if (numridges < numneighbors
-    ||(qh hull_dim == 3 && numvertices > numridges && !qh NEWfacets)
-    ||(qh hull_dim == 2 && numridges + numvertices + numneighbors != 6)) {
-      if (!facet->degenerate && !facet->redundant) {
-	fprintf(qh ferr, "qhull internal error (qh_checkfacet): for facet f%d, #ridges %d < #neighbors %d or (3-d) > #vertices %d or (2-d) not all 2\n",
-	    facet->id, numridges, numneighbors, numvertices);
-	waserror= True;
-      }
-    }
-  }
-  FOREACHneighbor_(facet) {
-    if (neighbor == qh_MERGEridge || neighbor == qh_DUPLICATEridge) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): facet f%d still has a MERGE or DUP neighbor\n", facet->id);
-      qh_errexit (qh_ERRqhull, facet, NULL);
-    }
-    neighbor->seen= True;
-  }
-  FOREACHneighbor_(facet) {
-    if (!qh_setin(neighbor->neighbors, facet)) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): facet f%d has neighbor f%d, but f%d does not have neighbor f%d\n",
-	      facet->id, neighbor->id, neighbor->id, facet->id);
-      errother= neighbor;
-      waserror= True;
-    }
-    if (!neighbor->seen) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): facet f%d has a duplicate neighbor f%d\n",
-	      facet->id, neighbor->id);
-      errother= neighbor;
-      waserror= True;
-    }    
-    neighbor->seen= False;
-  }
-  FOREACHridge_(facet->ridges) {
-    qh_setcheck (ridge->vertices, "vertices for r", ridge->id);
-    ridge->seen= False;
-  }
-  FOREACHridge_(facet->ridges) {
-    if (ridge->seen) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): facet f%d has a duplicate ridge r%d\n",
-	      facet->id, ridge->id);
-      errridge= ridge;
-      waserror= True;
-    }    
-    ridge->seen= True;
-    numRvertices= qh_setsize(ridge->vertices);
-    if (numRvertices != qh hull_dim - 1) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): ridge between f%d and f%d has %d vertices\n", 
-                ridge->top->id, ridge->bottom->id, numRvertices);
-      errridge= ridge;
-      waserror= True;
-    }
-    neighbor= otherfacet_(ridge, facet);
-    neighbor->seen= True;
-    if (!qh_setin(facet->neighbors, neighbor)) {
-      fprintf(qh ferr, "qhull internal error (qh_checkfacet): for facet f%d, neighbor f%d of ridge r%d not in facet\n",
-           facet->id, neighbor->id, ridge->id);
-      errridge= ridge;
-      waserror= True;
-    }
-  }
-  if (!facet->simplicial) {
-    FOREACHneighbor_(facet) {
-      if (!neighbor->seen) {
-        fprintf(qh ferr, "qhull internal error (qh_checkfacet): facet f%d does not have a ridge for neighbor f%d\n",
-	      facet->id, neighbor->id);
-	errother= neighbor;
-        waserror= True;
-      }
-      intersection= qh_vertexintersect_new(facet->vertices, neighbor->vertices);
-      qh_settemppush (intersection);
-      FOREACHvertex_(facet->vertices) {
-	vertex->seen= False;
-	vertex->seen2= False;
-      }
-      FOREACHvertex_(intersection)
-	vertex->seen= True;
-      FOREACHridge_(facet->ridges) {
-	if (neighbor != otherfacet_(ridge, facet))
-	    continue;
-	FOREACHvertex_(ridge->vertices) {
-	  if (!vertex->seen) {
-	    fprintf (qh ferr, "qhull internal error (qh_checkfacet): vertex v%d in r%d not in f%d intersect f%d\n",
-  	          vertex->id, ridge->id, facet->id, neighbor->id);
-	    qh_errexit (qh_ERRqhull, facet, ridge);
-	  }
-	  vertex->seen2= True;
-	}
-      }
-      if (!newmerge) {
-	FOREACHvertex_(intersection) {
-	  if (!vertex->seen2) {
-	    if (qh IStracing >=3 || !qh MERGING) {
-	      fprintf (qh ferr, "qhull precision error (qh_checkfacet): vertex v%d in f%d intersect f%d but\n\
- not in a ridge.  This is ok under merging.  Last point was p%d\n",
-		     vertex->id, facet->id, neighbor->id, qh furthest_id);
-	      if (!qh FORCEoutput && !qh MERGING) {
-		qh_errprint ("ERRONEOUS", facet, neighbor, NULL, vertex);
-		if (!qh MERGING)
-		  qh_errexit (qh_ERRqhull, NULL, NULL);
-	      }
-	    }
-	  }
-	}
-      }      
-      qh_settempfree (&intersection);
-    }
-  }else { /* simplicial */
-    FOREACHneighbor_(facet) {
-      if (neighbor->simplicial) {    
-	skipA= SETindex_(facet->neighbors, neighbor);
-	skipB= qh_setindex (neighbor->neighbors, facet);
-	if (!qh_setequal_skip (facet->vertices, skipA, neighbor->vertices, skipB)) {
-	  fprintf (qh ferr, "qhull internal error (qh_checkfacet): facet f%d skip %d and neighbor f%d skip %d do not match \n",
-		   facet->id, skipA, neighbor->id, skipB);
-	  errother= neighbor;
-	  waserror= True;
-	}
-      }
-    }
-  }
-  if (qh hull_dim < 5 && (qh IStracing > 2 || qh CHECKfrequently)) {
-    FOREACHridge_i_(facet->ridges) {           /* expensive */
-      for (i= ridge_i+1; i < ridge_n; i++) {
-	ridge2= SETelemt_(facet->ridges, i, ridgeT);
-	if (qh_setequal (ridge->vertices, ridge2->vertices)) {
-	  fprintf (qh ferr, "qh_checkfacet: ridges r%d and r%d have the same vertices\n",
-		  ridge->id, ridge2->id);
-	  errridge= ridge;
-	  waserror= True;
-	}
-      }
-    }
-  }
-  if (waserror) {
-    qh_errprint("ERRONEOUS", facet, errother, errridge, NULL);
-    *waserrorp= True;
-  }
-} /* checkfacet */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="checkflipped_all">-</a>
-  
-  qh_checkflipped_all( facetlist )
-    checks orientation of facets in list against interior point
-*/
-void qh_checkflipped_all (facetT *facetlist) {
-  facetT *facet;
-  boolT waserror= False;
-  realT dist;
-
-  if (facetlist == qh facet_list)
-    zzval_(Zflippedfacets)= 0;
-  FORALLfacet_(facetlist) {
-    if (facet->normal && !qh_checkflipped (facet, &dist, !qh_ALL)) {
-      fprintf(qh ferr, "qhull precision error: facet f%d is flipped, distance= %6.12g\n",
-	      facet->id, dist);
-      if (!qh FORCEoutput) {
-	qh_errprint("ERRONEOUS", facet, NULL, NULL, NULL);
-	waserror= True;
-      }
-    }
-  }
-  if (waserror) {
-    fprintf (qh ferr, "\n\
-A flipped facet occurs when its distance to the interior point is\n\
-greater than %2.2g, the maximum roundoff error.\n", -qh DISTround);
-    qh_errexit(qh_ERRprec, NULL, NULL);
-  }
-} /* checkflipped_all */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="checkpolygon">-</a>
-  
-  qh_checkpolygon( facetlist )
-    checks the correctness of the structure
-
-  notes:
-    call with either qh.facet_list or qh.newfacet_list
-    checks num_facets and num_vertices if qh.facet_list
-
-  design:
-    for each facet
-      checks facet and outside set
-    initializes vertexlist
-    for each facet
-      checks vertex set
-    if checking all facets (qh.facetlist)
-      check facet count
-      if qh.VERTEXneighbors
-        check vertex neighbors and count
-      check vertex count
-*/
-void qh_checkpolygon(facetT *facetlist) {
-  facetT *facet;
-  vertexT *vertex, **vertexp, *vertexlist;
-  int numfacets= 0, numvertices= 0, numridges= 0;
-  int totvneighbors= 0, totvertices= 0;
-  boolT waserror= False, nextseen= False, visibleseen= False;
-  
-  trace1((qh ferr, "qh_checkpolygon: check all facets from f%d\n", facetlist->id));
-  if (facetlist != qh facet_list || qh ONLYgood)
-    nextseen= True;
-  FORALLfacet_(facetlist) {
-    if (facet == qh visible_list)
-      visibleseen= True;
-    if (!facet->visible) {
-      if (!nextseen) {
-	if (facet == qh facet_next)
-	  nextseen= True;
-	else if (qh_setsize (facet->outsideset)) {
-	  if (!qh NARROWhull
-#if !qh_COMPUTEfurthest
-	       || facet->furthestdist >= qh MINoutside
-#endif
-			) {
-	    fprintf (qh ferr, "qhull internal error (qh_checkpolygon): f%d has outside points before qh facet_next\n",
-		     facet->id);
-	    qh_errexit (qh_ERRqhull, facet, NULL);
-	  }
-	}
-      }
-      numfacets++;
-      qh_checkfacet(facet, False, &waserror);
-    }
-  }
-  if (qh visible_list && !visibleseen && facetlist == qh facet_list) {
-    fprintf (qh ferr, "qhull internal error (qh_checkpolygon): visible list f%d no longer on facet list\n", qh visible_list->id);
-    qh_printlists();
-    qh_errexit (qh_ERRqhull, qh visible_list, NULL);
-  }
-  if (facetlist == qh facet_list)
-    vertexlist= qh vertex_list;
-  else if (facetlist == qh newfacet_list)
-    vertexlist= qh newvertex_list;
-  else
-    vertexlist= NULL;
-  FORALLvertex_(vertexlist) {
-    vertex->seen= False;
-    vertex->visitid= 0;
-  }  
-  FORALLfacet_(facetlist) {
-    if (facet->visible)
-      continue;
-    if (facet->simplicial)
-      numridges += qh hull_dim;
-    else
-      numridges += qh_setsize (facet->ridges);
-    FOREACHvertex_(facet->vertices) {
-      vertex->visitid++;
-      if (!vertex->seen) {
-	vertex->seen= True;
-	numvertices++;
-	if (qh_pointid (vertex->point) == -1) {
-	  fprintf (qh ferr, "qhull internal error (qh_checkpolygon): unknown point %p for vertex v%d first_point %p\n",
-		   vertex->point, vertex->id, qh first_point);
-	  waserror= True;
-	}
-      }
-    }
-  }
-  qh vertex_visit += numfacets;
-  if (facetlist == qh facet_list) {
-    if (numfacets != qh num_facets - qh num_visible) {
-      fprintf(qh ferr, "qhull internal error (qh_checkpolygon): actual number of facets is %d, cumulative facet count is %d - %d visible facets\n",
-	      numfacets, qh num_facets, qh num_visible);
-      waserror= True;
-    }
-    qh vertex_visit++;
-    if (qh VERTEXneighbors) {
-      FORALLvertices {
-	qh_setcheck (vertex->neighbors, "neighbors for v", vertex->id);
-	if (vertex->deleted)
-	  continue;
-	totvneighbors += qh_setsize (vertex->neighbors);
-      }
-      FORALLfacet_(facetlist)
-	totvertices += qh_setsize (facet->vertices);
-      if (totvneighbors != totvertices) {
-	fprintf(qh ferr, "qhull internal error (qh_checkpolygon): vertex neighbors inconsistent.  Totvneighbors %d, totvertices %d\n",
-		totvneighbors, totvertices);
-	waserror= True;
-      }
-    }
-    if (numvertices != qh num_vertices - qh_setsize(qh del_vertices)) {
-      fprintf(qh ferr, "qhull internal error (qh_checkpolygon): actual number of vertices is %d, cumulative vertex count is %d\n",
-	      numvertices, qh num_vertices - qh_setsize(qh del_vertices));
-      waserror= True;
-    }
-    if (qh hull_dim == 2 && numvertices != numfacets) {
-      fprintf (qh ferr, "qhull internal error (qh_checkpolygon): #vertices %d != #facets %d\n",
-        numvertices, numfacets);
-      waserror= True;
-    }
-    if (qh hull_dim == 3 && numvertices + numfacets - numridges/2 != 2) {
-      fprintf (qh ferr, "qhull warning: #vertices %d + #facets %d - #edges %d != 2\n\
-	A vertex appears twice in a edge list.  May occur during merging.",
-        numvertices, numfacets, numridges/2);
-      /* occurs if lots of merging and a vertex ends up twice in an edge list.  e.g., RBOX 1000 s W1e-13 t995849315 D2 | QHULL d Tc Tv */
-    }
-  }
-  if (waserror) 
-    qh_errexit(qh_ERRqhull, NULL, NULL);
-} /* checkpolygon */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="checkvertex">-</a>
-  
-  qh_checkvertex( vertex )
-    check vertex for consistency
-    checks vertex->neighbors
-
-  notes:
-    neighbors checked efficiently in checkpolygon
-*/
-void qh_checkvertex (vertexT *vertex) {
-  boolT waserror= False;
-  facetT *neighbor, **neighborp, *errfacet=NULL;
-
-  if (qh_pointid (vertex->point) == -1) {
-    fprintf (qh ferr, "qhull internal error (qh_checkvertex): unknown point id %p\n", vertex->point);
-    waserror= True;
-  }
-  if (vertex->id >= qh vertex_id) {
-    fprintf (qh ferr, "qhull internal error (qh_checkvertex): unknown vertex id %d\n", vertex->id);
-    waserror= True;
-  }
-  if (!waserror && !vertex->deleted) {
-    if (qh_setsize (vertex->neighbors)) {
-      FOREACHneighbor_(vertex) {
-        if (!qh_setin (neighbor->vertices, vertex)) {
-          fprintf (qh ferr, "qhull internal error (qh_checkvertex): neighbor f%d does not contain v%d\n", neighbor->id, vertex->id);
-	  errfacet= neighbor;
-	  waserror= True;
-	}
-      }
-    }
-  }
-  if (waserror) {
-    qh_errprint ("ERRONEOUS", NULL, NULL, NULL, vertex);
-    qh_errexit (qh_ERRqhull, errfacet, NULL);
-  }
-} /* checkvertex */
-  
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="clearcenters">-</a>
-  
-  qh_clearcenters( type )
-    clear old data from facet->center
-
-  notes:
-    sets new centertype
-    nop if CENTERtype is the same
-*/
-void qh_clearcenters (qh_CENTER type) {
-  facetT *facet;
-  
-  if (qh CENTERtype != type) {
-    FORALLfacets {
-      if (qh CENTERtype == qh_ASvoronoi){
-        if (facet->center) {
-          qh_memfree (facet->center, qh center_size);
-          facet->center= NULL;
-        }
-      }else /* qh CENTERtype == qh_AScentrum */ {
-        if (facet->center) {
-          qh_memfree (facet->center, qh normal_size);
-	  facet->center= NULL;
-        }
-      }
-    }
-    qh CENTERtype= type;
-  }
-  trace2((qh ferr, "qh_clearcenters: switched to center type %d\n", type));
-} /* clearcenters */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="createsimplex">-</a>
-  
-  qh_createsimplex( vertices )
-    creates a simplex from a set of vertices
-
-  returns:
-    initializes qh.facet_list to the simplex
-    initializes qh.newfacet_list, .facet_tail
-    initializes qh.vertex_list, .newvertex_list, .vertex_tail
-
-  design:
-    initializes lists
-    for each vertex
-      create a new facet
-    for each new facet
-      create its neighbor set
-*/
-void qh_createsimplex(setT *vertices) {
-  facetT *facet= NULL, *newfacet;
-  boolT toporient= True;
-  int vertex_i, vertex_n, nth;
-  setT *newfacets= qh_settemp (qh hull_dim+1);
-  vertexT *vertex;
-  
-  qh facet_list= qh newfacet_list= qh facet_tail= qh_newfacet();
-  qh num_facets= qh num_vertices= qh num_visible= 0;
-  qh vertex_list= qh newvertex_list= qh vertex_tail= qh_newvertex(NULL);
-  FOREACHvertex_i_(vertices) {
-    newfacet= qh_newfacet();
-    newfacet->vertices= qh_setnew_delnthsorted (vertices, vertex_n,
-						vertex_i, 0);
-    newfacet->toporient= toporient;
-    qh_appendfacet(newfacet);
-    newfacet->newfacet= True;
-    qh_appendvertex (vertex);
-    qh_setappend (&newfacets, newfacet);
-    toporient ^= True;
-  }
-  FORALLnew_facets {
-    nth= 0;
-    FORALLfacet_(qh newfacet_list) {
-      if (facet != newfacet) 
-        SETelem_(newfacet->neighbors, nth++)= facet;
-    }
-    qh_settruncate (newfacet->neighbors, qh hull_dim);
-  }
-  qh_settempfree (&newfacets);
-  trace1((qh ferr, "qh_createsimplex: created simplex\n"));
-} /* createsimplex */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="delridge">-</a>
-  
-  qh_delridge( ridge )
-    deletes ridge from data structures it belongs to
-    frees up its memory
-
-  notes:
-    in merge.c, caller sets vertex->delridge for each vertex
-    ridges also freed in qh_freeqhull
-*/
-void qh_delridge(ridgeT *ridge) {
-  void **freelistp; /* used !qh_NOmem */
-  
-  qh_setdel(ridge->top->ridges, ridge);
-  qh_setdel(ridge->bottom->ridges, ridge);
-  qh_setfree(&(ridge->vertices));
-  qh_memfree_(ridge, sizeof(ridgeT), freelistp);
-} /* delridge */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="delvertex">-</a>
-  
-  qh_delvertex( vertex )
-    deletes a vertex and frees its memory
-
-  notes:
-    assumes vertex->adjacencies have been updated if needed
-    unlinks from vertex_list
-*/
-void qh_delvertex (vertexT *vertex) {
-
-  if (vertex == qh tracevertex)
-    qh tracevertex= NULL;
-  qh_removevertex (vertex);
-  qh_setfree (&vertex->neighbors);
-  qh_memfree(vertex, sizeof(vertexT));
-} /* delvertex */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="facet3vertex">-</a>
-  
-  qh_facet3vertex(  )
-    return temporary set of 3-d vertices in qh_ORIENTclock order
-
-  design:
-    if simplicial facet
-      build set from facet->vertices with facet->toporient
-    else
-      for each ridge in order
-        build set from ridge's vertices
-*/
-setT *qh_facet3vertex (facetT *facet) {
-  ridgeT *ridge, *firstridge;
-  vertexT *vertex;
-  int cntvertices, cntprojected=0;
-  setT *vertices;
-
-  cntvertices= qh_setsize(facet->vertices);
-  vertices= qh_settemp (cntvertices);
-  if (facet->simplicial) {
-    if (cntvertices != 3) {
-      fprintf (qh ferr, "qhull internal error (qh_facet3vertex): only %d vertices for simplicial facet f%d\n", 
-                  cntvertices, facet->id);
-      qh_errexit(qh_ERRqhull, facet, NULL);
-    }
-    qh_setappend (&vertices, SETfirst_(facet->vertices));
-    if (facet->toporient ^ qh_ORIENTclock)
-      qh_setappend (&vertices, SETsecond_(facet->vertices));
-    else
-      qh_setaddnth (&vertices, 0, SETsecond_(facet->vertices));
-    qh_setappend (&vertices, SETelem_(facet->vertices, 2));
-  }else {
-    ridge= firstridge= SETfirstt_(facet->ridges, ridgeT);   /* no infinite */
-    while ((ridge= qh_nextridge3d (ridge, facet, &vertex))) {
-      qh_setappend (&vertices, vertex);
-      if (++cntprojected > cntvertices || ridge == firstridge)
-        break;
-    }
-    if (!ridge || cntprojected != cntvertices) {
-      fprintf (qh ferr, "qhull internal error (qh_facet3vertex): ridges for facet %d don't match up.  got at least %d\n", 
-                  facet->id, cntprojected);
-      qh_errexit(qh_ERRqhull, facet, ridge);
-    }
-  }
-  return vertices;
-} /* facet3vertex */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="findbestfacet">-</a>
-  
-  qh_findbestfacet( point, bestoutside, bestdist, isoutside )
-    find facet that is furthest below a point 
-
-    for Delaunay triangulations, 
-      Use qh_setdelaunay() to lift point to paraboloid and scale by 'Qbb' if needed
-      Do not use options 'Qbk', 'QBk', or 'QbB' since they scale the coordinates. 
-
-  returns:
-    if bestoutside is set (e.g., qh_ALL)
-      returns best facet that is not upperdelaunay
-      if Delaunay and inside, point is outside circumsphere of bestfacet
-    else
-      returns first facet below point
-      if point is inside, returns nearest, !upperdelaunay facet
-    distance to facet
-    isoutside set if outside of facet
-    
-  notes:
-    For tricoplanar facets, this finds one of the tricoplanar facets closest 
-    to the point.  For Delaunay triangulations, the point may be inside a 
-    different tricoplanar facet. See <a href="../html/qh-in.htm#findfacet">locate a facet with qh_findbestfacet()</a>
-    
-    If inside, qh_findbestfacet performs an exhaustive search
-       this may be too conservative.  Sometimes it is clearly required.
-
-    qh_findbestfacet is not used by qhull.
-    uses qh.visit_id and qh.coplanarset
-    
-  see:
-    <a href="geom.c#findbest">qh_findbest</a>
-*/
-facetT *qh_findbestfacet (pointT *point, boolT bestoutside,
-           realT *bestdist, boolT *isoutside) {
-  facetT *bestfacet= NULL;
-  int numpart, totpart= 0;
-  
-  bestfacet= qh_findbest (point, qh facet_list, 
-			    bestoutside, !qh_ISnewfacets, bestoutside /* qh_NOupper */,
-			    bestdist, isoutside, &totpart);
-  if (*bestdist < -qh DISTround) {
-    bestfacet= qh_findfacet_all (point, bestdist, isoutside, &numpart);
-    totpart += numpart;
-    if ((isoutside && bestoutside)
-    || (!isoutside && bestfacet->upperdelaunay)) {
-      bestfacet= qh_findbest (point, bestfacet, 
-			    bestoutside, False, bestoutside,
-			    bestdist, isoutside, &totpart);
-      totpart += numpart;
-    }
-  }
-  trace3((qh ferr, "qh_findbestfacet: f%d dist %2.2g isoutside %d totpart %d\n",
-	  bestfacet->id, *bestdist, *isoutside, totpart));
-  return bestfacet;
-} /* findbestfacet */ 
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="findbestlower">-</a>
-  
-  qh_findbestlower( facet, point, bestdist, numpart )
-    returns best non-upper, non-flipped neighbor of facet for point
-    if needed, searches vertex neighbors 
-
-  returns:
-    returns bestdist and updates numpart
-
-  notes:
-    if Delaunay and inside, point is outside of circumsphere of bestfacet
-    called by qh_findbest() for points above an upperdelaunay facet
-
-*/
-facetT *qh_findbestlower (facetT *upperfacet, pointT *point, realT *bestdistp, int *numpart) {
-  facetT *neighbor, **neighborp, *bestfacet= NULL;
-  realT bestdist= -REALmax/2 /* avoid underflow */;
-  realT dist;
-  vertexT *vertex;
-
-  zinc_(Zbestlower);
-  FOREACHneighbor_(upperfacet) {
-    if (neighbor->upperdelaunay || neighbor->flipped)
-      continue;
-    (*numpart)++;
-    qh_distplane (point, neighbor, &dist);
-    if (dist > bestdist) {
-      bestfacet= neighbor;
-      bestdist= dist;
-    }
-  }
-  if (!bestfacet) {
-    zinc_(Zbestlowerv);
-    /* rarely called, numpart does not count nearvertex computations */
-    vertex= qh_nearvertex (upperfacet, point, &dist);
-    qh_vertexneighbors();
-    FOREACHneighbor_(vertex) {
-      if (neighbor->upperdelaunay || neighbor->flipped)
-	continue;
-      (*numpart)++;
-      qh_distplane (point, neighbor, &dist);
-      if (dist > bestdist) {
-	bestfacet= neighbor;
-	bestdist= dist;
-      }
-    }
-  }
-  if (!bestfacet) {
-    fprintf(qh ferr, "\n\
-qh_findbestlower: all neighbors of facet %d are flipped or upper Delaunay.\n\
-Please report this error to qhull_bug@qhull.org with the input and all of the output.\n",
-       upperfacet->id);
-    qh_errexit (qh_ERRqhull, upperfacet, NULL);
-  }
-  *bestdistp= bestdist;
-  trace3((qh ferr, "qh_findbestlower: f%d dist %2.2g for f%d p%d\n",
-	  bestfacet->id, bestdist, upperfacet->id, qh_pointid(point)));
-  return bestfacet;
-} /* findbestlower */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="findfacet_all">-</a>
-  
-  qh_findfacet_all( point, bestdist, isoutside, numpart )
-    exhaustive search for facet below a point 
-
-    for Delaunay triangulations, 
-      Use qh_setdelaunay() to lift point to paraboloid and scale by 'Qbb' if needed
-      Do not use options 'Qbk', 'QBk', or 'QbB' since they scale the coordinates. 
-
-  returns:
-    returns first facet below point
-    if point is inside, 
-      returns nearest facet
-    distance to facet
-    isoutside if point is outside of the hull
-    number of distance tests
-*/
-facetT *qh_findfacet_all (pointT *point, realT *bestdist, boolT *isoutside,
-			  int *numpart) {
-  facetT *bestfacet= NULL, *facet;
-  realT dist;
-  int totpart= 0;
-  
-  *bestdist= REALmin;
-  *isoutside= False;
-  FORALLfacets {
-    if (facet->flipped || !facet->normal)
-      continue;
-    totpart++;
-    qh_distplane (point, facet, &dist);
-    if (dist > *bestdist) {
-      *bestdist= dist;
-      bestfacet= facet;
-      if (dist > qh MINoutside) {
-        *isoutside= True;
-        break;
-      }
-    }
-  }
-  *numpart= totpart;
-  trace3((qh ferr, "qh_findfacet_all: f%d dist %2.2g isoutside %d totpart %d\n",
-	  getid_(bestfacet), *bestdist, *isoutside, totpart));
-  return bestfacet;
-} /* findfacet_all */ 
- 
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="findgood">-</a>
-  
-  qh_findgood( facetlist, goodhorizon )
-    identify good facets for qh.PRINTgood
-    if qh.GOODvertex>0
-      facet includes point as vertex
-      if !match, returns goodhorizon
-      inactive if qh.MERGING
-    if qh.GOODpoint
-      facet is visible or coplanar (>0) or not visible (<0) 
-    if qh.GOODthreshold
-      facet->normal matches threshold
-    if !goodhorizon and !match, 
-      selects facet with closest angle
-      sets GOODclosest
-      
-  returns:
-    number of new, good facets found
-    determines facet->good
-    may update qh.GOODclosest
-    
-  notes:
-    qh_findgood_all further reduces the good region
-
-  design:
-    count good facets
-    mark good facets for qh.GOODpoint  
-    mark good facets for qh.GOODthreshold
-    if necessary
-      update qh.GOODclosest  
-*/
-int qh_findgood (facetT *facetlist, int goodhorizon) {
-  facetT *facet, *bestfacet= NULL;
-  realT angle, bestangle= REALmax, dist;
-  int  numgood=0;
-
-  FORALLfacet_(facetlist) {
-    if (facet->good)
-      numgood++;
-  }
-  if (qh GOODvertex>0 && !qh MERGING) {
-    FORALLfacet_(facetlist) {
-      if (!qh_isvertex (qh GOODvertexp, facet->vertices)) {
-        facet->good= False;
-        numgood--;
-      }
-    }
-  }
-  if (qh GOODpoint && numgood) {
-    FORALLfacet_(facetlist) {
-      if (facet->good && facet->normal) {
-        zinc_(Zdistgood);
-        qh_distplane (qh GOODpointp, facet, &dist);
-        if ((qh GOODpoint > 0) ^ (dist > 0.0)) {
-          facet->good= False;
-          numgood--;
-        }
-      }
-    }
-  }
-  if (qh GOODthreshold && (numgood || goodhorizon || qh GOODclosest)) {
-    FORALLfacet_(facetlist) {
-      if (facet->good && facet->normal) {
-        if (!qh_inthresholds (facet->normal, &angle)) {
-          facet->good= False;
-          numgood--;
-          if (angle < bestangle) {
-            bestangle= angle;
-            bestfacet= facet;
-          }
-        }
-      }
-    }
-    if (!numgood && (!goodhorizon || qh GOODclosest)) {
-      if (qh GOODclosest) {
-	if (qh GOODclosest->visible)
-	  qh GOODclosest= NULL;
-	else {
-	  qh_inthresholds (qh GOODclosest->normal, &angle);
-	  if (angle < bestangle)
-	    bestfacet= qh GOODclosest;
-	}
-      }
-      if (bestfacet && bestfacet != qh GOODclosest) {
-	if (qh GOODclosest)
-	  qh GOODclosest->good= False;
-	qh GOODclosest= bestfacet;
-	bestfacet->good= True;
-	numgood++;
-	trace2((qh ferr, "qh_findgood: f%d is closest (%2.2g) to thresholds\n", 
-           bestfacet->id, bestangle));
-	return numgood;
-      }
-    }else if (qh GOODclosest) { /* numgood > 0 */
-      qh GOODclosest->good= False;
-      qh GOODclosest= NULL;
-    }
-  }
-  zadd_(Zgoodfacet, numgood);
-  trace2((qh ferr, "qh_findgood: found %d good facets with %d good horizon\n",
-               numgood, goodhorizon));
-  if (!numgood && qh GOODvertex>0 && !qh MERGING) 
-    return goodhorizon;
-  return numgood;
-} /* findgood */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="findgood_all">-</a>
-  
-  qh_findgood_all( facetlist )
-    apply other constraints for good facets (used by qh.PRINTgood)
-    if qh.GOODvertex 
-      facet includes (>0) or doesn't include (<0) point as vertex
-      if last good facet and ONLYgood, prints warning and continues
-    if qh.SPLITthresholds
-      facet->normal matches threshold, or if none, the closest one
-    calls qh_findgood
-    nop if good not used
-
-  returns:
-    clears facet->good if not good
-    sets qh.num_good
-
-  notes:
-    this is like qh_findgood but more restrictive
-
-  design:
-    uses qh_findgood to mark good facets
-    marks facets for qh.GOODvertex
-    marks facets for qh.SPLITthreholds  
-*/
-void qh_findgood_all (facetT *facetlist) {
-  facetT *facet, *bestfacet=NULL;
-  realT angle, bestangle= REALmax;
-  int  numgood=0, startgood;
-
-  if (!qh GOODvertex && !qh GOODthreshold && !qh GOODpoint 
-  && !qh SPLITthresholds)
-    return;
-  if (!qh ONLYgood)
-    qh_findgood (qh facet_list, 0);
-  FORALLfacet_(facetlist) {
-    if (facet->good)
-      numgood++;
-  }
-  if (qh GOODvertex <0 || (qh GOODvertex > 0 && qh MERGING)) {
-    FORALLfacet_(facetlist) {
-      if (facet->good && ((qh GOODvertex > 0) ^ !!qh_isvertex (qh GOODvertexp, facet->vertices))) {
-        if (!--numgood) {
-	  if (qh ONLYgood) {
-            fprintf (qh ferr, "qhull warning: good vertex p%d does not match last good facet f%d.  Ignored.\n",
-               qh_pointid(qh GOODvertexp), facet->id);
-	    return;
-	  }else if (qh GOODvertex > 0)
-            fprintf (qh ferr, "qhull warning: point p%d is not a vertex ('QV%d').\n",
-		qh GOODvertex-1, qh GOODvertex-1);
-	  else
-            fprintf (qh ferr, "qhull warning: point p%d is a vertex for every facet ('QV-%d').\n",
-	        -qh GOODvertex - 1, -qh GOODvertex - 1);
-        }
-        facet->good= False;
-      }
-    }
-  }
-  startgood= numgood;
-  if (qh SPLITthresholds) {
-    FORALLfacet_(facetlist) {
-      if (facet->good) {
-        if (!qh_inthresholds (facet->normal, &angle)) {
-          facet->good= False;
-          numgood--;
-          if (angle < bestangle) {
-            bestangle= angle;
-            bestfacet= facet;
-          }
-        }
-      }
-    }
-    if (!numgood && bestfacet) {
-      bestfacet->good= True;
-      numgood++;
-      trace0((qh ferr, "qh_findgood_all: f%d is closest (%2.2g) to thresholds\n", 
-           bestfacet->id, bestangle));
-      return;
-    }
-  }
-  qh num_good= numgood;
-  trace0((qh ferr, "qh_findgood_all: %d good facets remain out of %d facets\n",
-        numgood, startgood));
-} /* findgood_all */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="furthestnext">-</a>
-  
-  qh_furthestnext()
-    set qh.facet_next to facet with furthest of all furthest points
-    searches all facets on qh.facet_list
-
-  notes:
-    this may help avoid precision problems
-*/
-void qh_furthestnext (void /* qh facet_list */) {
-  facetT *facet, *bestfacet= NULL;
-  realT dist, bestdist= -REALmax;
-
-  FORALLfacets {
-    if (facet->outsideset) {
-#if qh_COMPUTEfurthest
-      pointT *furthest;
-      furthest= (pointT*)qh_setlast (facet->outsideset);
-      zinc_(Zcomputefurthest);
-      qh_distplane (furthest, facet, &dist);
-#else
-      dist= facet->furthestdist;
-#endif
-      if (dist > bestdist) {
-	bestfacet= facet;
-	bestdist= dist;
-      }
-    }
-  }
-  if (bestfacet) {
-    qh_removefacet (bestfacet);
-    qh_prependfacet (bestfacet, &qh facet_next);
-    trace1((qh ferr, "qh_furthestnext: made f%d next facet (dist %.2g)\n",
-	    bestfacet->id, bestdist));
-  }
-} /* furthestnext */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="furthestout">-</a>
-  
-  qh_furthestout( facet )
-    make furthest outside point the last point of outsideset
-
-  returns:
-    updates facet->outsideset
-    clears facet->notfurthest
-    sets facet->furthestdist
-
-  design:
-    determine best point of outsideset
-    make it the last point of outsideset
-*/
-void qh_furthestout (facetT *facet) {
-  pointT *point, **pointp, *bestpoint= NULL;
-  realT dist, bestdist= -REALmax;
-
-  FOREACHpoint_(facet->outsideset) {
-    qh_distplane (point, facet, &dist);
-    zinc_(Zcomputefurthest);
-    if (dist > bestdist) {
-      bestpoint= point;
-      bestdist= dist;
-    }
-  }
-  if (bestpoint) {
-    qh_setdel (facet->outsideset, point);
-    qh_setappend (&facet->outsideset, point);
-#if !qh_COMPUTEfurthest
-    facet->furthestdist= bestdist;
-#endif
-  }
-  facet->notfurthest= False;
-  trace3((qh ferr, "qh_furthestout: p%d is furthest outside point of f%d\n",
-	  qh_pointid (point), facet->id));
-} /* furthestout */
-
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="infiniteloop">-</a>
-  
-  qh_infiniteloop( facet )
-    report infinite loop error due to facet
-*/
-void qh_infiniteloop (facetT *facet) {
-
-  fprintf (qh ferr, "qhull internal error (qh_infiniteloop): potential infinite loop detected\n");
-  qh_errexit (qh_ERRqhull, facet, NULL);
-} /* qh_infiniteloop */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="initbuild">-</a>
-  
-  qh_initbuild()
-    initialize hull and outside sets with point array
-    qh.FIRSTpoint/qh.NUMpoints is point array
-    if qh.GOODpoint
-      adds qh.GOODpoint to initial hull
-
-  returns:
-    qh_facetlist with initial hull
-    points partioned into outside sets, coplanar sets, or inside
-    initializes qh.GOODpointp, qh.GOODvertexp,
-
-  design:
-    initialize global variables used during qh_buildhull
-    determine precision constants and points with max/min coordinate values
-      if qh.SCALElast, scale last coordinate (for 'd')
-    build initial simplex
-    partition input points into facets of initial simplex
-    set up lists
-    if qh.ONLYgood
-      check consistency  
-      add qh.GOODvertex if defined
-*/
-void qh_initbuild( void) {
-  setT *maxpoints, *vertices;
-  facetT *facet;
-  int i, numpart;
-  realT dist;
-  boolT isoutside;
-
-  qh furthest_id= -1;
-  qh lastreport= 0;
-  qh facet_id= qh vertex_id= qh ridge_id= 0;
-  qh visit_id= qh vertex_visit= 0;
-  qh maxoutdone= False;
-
-  if (qh GOODpoint > 0) 
-    qh GOODpointp= qh_point (qh GOODpoint-1);
-  else if (qh GOODpoint < 0) 
-    qh GOODpointp= qh_point (-qh GOODpoint-1);
-  if (qh GOODvertex > 0)
-    qh GOODvertexp= qh_point (qh GOODvertex-1);
-  else if (qh GOODvertex < 0) 
-    qh GOODvertexp= qh_point (-qh GOODvertex-1);
-  if ((qh GOODpoint  
-       && (qh GOODpointp < qh first_point  /* also catches !GOODpointp */
-	   || qh GOODpointp > qh_point (qh num_points-1)))
-    || (qh GOODvertex
-	&& (qh GOODvertexp < qh first_point  /* also catches !GOODvertexp */
-	    || qh GOODvertexp > qh_point (qh num_points-1)))) {
-    fprintf (qh ferr, "qhull input error: either QGn or QVn point is > p%d\n",
-	     qh num_points-1);
-    qh_errexit (qh_ERRinput, NULL, NULL);
-  }
-  maxpoints= qh_maxmin(qh first_point, qh num_points, qh hull_dim);
-  if (qh SCALElast)
-    qh_scalelast (qh first_point, qh num_points, qh hull_dim,
-               qh MINlastcoord, qh MAXlastcoord, qh MAXwidth);
-  qh_detroundoff();
-  if (qh DELAUNAY && qh upper_threshold[qh hull_dim-1] > REALmax/2
-                  && qh lower_threshold[qh hull_dim-1] < -REALmax/2) {
-    for (i= qh_PRINTEND; i--; ) {
-      if (qh PRINTout[i] == qh_PRINTgeom && qh DROPdim < 0 
- 	  && !qh GOODthreshold && !qh SPLITthresholds)
-	break;  /* in this case, don't set upper_threshold */
-    }
-    if (i < 0) {
-      if (qh UPPERdelaunay) { /* matches qh.upperdelaunay in qh_setfacetplane */
-	qh lower_threshold[qh hull_dim-1]= qh ANGLEround * qh_ZEROdelaunay;
-	qh GOODthreshold= True;
-      }else { 
-	qh upper_threshold[qh hull_dim-1]= -qh ANGLEround * qh_ZEROdelaunay;
-        if (!qh GOODthreshold) 
-	  qh SPLITthresholds= True; /* build upper-convex hull even if Qg */
-          /* qh_initqhull_globals errors if Qg without Pdk/etc. */
-      }
-    }
-  }
-  vertices= qh_initialvertices(qh hull_dim, maxpoints, qh first_point, qh num_points); 
-  qh_initialhull (vertices);  /* initial qh facet_list */
-  qh_partitionall (vertices, qh first_point, qh num_points);
-  if (qh PRINToptions1st || qh TRACElevel || qh IStracing) {
-    if (qh TRACElevel || qh IStracing)
-      fprintf (qh ferr, "\nTrace level %d for %s | %s\n", 
-         qh IStracing ? qh IStracing : qh TRACElevel, qh rbox_command, qh qhull_command);
-    fprintf (qh ferr, "Options selected for Qhull %s:\n%s\n", qh_version, qh qhull_options);
-  }
-  qh_resetlists (False, qh_RESETvisible /*qh visible_list newvertex_list newfacet_list */);
-  qh facet_next= qh facet_list;
-  qh_furthestnext (/* qh facet_list */);
-  if (qh PREmerge) {
-    qh cos_max= qh premerge_cos;
-    qh centrum_radius= qh premerge_centrum;
-  }
-  if (qh ONLYgood) {
-    if (qh GOODvertex > 0 && qh MERGING) {
-      fprintf (qh ferr, "qhull input error: 'Qg QVn' (only good vertex) does not work with merging.\nUse 'QJ' to joggle the input or 'Q0' to turn off merging.\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    if (!(qh GOODthreshold || qh GOODpoint
-         || (!qh MERGEexact && !qh PREmerge && qh GOODvertexp))) {
-      fprintf (qh ferr, "qhull input error: 'Qg' (ONLYgood) needs a good threshold ('Pd0D0'), a\n\
-good point (QGn or QG-n), or a good vertex with 'QJ' or 'Q0' (QVn).\n");
-      qh_errexit (qh_ERRinput, NULL, NULL);
-    }
-    if (qh GOODvertex > 0  && !qh MERGING  /* matches qh_partitionall */
-	&& !qh_isvertex (qh GOODvertexp, vertices)) {
-      facet= qh_findbestnew (qh GOODvertexp, qh facet_list, 
-			  &dist, !qh_ALL, &isoutside, &numpart);
-      zadd_(Zdistgood, numpart);
-      if (!isoutside) {
-        fprintf (qh ferr, "qhull input error: point for QV%d is inside initial simplex.  It can not be made a vertex.\n",
-	       qh_pointid(qh GOODvertexp));
-        qh_errexit (qh_ERRinput, NULL, NULL);
-      }
-      if (!qh_addpoint (qh GOODvertexp, facet, False)) {
-	qh_settempfree(&vertices);
-	qh_settempfree(&maxpoints);
-	return;
-      }
-    }
-    qh_findgood (qh facet_list, 0);
-  }
-  qh_settempfree(&vertices);
-  qh_settempfree(&maxpoints);
-  trace1((qh ferr, "qh_initbuild: initial hull created and points partitioned\n"));
-} /* initbuild */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="initialhull">-</a>
-  
-  qh_initialhull( vertices )
-    constructs the initial hull as a DIM3 simplex of vertices
-
-  design:
-    creates a simplex (initializes lists)
-    determines orientation of simplex
-    sets hyperplanes for facets
-    doubles checks orientation (in case of axis-parallel facets with Gaussian elimination)
-    checks for flipped facets and qh.NARROWhull
-    checks the result   
-*/
-void qh_initialhull(setT *vertices) {
-  facetT *facet, *firstfacet, *neighbor, **neighborp;
-  realT dist, angle, minangle= REALmax;
-#ifndef qh_NOtrace
-  int k;
-#endif
-
-  qh_createsimplex(vertices);  /* qh facet_list */
-  qh_resetlists (False, qh_RESETvisible);
-  qh facet_next= qh facet_list;      /* advance facet when processed */
-  qh interior_point= qh_getcenter(vertices);
-  firstfacet= qh facet_list;
-  qh_setfacetplane(firstfacet);
-  zinc_(Znumvisibility); /* needs to be in printsummary */
-  qh_distplane(qh interior_point, firstfacet, &dist);
-  if (dist > 0) {  
-    FORALLfacets
-      facet->toporient ^= True;
-  }
-  FORALLfacets
-    qh_setfacetplane(facet);
-  FORALLfacets {
-    if (!qh_checkflipped (facet, NULL, qh_ALL)) {/* due to axis-parallel facet */
-      trace1((qh ferr, "qh_initialhull: initial orientation incorrect.  Correct all facets\n"));
-      facet->flipped= False;
-      FORALLfacets {
-	facet->toporient ^= True;
-	qh_orientoutside (facet);
-      }
-      break;
-    }
-  }
-  FORALLfacets {
-    if (!qh_checkflipped (facet, NULL, !qh_ALL)) {  /* can happen with 'R0.1' */
-      qh_precision ("initial facet is coplanar with interior point");
-      fprintf (qh ferr, "qhull precision error: initial facet %d is coplanar with the interior point\n",
-                   facet->id);
-      qh_errexit (qh_ERRsingular, facet, NULL);
-    }
-    FOREACHneighbor_(facet) {
-      angle= qh_getangle (facet->normal, neighbor->normal);
-      minimize_( minangle, angle);
-    }
-  }
-  if (minangle < qh_MAXnarrow && !qh NOnarrow) { 
-    realT diff= 1.0 + minangle;
-
-    qh NARROWhull= True;
-    qh_option ("_narrow-hull", NULL, &diff);
-    if (minangle < qh_WARNnarrow && !qh RERUN && qh PRINTprecision)
-      fprintf (qh ferr, "qhull precision warning: \n\
-The initial hull is narrow (cosine of min. angle is %.16f).\n\
-A coplanar point may lead to a wide facet.  Options 'QbB' (scale to unit box)\n\
-or 'Qbb' (scale last coordinate) may remove this warning.  Use 'Pp' to skip\n\
-this warning.  See 'Limitations' in qh-impre.htm.\n",
-          -minangle);   /* convert from angle between normals to angle between facets */
-  }
-  zzval_(Zprocessed)= qh hull_dim+1;
-  qh_checkpolygon (qh facet_list);
-  qh_checkconvex(qh facet_list,   qh_DATAfault);
-#ifndef qh_NOtrace
-  if (qh IStracing >= 1) {
-    fprintf(qh ferr, "qh_initialhull: simplex constructed, interior point:");
-    for (k=0; k < qh hull_dim; k++) 
-      fprintf (qh ferr, " %6.4g", qh interior_point[k]);
-    fprintf (qh ferr, "\n");
-  }
-#endif
-} /* initialhull */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="initialvertices">-</a>
-  
-  qh_initialvertices( dim, maxpoints, points, numpoints )
-    determines a non-singular set of initial vertices
-    maxpoints may include duplicate points
-
-  returns:
-    temporary set of dim+1 vertices in descending order by vertex id
-    if qh.RANDOMoutside && !qh.ALLpoints
-      picks random points
-    if dim >= qh_INITIALmax, 
-      uses min/max x and max points with non-zero determinants
-
-  notes:
-    unless qh.ALLpoints, 
-      uses maxpoints as long as determinate is non-zero
-*/
-setT *qh_initialvertices(int dim, setT *maxpoints, pointT *points, int numpoints) {
-  pointT *point, **pointp;
-  setT *vertices, *simplex, *tested;
-  realT randr;
-  int index, point_i, point_n, k;
-  boolT nearzero= False;
-  
-  vertices= qh_settemp (dim + 1);
-  simplex= qh_settemp (dim+1);
-  if (qh ALLpoints) 
-    qh_maxsimplex (dim, NULL, points, numpoints, &simplex);
-  else if (qh RANDOMoutside) {
-    while (qh_setsize (simplex) != dim+1) {
-      randr= qh_RANDOMint;
-      randr= randr/(qh_RANDOMmax+1);
-      index= (int)floor(qh num_points * randr);
-      while (qh_setin (simplex, qh_point (index))) {
-	index++; /* in case qh_RANDOMint always returns the same value */
-        index= index < qh num_points ? index : 0;
-      }
-      qh_setappend (&simplex, qh_point (index));
-    }
-  }else if (qh hull_dim >= qh_INITIALmax) {
-    tested= qh_settemp (dim+1);
-    qh_setappend (&simplex, SETfirst_(maxpoints));   /* max and min X coord */
-    qh_setappend (&simplex, SETsecond_(maxpoints));
-    qh_maxsimplex (fmin_(qh_INITIALsearch, dim), maxpoints, points, numpoints, &simplex);
-    k= qh_setsize (simplex);
-    FOREACHpoint_i_(maxpoints) { 
-      if (point_i & 0x1) {     /* first pick up max. coord. points */
-      	if (!qh_setin (simplex, point) && !qh_setin (tested, point)){
-	  qh_detsimplex(point, simplex, k, &nearzero);
-          if (nearzero)
-            qh_setappend (&tested, point);
-          else {
-            qh_setappend (&simplex, point);
-            if (++k == dim)  /* use search for last point */
-	      break;
-	  }
-	}
-      }
-    }
-    while (k != dim && (point= (pointT*)qh_setdellast (maxpoints))) {
-      if (!qh_setin (simplex, point) && !qh_setin (tested, point)){
-        qh_detsimplex (point, simplex, k, &nearzero);
-        if (nearzero)
-          qh_setappend (&tested, point);
-        else {
-          qh_setappend (&simplex, point);
-          k++;
-	}
-      }
-    }
-    index= 0;
-    while (k != dim && (point= qh_point (index++))) {
-      if (!qh_setin (simplex, point) && !qh_setin (tested, point)){
-        qh_detsimplex (point, simplex, k, &nearzero);
-        if (!nearzero){
-          qh_setappend (&simplex, point);
-          k++;
-	}
-      }
-    }
-    qh_settempfree (&tested);
-    qh_maxsimplex (dim, maxpoints, points, numpoints, &simplex);
-  }else
-    qh_maxsimplex (dim, maxpoints, points, numpoints, &simplex);
-  FOREACHpoint_(simplex) 
-    qh_setaddnth (&vertices, 0, qh_newvertex(point)); /* descending order */
-  qh_settempfree (&simplex);
-  return vertices;
-} /* initialvertices */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="isvertex">-</a>
-  
-  qh_isvertex(  )
-    returns vertex if point is in vertex set, else returns NULL
-
-  notes:
-    for qh.GOODvertex
-*/
-vertexT *qh_isvertex (pointT *point, setT *vertices) {
-  vertexT *vertex, **vertexp;
-
-  FOREACHvertex_(vertices) {
-    if (vertex->point == point)
-      return vertex;
-  }
-  return NULL;
-} /* isvertex */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="makenewfacets">-</a>
-  
-  qh_makenewfacets( point )
-    make new facets from point and qh.visible_list
-
-  returns:
-    qh.newfacet_list= list of new facets with hyperplanes and ->newfacet
-    qh.newvertex_list= list of vertices in new facets with ->newlist set
-    
-    if (qh.ONLYgood)
-      newfacets reference horizon facets, but not vice versa
-      ridges reference non-simplicial horizon ridges, but not vice versa
-      does not change existing facets
-    else
-      sets qh.NEWfacets
-      new facets attached to horizon facets and ridges
-      for visible facets, 
-        visible->r.replace is corresponding new facet
-
-  see also: 
-    qh_makenewplanes() -- make hyperplanes for facets
-    qh_attachnewfacets() -- attachnewfacets if not done here (qh ONLYgood)
-    qh_matchnewfacets() -- match up neighbors
-    qh_updatevertices() -- update vertex neighbors and delvertices
-    qh_deletevisible() -- delete visible facets
-    qh_checkpolygon() --check the result
-    qh_triangulate() -- triangulate a non-simplicial facet
-
-  design:
-    for each visible facet
-      make new facets to its horizon facets
-      update its f.replace 
-      clear its neighbor set
-*/
-vertexT *qh_makenewfacets (pointT *point /*visible_list*/) {
-  facetT *visible, *newfacet= NULL, *newfacet2= NULL, *neighbor, **neighborp;
-  vertexT *apex;
-  int numnew=0;
-
-  qh newfacet_list= qh facet_tail;
-  qh newvertex_list= qh vertex_tail;
-  apex= qh_newvertex(point);
-  qh_appendvertex (apex);  
-  qh visit_id++;
-  if (!qh ONLYgood)
-    qh NEWfacets= True;
-  FORALLvisible_facets {
-    FOREACHneighbor_(visible) 
-      neighbor->seen= False;
-    if (visible->ridges) {
-      visible->visitid= qh visit_id;
-      newfacet2= qh_makenew_nonsimplicial (visible, apex, &numnew);
-    }
-    if (visible->simplicial)
-      newfacet= qh_makenew_simplicial (visible, apex, &numnew);
-    if (!qh ONLYgood) {
-      if (newfacet2)  /* newfacet is null if all ridges defined */
-        newfacet= newfacet2;
-      if (newfacet)
-      	visible->f.replace= newfacet;
-      else
-        zinc_(Zinsidevisible);
-      SETfirst_(visible->neighbors)= NULL;
-    }
-  }
-  trace1((qh ferr, "qh_makenewfacets: created %d new facets from point p%d to horizon\n",
-	  numnew, qh_pointid(point)));
-  if (qh IStracing >= 4)
-    qh_printfacetlist (qh newfacet_list, NULL, qh_ALL);
-  return apex;
-} /* makenewfacets */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="matchduplicates">-</a>
-  
-  qh_matchduplicates( atfacet, atskip, hashsize, hashcount )
-    match duplicate ridges in qh.hash_table for atfacet/atskip
-    duplicates marked with ->dupridge and qh_DUPLICATEridge
-
-  returns:
-    picks match with worst merge (min distance apart)
-    updates hashcount
-  
-  see also:
-    qh_matchneighbor
-
-  notes:
-
-  design:
-    compute hash value for atfacet and atskip
-    repeat twice -- once to make best matches, once to match the rest
-      for each possible facet in qh.hash_table
-        if it is a matching facet and pass 2
-          make match 
-	  unless tricoplanar, mark match for merging (qh_MERGEridge)
-          [e.g., tricoplanar RBOX s 1000 t993602376 | QHULL C-1e-3 d Qbb FA Qt]
-        if it is a matching facet and pass 1
-          test if this is a better match
-      if pass 1,
-        make best match (it will not be merged)
-*/
-#ifndef qh_NOmerge
-void qh_matchduplicates (facetT *atfacet, int atskip, int hashsize, int *hashcount) {
-  boolT same, ismatch;
-  int hash, scan;
-  facetT *facet, *newfacet, *maxmatch= NULL, *maxmatch2= NULL, *nextfacet;
-  int skip, newskip, nextskip= 0, maxskip= 0, maxskip2= 0, makematch;
-  realT maxdist= -REALmax, mindist, dist2, low, high;
-
-  hash= (int)qh_gethash (hashsize, atfacet->vertices, qh hull_dim, 1, 
-                     SETelem_(atfacet->vertices, atskip));
-  trace2((qh ferr, "qh_matchduplicates: find duplicate matches for f%d skip %d hash %d hashcount %d\n",
-	  atfacet->id, atskip, hash, *hashcount));
-  for (makematch= 0; makematch < 2; makematch++) {
-    qh visit_id++;
-    for (newfacet= atfacet, newskip= atskip; newfacet; newfacet= nextfacet, newskip= nextskip) {
-      zinc_(Zhashlookup);
-      nextfacet= NULL;
-      newfacet->visitid= qh visit_id;
-      for (scan= hash; (facet= SETelemt_(qh hash_table, scan, facetT)); 
-	   scan= (++scan >= hashsize ? 0 : scan)) {
-	if (!facet->dupridge || facet->visitid == qh visit_id)
-	  continue;
-	zinc_(Zhashtests);
-	if (qh_matchvertices (1, newfacet->vertices, newskip, facet->vertices, &skip, &same)) {
-	  ismatch= (same == (newfacet->toporient ^ facet->toporient));
-	  if (SETelemt_(facet->neighbors, skip, facetT) != qh_DUPLICATEridge) {
-	    if (!makematch) {
-	      fprintf (qh ferr, "qhull internal error (qh_matchduplicates): missing dupridge at f%d skip %d for new f%d skip %d hash %d\n",
-		     facet->id, skip, newfacet->id, newskip, hash);
-	      qh_errexit2 (qh_ERRqhull, facet, newfacet);
-	    }
-	  }else if (ismatch && makematch) {
-	    if (SETelemt_(newfacet->neighbors, newskip, facetT) == qh_DUPLICATEridge) {
-	      SETelem_(facet->neighbors, skip)= newfacet;
-	      if (newfacet->tricoplanar)
-  		SETelem_(newfacet->neighbors, newskip)= facet;
-	      else
-		SETelem_(newfacet->neighbors, newskip)= qh_MERGEridge;
-	      *hashcount -= 2; /* removed two unmatched facets */
-	      trace4((qh ferr, "qh_matchduplicates: duplicate f%d skip %d matched with new f%d skip %d merge\n",
-		    facet->id, skip, newfacet->id, newskip));
-	    }
-	  }else if (ismatch) {
-	    mindist= qh_getdistance (facet, newfacet, &low, &high);
-	    dist2= qh_getdistance (newfacet, facet, &low, &high);
-	    minimize_(mindist, dist2);
-	    if (mindist > maxdist) {
-	      maxdist= mindist;
-	      maxmatch= facet;
-	      maxskip= skip;
-	      maxmatch2= newfacet;
-	      maxskip2= newskip;
-	    }
-	    trace3((qh ferr, "qh_matchduplicates: duplicate f%d skip %d new f%d skip %d at dist %2.2g, max is now f%d f%d\n",
-		    facet->id, skip, newfacet->id, newskip, mindist, 
-		    maxmatch->id, maxmatch2->id));
-	  }else { /* !ismatch */
-	    nextfacet= facet;
-	    nextskip= skip;
-	  }
-	}
-	if (makematch && !facet 
-        && SETelemt_(facet->neighbors, skip, facetT) == qh_DUPLICATEridge) {
-	  fprintf (qh ferr, "qhull internal error (qh_matchduplicates): no MERGEridge match for duplicate f%d skip %d at hash %d\n",
-		     newfacet->id, newskip, hash);
-	  qh_errexit (qh_ERRqhull, newfacet, NULL);
-	}
-      }
-    } /* end of for each new facet at hash */
-    if (!makematch) {
-      if (!maxmatch) {
-	fprintf (qh ferr, "qhull internal error (qh_matchduplicates): no maximum match at duplicate f%d skip %d at hash %d\n",
-		     atfacet->id, atskip, hash);
-	qh_errexit (qh_ERRqhull, atfacet, NULL);
-      }
-      SETelem_(maxmatch->neighbors, maxskip)= maxmatch2;
-      SETelem_(maxmatch2->neighbors, maxskip2)= maxmatch;
-      *hashcount -= 2; /* removed two unmatched facets */
-      zzinc_(Zmultiridge);
-      trace0((qh ferr, "qh_matchduplicates: duplicate f%d skip %d matched with new f%d skip %d keep\n",
-	      maxmatch->id, maxskip, maxmatch2->id, maxskip2));
-      qh_precision ("ridge with multiple neighbors");
-      if (qh IStracing >= 4)
-	qh_errprint ("DUPLICATED/MATCH", maxmatch, maxmatch2, NULL, NULL);
-    }
-  }
-} /* matchduplicates */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="nearcoplanar">-</a>
-  
-  qh_nearcoplanar()
-    for all facets, remove near-inside points from facet->coplanarset</li>
-    coplanar points defined by innerplane from qh_outerinner()
-
-  returns:
-    if qh KEEPcoplanar && !qh KEEPinside
-      facet->coplanarset only contains coplanar points
-    if qh.JOGGLEmax
-      drops inner plane by another qh.JOGGLEmax diagonal since a
-        vertex could shift out while a coplanar point shifts in
-  
-  notes:
-    used for qh.PREmerge and qh.JOGGLEmax
-    must agree with computation of qh.NEARcoplanar in qh_detroundoff()
-  design:
-    if not keeping coplanar or inside points
-      free all coplanar sets
-    else if not keeping both coplanar and inside points
-      remove !coplanar or !inside points from coplanar sets
-*/
-void qh_nearcoplanar ( void /* qh.facet_list */) {
-  facetT *facet;
-  pointT *point, **pointp;
-  int numpart;
-  realT dist, innerplane;
-
-  if (!qh KEEPcoplanar && !qh KEEPinside) {
-    FORALLfacets {
-      if (facet->coplanarset) 
-        qh_setfree( &facet->coplanarset);
-    }
-  }else if (!qh KEEPcoplanar || !qh KEEPinside) {
-    qh_outerinner (NULL, NULL, &innerplane);
-    if (qh JOGGLEmax < REALmax/2)
-      innerplane -= qh JOGGLEmax * sqrt (qh hull_dim);
-    numpart= 0;
-    FORALLfacets { 
-      if (facet->coplanarset) {
-        FOREACHpoint_(facet->coplanarset) {
-          numpart++;
-	  qh_distplane (point, facet, &dist); 
-  	  if (dist < innerplane) {
-	    if (!qh KEEPinside)
-              SETref_(point)= NULL;
-          }else if (!qh KEEPcoplanar)
-            SETref_(point)= NULL;
-        }
-	qh_setcompact (facet->coplanarset);
-      }
-    }
-    zzadd_(Zcheckpart, numpart);
-  }
-} /* nearcoplanar */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="nearvertex">-</a>
-  
-  qh_nearvertex( facet, point, bestdist )
-    return nearest vertex in facet to point
-
-  returns:
-    vertex and its distance
-    
-  notes:
-    if qh.DELAUNAY
-      distance is measured in the input set
-    searches neighboring tricoplanar facets (requires vertexneighbors)
-      Slow implementation.  Recomputes vertex set for each point.
-    The vertex set could be stored in the qh.keepcentrum facet.
-*/
-vertexT *qh_nearvertex (facetT *facet, pointT *point, realT *bestdistp) {
-  realT bestdist= REALmax, dist;
-  vertexT *bestvertex= NULL, *vertex, **vertexp, *apex;
-  coordT *center;
-  facetT *neighbor, **neighborp;
-  setT *vertices;
-  int dim= qh hull_dim;
-
-  if (qh DELAUNAY)
-    dim--;
-  if (facet->tricoplanar) {
-    if (!qh VERTEXneighbors || !facet->center) {
-      fprintf(qh ferr, "qhull internal error (qh_nearvertex): qh.VERTEXneighbors and facet->center required for tricoplanar facets\n");
-      qh_errexit(qh_ERRqhull, facet, NULL);
-    }
-    vertices= qh_settemp (qh TEMPsize);
-    apex= SETfirst_(facet->vertices);
-    center= facet->center;
-    FOREACHneighbor_(apex) {
-      if (neighbor->center == center) {
-	FOREACHvertex_(neighbor->vertices) 
-	  qh_setappend(&vertices, vertex);
-      }
-    }
-  }else 
-    vertices= facet->vertices;
-  FOREACHvertex_(vertices) {
-    dist= qh_pointdist (vertex->point, point, -dim);
-    if (dist < bestdist) {
-      bestdist= dist;
-      bestvertex= vertex;
-    }
-  }
-  if (facet->tricoplanar)
-    qh_settempfree (&vertices);
-  *bestdistp= sqrt (bestdist);
-  trace3((qh ferr, "qh_nearvertex: v%d dist %2.2g for f%d p%d\n", 
-        bestvertex->id, *bestdistp, facet->id, qh_pointid(point)));
-  return bestvertex;
-} /* nearvertex */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="newhashtable">-</a>
-  
-  qh_newhashtable( newsize )
-    returns size of qh.hash_table of at least newsize slots
-
-  notes:
-    assumes qh.hash_table is NULL
-    qh_HASHfactor determines the number of extra slots
-    size is not divisible by 2, 3, or 5
-*/
-int qh_newhashtable(int newsize) {
-  int size;
-
-  size= ((newsize+1)*qh_HASHfactor) | 0x1;  /* odd number */
-  while (True) { 
-    if ((size%3) && (size%5))
-      break;
-    size += 2;
-    /* loop terminates because there is an infinite number of primes */
-  }
-  qh hash_table= qh_setnew (size);
-  qh_setzero (qh hash_table, 0, size);
-  return size;
-} /* newhashtable */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="newvertex">-</a>
-  
-  qh_newvertex( point )
-    returns a new vertex for point
-*/
-vertexT *qh_newvertex(pointT *point) {
-  vertexT *vertex;
-
-  zinc_(Ztotvertices);
-  vertex= (vertexT *)qh_memalloc(sizeof(vertexT));
-  memset ((char *) vertex, 0, sizeof (vertexT));
-  if (qh vertex_id == 0xFFFFFF) {
-    fprintf(qh ferr, "qhull input error: more than %d vertices.  ID field overflows and two vertices\n\
-may have the same identifier.  Vertices not sorted correctly.\n", 0xFFFFFF);
-    qh_errexit(qh_ERRinput, NULL, NULL);
-  }
-  if (qh vertex_id == qh tracevertex_id)
-    qh tracevertex= vertex;
-  vertex->id= qh vertex_id++;
-  vertex->point= point;
-  trace4((qh ferr, "qh_newvertex: vertex p%d (v%d) created\n", qh_pointid(vertex->point), 
-	  vertex->id));
-  return (vertex);
-} /* newvertex */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="nextridge3d">-</a>
-  
-  qh_nextridge3d( atridge, facet, vertex )
-    return next ridge and vertex for a 3d facet
-
-  notes:
-    in qh_ORIENTclock order
-    this is a O(n^2) implementation to trace all ridges
-    be sure to stop on any 2nd visit
-  
-  design:
-    for each ridge
-      exit if it is the ridge after atridge
-*/
-ridgeT *qh_nextridge3d (ridgeT *atridge, facetT *facet, vertexT **vertexp) {
-  vertexT *atvertex, *vertex, *othervertex;
-  ridgeT *ridge, **ridgep;
-
-  if ((atridge->top == facet) ^ qh_ORIENTclock)
-    atvertex= SETsecondt_(atridge->vertices, vertexT);
-  else
-    atvertex= SETfirstt_(atridge->vertices, vertexT);
-  FOREACHridge_(facet->ridges) {
-    if (ridge == atridge)
-      continue;
-    if ((ridge->top == facet) ^ qh_ORIENTclock) {
-      othervertex= SETsecondt_(ridge->vertices, vertexT);
-      vertex= SETfirstt_(ridge->vertices, vertexT);
-    }else {
-      vertex= SETsecondt_(ridge->vertices, vertexT);
-      othervertex= SETfirstt_(ridge->vertices, vertexT);
-    }
-    if (vertex == atvertex) {
-      if (vertexp)
-        *vertexp= othervertex;
-      return ridge;
-    }
-  }
-  return NULL;
-} /* nextridge3d */
-#else /* qh_NOmerge */
-void qh_matchduplicates (facetT *atfacet, int atskip, int hashsize, int *hashcount) {
-}
-ridgeT *qh_nextridge3d (ridgeT *atridge, facetT *facet, vertexT **vertexp) {
-
-  return NULL;
-}
-#endif /* qh_NOmerge */
-  
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="outcoplanar">-</a>
-  
-  qh_outcoplanar()
-    move points from all facets' outsidesets to their coplanarsets
-
-  notes:
-    for post-processing under qh.NARROWhull
-
-  design:
-    for each facet
-      for each outside point for facet
-        partition point into coplanar set
-*/
-void qh_outcoplanar (void /* facet_list */) {
-  pointT *point, **pointp;
-  facetT *facet;
-  realT dist;
-
-  trace1((qh ferr, "qh_outcoplanar: move outsideset to coplanarset for qh NARROWhull\n"));
-  FORALLfacets {
-    FOREACHpoint_(facet->outsideset) {
-      qh num_outside--;
-      if (qh KEEPcoplanar || qh KEEPnearinside) {
-	qh_distplane (point, facet, &dist);
-        zinc_(Zpartition);
-	qh_partitioncoplanar (point, facet, &dist);
-      }
-    }
-    qh_setfree (&facet->outsideset);
-  }
-} /* outcoplanar */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="point">-</a>
-  
-  qh_point( id )
-    return point for a point id, or NULL if unknown
-
-  alternative code:
-    return ((pointT *)((unsigned   long)qh.first_point
-           + (unsigned long)((id)*qh.normal_size)));
-*/
-pointT *qh_point (int id) {
-
-  if (id < 0)
-    return NULL;
-  if (id < qh num_points)
-    return qh first_point + id * qh hull_dim;
-  id -= qh num_points;
-  if (id < qh_setsize (qh other_points))
-    return SETelemt_(qh other_points, id, pointT);
-  return NULL;
-} /* point */
-  
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="point_add">-</a>
-  
-  qh_point_add( set, point, elem )
-    stores elem at set[point.id]
-  
-  returns:
-    access function for qh_pointfacet and qh_pointvertex
-
-  notes:
-    checks point.id
-*/
-void qh_point_add (setT *set, pointT *point, void *elem) {
-  int id, size;
-
-  SETreturnsize_(set, size);
-  if ((id= qh_pointid(point)) < 0)
-    fprintf (qh ferr, "qhull internal warning (point_add): unknown point %p id %d\n", 
-      point, id);
-  else if (id >= size) {
-    fprintf (qh ferr, "qhull internal errror (point_add): point p%d is out of bounds (%d)\n",
-	     id, size);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }else
-    SETelem_(set, id)= elem;
-} /* point_add */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="pointfacet">-</a>
-  
-  qh_pointfacet()
-    return temporary set of facet for each point
-    the set is indexed by point id
-
-  notes:
-    vertices assigned to one of the facets
-    coplanarset assigned to the facet
-    outside set assigned to the facet
-    NULL if no facet for point (inside)
-      includes qh.GOODpointp
-
-  access:
-    FOREACHfacet_i_(facets) { ... }
-    SETelem_(facets, i)
-  
-  design:
-    for each facet
-      add each vertex
-      add each coplanar point
-      add each outside point
-*/
-setT *qh_pointfacet (void /*qh facet_list*/) {
-  int numpoints= qh num_points + qh_setsize (qh other_points);
-  setT *facets;
-  facetT *facet;
-  vertexT *vertex, **vertexp;
-  pointT *point, **pointp;
-  
-  facets= qh_settemp (numpoints);
-  qh_setzero (facets, 0, numpoints);
-  qh vertex_visit++;
-  FORALLfacets {
-    FOREACHvertex_(facet->vertices) {
-      if (vertex->visitid != qh vertex_visit) {
-        vertex->visitid= qh vertex_visit;
-        qh_point_add (facets, vertex->point, facet);
-      }
-    }
-    FOREACHpoint_(facet->coplanarset) 
-      qh_point_add (facets, point, facet);
-    FOREACHpoint_(facet->outsideset) 
-      qh_point_add (facets, point, facet);
-  }
-  return facets;
-} /* pointfacet */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="pointvertex">-</a>
-  
-  qh_pointvertex(  )
-    return temporary set of vertices indexed by point id
-    entry is NULL if no vertex for a point
-      this will include qh.GOODpointp
-
-  access:
-    FOREACHvertex_i_(vertices) { ... }
-    SETelem_(vertices, i)
-*/
-setT *qh_pointvertex (void /*qh facet_list*/) {
-  int numpoints= qh num_points + qh_setsize (qh other_points);
-  setT *vertices;
-  vertexT *vertex;
-  
-  vertices= qh_settemp (numpoints);
-  qh_setzero (vertices, 0, numpoints);
-  FORALLvertices 
-    qh_point_add (vertices, vertex->point, vertex);
-  return vertices;
-} /* pointvertex */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="prependfacet">-</a>
-  
-  qh_prependfacet( facet, facetlist )
-    prepend facet to the start of a facetlist
-
-  returns:
-    increments qh.numfacets
-    updates facetlist, qh.facet_list, facet_next
-  
-  notes:
-    be careful of prepending since it can lose a pointer.
-      e.g., can lose _next by deleting and then prepending before _next
-*/
-void qh_prependfacet(facetT *facet, facetT **facetlist) {
-  facetT *prevfacet, *list;
-  
-
-  trace4((qh ferr, "qh_prependfacet: prepend f%d before f%d\n",
-	  facet->id, getid_(*facetlist)));
-  if (!*facetlist)
-    (*facetlist)= qh facet_tail;
-  list= *facetlist;
-  prevfacet= list->previous;
-  facet->previous= prevfacet;
-  if (prevfacet)
-    prevfacet->next= facet;
-  list->previous= facet;
-  facet->next= *facetlist;
-  if (qh facet_list == list)  /* this may change *facetlist */
-    qh facet_list= facet;
-  if (qh facet_next == list)
-    qh facet_next= facet;
-  *facetlist= facet;
-  qh num_facets++;
-} /* prependfacet */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="printhashtable">-</a>
-  
-  qh_printhashtable( fp )
-    print hash table to fp
-
-  notes:
-    not in I/O to avoid bringing io.c in
-  
-  design:
-    for each hash entry
-      if defined
-        if unmatched or will merge (NULL, qh_MERGEridge, qh_DUPLICATEridge)
-          print entry and neighbors
-*/
-void qh_printhashtable(FILE *fp) {
-  facetT *facet, *neighbor;
-  int id, facet_i, facet_n, neighbor_i= 0, neighbor_n= 0;
-  vertexT *vertex, **vertexp;
-
-  FOREACHfacet_i_(qh hash_table) {
-    if (facet) {
-      FOREACHneighbor_i_(facet) {
-        if (!neighbor || neighbor == qh_MERGEridge || neighbor == qh_DUPLICATEridge) 
-          break;
-      }
-      if (neighbor_i == neighbor_n)
-        continue;
-      fprintf (fp, "hash %d f%d ", facet_i, facet->id);
-      FOREACHvertex_(facet->vertices)
-        fprintf (fp, "v%d ", vertex->id);
-      fprintf (fp, "\n neighbors:");
-      FOREACHneighbor_i_(facet) {
-	if (neighbor == qh_MERGEridge)
-	  id= -3;
-	else if (neighbor == qh_DUPLICATEridge)
-	  id= -2;
-	else
-	  id= getid_(neighbor);
-        fprintf (fp, " %d", id);
-      }
-      fprintf (fp, "\n");
-    }
-  }
-} /* printhashtable */
-     
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="printlists">-</a>
-  
-  qh_printlists( fp )
-    print out facet and vertex list for debugging (without 'f/v' tags)
-*/
-void qh_printlists (void) {
-  facetT *facet;
-  vertexT *vertex;
-  int count= 0;
-  
-  fprintf (qh ferr, "qh_printlists: facets:");
-  FORALLfacets {
-    if (++count % 100 == 0)
-      fprintf (qh ferr, "\n     ");
-    fprintf (qh ferr, " %d", facet->id);
-  }
-  fprintf (qh ferr, "\n  new facets %d visible facets %d next facet for qh_addpoint %d\n  vertices (new %d):",
-     getid_(qh newfacet_list), getid_(qh visible_list), getid_(qh facet_next),
-     getid_(qh newvertex_list));
-  count = 0;
-  FORALLvertices {
-    if (++count % 100 == 0)
-      fprintf (qh ferr, "\n     ");
-    fprintf (qh ferr, " %d", vertex->id);
-  }
-  fprintf (qh ferr, "\n");
-} /* printlists */
-  
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="resetlists">-</a>
-  
-  qh_resetlists( stats, qh_RESETvisible )
-    reset newvertex_list, newfacet_list, visible_list
-    if stats, 
-      maintains statistics
-
-  returns:
-    visible_list is empty if qh_deletevisible was called
-*/
-void qh_resetlists (boolT stats, boolT resetVisible /*qh newvertex_list newfacet_list visible_list*/) {
-  vertexT *vertex;
-  facetT *newfacet, *visible;
-  int totnew=0, totver=0;
-  
-  if (stats) {
-    FORALLvertex_(qh newvertex_list)
-      totver++;
-    FORALLnew_facets 
-      totnew++;
-    zadd_(Zvisvertextot, totver);
-    zmax_(Zvisvertexmax, totver);
-    zadd_(Znewfacettot, totnew);
-    zmax_(Znewfacetmax, totnew);
-  }
-  FORALLvertex_(qh newvertex_list)
-    vertex->newlist= False;
-  qh newvertex_list= NULL;
-  FORALLnew_facets
-    newfacet->newfacet= False;
-  qh newfacet_list= NULL;
-  if (resetVisible) {
-    FORALLvisible_facets {
-      visible->f.replace= NULL;
-      visible->visible= False;
-    }
-    qh num_visible= 0;
-  }
-  qh visible_list= NULL; /* may still have visible facets via qh_triangulate */
-  qh NEWfacets= False;
-} /* resetlists */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="setvoronoi_all">-</a>
-  
-  qh_setvoronoi_all()
-    compute Voronoi centers for all facets
-    includes upperDelaunay facets if qh.UPPERdelaunay ('Qu')
-
-  returns:
-    facet->center is the Voronoi center
-    
-  notes:
-    this is unused/untested code
-      please email bradb@shore.net if this works ok for you
-  
-  use:
-    FORALLvertices {...} to locate the vertex for a point.  
-    FOREACHneighbor_(vertex) {...} to visit the Voronoi centers for a Voronoi cell.
-*/
-void qh_setvoronoi_all (void) {
-  facetT *facet;
-
-  qh_clearcenters (qh_ASvoronoi);
-  qh_vertexneighbors();
-  
-  FORALLfacets {
-    if (!facet->normal || !facet->upperdelaunay || qh UPPERdelaunay) {
-      if (!facet->center)
-        facet->center= qh_facetcenter (facet->vertices);
-    }
-  }
-} /* setvoronoi_all */
-
-#ifndef qh_NOmerge
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="triangulate">-</a>
-  
-  qh_triangulate()
-    triangulate non-simplicial facets on qh.facet_list, 
-    if qh.CENTERtype=qh_ASvoronoi, sets Voronoi centers of non-simplicial facets
-
-  returns:
-    all facets simplicial
-    each tricoplanar facet has ->f.triowner == owner of ->center,normal,etc.
-
-  notes:
-    call after qh_check_output since may switch to Voronoi centers
-    Output may overwrite ->f.triowner with ->f.area
-*/
-void qh_triangulate (void /*qh facet_list*/) {
-  facetT *facet, *nextfacet, *owner;
-  int onlygood= qh ONLYgood;
-  facetT *neighbor, *visible= NULL, *facet1, *facet2, *new_facet_list= NULL;
-  facetT *orig_neighbor= NULL, *otherfacet;
-  vertexT *new_vertex_list= NULL;
-  mergeT *merge; 
-  mergeType mergetype;
-  int neighbor_i, neighbor_n;
-
-  trace1((qh ferr, "qh_triangulate: triangulate non-simplicial facets\n"));
-  if (qh hull_dim == 2)
-    return;
-  if (qh VORONOI) {  /* otherwise lose Voronoi centers [could rebuild vertex set from tricoplanar] */
-    qh_clearcenters (qh_ASvoronoi);
-    qh_vertexneighbors();
-  }
-  qh ONLYgood= False; /* for makenew_nonsimplicial */
-  qh visit_id++;
-  qh NEWfacets= True;
-  qh degen_mergeset= qh_settemp (qh TEMPsize);
-  qh newvertex_list= qh vertex_tail;
-  for (facet= qh facet_list; facet && facet->next; facet= nextfacet) { /* non-simplicial facets moved to end */
-    nextfacet= facet->next;
-    if (facet->visible || facet->simplicial)
-      continue;
-    /* triangulate all non-simplicial facets, otherwise merging does not work, e.g., RBOX c P-0.1 P+0.1 P+0.1 D3 | QHULL d Qt Tv */
-    if (!new_facet_list)
-      new_facet_list= facet;  /* will be moved to end */
-    qh_triangulate_facet (facet, &new_vertex_list);
-  }
-  trace2((qh ferr, "qh_triangulate: delete null facets from f%d -- apex same as second vertex\n", getid_(new_facet_list)));
-  for (facet= new_facet_list; facet && facet->next; facet= nextfacet) { /* null facets moved to end */
-    nextfacet= facet->next;
-    if (facet->visible) 
-      continue;
-    if (facet->ridges) {
-      if (qh_setsize(facet->ridges) > 0) {
-	fprintf( qh ferr, "qhull error (qh_triangulate): ridges still defined for f%d\n", facet->id);
-	qh_errexit (qh_ERRqhull, facet, NULL);
-      }
-      qh_setfree (&facet->ridges);
-    }
-    if (SETfirst_(facet->vertices) == SETsecond_(facet->vertices)) {
-      zinc_(Ztrinull);
-      qh_triangulate_null (facet);
-    }
-  }
-  trace2((qh ferr, "qh_triangulate: delete %d or more mirror facets -- same vertices and neighbors\n", qh_setsize(qh degen_mergeset)));
-  qh visible_list= qh facet_tail;
-  while ((merge= (mergeT*)qh_setdellast (qh degen_mergeset))) {
-    facet1= merge->facet1;
-    facet2= merge->facet2;
-    mergetype= merge->type;
-    qh_memfree (merge, sizeof(mergeT));
-    if (mergetype == MRGmirror) {
-      zinc_(Ztrimirror);
-      qh_triangulate_mirror (facet1, facet2);
-    }
-  }
-  qh_settempfree(&qh degen_mergeset);
-  trace2((qh ferr, "qh_triangulate: update neighbor lists for vertices from v%d\n", getid_(new_vertex_list)));
-  qh newvertex_list= new_vertex_list;  /* all vertices of new facets */
-  qh visible_list= NULL;
-  qh_updatevertices(/*qh newvertex_list, empty newfacet_list and visible_list*/);
-  qh_resetlists (False, !qh_RESETvisible /*qh newvertex_list, empty newfacet_list and visible_list*/);
-
-  trace2((qh ferr, "qh_triangulate: identify degenerate tricoplanar facets from f%d\n", getid_(new_facet_list)));
-  trace2((qh ferr, "qh_triangulate: and replace facet->f.triowner with tricoplanar facets that own center, normal, etc.\n"));
-  FORALLfacet_(new_facet_list) {
-    if (facet->tricoplanar && !facet->visible) {
-      FOREACHneighbor_i_(facet) {
-	if (neighbor_i == 0) {  /* first iteration */
-	  if (neighbor->tricoplanar)
-            orig_neighbor= neighbor->f.triowner;
-	  else
-	    orig_neighbor= neighbor;
-	}else {
-	  if (neighbor->tricoplanar)
-  	    otherfacet= neighbor->f.triowner;
-	  else
-	    otherfacet= neighbor;
-	  if (orig_neighbor == otherfacet) {
-	    zinc_(Ztridegen);
-	    facet->degenerate= True;
-	    break;
-	  }
-	}
-      }
-    }
-  }
-
-  trace2((qh ferr, "qh_triangulate: delete visible facets -- non-simplicial, null, and mirrored facets\n"));
-  owner= NULL;
-  visible= NULL;
-  for (facet= new_facet_list; facet && facet->next; facet= nextfacet) { /* may delete facet */
-    nextfacet= facet->next;
-    if (facet->visible) {
-      if (facet->tricoplanar) { /* a null or mirrored facet */
-	qh_delfacet(facet);
-	qh num_visible--;
-      }else {  /* a non-simplicial facet followed by its tricoplanars */
-	if (visible && !owner) {
-	  /*  RBOX 200 s D5 t1001471447 | QHULL Qt C-0.01 Qx Qc Tv Qt -- f4483 had 6 vertices/neighbors and 8 ridges */
-	  trace2((qh ferr, "qh_triangulate: all tricoplanar facets degenerate for non-simplicial facet f%d\n",
-		       visible->id));
-	  qh_delfacet(visible);
-	  qh num_visible--;
-	}
-	visible= facet;
-	owner= NULL;
-      }
-    }else if (facet->tricoplanar) {
-      if (facet->f.triowner != visible) { 
-	fprintf( qh ferr, "qhull error (qh_triangulate): tricoplanar facet f%d not owned by its visible, non-simplicial facet f%d\n", facet->id, getid_(visible));
-	qh_errexit2 (qh_ERRqhull, facet, visible);
-      }
-      if (owner) 
-	facet->f.triowner= owner;
-      else if (!facet->degenerate) {
-	owner= facet;
-	nextfacet= visible->next; /* rescan tricoplanar facets with owner */
-	facet->keepcentrum= True;  /* one facet owns ->normal, etc. */
-	facet->coplanarset= visible->coplanarset;
-	facet->outsideset= visible->outsideset;
-  	visible->coplanarset= NULL;
-	visible->outsideset= NULL;
-        if (!qh TRInormals) { /* center and normal copied to tricoplanar facets */
-	  visible->center= NULL;
-	  visible->normal= NULL;
-	}
-	qh_delfacet(visible);
-	qh num_visible--;
-      }
-    }
-  }
-  if (visible && !owner) {
-    trace2((qh ferr, "qh_triangulate: all tricoplanar facets degenerate for last non-simplicial facet f%d\n",
-	         visible->id));
-    qh_delfacet(visible);
-    qh num_visible--;
-  }
-  qh NEWfacets= False;
-  qh ONLYgood= onlygood; /* restore value */
-  if (qh CHECKfrequently) 
-    qh_checkpolygon (qh facet_list);
-} /* triangulate */
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="triangulate_facet">-</a>
-  
-  qh_triangulate_facet (facetA)
-    triangulate a non-simplicial facet
-      if qh.CENTERtype=qh_ASvoronoi, sets its Voronoi center
-  returns:
-    qh.newfacet_list == simplicial facets
-      facet->tricoplanar set and ->keepcentrum false
-      facet->degenerate set if duplicated apex
-      facet->f.trivisible set to facetA
-      facet->center copied from facetA (created if qh_ASvoronoi)
-	qh_eachvoronoi, qh_detvridge, qh_detvridge3 assume centers copied
-      facet->normal,offset,maxoutside copied from facetA
-
-  notes:
-      qh_makenew_nonsimplicial uses neighbor->seen for the same
-
-  see also:
-      qh_addpoint() -- add a point
-      qh_makenewfacets() -- construct a cone of facets for a new vertex
-
-  design:
-      if qh_ASvoronoi, 
-	 compute Voronoi center (facet->center)
-      select first vertex (highest ID to preserve ID ordering of ->vertices)
-      triangulate from vertex to ridges
-      copy facet->center, normal, offset
-      update vertex neighbors
-*/
-void qh_triangulate_facet (facetT *facetA, vertexT **first_vertex) {
-  facetT *newfacet;
-  facetT *neighbor, **neighborp;
-  vertexT *apex;
-  int numnew=0;
-
-  trace3((qh ferr, "qh_triangulate_facet: triangulate facet f%d\n", facetA->id));
-
-  if (qh IStracing >= 4)
-    qh_printfacet (qh ferr, facetA);
-  FOREACHneighbor_(facetA) {
-    neighbor->seen= False;
-    neighbor->coplanar= False;
-  }
-  if (qh CENTERtype == qh_ASvoronoi && !facetA->center  /* matches upperdelaunay in qh_setfacetplane() */
-        && fabs_(facetA->normal[qh hull_dim -1]) >= qh ANGLEround * qh_ZEROdelaunay) {
-    facetA->center= qh_facetcenter (facetA->vertices);
-  }
-  qh_willdelete (facetA, NULL);
-  qh newfacet_list= qh facet_tail;
-  facetA->visitid= qh visit_id;
-  apex= SETfirst_(facetA->vertices);
-  qh_makenew_nonsimplicial (facetA, apex, &numnew);
-  SETfirst_(facetA->neighbors)= NULL;
-  FORALLnew_facets {
-    newfacet->tricoplanar= True;
-    newfacet->f.trivisible= facetA;
-    newfacet->degenerate= False;
-    newfacet->upperdelaunay= facetA->upperdelaunay;
-    newfacet->good= facetA->good;
-    if (qh TRInormals) { 
-      newfacet->keepcentrum= True;
-      newfacet->normal= qh_copypoints (facetA->normal, 1, qh hull_dim);
-      if (qh CENTERtype == qh_AScentrum) 
-	newfacet->center= qh_getcentrum (newfacet);
-      else
-	newfacet->center= qh_copypoints (facetA->center, 1, qh hull_dim);
-    }else {
-      newfacet->keepcentrum= False;
-      newfacet->normal= facetA->normal;
-      newfacet->center= facetA->center;
-    }
-    newfacet->offset= facetA->offset;
-#if qh_MAXoutside
-    newfacet->maxoutside= facetA->maxoutside;
-#endif
-  }
-  qh_matchnewfacets(/*qh newfacet_list*/);
-  zinc_(Ztricoplanar);
-  zadd_(Ztricoplanartot, numnew);
-  zmax_(Ztricoplanarmax, numnew);
-  qh visible_list= NULL;
-  if (!(*first_vertex))
-    (*first_vertex)= qh newvertex_list;
-  qh newvertex_list= NULL;
-  qh_updatevertices(/*qh newfacet_list, empty visible_list and newvertex_list*/);
-  qh_resetlists (False, !qh_RESETvisible /*qh newfacet_list, empty visible_list and newvertex_list*/);
-} /* triangulate_facet */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="triangulate_link">-</a>
-  
-  qh_triangulate_link (oldfacetA, facetA, oldfacetB, facetB)
-    relink facetA to facetB via oldfacets
-  returns:
-    adds mirror facets to qh degen_mergeset (4-d and up only)
-  design:
-    if they are already neighbors, the opposing neighbors become MRGmirror facets
-*/
-void qh_triangulate_link (facetT *oldfacetA, facetT *facetA, facetT *oldfacetB, facetT *facetB) {
-  int errmirror= False;
-
-  trace3((qh ferr, "qh_triangulate_link: relink old facets f%d and f%d between neighbors f%d and f%d\n", 
-         oldfacetA->id, oldfacetB->id, facetA->id, facetB->id));
-  if (qh_setin (facetA->neighbors, facetB)) {
-    if (!qh_setin (facetB->neighbors, facetA)) 
-      errmirror= True;
-    else
-      qh_appendmergeset (facetA, facetB, MRGmirror, NULL);
-  }else if (qh_setin (facetB->neighbors, facetA)) 
-    errmirror= True;
-  if (errmirror) {
-    fprintf( qh ferr, "qhull error (qh_triangulate_link): mirror facets f%d and f%d do not match for old facets f%d and f%d\n",
-       facetA->id, facetB->id, oldfacetA->id, oldfacetB->id);
-    qh_errexit2 (qh_ERRqhull, facetA, facetB);
-  }
-  qh_setreplace (facetB->neighbors, oldfacetB, facetA);
-  qh_setreplace (facetA->neighbors, oldfacetA, facetB);
-} /* triangulate_link */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="triangulate_mirror">-</a>
-  
-  qh_triangulate_mirror (facetA, facetB)
-    delete mirrored facets from qh_triangulate_null() and qh_triangulate_mirror
-      a mirrored facet shares the same vertices of a logical ridge
-  design:
-    since a null facet duplicates the first two vertices, the opposing neighbors absorb the null facet
-    if they are already neighbors, the opposing neighbors become MRGmirror facets
-*/
-void qh_triangulate_mirror (facetT *facetA, facetT *facetB) {
-  facetT *neighbor, *neighborB;
-  int neighbor_i, neighbor_n;
-
-  trace3((qh ferr, "qh_triangulate_mirror: delete mirrored facets f%d and f%d\n", 
-         facetA->id, facetB->id));
-  FOREACHneighbor_i_(facetA) {
-    neighborB= SETelemt_(facetB->neighbors, neighbor_i, facetT);
-    if (neighbor == neighborB)
-      continue; /* occurs twice */
-    qh_triangulate_link (facetA, neighbor, facetB, neighborB);
-  }
-  qh_willdelete (facetA, NULL);
-  qh_willdelete (facetB, NULL);
-} /* triangulate_mirror */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="triangulate_null">-</a>
-  
-  qh_triangulate_null (facetA)
-    remove null facetA from qh_triangulate_facet()
-      a null facet has vertex #1 (apex) == vertex #2
-  returns:
-    adds facetA to ->visible for deletion after qh_updatevertices
-    qh degen_mergeset contains mirror facets (4-d and up only)
-  design:
-    since a null facet duplicates the first two vertices, the opposing neighbors absorb the null facet
-    if they are already neighbors, the opposing neighbors become MRGmirror facets
-*/
-void qh_triangulate_null (facetT *facetA) {
-  facetT *neighbor, *otherfacet;
-
-  trace3((qh ferr, "qh_triangulate_null: delete null facet f%d\n", facetA->id));
-  neighbor= SETfirst_(facetA->neighbors);
-  otherfacet= SETsecond_(facetA->neighbors);
-  qh_triangulate_link (facetA, neighbor, facetA, otherfacet);
-  qh_willdelete (facetA, NULL);
-} /* triangulate_null */
-
-#else /* qh_NOmerge */
-void qh_triangulate (void) {
-}
-#endif /* qh_NOmerge */
-
-   /*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="vertexintersect">-</a>
-  
-  qh_vertexintersect( vertexsetA, vertexsetB )
-    intersects two vertex sets (inverse id ordered)
-    vertexsetA is a temporary set at the top of qhmem.tempstack
-
-  returns:
-    replaces vertexsetA with the intersection
-  
-  notes:
-    could overwrite vertexsetA if currently too slow
-*/
-void qh_vertexintersect(setT **vertexsetA,setT *vertexsetB) {
-  setT *intersection;
-
-  intersection= qh_vertexintersect_new (*vertexsetA, vertexsetB);
-  qh_settempfree (vertexsetA);
-  *vertexsetA= intersection;
-  qh_settemppush (intersection);
-} /* vertexintersect */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="vertexintersect_new">-</a>
-  
-  qh_vertexintersect_new(  )
-    intersects two vertex sets (inverse id ordered)
-
-  returns:
-    a new set
-*/
-setT *qh_vertexintersect_new (setT *vertexsetA,setT *vertexsetB) {
-  setT *intersection= qh_setnew (qh hull_dim - 1);
-  vertexT **vertexA= SETaddr_(vertexsetA, vertexT); 
-  vertexT **vertexB= SETaddr_(vertexsetB, vertexT); 
-
-  while (*vertexA && *vertexB) {
-    if (*vertexA  == *vertexB) {
-      qh_setappend(&intersection, *vertexA);
-      vertexA++; vertexB++;
-    }else {
-      if ((*vertexA)->id > (*vertexB)->id)
-        vertexA++;
-      else
-        vertexB++;
-    }
-  }
-  return intersection;
-} /* vertexintersect_new */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="vertexneighbors">-</a>
-  
-  qh_vertexneighbors()
-    for each vertex in qh.facet_list, 
-      determine its neighboring facets 
-
-  returns:
-    sets qh.VERTEXneighbors
-      nop if qh.VERTEXneighbors already set
-      qh_addpoint() will maintain them
-
-  notes:
-    assumes all vertex->neighbors are NULL
-
-  design:
-    for each facet
-      for each vertex
-        append facet to vertex->neighbors
-*/
-void qh_vertexneighbors (void /*qh facet_list*/) {
-  facetT *facet;
-  vertexT *vertex, **vertexp;
-
-  if (qh VERTEXneighbors)
-    return;
-  trace1((qh ferr, "qh_vertexneighbors: determing neighboring facets for each vertex\n"));
-  qh vertex_visit++;
-  FORALLfacets {
-    if (facet->visible)
-      continue;
-    FOREACHvertex_(facet->vertices) {
-      if (vertex->visitid != qh vertex_visit) {
-        vertex->visitid= qh vertex_visit;
-        vertex->neighbors= qh_setnew (qh hull_dim);
-      }
-      qh_setappend (&vertex->neighbors, facet);
-    }
-  }
-  qh VERTEXneighbors= True;
-} /* vertexneighbors */
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >-------------------------------</a><a name="vertexsubset">-</a>
-  
-  qh_vertexsubset( vertexsetA, vertexsetB )
-    returns True if vertexsetA is a subset of vertexsetB
-    assumes vertexsets are sorted
-
-  note:    
-    empty set is a subset of any other set
-*/
-boolT qh_vertexsubset(setT *vertexsetA, setT *vertexsetB) {
-  vertexT **vertexA= (vertexT **) SETaddr_(vertexsetA, vertexT);
-  vertexT **vertexB= (vertexT **) SETaddr_(vertexsetB, vertexT);
-
-  while (True) {
-    if (!*vertexA)
-      return True;
-    if (!*vertexB)
-      return False;
-    if ((*vertexA)->id > (*vertexB)->id)
-      return False;
-    if (*vertexA  == *vertexB)
-      vertexA++;
-    vertexB++; 
-  }
-  return False; /* avoid warnings */
-} /* vertexsubset */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-geom.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-geom.htm
deleted file mode 100644
index 0f16f4518e72054b2d99412fa660cca5eb5946ab..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-geom.htm
+++ /dev/null
@@ -1,291 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>geom.c, geom2.c -- geometric and floating point routines</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="../src/index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm#TOC">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-
-<hr>
-<!-- Main text of document. -->
-
-<h2>geom.c, geom2.c -- geometric and floating point routines</h2>
-<blockquote>
-<p>Geometrically, a vertex is a point with <em>d</em> coordinates
-and a facet is a halfspace. A <em>halfspace</em> is defined by an
-oriented hyperplane through the facet's vertices. A <em>hyperplane</em>
-is defined by <em>d</em> normalized coefficients and an offset. A
-point is <em>above</em> a facet if its distance to the facet is
-positive.</p>
-
-<p>Qhull uses floating point coordinates for input points,
-vertices, halfspace equations, centrums, and an interior point.</p>
-
-<p>Qhull may be configured for single precision or double
-precision floating point arithmetic (see <a href="user.h#realT">realT</a>
-). </p>
-
-<p>Each floating point operation may incur round-off error (see 
-<a href="qh-merge.htm#TOC">Merge</a>). The maximum error for distance
-computations is determined at initialization. The roundoff error
-in halfspace computation is accounted for by computing the
-distance from vertices to the halfspace. </p>
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <b>Geom</b> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a> &#149; 
-<a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a> &#149; 
-<a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a> &#149; 
-<a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a> &#149; 
-<a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a> </p>
-
-<h3>Index to <a href="geom.c">geom.c</a>, 
-<a href="geom2.c">geom2.c</a>, and <a href="geom.h">geom.h</a></h3>
-
-<ul>
-<li><a href="#gtype">geometric data types and constants</a> </li>
-<li><a href="#gmacro">mathematical macros</a>
-</li>
-<li><a href="#gmath">mathematical functions</a> </li>
-<li><a href="#gcomp">computational geometry functions</a> </li>
-<li><a href="#gpoint">point array functions</a> </li>
-<li><a href="#gfacet">geometric facet functions</a> </li>
-<li><a href="#ground">geometric roundoff functions</a></li>
-</ul>
-
-<h3><a href="qh-geom.htm#TOC">»</a><a name="gtype">geometric data types
-and constants</a></h3>
-
-<ul>
-<li><a href="qhull.h#coordT">coordT</a> coordinates and
-coefficients are stored as realT</li>
-<li><a href="qhull.h#pointT">pointT</a> a point is an array
-of <tt>DIM3</tt> coordinates </li>
-</ul>
-
-<h3><a href="qh-geom.htm#TOC">»</a><a name="gmacro">mathematical macros</a></h3>
-
-<ul>
-<li><a href="geom.h#fabs_">fabs_</a> returns the absolute
-value of a </li>
-<li><a href="geom.h#fmax_">fmax_</a> returns the maximum
-value of a and b </li>
-<li><a href="geom.h#fmin_">fmin_</a> returns the minimum
-value of a and b </li>
-<li><a href="geom.h#maximize_">maximize_</a> maximize a value
-</li>
-<li><a href="geom.h#minimize_">minimize_</a> minimize a value
-</li>
-<li><a href="geom.h#det2_">det2_</a> compute a 2-d
-determinate </li>
-<li><a href="geom.h#det3_">det3_</a> compute a 3-d
-determinate </li>
-<li><a href="geom.h#dX">dX, dY, dZ</a> compute the difference
-between two coordinates </li>
-</ul>
-
-<h3><a href="qh-geom.htm#TOC">»</a><a name="gmath">mathematical functions</a></h3>
-
-<ul>
-<li><a href="geom.c#backnormal">qh_backnormal</a> solve for
-normal using back substitution </li>
-<li><a href="geom2.c#crossproduct">qh_crossproduct</a>
-compute the cross product of two 3-d vectors </li>
-<li><a href="geom2.c#determinant">qh_determinant</a> compute
-the determinant of a square matrix </li>
-<li><a href="geom.c#gausselim">qh_gausselim</a> Gaussian
-elimination with partial pivoting </li>
-<li><a href="geom2.c#gram_schmidt">qh_gram_schmidt</a>
-implements Gram-Schmidt orthogonalization by rows </li>
-<li><a href="geom2.c#maxabsval">qh_maxabsval</a> return max
-absolute value of a vector </li>
-<li><a href="geom2.c#minabsval">qh_minabsval</a> return min
-absolute value of a dim vector </li>
-<li><a href="geom2.c#mindiff">qh_mindiff</a> return index of
-min absolute difference of two vectors </li>
-<li><a href="geom.c#normalize">qh_normalize</a> normalize a
-vector </li>
-<li><a href="geom.c#normalize2">qh_normalize2</a> normalize a
-vector and report if too small </li>
-<li><a href="geom2.c#printmatrix">qh_printmatrix</a> print
-matrix given by row vectors </li>
-<li><a href="geom2.c#rand">qh_rand/srand</a> generate random
-numbers </li>
-<li><a href="geom2.c#randomfactor">qh_randomfactor</a> return
-a random factor near 1.0 </li>
-<li><a href="geom2.c#randommatrix">qh_randommatrix</a>
-generate a random dimXdim matrix in range (-1,1) </li>
-</ul>
-
-<h3><a href="qh-geom.htm#TOC">»</a><a name="gcomp">computational geometry functions</a></h3>
-
-<ul>
-<li><a href="geom2.c#detsimplex">qh_detsimplex</a> compute
-determinate of a simplex of points </li>
-<li><a href="io.c#detvnorm">qh_detvnorm</a> determine normal for Voronoi ridge </li>
-<li><a href="geom2.c#distnorm">qh_distnorm</a> compute
-distance from point to hyperplane as defined by normal and offset</li>
-<li><a href="geom2.c#facetarea_simplex">qh_facetarea_simplex</a>
-return area of a simplex</li>
-<li><a href="geom.c#getangle">qh_getangle</a> return cosine
-of angle (i.e., dot product) </li>
-<li><a href="geom.c#getcenter">qh_getcenter</a> return
-arithmetic center for a set of vertices </li>
-<li><a href="geom2.c#pointdist">qh_pointdist</a> return
-distance between two points </li>
-<li><a href="geom2.c#rotatepoints">qh_rotatepoints</a> rotate
-numpoints points by a row matrix </li>
-<li><a href="geom2.c#sethalfspace">qh_sethalfspace</a> set
-coords to dual of halfspace relative to an interior point </li>
-<li><a href="geom.c#sethyperplane_det">qh_sethyperplane_det</a>
-return hyperplane for oriented simplex using determinates
-</li>
-<li><a href="geom.c#sethyperplane_gauss">qh_sethyperplane_gauss</a>
-return hyperplane for oriented simplex using Gaussian
-elimination </li>
-<li><a href="geom2.c#voronoi_center">qh_voronoi_center</a>
-return Voronoi center for a set of points </li>
-</ul>
-
-<h3><a href="qh-geom.htm#TOC">»</a><a name="gpoint">point array functions</a></h3>
-<ul>
-<li><a href="geom2.c#copypoints">qh_copypoints</a> return
-malloc'd copy of points</li>
-<li><a href="geom2.c#joggleinput">qh_joggleinput</a> joggle
-input points by qh.JOGGLEmax </li>
-<li><a href="geom2.c#maxmin">qh_maxmin</a> return max/min
-points for each dimension</li>
-<li><a href="geom2.c#maxsimplex">qh_maxsimplex</a> determines
-maximum simplex for a set of points </li>
-<li><a href="geom2.c#printpoints">qh_printpoints</a> print ids for a 
-set of points </li>
-<li><a href="geom2.c#projectinput">qh_projectinput</a> project
-input using qh DELAUNAY and qh low_bound/high_bound </li>
-<li><a href="geom2.c#projectpoints">qh_projectpoints</a>
-project points along one or more dimensions </li>
-<li><a href="geom2.c#rotateinput">qh_rotateinput</a> rotate
-input points using row matrix </li>
-<li><a href="geom2.c#scaleinput">qh_scaleinput</a> scale
-input points using qh low_bound/high_bound </li>
-<li><a href="geom2.c#scalelast">qh_scalelast</a> scale last
-coordinate to [0,m] for Delaunay triangulations </li>
-<li><a href="geom2.c#scalepoints">qh_scalepoints</a> scale
-points to new lowbound and highbound </li>
-<li><a href="geom2.c#setdelaunay">qh_setdelaunay</a> project
-points to paraboloid for Delaunay triangulation </li>
-<li><a href="geom2.c#sethalfspace_all">qh_sethalfspace_all</a>
-generate dual for halfspace intersection with interior
-point </li>
-</ul>
-
-<h3><a href="qh-geom.htm#TOC">»</a><a name="gfacet">geometric facet functions</a></h3>
-<ul>
-<li><a href="geom.c#distplane">qh_distplane</a> return
-distance from point to facet </li>
-<li><a href="geom2.c#facetarea">qh_facetarea</a> return area
-of a facet </li>
-<li><a href="geom2.c#facetcenter">qh_facetcenter</a> return
-Voronoi center for a facet's vertices </li>
-<li><a href="geom.c#findbest">qh_findbest</a> find visible
-facet or best facet for a point </li>
-<li><a href="geom.c#findbesthorizon">qh_findbesthorizon</a> 
-update best new facet with horizon facets</li>
-<li><a href="geom.c#findbestnew">qh_findbestnew</a> find best
-new facet for point </li>
-<li><a href="geom2.c#getarea">qh_getarea</a> get area of all
-facets in facetlist, collect statistics </li>
-<li><a href="geom.c#getcentrum">qh_getcentrum</a> return
-centrum for a facet </li>
-<li><a href="geom.c#getdistance">qh_getdistance</a> returns
-the max and min distance of a facet's vertices to a
-neighboring facet</li>
-<li><a href="geom2.c#findgooddist">qh_findgooddist</a> find
-best good facet visible for point from facet </li>
-<li><a href="geom2.c#inthresholds">qh_inthresholds</a> return
-True if facet normal within 'Pdn' and 'PDn'</li>
-<li><a href="geom2.c#orientoutside">qh_orientoutside</a>
-orient facet so that <tt>qh.interior_point</tt> is inside</li>
-<li><a href="geom.c#projectpoint">qh_projectpoint</a> project
-point onto a facet </li>
-<li><a href="geom.c#setfacetplane">qh_setfacetplane</a> sets
-the hyperplane for a facet </li>
-<li><a href="geom2.c#sharpnewfacets">qh_sharpnewfacets</a> true
-if new facets contains a sharp corner</li>
-</ul>
-
-<h3><a href="qh-geom.htm#TOC">»</a><a name="ground">geometric roundoff functions</a></h3>
-<ul>
-<li><a href="geom2.c#detjoggle">qh_detjoggle</a> determine
-default joggle for points and distance roundoff error</li>
-<li><a href="geom2.c#detroundoff">qh_detroundoff</a>
-determine maximum roundoff error and other precision constants</li>
-<li><a href="geom2.c#distround">qh_distround</a> compute
-maximum roundoff error due to a distance computation to a
-normalized hyperplane</li>
-<li><a href="geom2.c#divzero">qh_divzero</a> divide by a
-number that is nearly zero </li>
-<li><a href="geom2.c#maxouter">qh_maxouter</a> return maximum outer
-plane</li>
-<li><a href="geom2.c#outerinner">qh_outerinner</a> return actual
-outer and inner planes
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-
-
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-globa.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-globa.htm
deleted file mode 100644
index 26a75b5763c2af1b5b46878d255a08605f3bbb52..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-globa.htm
+++ /dev/null
@@ -1,159 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>global.c -- global variables and their functions</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm#TOC">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-
-<hr>
-<!-- Main text of document. -->
-
-<h2>global.c -- global variables and their functions</h2>
-<blockquote>
-<p>Qhull uses a global data structure, <tt>qh</tt>, to store
-globally defined constants, lists, sets, and variables. This
-allows multiple instances of Qhull to execute at the same time.
-The structure may be statically allocated or
-dynamically allocated with malloc().  See
-<a href="user.h#QHpointer">QHpointer</a>.
-</p>
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <b>Global</b> &#149; 
-<a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a> &#149; 
-<a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a> &#149; 
-<a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a> &#149; 
-<a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a> </p>
-
-<h3>Index to <a href="global.c">global.c</a> and 
-<a href="qhull.h">qhull.h</a></h3>
-
-<ul>
-<li><a href="#ovar">Qhull's global variables</a> </li>
-<li><a href="#ofunc">Global variable and initialization
-routines</a> </li>
-</ul>
-
-<h3><a href="qh-globa.htm#TOC">»</a><a name="ovar">Qhull's global
-variables</a></h3>
-
-<ul>
-<li><a href=global.c#qh_version>qh_version</a> version string
-<li><a href="qhull.h#qh">qh</a> all global variables for
-qhull are in <tt>qh,qhmem</tt>, and <tt>qhstat</tt></li>
-<li><a href="qhull.h#qh-const">qh constants</a> configuration
-flags and constants for Qhull </li>
-<li><a href="qhull.h#qh-prec">qh precision constants</a>
-precision constants for Qhull </li>
-<li><a href="qhull.h#qh-intern">qh internal constants</a>
-internal constants for Qhull </li>
-<li><a href="qhull.h#qh-lists">qh facet and vertex lists</a>
-lists of facets and vertices </li>
-<li><a href="qhull.h#qh-var">qh global variables</a> minimum
-and maximum distances, next visit ids, several flags, and
-other global variables. </li>
-<li><a href="qhull.h#qh-set">qh global sets</a> global sets
-for merging, hashing, input, etc. </li>
-<li><a href="qhull.h#qh-buf">qh global buffers</a> buffers
-for matrix operations and input </li>
-<li><a href="qhull.h#qh-static">qh static variables</a>
-static variables for individual functions </li>
-</ul>
-
-<h3><a href="qh-globa.htm#TOC">»</a><a name="ofunc">Global variable and
-initialization routines</a></h3>
-
-<ul>
-<li><a href="global.c#appendprint">qh_appendprint</a> append
-output format to <tt>qh.PRINTout</tt> </li>
-<li><a href="global.c#freebuffers">qh_freebuffers</a> free
-global memory buffers </li>
-<li><a href="global.c#freeqhull">qh_freeqhull</a> free memory
-used by qhull </li>
-<li><a href="global.c#init_A">qh_init_A</a> called before
-error handling initialized </li>
-<li><a href="global.c#init_B">qh_init_B</a> called after
-points are defined </li>
-<li><a href="global.c#init_qhull_command">qh_init_qhull_command</a>
-build <tt>qh.qhull_command</tt> from <tt>argc/argv</tt></li>
-<li><a href="global.c#initflags">qh_initflags</a> set flags
-and constants from command line </li>
-<li><a href="global.c#initqhull_buffers">qh_initqhull_buffers</a>
-initialize global memory buffers </li>
-<li><a href="global.c#initqhull_globals">qh_initqhull_globals</a>
-initialize global variables </li>
-<li><a href="global.c#initqhull_mem">qh_initqhull_mem</a>
-initialize Qhull memory management </li>
-<li><a href="global.c#initqhull_start">qh_initqhull_start</a>
-initialize default values at Qhull startup </li>
-<li><a href="global.c#initthresholds">qh_initthresholds</a>
-initialize 'Pdn' and 'PDn' thresholds </li>
-<li><a href="global.c#option">qh_option</a> append option
-description to <tt>qh.global_options</tt> </li>
-<li><a href="global.c#restore_qhull">qh_restore_qhull</a>
-restores a previously saved qhull </li>
-<li><a href="global.c#save_qhull">qh_save_qhull</a> saves
-qhull for a later qh_restore_qhull() </li>
-<li><a href="global.c#strtol">qh_strtol</a> duplicates
-strtod() and strtol() </li>
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-io.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-io.htm
deleted file mode 100644
index 2a0c256b628f6fb1804a4b5c2367c740b0181271..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-io.htm
+++ /dev/null
@@ -1,295 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>io.c -- input and output operations</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-<hr>
-
-<h2>io.c -- input and output operations</h2>
-<blockquote>
-
-<p>Qhull provides a wide range of input
-and output options. To organize the code, most output formats use
-the same driver: </p>
-
-<pre>
-    qh_printbegin( fp, format, facetlist, facets, printall );
-
-    FORALLfacet_( facetlist )
-      qh_printafacet( fp, format, facet, printall );
-
-    FOREACHfacet_( facets )
-      qh_printafacet( fp, format, facet, printall );
-
-    qh_printend( fp, format );
-</pre>
-
-<p>Note the 'printall' flag. It selects whether or not
-qh_skipfacet() is tested. </p>
-
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> <a name="TOC">&#149;</a>
-<a href="qh-globa.htm#TOC">Global</a> &#149; <b>Io</b> &#149; 
-<a href="qh-mem.htm#TOC">Mem</a> &#149; <a href="qh-merge.htm#TOC">Merge</a> &#149; 
-<a href="qh-poly.htm#TOC">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; 
-<a href="qh-set.htm#TOC">Set</a> &#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; 
-<a href="qh-user.htm#TOC">User</a> </p>
-
-<h3>Index to <a href="io.c">io.c</a> and <a href="io.h">io.h</a></h3>
-
-<ul>
-<li><a href="#iconst">io.h constants and types</a> </li>
-<li><a href="#ilevel">User level functions</a> </li>
-<li><a href="#iprint">Print functions for all output formats</a></li>
-<li><a href="#itext">Text output functions</a> </li>
-<li><a href="#iutil">Text utility functions</a></li>
-<li><a href="#igeom">Geomview output functions</a> </li>
-<li><a href="#iview">Geomview utility functions</a></li>
-</ul>
-
-<h3><a href="qh-io.htm#TOC">»</a><a name="iconst">io.h constants and types</a></h3>
-
-<ul>
-<li><a href="io.h#qh_MAXfirst">qh_MAXfirst</a> maximum length
-of first two lines of stdin </li>
-<li><a href="io.h#qh_WHITESPACE">qh_WHITESPACE</a> possible
-values of white space </li>
-<li><a href="io.h#printvridgeT">printvridgeT</a> function to
-print results of qh_printvdiagram or qh_eachvoronoi</li>
-</ul>
-
-<h3><a href="qh-io.htm#TOC">»</a><a name="ilevel">User level functions</a></h3>
-
-<ul>
-<li><a href="io.c#eachvoronoi_all">qh_eachvoronoi_all</a>
-visit each Voronoi ridge of the Voronoi diagram
-<li><a href="io.c#printhelp_degenerate">qh_printhelp_degenerate</a>
-prints descriptive message for precision error </li>
-<li><a href="io.c#printhelp_singular">qh_printhelp_singular</a>
-print help message for singular data </li>
-<li><a href="qhull.c#printsummary">qh_printsummary</a> print
-summary ('s')</li>
-<li><a href="io.c#produce_output">qh_produce_output</a>
-prints out the result of qhull()</li>
-<li><a href="io.c#readfeasible">qh_readfeasible</a> read
-interior point from remainder and qh fin ('H')</li>
-<li><a href="io.c#readpoints">qh_readpoints</a> read input
-points </li>
-<li><a href="io.c#setfeasible">qh_setfeasible</a> set
-interior point from qh feasible_string ('Hn,n,n')</li>
-</ul>
-
-<h3><a href="qh-io.htm#TOC">»</a><a name="iprint">Print functions for all
-output formats</a></h3>
-
-<ul>
-<li><a href="io.c#countfacets">qh_countfacets</a> count good
-facets for printing and set visitid </li>
-<li><a href="io.c#markkeep">qh_markkeep</a> mark good facets
-that meet qh.KEEParea ('PAn'), qh.KEEPmerge ('PMn'), and qh.KEEPminArea ('PFn')</li>
-<li><a href="io.c#order_vertexneighbors">qh_order_vertexneighbors</a>
-order neighbors for a 3-d vertex by adjacency ('i', 'o')</li>
-<li><a href="io.c#printafacet">qh_printafacet</a> print facet
-in an output format </li>
-<li><a href="io.c#printbegin">qh_printbegin</a> print header
-for an output format </li>
-<li><a href="io.c#printend">qh_printend</a> print trailer for
-an output format </li>
-<li><a href="user.c#printfacetlist">qh_printfacetlist</a>
-print facets in a facetlist</li>
-<li><a href="io.c#printfacets">qh_printfacets</a> print
-facetlist and/or facet set in an output format </li>
-<li><a href="io.c#printneighborhood">qh_printneighborhood</a>
-print neighborhood of one or two facets ('Po')</li>
-<li><a href="io.c#produce_output">qh_produce_output</a>
-print the results of qh_qhull() </li>
-<li><a href="io.c#skipfacet">qh_skipfacet</a> True if not
-printing this facet ('Pdk:n', 'QVn', 'QGn')</li>
-<li><a href="io.c#facetvertices">qh_facetvertices</a> return
-vertices in a set of facets ('p')</li>
-</ul>
-
-<h3><a href="qh-io.htm#TOC">»</a><a name="itext">Text output functions</a></h3>
-<ul>
-<li><a href="io.c#eachvoronoi">qh_eachvoronoi</a>
-print or visit each Voronoi ridge for an input site of the Voronoi diagram
-<li><a href="io.c#printextremes">qh_printextremes</a> print
-extreme points by point ID (vertices of convex hull) ('Fx')</li>
-<li><a href="io.c#printextremes_2d">qh_printextremes_2d</a> print
-2-d extreme points by point ID ('Fx')</li>
-<li><a href="io.c#printextremes_d">qh_printextremes_d</a> print
-extreme points of input sites for Delaunay triangulations ('Fx')</li>
-<li><a href="io.c#printfacet">qh_printfacet</a> print all
-fields of a facet ('f')</li>
-<li><a href="io.c#printfacet2math">qh_printfacet2math</a> print
-2-d Maple or Mathematica output for a facet ('FM' or 'm')</li>
-<li><a href="io.c#printfacet3math">qh_printfacet3math</a>
-print 3-d Maple or Mathematica facet ('FM' or 'm')</li>
-<li><a href="io.c#printfacet3vertex">qh_printfacet3vertex</a>
-print vertices for a 3-d facet ('i', 'o')</li>
-<li><a href="io.c#printfacetheader">qh_printfacetheader</a>
-prints header fields of a facet ('f')</li>
-<li><a href="io.c#printfacetNvertex_nonsimplicial">qh_printfacetNvertex_nonsimplicial</a>
-print vertices for an N-d non-simplicial facet ('i', 'Ft')</li>
-<li><a href="io.c#printfacetNvertex_simplicial">qh_printfacetNvertex_simplicial</a>
-print vertices for an N-d simplicial facet ('i', 'o', 'Ft')</li>
-<li><a href="io.c#printfacetridges">qh_printfacetridges</a>
-prints ridges of a facet ('f')</li>
-<li><a href="io.c#printpoints_out">qh_printpoints_out</a> prints
-vertices for facets by their point coordinates ('p')</li>
-<li><a href="io.c#printridge">qh_printridge</a> print all
-fields for a ridge ('f')</li>
-<li><a href="io.c#printvdiagram">qh_printvdiagram</a> print
-voronoi diagram as Voronoi vertices for each input pair</li>
-<li><a href="io.c#printvertex">qh_printvertex</a> print all
-fields for a vertex ('f')</li>
-<li><a href="io.c#printvertexlist">qh_printvertexlist</a>
-print vertices used by a list or set of facets ('f')</li>
-<li><a href="io.c#printvertices">qh_printvertices</a> print a
-set of vertices ('f')</li>
-<li><a href="io.c#printvneighbors">qh_printvneighbors</a>
-print vertex neighbors of vertices ('FN')</li>
-<li><a href="io.c#printvoronoi">qh_printvoronoi</a> print
-voronoi diagram in 'o' or 'G' format</li>
-</ul>
-
-<h3><a href="qh-io.htm#TOC">»</a><a name="iutil">Text utility functions</a></h3>
-<ul>
-<li><a href="io.c#dfacet">dfacet</a> print facet by ID </li>
-<li><a href="io.c#dvertex">dvertex</a> print vertex by ID </li>
-<li><a href="io.c#compare_facetarea">qh_compare_facetarea</a>
-used by qsort() to order facets by area </li>
-<li><a href="io.c#compare_facetmerge">qh_compare_facetmerge</a>
-used by qsort() to order facets by number of merges </li>
-<li><a href="io.c#compare_facetvisit">qh_compare_facetvisit</a>
-used by qsort() to order facets by visit ID or ID </li>
-<li><a href="io.c#compare_vertexpoint">qh_compare_vertexpoint</a>
-used by qsort() to order vertices by point ID </li>
-<li><a href="io.c#detvnorm">qh_detvnorm</a> determine normal for Voronoi ridge </li>
-<li><a href="io.c#detvridge">qh_detvridge</a> determine Voronoi
-ridge for an input site
-<li><a href="io.c#detvridge3">qh_detvridge3</a> determine 3-d Voronoi
-ridge for an input site
-<li><a href="io.c#facet2point">qh_facet2point</a> return two
-projected temporary vertices for a 2-d facet ('m', 'G')</li>
-<li><a href="io.c#markvoronoi">qh_markvoronoi</a> mark Voronoi
-vertices for printing
-<li><a href="io.c#printcenter">qh_printcenter</a> print
-facet-&gt;center as centrum or Voronoi center ('Ft', 'v p', 'FC', 'f') </li>
-<li><a href="io.c#printpoint">qh_printpoint</a>, qh_printpointid, print
-coordinates of a point ('p', 'o', 'Fp', 'G', 'f')</li>
-<li><a href="io.c#printpoint3">qh_printpoint3</a> prints 2-d,
-3-d, or 4-d point as 3-d coordinates ('G')</li>
-<li><a href="io.c#printvdiagram2">qh_printvdiagram2</a> print
-voronoi diagram for each ridge of each vertex from qh_markvoronoi</li>
-<li><a href="io.c#printvnorm">qh_printvnorm</a> print 
-separating plane of the Voronoi diagram for a pair of input sites</li>
-<li><a href="io.c#printvridge">qh_printvridge</a> print 
-ridge of the Voronoi diagram for a pair of input sites</li>
-<li><a href="io.c#projectdim3">qh_projectdim3</a> project 2-d
-3-d or 4-d point to a 3-d point ('G')</li>
-</ul>
-
-<h3><a href="qh-io.htm#TOC">»</a><a name="igeom">Geomview output functions</a></h3>
-<ul>
-<li><a href="io.c#printfacet2geom">qh_printfacet2geom</a>
-print facet as a 2-d VECT object </li>
-<li><a href="io.c#printfacet2geom_points">qh_printfacet2geom_points</a>
-print points as a 2-d VECT object with offset </li>
-<li><a href="io.c#printfacet3geom_nonsimplicial">qh_printfacet3geom_nonsimplicial</a>
-print Geomview OFF for a 3-d nonsimplicial facet. </li>
-<li><a href="io.c#printfacet3geom_points">qh_printfacet3geom_points</a>
-prints a 3-d facet as OFF Geomview object. </li>
-<li><a href="io.c#printfacet3geom_simplicial">qh_printfacet3geom_simplicial</a>
-print Geomview OFF for a 3-d simplicial facet. </li>
-<li><a href="io.c#printfacet4geom_nonsimplicial">qh_printfacet4geom_nonsimplicial</a>
-print Geomview 4OFF file for a 4d nonsimplicial facet </li>
-<li><a href="io.c#printfacet4geom_simplicial">qh_printfacet4geom_simplicial</a>
-print Geomview 4OFF file for a 4d simplicial facet </li>
-<li><a href="io.c#printhyperplaneintersection">qh_printhyperplaneintersection</a>
-print hyperplane intersection as OFF or 4OFF </li>
-<li><a href="io.c#printvoronoi">qh_printvoronoi</a> print
-voronoi diagram in 'o' or 'G' format</li>
-</ul>
-<h3><a href="qh-io.htm#TOC">»</a><a name="iview">Geomview utility functions</a></h3>
-<ul>
-<li><a href="io.c#geomplanes">qh_geomplanes</a>
-    return outer and inner planes for Geomview</li>
-<li><a href="io.c#printcentrum">qh_printcentrum</a> print
-centrum for a facet in OOGL format </li>
-<li><a href="io.c#printend4geom">qh_printend4geom</a> helper
-function for qh_printbegin/printend </li>
-<li><a href="io.c#printhyperplaneintersection">qh_printhyperplaneintersection</a>
-print Geomview OFF or 4OFF for the intersection of two
-hyperplanes in 3-d or 4-d </li>
-<li><a href="io.c#printline3geom">qh_printline3geom</a> prints a
-line as a VECT </li>
-<li><a href="io.c#printpointvect">qh_printpointvect</a>
-prints a 2-d or 3-d point as 3-d VECT's </li>
-<li><a href="io.c#printpointvect2">qh_printpointvect2</a>
-prints a 2-d or 3-d point as 2 3-d VECT's </li>
-<li><a href="io.c#printspheres">qh_printspheres</a> prints 3-d
-vertices as OFF spheres </li>
-</ul>
-<p>
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-mem.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-mem.htm
deleted file mode 100644
index cfc414a7750f859eaf14e11e01910e5cae594d3f..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-mem.htm
+++ /dev/null
@@ -1,140 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>mem.c -- memory operations</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-<hr>
-
-<h2>mem.c -- memory operations</h2>
-<blockquote>
-<p>Qhull uses quick-fit memory allocation. It maintains a
-set of free lists for a variety of small allocations. A
-small request returns a block from the best fitting free
-list. If the free list is empty, Qhull allocates a block
-from a reserved buffer. </p>
-<p>Use 'T5' to trace memory allocations.</p>
-
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a> &#149;
-<a href="qh-io.htm#TOC">Io</a> &#149; <b>Mem</b>
-&#149; <a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a>
-&#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a>
-&#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a>
-</p>
-<h3>Index to <a href="mem.c">mem.c</a> and 
-<a href="mem.h">mem.h</a></h3>
-<ul>
-<li><a href="#etype">mem.h data types</a> </li>
-<li><a href="#emacro">mem.h macros</a> </li>
-<li><a href="#efunc">User level functions</a> </li>
-</ul>
-<h3><a href="qh-mem.htm#TOC">»</a><a name="etype">mem.h data types and constants</a></h3>
-<ul>
-<li><a href="mem.h#ptr_intT">ptr_intT</a> for casting
-a void* to an integer-type </li>
-<li><a href="mem.h#qhmemT">qhmemT</a> global memory
-structure for mem.c </li>
-<li><a href="mem.h#NOmem">qh_NOmem</a> disable memory allocation</li>
-</ul>
-<h3><a href="qh-mem.htm#TOC">»</a><a name="emacro">mem.h macros</a></h3>
-<ul>
-<li><a href="mem.h#memalloc_">qh_memalloc_</a>
-allocate memory</li>
-<li><a href="mem.h#memfree_">qh_memfree_</a> free
-memory</li>
-</ul>
-<h3><a href="qh-mem.htm#TOC">»</a><a name="efunc">User level
-functions</a></h3>
-<ul>
-<li><a href="mem.c#memalloc">qh_memalloc</a> allocate
-memory </li>
-<li><a href="mem.c#memfree">qh_memfree</a> free
-memory </li>
-<li><a href="mem.c#meminit">qh_meminit</a> initialize
-memory </li>
-<li><a href="mem.c#memstatistics">qh_memstatistics</a>
-print memory statistics </li>
-<li><a href="mem.c#NOmem">qh_NOmem</a> allocation routines with malloc() and free()
-</ul>
-
-<h3><a href="qh-mem.htm#TOC">»</a><a name="m">Initialization and
-termination functions</a></h3>
-<ul>
-<li><a href="mem.c#intcompare">qh_intcompare</a> used by
-qsort and bsearch to compare two integers </li>
-<li><a href="mem.c#memfreeshort">qh_memfreeshort</a>
-frees up all short and qhmem memory allocations </li>
-<li><a href="mem.c#meminit">qh_meminit</a> initialize
-memory </li>
-<li><a href="mem.c#meminitbuffers">qh_meminitbuffers</a>
-initialize qhmem </li>
-<li><a href="mem.c#memsetup">qh_memsetup</a> set up
-memory after running memsize() </li>
-<li><a href="mem.c#memsize">qh_memsize</a> define a free
-list for this size </li>
-<li><a href="mem.c#memstatistics">qh_memstatistics</a>
-print out memory statistics </li>
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-merge.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-merge.htm
deleted file mode 100644
index 0c17b5dd35fd0eced4450551e8e4fcdcd333dfbb..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-merge.htm
+++ /dev/null
@@ -1,364 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>merge.c -- facet merge operations</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-<hr>
-
-<h2>merge.c -- facet merge operations</h2>
-<blockquote>
-<p>Qhull handles precision problems by merged facets or joggled input.
-Except for redundant vertices, it corrects a problem by
-merging two facets. When done, all facets are clearly
-convex. See <a href="../html/qh-impre.htm">Imprecision in Qhull</a>
-for further information. </p>
-<p>Users may joggle the input ('<a href="../html/qh-optq.htm#QJn">QJn</a>')
-instead of merging facets. </p>
-<p>Qhull detects and corrects the following problems: </p>
-<ul>
-<li><b>More than two facets meeting at a ridge. </b>When
-Qhull creates facets, it creates an even number
-of facets for each ridge. A convex hull always
-has two facets for each ridge. More than two
-facets may be created if non-adjacent facets
-share a vertex. This is called a <em>duplicate
-ridge</em>. In 2-d, a duplicate ridge would
-create a loop of facets. </li>
-</ul>
-<ul>
-<li><b>A facet contained in another facet. </b>Facet
-merging may leave all vertices of one facet as a
-subset of the vertices of another facet. This is
-called a <em>redundant facet</em>. </li>
-</ul>
-<ul>
-<li><b>A facet with fewer than three neighbors. </b>Facet
-merging may leave a facet with one or two
-neighbors. This is called a <em>degenerate facet</em>.
-</li>
-</ul>
-<ul>
-<li><b>A facet with flipped orientation. </b>A
-facet's hyperplane may define a halfspace that
-does not include the interior point.This is
-called a <em>flipped facet</em>. </li>
-</ul>
-<ul>
-<li><strong>A coplanar horizon facet.</strong> A
-newly processed point may be coplanar with an
-horizon facet. Qhull creates a new facet without
-a hyperplane. It links new facets for the same
-horizon facet together. This is called a <em>samecycle</em>.
-The new facet or samecycle is merged into the
-horizon facet. </li>
-</ul>
-<ul>
-<li><b>Concave facets. </b>A facet's centrum may be
-above a neighboring facet. If so, the facets meet
-at a concave angle. </li>
-</ul>
-<ul>
-<li><b>Coplanar facets. </b>A facet's centrum may be
-coplanar with a neighboring facet (i.e., it is
-neither clearly below nor clearly above the
-facet's hyperplane). Qhull removes coplanar
-facets in independent sets sorted by angle.</li>
-</ul>
-<ul>
-<li><b>Redundant vertex. </b>A vertex may have fewer
-than three neighboring facets. If so, it is
-redundant and may be renamed to an adjacent
-vertex without changing the topological
-structure.This is called a <em>redundant vertex</em>.
-</li>
-</ul>
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a>
-&#149; <a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a>
-&#149; <b>Merge</b> &#149; <a href="qh-poly.htm#TOC">Poly</a>
-&#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a>
-&#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a>
-</p>
-<h3>Index to <a href="merge.c">merge.c</a> and 
-<a href="merge.h">merge.h</a></h3>
-<ul>
-<li><a href="#mtype">merge.h data types, macros, and
-global sets</a> </li>
-<li><a href="#mconst">merge.h constants</a> </li>
-</ul>
-<ul>
-<li><a href="#mtop">top-level merge functions</a> </li>
-<li><a href="#mset">functions for identifying merges</a></li>
-<li><a href="#mbest">functions for determining the
-best merge</a> </li>
-<li><a href="#mmerge">functions for merging facets</a>
-</li>
-<li><a href="#mcycle">functions for merging a cycle
-of facets</a> </li>
-<li><a href="#mrename">functions for renaming a
-vertex</a> </li>
-<li><a href="#mvertex">functions for identifying
-vertices for renaming</a> </li>
-<li><a href="#mcheck">functions for check and trace</a> </li>
-</ul>
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mtype">merge.h data
-types, macros, and global sets</a></h3>
-<ul>
-<li><a href="merge.h#mergeT">mergeT</a> structure to
-identify a merge of two facets</li>
-<li><a href="merge.h#FOREACHmerge_">FOREACHmerge_</a>
-assign 'merge' to each merge in merges </li>
-<li><a href="qhull.h#qh-set">qh global sets</a>
-qh.facet_mergeset contains non-convex merges
-while qh.degen_mergeset contains degenerate and
-redundant facets</li>
-</ul>
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mconst">merge.h
-constants</a></h3>
-<ul>
-<li><a href="qhull.h#qh-prec">qh precision constants</a>
-precision constants for Qhull </li>
-<li><a href="merge.h#MRG">MRG...</a> indicates the
-type of a merge (mergeT-&gt;type)</li>
-<li><a href="merge.h#qh_ANGLEredundant">qh_ANGLEredundant</a>
-indicates redundant merge in mergeT-&gt;angle </li>
-<li><a href="merge.h#qh_ANGLEdegen">qh_ANGLEdegen</a>
-indicates degenerate facet in mergeT-&gt;angle </li>
-<li><a href="merge.h#qh_ANGLEconcave">qh_ANGLEconcave</a>
-offset to indicate concave facets in
-mergeT-&gt;angle </li>
-<li><a href="merge.h#qh_MERGEapex">qh_MERGEapex</a>
-flag for qh_mergefacet() to indicate an apex
-merge </li>
-</ul>
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mtop">top-level merge
-functions</a></h3>
-<ul>
-<li><a href="merge.c#all_merges">qh_all_merges</a>
-merge all non-convex facets </li>
-<li><a href="merge.c#checkzero">qh_checkzero</a>
-check that facets are clearly convex </li>
-<li><a href="merge.c#flippedmerges">qh_flippedmerges</a>
-merge flipped facets into best neighbor </li>
-<li><a href="merge.c#forcedmerges">qh_forcedmerges</a>
-merge all duplicate ridges </li>
-<li><a href="merge.c#merge_degenredundant">qh_merge_degenredundant</a>
-merge degenerate and redundant facets </li>
-<li><a href="merge.c#merge_nonconvex">qh_merge_nonconvex</a>
-merge a non-convex ridge </li>
-<li><a href="merge.c#premerge">qh_premerge</a>
-pre-merge non-convex facets </li>
-<li><a href="merge.c#postmerge">qh_postmerge</a>
-post-merge nonconvex facets as defined by
-maxcentrum/maxangle </li>
-</ul>
-
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mset">functions for
-identifying merges</a></h3>
-<ul>
-<li><a href="merge.c#appendmergeset">qh_appendmergeset</a>
-appends an entry to qh.facet_mergeset</li>
-<li><a href="merge.c#compareangle">qh_compareangle</a>
-used by qsort() to order merges </li>
-<li><a href="merge.c#comparemerge">qh_comparemerge</a>
-used by qsort() to order merges </li>
-<li><a href="merge.c#degen_redundant_facet">qh_degen_redundant_facet</a>
-check for a degenerate and redundant facet</li>
-<li><a href="merge.c#degen_redundant_neighbors">qh_degen_redundant_neighbors</a>
-append degenerate and redundant neighbors to
-qh.degen_mergeset </li>
-<li><a href="merge.c#getmergeset_initial">qh_getmergeset_initial</a>
-build initial qh.facet_mergeset </li>
-<li><a href="merge.c#getmergeset">qh_getmergeset</a>
-update qh.facet_mergeset </li>
-<li><a href="merge.c#mark_dupridges">qh_mark_dupridges</a>
-add duplicated ridges to qh.facet_mergeset</li>
-<li><a href="merge.c#maydropneighbor">qh_maydropneighbor</a>
-drop neighbor relationship if no ridge between
-facet and neighbor </li>
-<li><a href="merge.c#test_appendmerge">qh_test_appendmerge</a>
-test a pair of facets for convexity and append to
-qh.facet_mergeset if non-convex </li>
-<li><a href="merge.c#test_vneighbors">qh_test_vneighbors</a>
-test vertex neighbors for convexity </li>
-</ul>
-
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mbest">functions for
-determining the best merge</a></h3>
-<ul>
-<li><a href="merge.c#findbest_test">qh_findbest_test</a>
-test neighbor for best merge </li>
-<li><a href="merge.c#findbestneighbor">qh_findbestneighbor</a>
-finds best neighbor of a facet for merging (i.e.,
-closest hyperplane) </li>
-</ul>
-
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mmerge">functions for
-merging facets</a></h3>
-<ul>
-<li><a href="merge.c#copynonconvex">qh_copynonconvex</a>
-copy non-convex flag to another ridge for the
-same neighbor </li>
-<li><a href="merge.c#makeridges">qh_makeridges</a>
-creates explicit ridges between simplicial facets
-</li>
-<li><a href="merge.c#mergefacet">qh_mergefacet</a>
-merges one facet into another facet</li>
-<li><a href="merge.c#mergeneighbors">qh_mergeneighbors</a>
-merges the neighbors of two facets </li>
-<li><a href="merge.c#mergeridges">qh_mergeridges</a>
-merges the ridge sets of two facets </li>
-<li><a href="merge.c#mergesimplex">qh_mergesimplex</a>
-merge a simplicial facet into another simplicial
-facet </li>
-<li><a href="merge.c#mergevertex_del">qh_mergevertex_del</a>
-delete a vertex due to merging one facet into
-another facet </li>
-<li><a href="merge.c#mergevertex_neighbors">qh_mergevertex_neighbors</a>
-merge the vertex neighbors of two facets </li>
-<li><a href="merge.c#mergevertices">qh_mergevertices</a>
-merge the vertex sets of two facets </li>
-<li><a href="merge.c#newvertices">qh_newvertices</a>
-register all vertices as new vertices </li>
-<li><a href="merge.c#updatetested">qh_updatetested</a>
-clear tested flags and centrums involved in a
-merge </li>
-<li><a href="merge.c#willdelete">qh_willdelete</a>
-moves facet to qh.visible_list; sets replacement
-or NULL </li>
-</ul>
-
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mcycle">functions for
-merging a cycle of facets</a></h3>
-<p>If a point is coplanar with an horizon facet, the
-corresponding new facets are linked together (a <em>samecycle</em>)
-for merging.</p>
-<ul>
-<li><a href="merge.c#basevertices">qh_basevertices</a>
-return temporary set of base vertices for a
-samecycle </li>
-<li><a href="merge.c#mergecycle">qh_mergecycle</a>
-merge a samecycle into a horizon facet </li>
-<li><a href="merge.c#mergecycle_all">qh_mergecycle_all</a>
-merge all samecycles into horizon facets</li>
-<li><a href="merge.c#mergecycle_facets">qh_mergecycle_facets</a>
-finish merge of samecycle </li>
-<li><a href="merge.c#mergecycle_neighbors">qh_mergecycle_neighbors</a>
-merge neighbor sets for samecycle </li>
-<li><a href="merge.c#mergecycle_ridges">qh_mergecycle_ridges</a>
-merge ridge sets for samecycle </li>
-<li><a href="merge.c#mergecycle_vneighbors">qh_mergecycle_vneighbors</a>
-merge vertex neighbor sets for samecycle </li>
-</ul>
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mrename">functions
-for renaming a vertex</a></h3>
-<ul>
-<li><a href="merge.c#comparevisit">qh_comparevisit</a>
-used by qsort() to order vertices by visitid</li>
-<li><a href="merge.c#reducevertices">qh_reducevertices</a>
-reduce vertex sets </li>
-<li><a href="merge.c#redundant_vertex">qh_redundant_vertex</a>
-returns true if detect and rename redundant
-vertex </li>
-<li><a href="merge.c#rename_sharedvertex">qh_rename_sharedvertex</a>
-detect and rename a shared vertex </li>
-<li><a href="merge.c#renameridgevertex">qh_renameridgevertex</a>
-rename oldvertex to newvertex in a ridge </li>
-<li><a href="merge.c#renamevertex">qh_renamevertex</a>
-rename oldvertex to newvertex in ridges </li>
-<li><a href="merge.c#remove_extravertices">qh_remove_extravertices</a>
-remove extra vertices in non-simplicial facets </li>
-</ul>
-
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mvertex">functions
-for identifying vertices for renaming</a></h3>
-<ul>
-<li><a href="merge.c#find_newvertex">qh_find_newvertex</a>
-locate new vertex for renaming old vertex </li>
-<li><a href="merge.c#hashridge">qh_hashridge</a> add
-ridge to hashtable </li>
-<li><a href="merge.c#hashridge_find">qh_hashridge_find</a>
-returns matching ridge in hashtable</li>
-<li><a href="merge.c#neighbor_intersections">qh_neighbor_intersections</a>
-return intersection of vertex sets for
-neighboring facets </li>
-<li><a href="merge.c#vertexridges">qh_vertexridges</a>
-return temporary set of ridges adjacent to a
-vertex </li>
-<li><a href="merge.c#vertexridges_facet">qh_vertexridges_facet</a>
-add adjacent ridges for a vertex in facet </li>
-</ul>
-
-<h3><a href="qh-merge.htm#TOC">»</a><a name="mcheck">functions for check and
-trace</a></h3>
-<ul>
-<li><a href="merge.c#checkconnect">qh_checkconnect</a>
-check that new facets are connected </li>
-<li><a href="merge.c#tracemerge">qh_tracemerge</a>
-print trace message after merge </li>
-<li><a href="merge.c#tracemerging">qh_tracemerging</a>
-print trace message during post-merging </li>
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-poly.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-poly.htm
deleted file mode 100644
index a28b370da4557f3c4b0659f3ee8abe65ba921e69..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-poly.htm
+++ /dev/null
@@ -1,481 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>poly.c, poly2.c -- polyhedron operations</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-<hr>
-
-<h2>poly.c, poly2.c -- polyhedron operations</h2>
-<blockquote>
-
-<p>Qhull uses dimension-free terminology. Qhull builds a
-polyhedron in dimension <em>d. </em>A <em>polyhedron</em> is a
-simplicial complex of faces with geometric information for the
-top and bottom-level faces. A (<em>d-1</em>)-face is a <em>facet</em>,
-a (<em>d-2</em>)-face is a <em>ridge</em>, and a <em>0</em>-face
-is a <em>vertex</em>. For example in 3-d, a facet is a polygon
-and a ridge is an edge. A facet is built from a ridge (the <em>base</em>)
-and a vertex (the <em>apex</em>). See 
-<a href="../html/index.htm#structure">Qhull's data structures</a>.</p>
-
-<p>Qhull's primary data structure is a polyhedron. A
-polyhedron is a list of facets. Each facet has a set of
-neighboring facets and a set of vertices. Each facet has a
-hyperplane. For example, a tetrahedron has four facets.
-If its vertices are <em>a, b, c, d</em>, and its facets
-are <em>1, 2, 3, 4,</em> the tetrahedron is </p>
-<blockquote>
-<ul>
-<li>facet 1 <ul>
-    <li>vertices: b c d </li>
-    <li>neighbors: 2 3 4 </li>
-</ul>
-</li>
-<li>facet 2 <ul>
-    <li>vertices: a c d </li>
-    <li>neighbors: 1 3 4 </li>
-</ul>
-</li>
-<li>facet 3 <ul>
-    <li>vertices: a b d </li>
-    <li>neighbors: 1 2 4 </li>
-</ul>
-</li>
-<li>facet 4 <ul>
-    <li>vertices: a b c </li>
-    <li>neighbors: 1 2 3 </li>
-</ul>
-</li>
-</ul>
-</blockquote>
-<p>A facet may be simplicial or non-simplicial. In 3-d, a
-<i>simplicial facet</i> has three vertices and three
-neighbors. A <i>nonsimplicial facet</i> has more than
-three vertices and more than three neighbors. A
-nonsimplicial facet has a set of ridges and a centrum. </p>
-<p>
-A simplicial facet has an orientation. An <i>orientation</i>
-is either <i>top</i> or <i>bottom</i>.  
-The flag, <tt>facet-&gt;toporient,</tt>
-defines the orientation of the facet's vertices.  For example in 3-d,
-'top' is left-handed orientation (i.e., the vertex order follows the direction
-of the left-hand fingers when the thumb is pointing away from the center).
-Except for axis-parallel facets in 5-d and higher, topological orientation
-determines the geometric orientation of the facet's hyperplane.
-
-<p>A nonsimplicial facet is due to merging two or more
-facets. The facet's ridge set determine a simplicial
-decomposition of the facet. Each ridge is a 1-face (i.e.,
-it has two vertices and two neighboring facets). The
-orientation of a ridge is determined by the order of the
-neighboring facets. The flag, <tt>facet-&gt;toporient,</tt>is
-ignored. </p>
-<p>A nonsimplicial facet has a centrum for testing
-convexity. A <i>centrum</i> is a point on the facet's
-hyperplane that is near the center of the facet. Except
-for large facets, it is the arithmetic average of the
-facet's vertices. </p>
-<p>A nonsimplicial facet is an approximation that is
-defined by offsets from the facet's hyperplane. When
-Qhull finishes, the <i>outer plane</i> is above all
-points while the <i>inner plane</i> is below the facet's
-vertices. This guarantees that any exact convex hull
-passes between the inner and outer planes. The outer
-plane is defined by <tt>facet-&gt;maxoutside</tt> while
-the inner plane is computed from the facet's vertices.</p>
-
-<p>Qhull 3.1 includes triangulation of non-simplicial facets
-('<A href="../html/qh-optq.htm#Qt">Qt</A>').  
-These facets,
-called <i>tricoplanar</i>, share the same normal. centrum, and Voronoi center.
-One facet (keepcentrum) owns these data structures.
-While tricoplanar facets are more accurate than the simplicial facets from 
-joggled input, they
-may have zero area or flipped orientation.
-
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a>
-&#149; <a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a>
-&#149; <a href="qh-merge.htm#TOC">Merge</a> &#149; <b>Poly</b>
-&#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a>
-&#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a>
-</p>
-<h3>Index to <a href="poly.c">poly.c</a>, 
-<a href="poly2.c">poly2.c</a>, <a href="poly.h">poly.h</a>,
-and <a href="qhull.h">qhull.h</a></h3>
-<ul>
-<li><a href="#ptype">Data types and global
-lists for polyhedrons</a> </li>
-<li><a href="#pconst">poly.h constants</a> </li>
-<li><a href="#pgall">Global FORALL macros</a> </li>
-<li><a href="#pall">FORALL macros</a> </li>
-<li><a href="#peach">FOREACH macros</a> </li>
-<li><a href="#pieach">Indexed FOREACH macros</a> </li>
-<li><a href="#pmacro">Other macros for polyhedrons</a><p>&nbsp;</li>
-<li><a href="#plist">Facetlist functions</a> </li>
-<li><a href="#pfacet">Facet functions</a> </li>
-<li><a href="#pvertex">Vertex, ridge, and point
-functions</a> </li>
-<li><a href="#phash">Hashtable functions</a> </li>
-<li><a href="#pnew">Allocation and deallocation
-functions</a> </li>
-<li><a href="#pcheck">Check functions</a> </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="ptype">Data
-types and global lists for polyhedrons</a></h3>
-<ul>
-<li><a href="qhull.h#facetT">facetT</a> defines a
-facet </li>
-<li><a href="qhull.h#ridgeT">ridgeT</a> defines a
-ridge </li>
-<li><a href="qhull.h#vertexT">vertexT</a> defines a
-vertex </li>
-<li><a href="qhull.h#qh-lists">qh facet and vertex
-lists</a> lists of facets and vertices </li>
-<li><a href="qhull.h#qh-set">qh global sets</a>
-global sets for merging, hashing, input, etc. </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pconst">poly.h constants</a></h3>
-<ul>
-<li><a href="poly.h#ALGORITHMfault">ALGORITHMfault</a>
-flag to not report errors in qh_checkconvex() </li>
-<li><a href="poly.h#DATAfault">DATAfault</a> flag to
-report errors in qh_checkconvex() </li>
-<li><a href="poly.h#DUPLICATEridge">DUPLICATEridge</a>
-special value for facet-&gt;neighbor to indicate
-a duplicate ridge </li>
-<li><a href="poly.h#MERGEridge">MERGEridge</a>
-special value for facet-&gt;neighbor to indicate
-a merged ridge </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pgall">Global FORALL
-macros</a></h3>
-<ul>
-<li><a href="qhull.h#FORALLfacets">FORALLfacets</a>
-assign 'facet' to each facet in qh.facet_list </li>
-<li><a href="poly.h#FORALLnew_facets">FORALLnew_facets</a>
-assign 'facet' to each facet in qh.newfacet_list </li>
-<li><a href="poly.h#FORALLvisible_facets">FORALLvisible_facets</a>
-assign 'visible' to each visible facet in
-qh.visible_list </li>
-<li><a href="qhull.h#FORALLpoints">FORALLpoints</a>
-assign 'point' to each point in qh.first_point,
-qh.num_points </li>
-<li><a href="qhull.h#FORALLvertices">FORALLvertices</a>
-assign 'vertex' to each vertex in qh.vertex_list </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pall">FORALL macros</a></h3>
-<ul>
-<li><a href="poly.h#FORALLfacet_">FORALLfacet_</a>
-assign 'facet' to each facet in facetlist </li>
-<li><a href="qhull.h#FORALLpoint_">FORALLpoint_</a>
-assign 'point' to each point in points array</li>
-<li><a href="poly.h#FORALLsame_">FORALLsame_</a>
-assign 'same' to each facet in samecycle</li>
-<li><a href="poly.h#FORALLsame_cycle_">FORALLsame_cycle_</a>
-assign 'same' to each facet in samecycle</li>
-<li><a href="poly.h#FORALLvertex_">FORALLvertex_</a>
-assign 'vertex' to each vertex in vertexlist </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="peach">FOREACH macros</a></h3>
-<ul>
-<li><a href="qhull.h#FOREACHfacet_">FOREACHfacet_</a>
-assign 'facet' to each facet in facets </li>
-<li><a href="qhull.h#FOREACHneighbor_">FOREACHneighbor_</a>
-assign 'neighbor' to each facet in
-facet-&gt;neighbors or vertex-&gt;neighbors</li>
-<li><a href="poly.h#FOREACHnewfacet_">FOREACHnewfacet_</a>
-assign 'newfacet' to each facet in facet set </li>
-<li><a href="qhull.h#FOREACHpoint_">FOREACHpoint_</a>
-assign 'point' to each point in points set </li>
-<li><a href="qhull.h#FOREACHridge_">FOREACHridge_</a>
-assign 'ridge' to each ridge in ridge set </li>
-<li><a href="qhull.h#FOREACHvertex_">FOREACHvertex_</a>
-assign 'vertex' to each vertex in vertex set </li>
-<li><a href="poly.h#FOREACHvertexA_">FOREACHvertexA_</a>
-assign 'vertexA' to each vertex in vertex set</li>
-<li><a href="poly.h#FOREACHvisible_">FOREACHvisible_</a>
-assign 'visible' to each facet in facet set </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pieach">Indexed
-FOREACH macros</a></h3>
-<ul>
-<li><a href="qhull.h#FOREACHfacet_i_">FOREACHfacet_i_</a>
-assign 'facet' and 'facet_i' to each facet in
-facet set </li>
-<li><a href="qhull.h#FOREACHneighbor_i_">FOREACHneighbor_i_</a>
-assign 'neighbor' and 'neighbor_i' to each facet
-in facet-&gt;neighbors or vertex-&gt;neighbors</li>
-<li><a href="qhull.h#FOREACHpoint_i_">FOREACHpoint_i_</a>
-assign 'point' and 'point_i' to each point in
-points set </li>
-<li><a href="qhull.h#FOREACHridge_i_">FOREACHridge_i_</a>
-assign 'ridge' and 'ridge_i' to each ridge in
-ridges set </li>
-<li><a href="qhull.h#FOREACHvertex_i_">FOREACHvertex_i_</a>
-assign 'vertex' and 'vertex_i' to each vertex in
-vertices set </li>
-<li><a href="poly.h#FOREACHvertexreverse12_">FOREACHvertexreverse12_</a>
-assign 'vertex' to each vertex in vertex set;
-reverse the order of first two vertices </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pmacro">Other macros for polyhedrons</a></h3>
-<ul>
-<li><a href="qhull.h#getid_">getid_</a> return ID for
-a facet, ridge, or vertex </li>
-<li><a href="qhull.h#otherfacet_">otherfacet_</a>
-return neighboring facet for a ridge in a facet </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="plist">Facetlist
-functions</a></h3>
-<ul>
-<li><a href="poly.c#appendfacet">qh_appendfacet</a>
-appends facet to end of qh.facet_list</li>
-<li><a href="poly.c#attachnewfacets">qh_attachnewfacets</a>
-attach new facets in qh.newfacet_list to the
-horizon </li>
-<li><a href="poly2.c#findgood">qh_findgood</a>
-identify good facets for qh.PRINTgood </li>
-<li><a href="poly2.c#findgood_all">qh_findgood_all</a>
-identify more good facets for qh.PRINTgood </li>
-<li><a href="poly2.c#furthestnext">qh_furthestnext</a>
-move facet with furthest of furthest points to
-facet_next </li>
-<li><a href="poly2.c#initialhull">qh_initialhull</a>
-construct the initial hull as a simplex of
-vertices </li>
-<li><a href="poly2.c#nearcoplanar">qh_nearcoplanar</a> 
-  remove near-inside points from coplanar sets</li>
-<li><a href="poly2.c#prependfacet">qh_prependfacet</a>
-prepends facet to start of facetlist </li>
-<li><a href="user.c#printfacetlist">qh_printfacetlist</a>
-print facets in a facetlist</li>
-<li><a href="poly2.c#printlists">qh_printlists</a>
-print out facet list for debugging </li>
-<li><a href="poly.c#removefacet">qh_removefacet</a>
-unlinks facet from qh.facet_list</li>
-<li><a href="poly2.c#resetlists">qh_resetlists</a>
-reset qh.newvertex_list, qh.newfacet_list, and
-qh.visible_list </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pfacet">Facet
-functions</a></h3>
-<ul>
-<li><a href="poly2.c#createsimplex">qh_createsimplex</a>
-create a simplex of facets from a set of vertices
-</li>
-<li><a href="poly2.c#findbestlower">qh_findbestlower</a> find best
-non-upper, non-flipped facet for point at upperfacet</li>
-<li><a href="poly2.c#furthestout">qh_furthestout</a>
-make furthest outside point the last point of a
-facet's outside set </li>
-<li><a href="poly.c#makenew_nonsimplicial">qh_makenew_nonsimplicial</a>
-make new facets from ridges of visible facets </li>
-<li><a href="poly.c#makenew_simplicial">qh_makenew_simplicial</a>
-make new facets for horizon neighbors </li>
-<li><a href="poly.c#makenewfacet">qh_makenewfacet</a>
-create a facet from vertices and apex </li>
-<li><a href="poly2.c#makenewfacets">qh_makenewfacets</a>
-make new facets from vertex, horizon facets, and
-visible facets </li>
-<li><a href="poly.c#makenewplanes">qh_makenewplanes</a>
-make new hyperplanes for facets </li>
-<li><a href="poly2.c#outcoplanar">qh_outcoplanar</a>
-move points from outside set to coplanar set </li>
-<li><a href="poly2.c#setvoronoi_all">qh_setvoronoi_all</a>
-compute Voronoi centers for all facets </li>
-<li><a href="poly2.c#triangulate">qh_triangulate</a>
-triangulate non-simplicial facets</li>
-<li><a href="poly2.c#triangulate_facet">qh_triangulate_facet</a>
-triangulate a non-simplicial facet</li>
-<li><a href="poly2.c#triangulate_link">qh_triangulate_link</a>
-link facets together from qh_triangulate</li>
-<li><a href="poly2.c#triangulate_mirror">qh_triangulate_mirror</a>
-delete mirrored facets from qh_triangulate</li>
-<li><a href="poly2.c#triangulate_null">qh_triangulate_null</a>
-delete null facet from qh_triangulate</li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pvertex">Vertex,
-ridge, and point functions</a></h3>
-<ul>
-<li><a href="poly.c#appendvertex">qh_appendvertex</a>
-append vertex to end of qh.vertex_list, </li>
-<li><a href="io.c#detvridge">qh_detvridge</a> determine Voronoi
-ridge for an input site
-<li><a href="io.c#detvridge3">qh_detvridge3</a> determine 3-d Voronoi
-ridge for an input site
-<li><a href="poly2.c#facet3vertex">qh_facet3vertex</a>
-return an oriented vertex set for a 3-d facet </li>
-<li><a href="poly.c#facetintersect">qh_facetintersect</a>
-return intersection of simplicial facets </li>
-<li><a href="poly2.c#initialvertices">qh_initialvertices</a>
-return non-singular set of initial vertices </li>
-<li><a href="poly2.c#isvertex">qh_isvertex</a> true
-if point is in a vertex set </li>
-<li><a href="poly2.c#nearvertex">qh_nearvertex</a>
-return nearest vertex to point </li>
-<li><a href="poly2.c#nextridge3d">qh_nextridge3d</a>
-iterate over each ridge and vertex for a 3-d
-facet </li>
-<li><a href="poly2.c#point">qh_point</a> return point
-for a point ID </li>
-<li><a href="poly2.c#pointfacet">qh_pointfacet</a>
-return temporary set of facets indexed by point
-ID </li>
-<li><a href="poly.c#pointid">qh_pointid</a> return ID
-for a point</li>
-<li><a href="poly2.c#pointvertex">qh_pointvertex</a>
-return temporary set of vertices indexed by point
-ID </li>
-<li><a href="poly.c#removevertex">qh_removevertex</a>
-unlink vertex from qh.vertex_list, </li>
-<li><a href="poly.c#updatevertices">qh_updatevertices</a>
-update vertex neighbors and delete interior
-vertices </li>
-<li><a href="poly2.c#vertexintersect">qh_vertexintersect</a>
-intersect two vertex sets </li>
-<li><a href="poly2.c#vertexintersect_new">qh_vertexintersect_new</a>
-return intersection of two vertex sets </li>
-<li><a href="poly2.c#vertexneighbors">qh_vertexneighbors</a>
-for each vertex in hull, determine facet
-neighbors </li>
-<li><a href="poly2.c#vertexsubset">qh_vertexsubset</a>
-returns True if vertexsetA is a subset of
-vertexsetB </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="phash">Hashtable functions</a></h3>
-<ul>
-<li><a href="poly2.c#addhash">qh_addhash</a> add hash
-element to linear hash table</li>
-<li><a href="poly.c#gethash">qh_gethash</a> return
-hash value for a set</li>
-<li><a href="poly2.c#matchduplicates">qh_matchduplicates</a>
-match duplicate ridges in hash table </li>
-<li><a href="poly.c#matchneighbor">qh_matchneighbor</a>
-try to match subridge of new facet with a
-neighbor </li>
-<li><a href="poly.c#matchnewfacets">qh_matchnewfacets</a>
-match new facets with their new facet neighbors </li>
-<li><a href="poly.c#matchvertices">qh_matchvertices</a>
-tests whether a facet and hash entry match at a
-ridge </li>
-<li><a href="poly2.c#newhashtable">qh_newhashtable</a>
-allocate a new qh.hash_table </li>
-<li><a href="poly2.c#printhashtable">qh_printhashtable</a>
-print hash table </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pnew">Allocation and
-deallocation functions</a></h3>
-<ul>
-<li><a href="poly2.c#clearcenters">qh_clearcenters</a>
-clear old data from facet-&gt;center </li>
-<li><a href="poly.c#deletevisible">qh_deletevisible</a>
-delete visible facets and vertices </li>
-<li><a href="poly.c#delfacet">qh_delfacet</a> free up
-the memory occupied by a facet </li>
-<li><a href="poly2.c#delridge">qh_delridge</a> delete
-ridge</li>
-<li><a href="poly2.c#delvertex">qh_delvertex</a>
-delete vertex </li>
-<li><a href="poly.c#newfacet">qh_newfacet</a> create
-and allocate space for a facet </li>
-<li><a href="poly.c#newridge">qh_newridge</a> create
-and allocate space for a ridge </li>
-<li><a href="poly2.c#newvertex">qh_newvertex</a>
-create and allocate space for a vertex </li>
-</ul>
-<h3><a href="qh-poly.htm#TOC">»</a><a name="pcheck">Check
-functions</a></h3>
-<ul>
-<li><a href="poly2.c#check_bestdist">qh_check_bestdist</a>
-check that points are not outside of facets </li>
-<li><a href="poly2.c#check_maxout">qh_check_maxout</a>
-updates qh.max_outside and checks all points
-against bestfacet </li>
-<li><a href="poly2.c#check_output">qh_check_output</a>
-check topological and geometric output</li>
-<li><a href="poly2.c#check_point">qh_check_point</a>
-check that point is not outside of facet </li>
-<li><a href="poly2.c#check_points">qh_check_points</a>
-check that all points are inside all facets </li>
-<li><a href="poly2.c#checkconvex">qh_checkconvex</a>
-check that each ridge in facetlist is convex </li>
-<li><a href="poly2.c#checkfacet">qh_checkfacet</a>
-check for consistency errors in facet </li>
-<li><a href="poly.c#checkflipped">qh_checkflipped</a>
-check facet orientation to the interior point </li>
-<li><a href="poly2.c#checkflipped_all">qh_checkflipped_all</a>
-check facet orientation for a facet list </li>
-<li><a href="poly2.c#checkpolygon">qh_checkpolygon</a>
-check topological structure </li>
-<li><a href="poly2.c#checkvertex">qh_checkvertex</a>
-check vertex for consistency </li>
-<li><a href="poly2.c#infiniteloop">qh_infiniteloop</a>
-report error for a loop of facets </li>
-<li><a href="poly2.c#printlists">qh_printlists</a>
-print out facet list for debugging </li>
-</ul>
-
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-qhull.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-qhull.htm
deleted file mode 100644
index 3494d25e52b4c56e5aa80c08b05ce728bc110ee4..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-qhull.htm
+++ /dev/null
@@ -1,271 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>qhull.c -- top-level functions and basic data types</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-<hr>
-
-<h2>qhull.c -- top-level functions and basic data types</h2>
-<blockquote>
-<p>Qhull implements the Quickhull algorithm for computing
-the convex hull. The Quickhull algorithm combines two
-well-known algorithms: the 2-d quickhull algorithm and
-the n-d beneath-beyond algorithm. See 
-<a href="../html/index.htm#description">Description of Qhull</a>. </p>
-<p>This section provides an index to the top-level
-functions and base data types.  The top-level header file, <tt>qhull.h</tt>,
-contains prototypes for these functions.</p>
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a>
-&#149; <a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a>
-&#149; <a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a>
-&#149; <b>Qhull</b> &#149; <a href="qh-set.htm#TOC">Set</a>
-&#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a>
-</p>
-<h3>Index to <a href="qhull.c">qhull.c</a>,
-<a href="qhull.h">qhull.h</a>, and 
-<a href="unix.c">unix.c</a></h3>
-<ul>
-<li><a href="#qtype">qhull.h and unix.c data types and
-constants</a> </li>
-<li><a href="#qmacro">qhull.h other macros</a> </li>
-<li><a href="#qfunc">Quickhull routines in call order</a> </li>
-<li><a href="#qinit">Top-level routines for initializing and terminating Qhull</a></li>
-<li><a href="#qin">Top-level routines for reading and modifying the input</a></li>
-<li><a href="#qcall">Top-level routines for calling Qhull</a></li>
-<li><a href="#qout">Top-level routines for returning results</a></li>
-<li><a href="#qtest">Top-level routines for testing and debugging</a></li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qtype">qhull.h and unix.c
-data types and constants</a></h3>
-<ul>
-<li><a href="qhull.h#flagT">flagT</a> Boolean flag as
-a bit </li>
-<li><a href="qhull.h#boolT">boolT</a> boolean value,
-either True or False </li>
-<li><a href="qhull.h#CENTERtype">CENTERtype</a> to
-distinguish facet-&gt;center </li>
-<li><a href="qhull.h#qh_PRINT">qh_PRINT</a> output
-formats for printing (qh.PRINTout) </li>
-<li><a href="qhull.h#qh_ALL">qh_ALL</a> argument flag
-for selecting everything </li>
-<li><a href="qhull.h#qh_ERR">qh_ERR</a> Qhull exit
-codes for indicating errors </li>
-<li><a href="unix.c#prompt">qh_prompt</a> version and long prompt for Qhull</li>
-<li><a href="unix.c#prompt2">qh_prompt2</a> synopsis for Qhull</li>
-<li><a href="unix.c#prompt3">qh_prompt3</a> concise prompt for Qhull</li>
-<li><a href="global.c#qh_version">qh_version</a> version stamp</li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qmacro">qhull.h other
-macros</a></h3>
-<ul>
-<li><a href="qhull_a.h#traceN">traceN</a> print trace
-message if <em>qh.IStracing &gt;= N</em>. </li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qfunc">Quickhull
-routines in call order</a></h3>
-<ul>
-<li><a href="unix.c#main">main</a> processes the
-command line, calls qhull() to do the work, and
-exits </li>
-<li><a href="qhull.c#qhull">qh_qhull</a> construct
-the convex hull of a set of points </li>
-<li><a href="qhull.c#build_withrestart">qh_build_withrestart</a>
-allow restarts while calling qh_buildhull</li>
-<li><a href="poly2.c#initbuild">qh_initbuild</a>
-initialize hull and outside sets with point array</li>
-<li><a href="qhull.c#partitionall">qh_partitionall</a>
-partition all points into outside sets </li>
-<li><a href="qhull.c#buildhull">qh_buildhull</a>
-construct a convex hull by adding points one at a
-time </li>
-<li><a href="qhull.c#nextfurthest">qh_nextfurthest</a>
-return next furthest point for processing </li>
-<li><a href="qhull.c#buildtracing">qh_buildtracing</a>
-trace an iteration of buildhull </li>
-<li><a href="qhull.c#addpoint">qh_addpoint</a> add a
-point to the convex hull </li>
-<li><a href="qhull.c#findhorizon">qh_findhorizon</a>
-find the horizon and visible facets for a point </li>
-<li><a href="qhull.c#partitionvisible">qh_partitionvisible</a>
-partition points from facets in qh.visible_list
-to facets in qh.newfacet_list </li>
-<li><a href="qhull.c#partitionpoint">qh_partitionpoint</a>
-partition a point as inside, coplanar with, or
-outside a facet </li>
-<li><a href="qhull.c#partitioncoplanar">qh_partitioncoplanar</a>
-partition coplanar point into a facet </li>
-<li><a href="qhull.c#precision">qh_precision</a> restart on precision errors if not merging and if 'QJn'</li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qinit">Top-level routines for initializing and terminating Qhull (in other modules)</a></h3>
-<ul>
-<li><a href="global.c#freebuild">qh_freebuild</a>
-free memory used by qh_initbuild and qh_buildhull
-</li>
-<li><a href="global.c#checkflags">qh_checkflags</a>
-check flags for multiple frontends to qhull
-<li><a href="global.c#freeqhull">qh_freeqhull</a>
-free memory used by qhull </li>
-<li><a href="global.c#init_A">qh_init_A</a> called
-before error handling initialized </li>
-<li><a href="global.c#init_B">qh_init_B</a> called
-after points are defined </li>
-<li><a href="global.c#initflags">qh_initflags</a> set
-flags and constants from command line </li>
-<li><a href="global.c#restore_qhull">qh_restore_qhull</a>
-restores a saved qhull </li>
-<li><a href="global.c#save_qhull">qh_save_qhull</a>
-saves qhull for later restoring </li>
-<li><a href="user.c#user_memsizes">qh_user_memsizes</a>
-define additional quick allocation sizes
-</li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qin">Top-level routines for reading and modifying the input (in other modules)</a></h3>
-<ul>
-<li><a href="geom2.c#gram_schmidt">qh_gram_schmidt</a>
-implements Gram-Schmidt orthogonalization by rows </li>
-<li><a href="geom2.c#projectinput">qh_projectinput</a>
-project input along one or more dimensions +
-Delaunay projection </li>
-<li><a href="geom2.c#randommatrix">qh_randommatrix</a>
-generate a random dimXdim matrix in range (-1,1) </li>
-<li><a href="io.c#readpoints">qh_readpoints</a> read
-points from input </li>
-<li><a href="geom2.c#rotateinput">qh_rotateinput</a> rotate
-input points using row matrix </li>
-<li><a href="geom2.c#scaleinput">qh_scaleinput</a> scale
-input points using qh low_bound/high_bound </li>
-<li><a href="geom2.c#setdelaunay">qh_setdelaunay</a> project
-points to paraboloid for Delaunay triangulation </li>
-<li><a href="geom2.c#sethalfspace_all">qh_sethalfspace_all</a>
-generate dual for halfspace intersection with interior
-point </li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qcall">Top-level routines for calling Qhull (in other modules)</a></h3>
-<ul>
-<li><a href="qhull.c#addpoint">qh_addpoint</a> add
-point to convex hull </li>
-<li><a href="poly2.c#findbestfacet">qh_findbestfacet</a>
-find facet that is furthest below a point </li>
-<li><a href="poly2.c#findfacet_all">qh_findfacet_all</a>
-exhaustive search for facet below a point </li>
-<li><a href="qhull.c#qhull">qh_qhull</a> construct
-the convex hull of a set of points </li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qout">Top-level routines for returning results (in other modules)</a></h3>
-<ul>
-<li><a href="stat.c#collectstatistics">qh_collectstatistics</a>
-collect statistics for qh.facet_list </li>
-<li><a href="poly2.c#nearvertex">qh_nearvertex</a>
-return nearest vertex to point </li>
-<li><a href="poly2.c#point">qh_point</a> return point
-for a point ID </li>
-<li><a href="poly2.c#pointfacet">qh_pointfacet</a>
-return temporary set of facets indexed by point
-ID </li>
-<li><a href="poly.c#pointid">qh_pointid</a> return ID
-for a point</li>
-<li><a href="poly2.c#pointvertex">qh_pointvertex</a>
-return vertices (if any) for all points</li>
-<li><a href="stat.c#printallstatistics">qh_printallstatistics</a>
-print all statistics </li>
-<li><a href="io.c#printneighborhood">qh_printneighborhood</a>
-print neighborhood of one or two facets </li>
-<li><a href="qhull.c#printsummary">qh_printsummary</a>
-print summary </li>
-<li><a href="io.c#produce_output">qh_produce_output</a>
-print the results of qh_qhull() </li>
-<li><a href="poly2.c#setvoronoi_all">qh_setvoronoi_all</a>
-compute Voronoi centers for all facets </li>
-</ul>
-
-<h3><a href="qh-qhull.htm#TOC">»</a><a name="qtest">Top-level routines for testing and debugging (in other modules)</a></h3>
-<ul>
-<li><a href="io.c#dfacet">dfacet</a> print facet by
-ID from debugger </li>
-<li><a href="io.c#dvertex">dvertex</a> print vertex
-by ID from debugger </li>
-<li><a href="poly2.c#check_output">qh_check_output</a>
-check output </li>
-<li><a href="poly2.c#check_points">qh_check_points</a>
-verify that all points are inside the convex hull
-</li>
-<li><a href="user.c#errexit">qh_errexit</a> report
-error with a facet and a ridge</li>
-<li><a href="qhull.c#errexit2">qh_errexit2</a> report
-error with two facets </li>
-<li><a href="user.c#errprint">qh_errprint</a> print
-erroneous facets, ridge, and vertex </li>
-<li><a href="user.c#printfacetlist">qh_printfacetlist</a>
-print all fields for a list of facets </li>
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-set.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-set.htm
deleted file mode 100644
index 20cf4324eb89f4dc341cb736a7c588621e270655..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-set.htm
+++ /dev/null
@@ -1,304 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>qset.c -- set data type and operations</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-<hr>
-
-<h2>qset.c -- set data type and operations</h2>
-<blockquote>
-<p>Qhull's data structures are constructed from sets. The
-functions and macros in qset.c construct, iterate, and
-modify these sets. They are the most frequently called
-functions in Qhull. For this reason, efficiency is the
-primary concern. </p>
-<p>In Qhull, a <i>set</i> is represented by an unordered
-array of pointers with a maximum size and a NULL
-terminator (<a href="qset.h#setT">setT</a>). 
-Most sets correspond to mathematical sets
-(i.e., the pointers are unique). Some sets are sorted to
-enforce uniqueness. Some sets are ordered. For example,
-the order of vertices in a ridge determine the ridge's
-orientation. If you reverse the order of adjacent
-vertices, the orientation reverses. Some sets are not
-mathematical sets. They may be indexed as an array and
-they may include NULL pointers. </p>
-<p>The most common operation on a set is to iterate its
-members. This is done with a 'FOREACH...' macro. Each set
-has a custom macro. For example, 'FOREACHvertex_'
-iterates over a set of vertices. Each vertex is assigned
-to the variable 'vertex' from the pointer 'vertexp'. </p>
-<p>Most sets are constructed by appending elements to the
-set. The last element of a set is either NULL or the
-index of the terminating NULL for a partially full set.
-If a set is full, appending an element copies the set to
-a larger array. </p>
-
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a> &#149;
-<a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a> &#149;
-<a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a>
-&#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; <b>Set</b>
-&#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a>
-</p>
-<h3>Index to <a href="qset.c">qset.c</a> and 
-<a href="qset.h">qset.h</a></h3>
-<ul>
-<li><a href="#stype">Data types and constants</a> </li>
-<li><a href="#seach">FOREACH macros</a> </li>
-<li><a href="#saccess">access and size macros</a> </li>
-<li><a href="#sint">internal macros</a> </li>
-<li><a href="#saddr">address macros</a><p>&nbsp;</li>
-
-<li><a href="#snew">Allocation and deallocation functions</a> </li>
-<li><a href="#spred">Access and predicate functions</a>
-</li>
-<li><a href="#sadd">Add functions</a> </li>
-<li><a href="#scheck">Check and print functions</a></li>
-<li><a href="#scopy">Copy, compact, and zero functions</a></li>
-<li><a href="#sdel">Delete functions</a> </li>
-<li><a href="#stemp">Temporary set functions</a> </li>
-</ul>
-<h3><a href="qh-set.htm#TOC">»</a><a name="stype">Data types and
-constants</a></h3>
-<ul>
-<li><a href="qset.h#SETelemsize">SETelemsize</a> size
-of a set element in bytes </li>
-<li><a href="qset.h#setT">setT</a> a set with a
-maximum size and a current size</li>
-<li><a href="qhull.h#qh-set">qh global sets</a>
-global sets for temporary sets, etc. </li>
-</ul>
-<h3><a href="qh-set.htm#TOC">»</a><a name="seach">FOREACH macros</a></h3>
-<ul>
-<li><a href="qset.h#FOREACHelem_">FOREACHelem_</a>
-assign 'elem' to each element in a set </li>
-<li><a href="qset.h#FOREACHset_">FOREACHset_</a>
-assign 'set' to each set in a set of sets </li>
-<li><a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-define a FOREACH iterator </li>
-<li><a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-define an indexed FOREACH iterator </li>
-<li><a href="qset.h#FOREACHsetelementreverse_">FOREACHsetelementreverse_</a>
-define a reversed FOREACH iterator </li>
-<li><a href="qset.h#FOREACHsetelementreverse12_">FOREACHsetelementreverse12_</a>
-define a FOREACH iterator with e[1] and e[0]
-reversed </li>
-</ul>
-<h3><a href="qh-set.htm#TOC">»</a><a name="saccess">Access and
-size macros</a></h3>
-<ul>
-<li><a href="qset.h#SETelem_">SETelem_</a> return the
-n'th element of set </li>
-<li><a href="qset.h#SETelemt_">SETelemt_</a> return
-the n'th element of set as a type</li>
-<li><a href="qset.h#SETempty_">SETempty_</a> return
-true (1) if set is empty </li>
-<li><a href="qset.h#SETfirst_">SETfirst_</a> return
-first element of set </li>
-<li><a href="qset.h#SETfirstt_">SETfirstt_</a> return
-first element of set as a type</li>
-<li><a href="qset.h#SETindex_">SETindex_</a> return
-index of elem in set </li>
-<li><a href="qset.h#SETreturnsize_">SETreturnsize_</a>
-return size of a set (normally use <a href="qset.c#setsize">qh_setsize</a>) </li>
-<li><a href="qset.h#SETsecond_">SETsecond_</a> return
-second element of set </li>
-<li><a href="qset.h#SETsecondt_">SETsecondt_</a>
-return second element of set as a type</li>
-<li><a href="qset.h#SETtruncate_">SETtruncate_</a>
-truncate set to size, i.e., qh_settruncate()</li>
-</ul>
-<h3><a href="qh-set.htm#TOC">»</a><a name="sint">Internal macros</a></h3>
-<ul>
-<li><a href="qset.c#SETsizeaddr_">SETsizeaddr_</a>
-return pointer to end element of a set (indicates
-current size) </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="saddr">address macros</a></h3>
-<ul>
-<li><a href="qset.h#SETaddr_">SETaddr_</a> return
-address of a set's elements </li>
-<li><a href="qset.h#SETelemaddr_">SETelemaddr_</a>
-return address of the n'th element of a set </li>
-<li><a href="qset.h#SETref_">SETref_</a> l.h.s. for
-modifying the current element in a FOREACH
-iteration </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="snew">Allocation and
-deallocation functions</a></h3>
-<ul>
-<li><a href="qset.c#setfree">qh_setfree</a> free the
-space occupied by a set </li>
-<li><a href="qset.c#setfree2">qh_setfree2</a> free a
-set and its elements </li>
-<li><a href="qset.c#setfreelong">qh_setfreelong</a>
-free a set only if it is in long memory </li>
-<li><a href="qset.c#setnew">qh_setnew</a> create a new
-set </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="spred">Access and
-predicate functions </a></h3>
-<ul>
-<li><a href="qset.c#setequal">qh_setequal</a> return 1
-if two sorted sets are equal </li>
-<li><a href="qset.c#setequal_except">qh_setequal_except</a>
-return 1 if two sorted sets are equal except for
-an element </li>
-<li><a href="qset.c#setequal_skip">qh_setequal_skip</a>
-return 1 if two sorted sets are equal except for
-a pair of skipped elements </li>
-<li><a href="qset.c#setequal_skip">qh_setequal_skip</a>
-return 1 if two sorted sets are equal except for
-a pair of skipped elements </li>
-<li><a href="qset.c#setin">qh_setin</a> return 1 if an
-element is in a set </li>
-<li><a href="qset.c#setindex">qh_setindex</a> return
-the index of an element in a set </li>
-<li><a href="qset.c#setlast">qh_setlast</a> return
-last element of a set</li>
-<li><a href="qset.c#setsize">qh_setsize</a> returns
-the size of a set </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="sadd">Add functions</a></h3>
-<ul>
-<li><a href="qset.c#setaddnth">qh_setaddnth</a> add a
-element as n'th element of sorted or unsorted set
-</li>
-<li><a href="qset.c#setaddsorted">qh_setaddsorted</a>
-add an element to a sorted set </li>
-<li><a href="qset.c#setappend">qh_setappend</a> append
-an element to a set </li>
-<li><a href="qset.c#setappend_set">qh_setappend_set</a>
-append a set of elements to a set </li>
-<li><a href="qset.c#setappend2ndlast">qh_setappend2ndlast</a>
-add an element as the next to the last element in
-a set </li>
-<li><a href="qset.c#setlarger">qh_setlarger</a> return
-a larger set with the same elements</li>
-<li><a href="qset.c#setreplace">qh_setreplace</a>
-replace one element with another in a set</li>
-<li><a href="qset.c#setunique">qh_setunique</a> add an
-element if it is not already in a set </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="scheck">Check and print functions</a></h3>
-<ul>
-<li><a href="qset.c#setcheck">qh_setcheck</a> check a
-set for validity </li>
-<li><a href="qset.c#setprint">qh_setprint</a> print a
-set's elements to fp </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="scopy">Copy, compact, and zero functions</a></h3>
-<ul>
-<li><a href="qset.c#setcompact">qh_setcompact</a>
-compact NULLs from an unsorted set </li>
-<li><a href="qset.c#setcopy">qh_setcopy</a> make a
-copy of a sorted or unsorted set </li>
-<li><a href="qset.c#setduplicate">qh_setduplicate</a>
-duplicate a set and its elements </li>
-<li><a href="qset.c#settruncate">qh_settruncate</a>
-truncate a set to size elements </li>
-<li><a href="qset.c#setzero">qh_setzero</a> zero the
-remainder of a set </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="sdel">Delete functions</a></h3>
-<ul>
-<li><a href="qset.c#setdel">qh_setdel</a> delete an
-element from an unsorted set. </li>
-<li><a href="qset.c#setdellast">qh_setdellast</a>
-delete and return last element from a set</li>
-<li><a href="qset.c#setdelnth">qh_setdelnth</a> delete
-and return nth element from an unsorted set </li>
-<li><a href="qset.c#setdelnthsorted">qh_setdelnthsorted</a>
-delete and return nth element from a sorted set </li>
-<li><a href="qset.c#setdelsorted">qh_setdelsorted</a>
-delete an element from a sorted set </li>
-<li><a href="qset.c#setnew_delnthsorted">qh_setnew_delnthsorted</a>
-create a sorted set not containing the nth
-element </li>
-</ul>
-
-<h3><a href="qh-set.htm#TOC">»</a><a name="stemp">Temporary set functions</a></h3>
-<ul>
-<li><a href="qset.c#settemp">qh_settemp</a> return a
-temporary set and append it qhmem.tempstack</li>
-<li><a href="qset.c#settempfree">qh_settempfree</a>
-free and pop a set from qhmem.tempstack</li>
-<li><a href="qset.c#settempfree_all">qh_settempfree_all</a>
-free all sets in qhmem.tempstack </li>
-<li><a href="qset.c#settemppop">qh_settemppop</a> pop
-a set from qhmem.tempstack (makes it permanent) </li>
-<li><a href="qset.c#settemppush">qh_settemppush</a>
-push a set unto qhmem.tempstack (makes it
-temporary) </li>
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-stat.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-stat.htm
deleted file mode 100644
index ec5fb115a6465eec02e755db22c063888a504bbd..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-stat.htm
+++ /dev/null
@@ -1,161 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>stat.c -- statistical operations</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; <a href="qh-user.htm">User</a>
-</p>
-<hr>
-
-<h2>stat.c -- statistical operations</h2>
-<blockquote>
-<p>Qhull records many statistics. These functions and
-macros make it inexpensive to add a statistic. 
-<p>As with Qhull's global variables, the statistics data structure is
-accessed by a macro, 'qhstat'.  If qh_QHpointer is defined, the macro
-is 'qh_qhstat->', otherwise the macro is 'qh_qhstat.'.
-Statistics
-may be turned off in user.h. If so, all but the 'zz'
-statistics are ignored.</p>
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a>
-&#149; <a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a>
-&#149; <a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a>
-&#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a>
-&#149; <b>Stat</b> &#149; <a href="qh-user.htm#TOC">User</a>
-</p>
-<h3>Index to <a href="stat.c">stat.c</a> and 
-<a href="stat.h">stat.h</a></h3>
-<ul>
-<li><a href="#ttype">stat.h types</a> </li>
-<li><a href="#tconst">stat.h constants</a> </li>
-<li><a href="#tmacro">stat.h macros</a> </li>
-<li><a href="#tfunc">stat.c functions</a> </li>
-</ul>
-
-<h3><a href="qh-stat.htm#TOC">»</a><a name="ttype">stat.h types</a></h3>
-<ul>
-<li><a href="stat.h#intrealT">intrealT</a> union of
-integer and real</li>
-<li><a href="stat.h#qhstat">qhstat</a> global data
-structure for statistics </li>
-</ul>
-<h3><a href="qh-stat.htm#TOC">»</a><a name="tconst">stat.h
-constants</a></h3>
-<ul>
-<li><a href="stat.h#KEEPstatistics">qh_KEEPstatistics</a> 0 turns off most statistics</li>
-<li><a href="stat.h#statistics">Z..., W...</a> integer (Z) and real (W) statistics
-</li>
-<li><a href="stat.h#ZZstat">ZZstat</a> Z.../W... statistics that
-remain defined if qh_KEEPstatistics=0
-</li>
-<li><a href="stat.h#ztype">ztype</a> zdoc, zinc, etc.
-for definining statistics </li>
-</ul>
-<h3><a href="qh-stat.htm#TOC">»</a><a name="tmacro">stat.h macros</a></h3>
-<ul>
-<li><a href="stat.h#MAYdebugx">MAYdebugx</a> called
-frequently for error trapping </li>
-<li><a href="stat.h#zadd_">zadd_/wadd_</a> add value
-to an integer or real statistic </li>
-<li><a href="stat.h#zdef_">zdef_</a> define a
-statistic </li>
-<li><a href="stat.h#zinc_">zinc_</a> increment an
-integer statistic </li>
-<li><a href="stat.h#zmax_">zmax_/wmax_</a> update
-integer or real maximum statistic </li>
-<li><a href="stat.h#zmin_">zmin_/wmin_</a> update
-integer or real minimum statistic </li>
-<li><a href="stat.h#zval_">zval_/wval_</a> set or
-return value of a statistic </li>
-</ul>
-
-<h3><a href="qh-stat.htm#TOC">»</a><a name="tfunc">stat.c
-functions</a></h3>
-<ul>
-<li><a href="stat.c#allstatA">qh_allstatA</a> define
-statistics in groups of 20 </li>
-<li><a href="stat.c#allstatistics">qh_allstatistics</a>
-reset printed flag for all statistics </li>
-<li><a href="stat.c#collectstatistics">qh_collectstatistics</a>
-collect statistics for qh.facet_list </li>
-<li><a href="stat.c#freestatistics">qh_freestatistics</a>
-free memory used for statistics </li>
-<li><a href="stat.c#initstatistics">qh_initstatistics</a>
-allocate and initialize statistics </li>
-<li><a href="stat.c#newstats">qh_newstats</a> returns
-True if statistics for zdoc </li>
-<li><a href="stat.c#nostatistic">qh_nostatistic</a>
-true if no statistic to print </li>
-<li><a href="stat.c#printallstatistics">qh_printallstatistics</a>
-print all statistics </li>
-<li><a href="stat.c#printstatistics">qh_printstatistics</a>
-print statistics to a file </li>
-<li><a href="stat.c#printstatlevel">qh_printstatlevel</a>
-print level information for a statistic </li>
-<li><a href="stat.c#printstats">qh_printstats</a>
-print statistics for a zdoc group </li>
-<li><a href="stat.c#stddev">qh_stddev</a> compute the
-standard deviation and average from statistics </li>
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-user.htm b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-user.htm
deleted file mode 100644
index 4c92321719957adc0b0c508fd3cccc076e95c86c..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qh-user.htm
+++ /dev/null
@@ -1,234 +0,0 @@
-<!-- Do not edit with Front Page, it adds too many spaces -->
-<html>
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<title>user.c -- user-definable operations</title>
-</head>
-
-<body>
-<!-- Navigation links -->
-<p><a name="TOP"><b>Up:</b></a> <a
-href="http://www.qhull.org">Home page</a> for Qhull<br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual</a>: Table of Contents <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a><br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; <a href="qh-globa.htm">Global</a>
-&#149; <a href="qh-io.htm">Io</a> &#149; <a href="qh-mem.htm">Mem</a>
-&#149; <a href="qh-merge.htm">Merge</a> &#149; <a href="qh-poly.htm">Poly</a>
-&#149; <a href="qh-qhull.htm">Qhull</a> &#149; <a href="qh-set.htm">Set</a>
-&#149; <a href="qh-stat.htm">Stat</a> &#149; <a href="qh-user.htm#TOC">User</a>
-</p>
-<hr>
-<h2>user.c -- user-definable operations</h2>
-<blockquote>
-<p>This section contains functions and constants that the
-user may want to change. </p>
-
-</blockquote>
-<p><b>Copyright &copy; 1995-2003 The Geometry Center, Minneapolis MN</b></p>
-<hr>
-<p><a href="#TOP">»</a> <a href="qh-geom.htm#TOC">Geom</a> 
-<a name="TOC">&#149;</a> <a href="qh-globa.htm#TOC">Global</a>
-&#149; <a href="qh-io.htm#TOC">Io</a> &#149; <a href="qh-mem.htm#TOC">Mem</a>
-&#149; <a href="qh-merge.htm#TOC">Merge</a> &#149; <a href="qh-poly.htm#TOC">Poly</a>
-&#149; <a href="qh-qhull.htm#TOC">Qhull</a> &#149; <a href="qh-set.htm#TOC">Set</a>
-&#149; <a href="qh-stat.htm#TOC">Stat</a> &#149; <b>User</b>
-</p>
-<h3>Index to <a href="user.c">user.c</a> and 
-<a href="user.h">user.h</a></h3>
-<ul>
-<li><a href="#utype">user.h data types and
-configuration macros</a> </li>
-<li><a href="#ujoggle">joggle constants</a></li>
-<li><a href="#uperform">performance related constants</a></li>
-<li><a href="#umemory">memory constants</a></li>
-<li><a href="#ucond">conditional compilation</a></li>
-<li><a href="#umerge">merge constants</a> </li>
-<li><a href="#ufunc">user.c functions</a> </li>
-</ul>
-<h3><a href="qh-user.htm#TOC">»</a><a name="utype">user.h data
-types and configuration macros</a></h3>
-<ul>
-<li><a href="user.h#realT">realT, qh_REAL...</a> size
-of floating point numbers </li>
-<li><a href="user.h#CPUclock">qh_CPUclock</a> clock()
-function for reporting the total time spent by
-Qhull </li>
-<li><a href="user.h#RANDOM">qh_RANDOM...</a> random
-number generator </li>
-</ul>
-
-<h3><a href="qh-user.htm#TOC">»</a><a name="udef">definition constants</a></h3>
-<ul>
-<li><a href="user.h#DEFAULTbox">qh_DEFAULTbox</a>
-define default box size for rbox, 'Qbb', and 'QbB' (Geomview expects 0.5) </li>
-<li><a href="user.h#INFINITE">qh_INFINITE</a> on
-output, indicates Voronoi center at infinity </li>
-<li><a href="user.h#ORIENTclock">qh_ORIENTclock</a>
-define convention for orienting facets</li>
-<li><a href="user.h#ZEROdelaunay">qh_ZEROdelaunay</a>
-define facets that are ignored in Delaunay triangulations</li>
-</ul>
-
-<h3><a href="qh-user.htm#TOC">»</a><a name="ujoggle">joggle constants</a></h3>
-<ul>
-<li><a href="user.h#JOGGLEagain">qh_JOGGLEagain</a>
-how often to retry before using qh_JOGGLEmaxincrease
-again </li>
-<li><a href="user.h#JOGGLEdefault">qh_JOGGLEdefault</a>
-default value for qh.JOGGLEmax for 'QP' </li>
-<li><a href="user.h#JOGGLEincrease">qh_JOGGLEincrease</a>
-factor to increase qh.JOGGLEmax on retrys for
-'QPn' </li>
-<li><a href="user.h#JOGGLEmaxincrease">qh_JOGGLEmaxincrease</a> max
-for increasing qh.JOGGLEmax relative to
-qh.MAXwidth </li>
-<li><a href="user.h#JOGGLEretry">qh_JOGGLEmaxretry</a>
-report error if this many retries </li>
-<li><a href="user.h#JOGGLEretry">qh_JOGGLEretry</a>
-how often to retry before using qh_JOGGLEmax </li>
-</ul>
-
-<h3><a href="qh-user.htm#TOC">»</a><a name="uperform">performance
-related constants</a></h3>
-<ul>
-<li><a href="user.h#HASHfactor">qh_HASHfactor</a>
-total/used hash slots </li>
-<li><a href="user.h#INITIALmax">qh_INITIALmax</a> if
-dim &gt;= qh_INITIALmax, use min/max coordinate
-points for initial simplex </li>
-<li><a href="user.h#INITIALsearch">qh_INITIALsearch</a>
-if qh.INITIALmax, search points up to this
-dimension </li>
-<li><a href="user.h#NOtrace">qh_NOtrace</a> disallow
-tracing </li>
-<li><a href="user.h#VERIFYdirect">qh_VERIFYdirect</a>
-'Tv' verifies all <em>points X facets</em> if op
-count is smaller </li>
-</ul>
-
-<h3><a href="qh-user.htm#TOC">»</a><a name="umemory">memory constants</a></h3>
-<ul>
-<li><a href="user.h#MEMalign">qh_MEMalign</a> memory
-alignment for qh_meminitbuffers() in global.c </li>
-<li><a href="user.h#MEMbufsize">qh_MEMbufsize</a>
-size of additional memory buffers </li>
-<li><a href="user.h#MEMinitbuf">qh_MEMinitbuf</a>
-size of initial memory buffer </li>
-</ul>
-
-<h3><a href="qh-user.htm#TOC">»</a><a name="ucond">conditional compilation</a></h3>
-<ul>
-<li><a href="user.h#compiler">compiler</a> defined symbols, 
-e.g., _STDC_ and _cplusplus
-
-<li><a href="user.h#COMPUTEfurthest">qh_COMPUTEfurthest</a>
-    compute furthest distance to an outside point instead of storing it with the facet
-<li><a href="user.h#KEEPstatistics">qh_KEEPstatistics</a>
-    enable statistic gathering and reporting with option 'Ts'
-<li><a href="user.h#MAXoutside">qh_MAXoutside</a>
-record outer plane for each facet
-<li><a href="user.h#NOmerge">qh_NOmerge</a>
-disable facet merging
-<li><a href="user.h#NOtrace">qh_NOtrace</a>
-disable tracing with option 'T4'
-<li><a href="user.h#QHpointer">qh_QHpointer</a>
-access global data with pointer or static structure
-<li><a href="user.h#QUICKhelp">qh_QUICKhelp</a>
-use abbreviated help messages, e.g., for degenerate inputs
-</ul>
-
-<h3><a href="qh-user.htm#TOC">»</a><a name="umerge">merge
-constants</a></h3>
-<ul>
-<li><a href="user.h#BESTcentrum">qh_BESTcentrum</a>
-when does qh_findbestneighbor() test centrums? </li>
-<li><a href="user.h#BESTnonconvex">qh_BESTnonconvex</a>
-when does qh_findbestneighbor() test nonconvex
-ridges only? </li>
-<li><a href="user.h#COPLANARratio">qh_COPLANARratio</a>
-what is qh.MINvisible? </li>
-<li><a href="user.h#DIMreduceBuild">qh_DIMreduceBuild</a>
-max dimension for vertex reduction </li>
-<li><a href="user.h#DIMmergeVertex">qh_DIMmergeVertex</a>
-max dimension for vertex merging </li>
-<li><a href="user.h#DISToutside">qh_DISToutside</a>
-when is a point clearly outside of a facet for qh_findbestnew and qh_partitionall</li>
-<li><a href="user.h#MAXnarrow">qh_MAXnarrow</a> max.
-cosine for qh.NARROWhull </li>
-<li><a href="user.h#MAXnewcentrum">qh_MAXnewcentrum</a>
-when does qh_reducevertices_centrum() reset the
-centrum? </li>
-<li><a href="user.h#MAXnewmerges">qh_MAXnewmerges</a>
-when does qh_merge_nonconvex() call
-qh_reducevertices_centrums? </li>
-<li><a href="user.h#RATIOnearinside">qh_RATIOnearinside</a>
-ratio for retaining inside points for
-qh_check_maxout() </li>
-<li><a href="user.h#SEARCHdist">qh_SEARCHdist</a>
-when is facet coplanar with the best facet for qh_findbesthorizon</li>
-<li><a href="user.h#USEfindbestnew">qh_USEfindbestnew</a>
-when to use qh_findbestnew for qh_partitionpoint()</li>
-<li><a href="user.h#WIDEcoplanar">qh_WIDEcoplanar</a>
-what is a WIDEfacet? </li>
-<li><a href="user.h#WARNnarrow">qh_WARNnarrow</a>
-max. cosine to warn about qh.NARROWhull </li>
-</ul>
-
-<h3><a href="qh-user.htm#TOC">»</a><a name="ufunc">user.c
-functions</a></h3>
-<ul>
-<li><a href="user.c#errexit">qh_errexit</a> report
-error and exit qhull()</li>
-<li><a href="user.c#errprint">qh_errprint</a> print
-information about facets and ridges </li>
-<li><a href="user.c#new_qhull">qh_new_qhull</a> call qhull on an array
-of points</li>
-<li><a href="user.c#printfacetlist">qh_printfacetlist</a>
-print all fields of all facets </li>
-</ul>
-
-<p><!-- Navigation links --> </p>
-<hr>
-<p><b>Up:</b> 
-<a href="http://www.qhull.org">Home page for
-Qhull</a> <br>
-<b>Up:</b> <a href="../html/index.htm#TOC">Qhull manual: Table of Contents</a> <br>
-<b>Up:</b> <a href="../html/qh-quick.htm#programs">Programs</a>
-&#149; <a href="../html/qh-quick.htm#options">Options</a> 
-&#149; <a href="../html/qh-opto.htm#output">Output</a> 
-&#149; <a href="../html/qh-optf.htm#format">Formats</a> 
-&#149; <a href="../html/qh-optg.htm#geomview">Geomview</a> 
-&#149; <a href="../html/qh-optp.htm#print">Print</a>
-&#149; <a href="../html/qh-optq.htm#qhull">Qhull</a> 
-&#149; <a href="../html/qh-optc.htm#prec">Precision</a> 
-&#149; <a href="../html/qh-optt.htm#trace">Trace</a><br>
-<b>Up:</b> <a href="../html/qh-in.htm#TOC">Qhull internals: Table of Contents</a> <br>
-<b>To:</b> <a href="index.htm">Qhull functions</a>, macros, and data structures<br>
-<b>To:</b> <a href="qh-geom.htm">Geom</a> &#149; 
-<a href="qh-globa.htm">Global</a> &#149; <a href="qh-io.htm">Io</a>
-&#149; <a href="qh-mem.htm">Mem</a> &#149; <a href="qh-merge.htm">Merge</a>
-&#149; <a href="qh-poly.htm">Poly</a> &#149; <a href="qh-qhull.htm#TOC">Qhull</a>
-&#149; <a href="qh-set.htm">Set</a> &#149; <a href="qh-stat.htm">Stat</a>
-&#149; <a href="qh-user.htm">User</a><br>
-</p>
-<p><!-- GC common information --> </p>
-<hr>
-<p><a href="http://www.geom.uiuc.edu/"><img
-src="../html/qh--geom.gif" align="middle" width="40" height="40"></a><i>The
-Geometry Center Home Page </i></p>
-<p>Comments to: <a href=mailto:qhull@qhull.org>qhull@qhull.org</a>
-</a><br>
-Created: May 2, 1997 --- <!-- hhmts start --> Last modified: see top <!-- hhmts end --> </p>
-</body>
-</html>
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull.c
deleted file mode 100644
index 55a152103227f4827db814905e7275f68ae0b92d..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull.c
+++ /dev/null
@@ -1,1396 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qhull.c
-   Quickhull algorithm for convex hulls
-
-   qhull() and top-level routines
-
-   see qh-qhull.htm, qhull.h, unix.c
-
-   see qhull_a.h for internal functions
-
-   copyright (c) 1993-2003 The Geometry Center        
-*/
-
-#include "qhull_a.h" 
-
-/*============= functions in alphabetic order after qhull() =======*/
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="qhull">-</a>
-  
-  qh_qhull()
-    compute DIM3 convex hull of qh.num_points starting at qh.first_point
-    qh contains all global options and variables
-
-  returns:
-    returns polyhedron
-      qh.facet_list, qh.num_facets, qh.vertex_list, qh.num_vertices,
-    
-    returns global variables
-      qh.hulltime, qh.max_outside, qh.interior_point, qh.max_vertex, qh.min_vertex
-    
-    returns precision constants
-      qh.ANGLEround, centrum_radius, cos_max, DISTround, MAXabs_coord, ONEmerge
-
-  notes:
-    unless needed for output
-      qh.max_vertex and qh.min_vertex are max/min due to merges
-      
-  see:
-    to add individual points to either qh.num_points
-      use qh_addpoint()
-      
-    if qh.GETarea
-      qh_produceoutput() returns qh.totarea and qh.totvol via qh_getarea()
-
-  design:
-    record starting time
-    initialize hull and partition points
-    build convex hull
-    unless early termination
-      update facet->maxoutside for vertices, coplanar, and near-inside points
-    error if temporary sets exist
-    record end time
-*/
-
-void qh_qhull (void) {
-  int numoutside;
-
-  qh hulltime= qh_CPUclock;
-  if (qh RERUN || qh JOGGLEmax < REALmax/2) 
-    qh_build_withrestart();
-  else {
-    qh_initbuild();
-    qh_buildhull();
-  }
-  if (!qh STOPpoint && !qh STOPcone) {
-    if (qh ZEROall_ok && !qh TESTvneighbors && qh MERGEexact)
-      qh_checkzero( qh_ALL);
-    if (qh ZEROall_ok && !qh TESTvneighbors && !qh WAScoplanar) {
-      trace2((qh ferr, "qh_qhull: all facets are clearly convex and no coplanar points.  Post-merging and check of maxout not needed.\n"));
-      qh DOcheckmax= False;
-    }else {
-      if (qh MERGEexact || (qh hull_dim > qh_DIMreduceBuild && qh PREmerge))
-        qh_postmerge ("First post-merge", qh premerge_centrum, qh premerge_cos, 
-             (qh POSTmerge ? False : qh TESTvneighbors));
-      else if (!qh POSTmerge && qh TESTvneighbors) 
-        qh_postmerge ("For testing vertex neighbors", qh premerge_centrum,
-             qh premerge_cos, True); 
-      if (qh POSTmerge)
-        qh_postmerge ("For post-merging", qh postmerge_centrum, 
-             qh postmerge_cos, qh TESTvneighbors);
-      if (qh visible_list == qh facet_list) { /* i.e., merging done */
-        qh findbestnew= True;
-        qh_partitionvisible (/*visible_list, newfacet_list*/ !qh_ALL, &numoutside);
-        qh findbestnew= False;
-        qh_deletevisible (/*qh visible_list*/);
-        qh_resetlists (False, qh_RESETvisible /*qh visible_list newvertex_list newfacet_list */);
-      }
-    }
-    if (qh DOcheckmax){
-      if (qh REPORTfreq) {
-	qh_buildtracing (NULL, NULL); 
-	fprintf (qh ferr, "\nTesting all coplanar points.\n");
-      }
-      qh_check_maxout();
-    }
-    if (qh KEEPnearinside && !qh maxoutdone)  
-      qh_nearcoplanar();
-  }
-  if (qh_setsize ((setT*)qhmem.tempstack) != 0) {
-    fprintf (qh ferr, "qhull internal error (qh_qhull): temporary sets not empty (%d)\n",
-	     qh_setsize ((setT*)qhmem.tempstack));
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  qh hulltime= qh_CPUclock - qh hulltime;
-  qh QHULLfinished= True;
-  trace1((qh ferr, "qh_qhull: algorithm completed\n"));
-} /* qhull */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="addpoint">-</a>
-  
-  qh_addpoint( furthest, facet, checkdist )
-    add point (usually furthest point) above facet to hull 
-    if checkdist, 
-      check that point is above facet.
-      if point is not outside of the hull, uses qh_partitioncoplanar()
-      assumes that facet is defined by qh_findbestfacet()
-    else if facet specified,
-      assumes that point is above facet (major damage if below)
-    for Delaunay triangulations, 
-      Use qh_setdelaunay() to lift point to paraboloid and scale by 'Qbb' if needed
-      Do not use options 'Qbk', 'QBk', or 'QbB' since they scale the coordinates. 
-
-  returns:
-    returns False if user requested an early termination
-     qh.visible_list, newfacet_list, delvertex_list, NEWfacets may be defined
-    updates qh.facet_list, qh.num_facets, qh.vertex_list, qh.num_vertices
-    clear qh.maxoutdone (will need to call qh_check_maxout() for facet->maxoutside)
-    if unknown point, adds a pointer to qh.other_points
-      do not deallocate the point's coordinates
-  
-  notes:
-    assumes point is near its best facet and not at a local minimum of a lens
-      distributions.  Use qh_findbestfacet to avoid this case.
-    uses qh.visible_list, qh.newfacet_list, qh.delvertex_list, qh.NEWfacets
-
-  see also:
-    qh_triangulate() -- triangulate non-simplicial facets
-
-  design:
-    check point in qh.first_point/.num_points
-    if checkdist
-      if point not above facet
-        partition coplanar point 
-        exit
-    exit if pre STOPpoint requested
-    find horizon and visible facets for point
-    make new facets for point to horizon
-    make hyperplanes for point
-    compute balance statistics
-    match neighboring new facets
-    update vertex neighbors and delete interior vertices
-    exit if STOPcone requested
-    merge non-convex new facets
-    if merge found, many merges, or 'Qf'
-       use qh_findbestnew() instead of qh_findbest()
-    partition outside points from visible facets
-    delete visible facets
-    check polyhedron if requested
-    exit if post STOPpoint requested
-    reset working lists of facets and vertices
-*/
-boolT qh_addpoint (pointT *furthest, facetT *facet, boolT checkdist) {
-  int goodvisible, goodhorizon;
-  vertexT *vertex;
-  facetT *newfacet;
-  realT dist, newbalance, pbalance;
-  boolT isoutside= False;
-  int numpart, numpoints, numnew, firstnew;
-
-  qh maxoutdone= False;
-  if (qh_pointid (furthest) == -1)
-    qh_setappend (&qh other_points, furthest);
-  if (!facet) {
-    fprintf (qh ferr, "qh_addpoint: NULL facet.  Need to call qh_findbestfacet first\n");
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  if (checkdist) {
-    facet= qh_findbest (furthest, facet, !qh_ALL, !qh_ISnewfacets, !qh_NOupper,
-			&dist, &isoutside, &numpart);
-    zzadd_(Zpartition, numpart);
-    if (!isoutside) {
-      zinc_(Znotmax);  /* last point of outsideset is no longer furthest. */
-      facet->notfurthest= True;
-      qh_partitioncoplanar (furthest, facet, &dist);
-      return True;
-    }
-  }
-  qh_buildtracing (furthest, facet);
-  if (qh STOPpoint < 0 && qh furthest_id == -qh STOPpoint-1) {
-    facet->notfurthest= True;
-    return False;
-  }
-  qh_findhorizon (furthest, facet, &goodvisible, &goodhorizon); 
-  if (qh ONLYgood && !(goodvisible+goodhorizon) && !qh GOODclosest) {
-    zinc_(Znotgood);  
-    facet->notfurthest= True;
-    /* last point of outsideset is no longer furthest.  This is ok
-       since all points of the outside are likely to be bad */
-    qh_resetlists (False, qh_RESETvisible /*qh visible_list newvertex_list newfacet_list */);
-    return True;
-  }
-  zzinc_(Zprocessed);
-  firstnew= qh facet_id;
-  vertex= qh_makenewfacets (furthest /*visible_list, attaches if !ONLYgood */);
-  qh_makenewplanes (/* newfacet_list */);
-  numnew= qh facet_id - firstnew;
-  newbalance= numnew - (realT) (qh num_facets-qh num_visible)
-                         * qh hull_dim/qh num_vertices;
-  wadd_(Wnewbalance, newbalance);
-  wadd_(Wnewbalance2, newbalance * newbalance);
-  if (qh ONLYgood 
-  && !qh_findgood (qh newfacet_list, goodhorizon) && !qh GOODclosest) {
-    FORALLnew_facets 
-      qh_delfacet (newfacet);
-    qh_delvertex (vertex);
-    qh_resetlists (True, qh_RESETvisible /*qh visible_list newvertex_list newfacet_list */);
-    zinc_(Znotgoodnew);
-    facet->notfurthest= True;
-    return True;
-  }
-  if (qh ONLYgood)
-    qh_attachnewfacets(/*visible_list*/);
-  qh_matchnewfacets();
-  qh_updatevertices();
-  if (qh STOPcone && qh furthest_id == qh STOPcone-1) {
-    facet->notfurthest= True;
-    return False;  /* visible_list etc. still defined */
-  }
-  qh findbestnew= False;
-  if (qh PREmerge || qh MERGEexact) {
-    qh_premerge (vertex, qh premerge_centrum, qh premerge_cos);
-    if (qh_USEfindbestnew)
-      qh findbestnew= True;
-    else {
-      FORALLnew_facets {
-	if (!newfacet->simplicial) {
-	  qh findbestnew= True;  /* use qh_findbestnew instead of qh_findbest*/
-	  break;
-	}
-      }
-    }
-  }else if (qh BESToutside)
-    qh findbestnew= True;
-  qh_partitionvisible (/*visible_list, newfacet_list*/ !qh_ALL, &numpoints);
-  qh findbestnew= False;
-  qh findbest_notsharp= False;
-  zinc_(Zpbalance);
-  pbalance= numpoints - (realT) qh hull_dim /* assumes all points extreme */
-                * (qh num_points - qh num_vertices)/qh num_vertices;
-  wadd_(Wpbalance, pbalance);
-  wadd_(Wpbalance2, pbalance * pbalance);
-  qh_deletevisible (/*qh visible_list*/);
-  zmax_(Zmaxvertex, qh num_vertices);
-  qh NEWfacets= False;
-  if (qh IStracing >= 4) {
-    if (qh num_facets < 2000)
-      qh_printlists();
-    qh_printfacetlist (qh newfacet_list, NULL, True);
-    qh_checkpolygon (qh facet_list);
-  }else if (qh CHECKfrequently) {
-    if (qh num_facets < 50)
-      qh_checkpolygon (qh facet_list);
-    else
-      qh_checkpolygon (qh newfacet_list);
-  }
-  if (qh STOPpoint > 0 && qh furthest_id == qh STOPpoint-1) 
-    return False; 
-  qh_resetlists (True, qh_RESETvisible /*qh visible_list newvertex_list newfacet_list */);
-  /* qh_triangulate(); to test qh.TRInormals */
-  trace2((qh ferr, "qh_addpoint: added p%d new facets %d new balance %2.2g point balance %2.2g\n",
-    qh_pointid (furthest), numnew, newbalance, pbalance));
-  return True;
-} /* addpoint */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="build_withrestart">-</a>
-  
-  qh_build_withrestart()
-    allow restarts due to qh.JOGGLEmax while calling qh_buildhull()
-    qh.FIRSTpoint/qh.NUMpoints is point array
-        it may be moved by qh_joggleinput()
-*/
-void qh_build_withrestart (void) {
-  int restart;
-
-  qh ALLOWrestart= True;
-  while (True) {
-    restart= setjmp (qh restartexit); /* simple statement for CRAY J916 */
-    if (restart) {       /* only from qh_precision() */
-      zzinc_(Zretry);
-      wmax_(Wretrymax, qh JOGGLEmax);
-      qh ERREXITcalled= False;
-      qh STOPcone= True; /* if break, prevents normal output */
-    }
-    if (!qh RERUN && qh JOGGLEmax < REALmax/2) {
-      if (qh build_cnt > qh_JOGGLEmaxretry) {
-	fprintf(qh ferr, "\n\
-qhull precision error: %d attempts to construct a convex hull\n\
-        with joggled input.  Increase joggle above 'QJ%2.2g'\n\
-	or modify qh_JOGGLE... parameters in user.h\n",
-	   qh build_cnt, qh JOGGLEmax);
-	qh_errexit (qh_ERRqhull, NULL, NULL);
-      }
-      if (qh build_cnt && !restart)
-	break;
-    }else if (qh build_cnt && qh build_cnt >= qh RERUN)
-      break;
-    qh STOPcone= False;
-    qh_freebuild (True);  /* first call is a nop */
-    qh build_cnt++;
-    if (!qh qhull_optionsiz)
-      qh qhull_optionsiz= strlen (qh qhull_options);
-    else { 
-      qh qhull_options [qh qhull_optionsiz]= '\0';
-      qh qhull_optionlen= 80;
-    }
-    qh_option("_run", &qh build_cnt, NULL);
-    if (qh build_cnt == qh RERUN) {
-      qh IStracing= qh TRACElastrun;  /* duplicated from qh_initqhull_globals */
-      if (qh TRACEpoint != -1 || qh TRACEdist < REALmax/2 || qh TRACEmerge) {
-        qh TRACElevel= (qh IStracing? qh IStracing : 3);
-        qh IStracing= 0;
-      }
-      qhmem.IStracing= qh IStracing;
-    }
-    if (qh JOGGLEmax < REALmax/2)
-      qh_joggleinput();
-    qh_initbuild();
-    qh_buildhull();
-    if (qh JOGGLEmax < REALmax/2 && !qh MERGING)
-      qh_checkconvex (qh facet_list, qh_ALGORITHMfault);
-  }
-  qh ALLOWrestart= False;
-} /* qh_build_withrestart */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="buildhull">-</a>
-  
-  qh_buildhull()
-    construct a convex hull by adding outside points one at a time
-
-  returns:
-  
-  notes:
-    may be called multiple times
-    checks facet and vertex lists for incorrect flags
-    to recover from STOPcone, call qh_deletevisible and qh_resetlists
-
-  design:
-    check visible facet and newfacet flags
-    check newlist vertex flags and qh.STOPcone/STOPpoint
-    for each facet with a furthest outside point
-      add point to facet
-      exit if qh.STOPcone or qh.STOPpoint requested
-    if qh.NARROWhull for initial simplex
-      partition remaining outside points to coplanar sets
-*/
-void qh_buildhull(void) {
-  facetT *facet;
-  pointT *furthest;
-  vertexT *vertex;
-  int id;
-  
-  trace1((qh ferr, "qh_buildhull: start build hull\n"));
-  FORALLfacets {
-    if (facet->visible || facet->newfacet) {
-      fprintf (qh ferr, "qhull internal error (qh_buildhull): visible or new facet f%d in facet list\n",
-                   facet->id);    
-      qh_errexit (qh_ERRqhull, facet, NULL);
-    }
-  }
-  FORALLvertices {
-    if (vertex->newlist) {
-      fprintf (qh ferr, "qhull internal error (qh_buildhull): new vertex f%d in vertex list\n",
-                   vertex->id);
-      qh_errprint ("ERRONEOUS", NULL, NULL, NULL, vertex);
-      qh_errexit (qh_ERRqhull, NULL, NULL);
-    }
-    id= qh_pointid (vertex->point);
-    if ((qh STOPpoint>0 && id == qh STOPpoint-1) ||
-	(qh STOPpoint<0 && id == -qh STOPpoint-1) ||
-	(qh STOPcone>0 && id == qh STOPcone-1)) {
-      trace1((qh ferr,"qh_buildhull: stop point or cone P%d in initial hull\n", id));
-      return;
-    }
-  }
-  qh facet_next= qh facet_list;      /* advance facet when processed */
-  while ((furthest= qh_nextfurthest (&facet))) {
-    qh num_outside--;  /* if ONLYmax, furthest may not be outside */
-    if (!qh_addpoint (furthest, facet, qh ONLYmax))
-      break;
-  }
-  if (qh NARROWhull) /* move points from outsideset to coplanarset */
-    qh_outcoplanar( /* facet_list */ );
-  if (qh num_outside && !furthest) {
-    fprintf (qh ferr, "qhull internal error (qh_buildhull): %d outside points were never processed.\n", qh num_outside);
-    qh_errexit (qh_ERRqhull, NULL, NULL);
-  }
-  trace1((qh ferr, "qh_buildhull: completed the hull construction\n"));
-} /* buildhull */
-  
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="buildtracing">-</a>
-  
-  qh_buildtracing( furthest, facet )
-    trace an iteration of qh_buildhull() for furthest point and facet
-    if !furthest, prints progress message
-
-  returns:
-    tracks progress with qh.lastreport
-    updates qh.furthest_id (-3 if furthest is NULL)
-    also resets visit_id, vertext_visit on wrap around
-
-  see:
-    qh_tracemerging()
-
-  design:
-    if !furthest
-      print progress message
-      exit
-    if 'TFn' iteration
-      print progress message
-    else if tracing
-      trace furthest point and facet
-    reset qh.visit_id and qh.vertex_visit if overflow may occur
-    set qh.furthest_id for tracing
-*/
-void qh_buildtracing (pointT *furthest, facetT *facet) {
-  realT dist= 0;
-  float cpu;
-  int total, furthestid;
-  time_t timedata;
-  struct tm *tp;
-  vertexT *vertex;
-
-  qh old_randomdist= qh RANDOMdist;
-  qh RANDOMdist= False;
-  if (!furthest) {
-    time (&timedata);
-    tp= localtime (&timedata);
-    cpu= qh_CPUclock - qh hulltime;
-    cpu /= qh_SECticks;
-    total= zzval_(Ztotmerge) - zzval_(Zcyclehorizon) + zzval_(Zcyclefacettot);
-    fprintf (qh ferr, "\n\
-At %02d:%02d:%02d & %2.5g CPU secs, qhull has created %d facets and merged %d.\n\
- The current hull contains %d facets and %d vertices.  Last point was p%d\n",
-      tp->tm_hour, tp->tm_min, tp->tm_sec, cpu, qh facet_id -1,
-      total, qh num_facets, qh num_vertices, qh furthest_id);
-    return;
-  }
-  furthestid= qh_pointid (furthest);
-  if (qh TRACEpoint == furthestid) {
-    qh IStracing= qh TRACElevel;
-    qhmem.IStracing= qh TRACElevel;
-  }else if (qh TRACEpoint != -1 && qh TRACEdist < REALmax/2) {
-    qh IStracing= 0;
-    qhmem.IStracing= 0;
-  }
-  if (qh REPORTfreq && (qh facet_id-1 > qh lastreport+qh REPORTfreq)) {
-    qh lastreport= qh facet_id-1;
-    time (&timedata);
-    tp= localtime (&timedata);
-    cpu= qh_CPUclock - qh hulltime;
-    cpu /= qh_SECticks;
-    total= zzval_(Ztotmerge) - zzval_(Zcyclehorizon) + zzval_(Zcyclefacettot);
-    zinc_(Zdistio);
-    qh_distplane (furthest, facet, &dist);
-    fprintf (qh ferr, "\n\
-At %02d:%02d:%02d & %2.5g CPU secs, qhull has created %d facets and merged %d.\n\
- The current hull contains %d facets and %d vertices.  There are %d\n\
- outside points.  Next is point p%d (v%d), %2.2g above f%d.\n",
-      tp->tm_hour, tp->tm_min, tp->tm_sec, cpu, qh facet_id -1,
-      total, qh num_facets, qh num_vertices, qh num_outside+1,
-      furthestid, qh vertex_id, dist, getid_(facet));
-  }else if (qh IStracing >=1) {
-    cpu= qh_CPUclock - qh hulltime;
-    cpu /= qh_SECticks;
-    qh_distplane (furthest, facet, &dist);
-    fprintf (qh ferr, "qh_addpoint: add p%d (v%d) to hull of %d facets (%2.2g above f%d) and %d outside at %4.4g CPU secs.  Previous was p%d.\n",
-      furthestid, qh vertex_id, qh num_facets, dist,
-      getid_(facet), qh num_outside+1, cpu, qh furthest_id);
-  }
-  if (qh visit_id > (unsigned) INT_MAX) {
-    qh visit_id= 0;
-    FORALLfacets
-      facet->visitid= qh visit_id;
-  }
-  if (qh vertex_visit > (unsigned) INT_MAX) {
-    qh vertex_visit= 0;
-    FORALLvertices
-      vertex->visitid= qh vertex_visit;
-  }
-  qh furthest_id= furthestid;
-  qh RANDOMdist= qh old_randomdist;
-} /* buildtracing */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="errexit2">-</a>
-  
-  qh_errexit2( exitcode, facet, otherfacet )
-    return exitcode to system after an error
-    report two facets
-
-  returns:
-    assumes exitcode non-zero
-
-  see:
-    normally use qh_errexit() in user.c (reports a facet and a ridge)
-*/
-void qh_errexit2(int exitcode, facetT *facet, facetT *otherfacet) {
-  
-  qh_errprint("ERRONEOUS", facet, otherfacet, NULL, NULL);
-  qh_errexit (exitcode, NULL, NULL);
-} /* errexit2 */
-
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="findhorizon">-</a>
-  
-  qh_findhorizon( point, facet, goodvisible, goodhorizon )
-    given a visible facet, find the point's horizon and visible facets
-    for all facets, !facet-visible
-
-  returns:
-    returns qh.visible_list/num_visible with all visible facets 
-      marks visible facets with ->visible 
-    updates count of good visible and good horizon facets
-    updates qh.max_outside, qh.max_vertex, facet->maxoutside
-
-  see:
-    similar to qh_delpoint()
-
-  design:
-    move facet to qh.visible_list at end of qh.facet_list
-    for all visible facets
-     for each unvisited neighbor of a visible facet
-       compute distance of point to neighbor
-       if point above neighbor
-         move neighbor to end of qh.visible_list
-       else if point is coplanar with neighbor
-         update qh.max_outside, qh.max_vertex, neighbor->maxoutside
-         mark neighbor coplanar (will create a samecycle later)
-         update horizon statistics         
-*/
-void qh_findhorizon(pointT *point, facetT *facet, int *goodvisible, int *goodhorizon) {
-  facetT *neighbor, **neighborp, *visible;
-  int numhorizon= 0, coplanar= 0;
-  realT dist;
-  
-  trace1((qh ferr,"qh_findhorizon: find horizon for point p%d facet f%d\n",qh_pointid(point),facet->id));
-  *goodvisible= *goodhorizon= 0;
-  zinc_(Ztotvisible);
-  qh_removefacet(facet);  /* visible_list at end of qh facet_list */
-  qh_appendfacet(facet);
-  qh num_visible= 1;
-  if (facet->good)
-    (*goodvisible)++;
-  qh visible_list= facet;
-  facet->visible= True;
-  facet->f.replace= NULL;
-  if (qh IStracing >=4)
-    qh_errprint ("visible", facet, NULL, NULL, NULL);
-  qh visit_id++;
-  FORALLvisible_facets {
-    if (visible->tricoplanar && !qh TRInormals) {
-      fprintf (qh ferr, "qh_findhorizon: does not work for tricoplanar facets.  Use option 'Q11'\n");
-      qh_errexit (qh_ERRqhull, visible, NULL);
-    }
-    visible->visitid= qh visit_id;
-    FOREACHneighbor_(visible) {
-      if (neighbor->visitid == qh visit_id) 
-        continue;
-      neighbor->visitid= qh visit_id;
-      zzinc_(Znumvisibility);
-      qh_distplane(point, neighbor, &dist);
-      if (dist > qh MINvisible) {
-        zinc_(Ztotvisible);
-	qh_removefacet(neighbor);  /* append to end of qh visible_list */
-	qh_appendfacet(neighbor);
-	neighbor->visible= True;
-        neighbor->f.replace= NULL;
-	qh num_visible++;
-	if (neighbor->good)
-	  (*goodvisible)++;
-        if (qh IStracing >=4)
-          qh_errprint ("visible", neighbor, NULL, NULL, NULL);
-      }else {
- 	if (dist > - qh MAXcoplanar) {
-    	  neighbor->coplanar= True;
-          zzinc_(Zcoplanarhorizon);
-          qh_precision ("coplanar horizon");
-	  coplanar++;
-	  if (qh MERGING) {
-	    if (dist > 0) {
-	      maximize_(qh max_outside, dist);
-	      maximize_(qh max_vertex, dist);
-#if qh_MAXoutside
-	      maximize_(neighbor->maxoutside, dist);
-#endif
-	    }else
-	      minimize_(qh min_vertex, dist);  /* due to merge later */
-	  }
-      	  trace2((qh ferr, "qh_findhorizon: point p%d is coplanar to horizon f%d, dist=%2.7g < qh MINvisible (%2.7g)\n",
-	      qh_pointid(point), neighbor->id, dist, qh MINvisible));
-	}else
-    	  neighbor->coplanar= False;
-    	zinc_(Ztothorizon);
-        numhorizon++;
-	if (neighbor->good)
-	  (*goodhorizon)++;
-        if (qh IStracing >=4)
-          qh_errprint ("horizon", neighbor, NULL, NULL, NULL);
-      }
-    }
-  }
-  if (!numhorizon) {
-    qh_precision ("empty horizon");
-    fprintf(qh ferr, "qhull precision error (qh_findhorizon): empty horizon\n\
-Point p%d was above all facets.\n", qh_pointid(point));
-    qh_printfacetlist (qh facet_list, NULL, True);
-    qh_errexit(qh_ERRprec, NULL, NULL);
-  }
-  trace1((qh ferr, "qh_findhorizon: %d horizon facets (good %d), %d visible (good %d), %d coplanar\n", 
-       numhorizon, *goodhorizon, qh num_visible, *goodvisible, coplanar));
-  if (qh IStracing >= 4 && qh num_facets < 50) 
-    qh_printlists ();
-} /* findhorizon */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="nextfurthest">-</a>
-  
-  qh_nextfurthest( visible )
-    returns next furthest point and visible facet for qh_addpoint()
-    starts search at qh.facet_next
-
-  returns:
-    removes furthest point from outside set
-    NULL if none available
-    advances qh.facet_next over facets with empty outside sets  
-
-  design:
-    for each facet from qh.facet_next
-      if empty outside set
-        advance qh.facet_next
-      else if qh.NARROWhull
-        determine furthest outside point
-        if furthest point is not outside
-          advance qh.facet_next (point will be coplanar)
-    remove furthest point from outside set
-*/
-pointT *qh_nextfurthest (facetT **visible) {
-  facetT *facet;
-  int size, index;
-  realT randr, dist;
-  pointT *furthest;
-
-  while ((facet= qh facet_next) != qh facet_tail) {
-    if (!facet->outsideset) {
-      qh facet_next= facet->next;
-      continue;
-    }
-    SETreturnsize_(facet->outsideset, size);
-    if (!size) {
-      qh_setfree (&facet->outsideset);
-      qh facet_next= facet->next;
-      continue;
-    }
-    if (qh NARROWhull) {
-      if (facet->notfurthest) 
-	qh_furthestout (facet);
-      furthest= (pointT*)qh_setlast (facet->outsideset);
-#if qh_COMPUTEfurthest
-      qh_distplane (furthest, facet, &dist);
-      zinc_(Zcomputefurthest);
-#else
-      dist= facet->furthestdist;
-#endif
-      if (dist < qh MINoutside) { /* remainder of outside set is coplanar for qh_outcoplanar */
-	qh facet_next= facet->next;
-	continue;
-      }
-    }
-    if (!qh RANDOMoutside && !qh VIRTUALmemory) {
-      if (qh PICKfurthest) {
-	qh_furthestnext (/* qh facet_list */);
-	facet= qh facet_next;
-      }
-      *visible= facet;
-      return ((pointT*)qh_setdellast (facet->outsideset));
-    }
-    if (qh RANDOMoutside) {
-      int outcoplanar = 0;
-      if (qh NARROWhull) {
-        FORALLfacets {
-	  if (facet == qh facet_next)
-	    break;
-	  if (facet->outsideset)
-  	    outcoplanar += qh_setsize( facet->outsideset);
-	}
-      }
-      randr= qh_RANDOMint;
-      randr= randr/(qh_RANDOMmax+1);
-      index= (int)floor((qh num_outside - outcoplanar) * randr);
-      FORALLfacet_(qh facet_next) {
-        if (facet->outsideset) {
-          SETreturnsize_(facet->outsideset, size);
-          if (!size)
-            qh_setfree (&facet->outsideset);
-          else if (size > index) {
-            *visible= facet;
-            return ((pointT*)qh_setdelnth (facet->outsideset, index));
-          }else
-            index -= size;
-        }
-      }
-      fprintf (qh ferr, "qhull internal error (qh_nextfurthest): num_outside %d is too low\nby at least %d, or a random real %g >= 1.0\n",
-              qh num_outside, index+1, randr);
-      qh_errexit (qh_ERRqhull, NULL, NULL);
-    }else { /* VIRTUALmemory */
-      facet= qh facet_tail->previous;
-      if (!(furthest= (pointT*)qh_setdellast(facet->outsideset))) {
-        if (facet->outsideset)
-          qh_setfree (&facet->outsideset);
-        qh_removefacet (facet);
-        qh_prependfacet (facet, &qh facet_list);
-        continue;
-      }
-      *visible= facet;
-      return furthest;
-    }
-  }
-  return NULL;
-} /* nextfurthest */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="partitionall">-</a>
-  
-  qh_partitionall( vertices, points, numpoints )
-    partitions all points in points/numpoints to the outsidesets of facets
-    vertices= vertices in qh.facet_list (not partitioned)
-
-  returns:
-    builds facet->outsideset
-    does not partition qh.GOODpoint
-    if qh.ONLYgood && !qh.MERGING, 
-      does not partition qh.GOODvertex
-
-  notes:
-    faster if qh.facet_list sorted by anticipated size of outside set
-
-  design:
-    initialize pointset with all points
-    remove vertices from pointset
-    remove qh.GOODpointp from pointset (unless it's qh.STOPcone or qh.STOPpoint)
-    for all facets
-      for all remaining points in pointset
-        compute distance from point to facet
-        if point is outside facet
-          remove point from pointset (by not reappending)
-          update bestpoint
-          append point or old bestpoint to facet's outside set
-      append bestpoint to facet's outside set (furthest)
-    for all points remaining in pointset
-      partition point into facets' outside sets and coplanar sets
-*/
-void qh_partitionall(setT *vertices, pointT *points, int numpoints){
-  setT *pointset;
-  vertexT *vertex, **vertexp;
-  pointT *point, **pointp, *bestpoint;
-  int size, point_i, point_n, point_end, remaining, i, id;
-  facetT *facet;
-  realT bestdist= -REALmax, dist, distoutside;
-    
-  trace1((qh ferr, "qh_partitionall: partition all points into outside sets\n"));
-  pointset= qh_settemp (numpoints);
-  qh num_outside= 0;
-  pointp= SETaddr_(pointset, pointT);
-  for (i=numpoints, point= points; i--; point += qh hull_dim)
-    *(pointp++)= point;
-  qh_settruncate (pointset, numpoints);
-  FOREACHvertex_(vertices) {
-    if ((id= qh_pointid(vertex->point)) >= 0)
-      SETelem_(pointset, id)= NULL;
-  }
-  id= qh_pointid (qh GOODpointp);
-  if (id >=0 && qh STOPcone-1 != id && -qh STOPpoint-1 != id)
-    SETelem_(pointset, id)= NULL;
-  if (qh GOODvertexp && qh ONLYgood && !qh MERGING) { /* matches qhull()*/
-    if ((id= qh_pointid(qh GOODvertexp)) >= 0)
-      SETelem_(pointset, id)= NULL;
-  }
-  if (!qh BESToutside) {  /* matches conditional for qh_partitionpoint below */
-    distoutside= qh_DISToutside; /* multiple of qh.MINoutside & qh.max_outside, see user.h */
-    zval_(Ztotpartition)= qh num_points - qh hull_dim - 1; /*misses GOOD... */
-    remaining= qh num_facets;
-    point_end= numpoints;
-    FORALLfacets {
-      size= point_end/(remaining--) + 100;
-      facet->outsideset= qh_setnew (size);
-      bestpoint= NULL;
-      point_end= 0;
-      FOREACHpoint_i_(pointset) {
-        if (point) {
-          zzinc_(Zpartitionall);
-          qh_distplane (point, facet, &dist);
-          if (dist < distoutside)
-            SETelem_(pointset, point_end++)= point;
-          else {
-	    qh num_outside++;
-            if (!bestpoint) {
-              bestpoint= point;
-              bestdist= dist;
-            }else if (dist > bestdist) {
-              qh_setappend (&facet->outsideset, bestpoint);
-              bestpoint= point;
-              bestdist= dist;
-            }else 
-              qh_setappend (&facet->outsideset, point);
-          }
-        }
-      }
-      if (bestpoint) {
-        qh_setappend (&facet->outsideset, bestpoint);
-#if !qh_COMPUTEfurthest
-	facet->furthestdist= bestdist;
-#endif
-      }else
-        qh_setfree (&facet->outsideset);
-      qh_settruncate (pointset, point_end);
-    }
-  }
-  /* if !qh BESToutside, pointset contains points not assigned to outsideset */
-  if (qh BESToutside || qh MERGING || qh KEEPcoplanar || qh KEEPinside) {
-    qh findbestnew= True;
-    FOREACHpoint_i_(pointset) { 
-      if (point)
-        qh_partitionpoint(point, qh facet_list);
-    }
-    qh findbestnew= False;
-  }
-  zzadd_(Zpartitionall, zzval_(Zpartition));
-  zzval_(Zpartition)= 0;
-  qh_settempfree(&pointset);
-  if (qh IStracing >= 4)
-    qh_printfacetlist (qh facet_list, NULL, True);
-} /* partitionall */
-
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="partitioncoplanar">-</a>
-  
-  qh_partitioncoplanar( point, facet, dist )
-    partition coplanar point to a facet
-    dist is distance from point to facet
-    if dist NULL, 
-      searches for bestfacet and does nothing if inside
-    if qh.findbestnew set, 
-      searches new facets instead of using qh_findbest()
-
-  returns:
-    qh.max_ouside updated
-    if qh.KEEPcoplanar or qh.KEEPinside
-      point assigned to best coplanarset
-  
-  notes:
-    facet->maxoutside is updated at end by qh_check_maxout
-
-  design:
-    if dist undefined
-      find best facet for point
-      if point sufficiently below facet (depends on qh.NEARinside and qh.KEEPinside)
-        exit
-    if keeping coplanar/nearinside/inside points
-      if point is above furthest coplanar point
-        append point to coplanar set (it is the new furthest)
-        update qh.max_outside
-      else
-        append point one before end of coplanar set
-    else if point is clearly outside of qh.max_outside and bestfacet->coplanarset
-    and bestfacet is more than perpendicular to facet
-      repartition the point using qh_findbest() -- it may be put on an outsideset
-    else
-      update qh.max_outside
-*/
-void qh_partitioncoplanar (pointT *point, facetT *facet, realT *dist) {
-  facetT *bestfacet;
-  pointT *oldfurthest;
-  realT bestdist, dist2, angle;
-  int numpart= 0, oldfindbest;
-  boolT isoutside;
-
-  qh WAScoplanar= True;
-  if (!dist) {
-    if (qh findbestnew)
-      bestfacet= qh_findbestnew (point, facet, &bestdist, qh_ALL, &isoutside, &numpart);
-    else
-      bestfacet= qh_findbest (point, facet, qh_ALL, !qh_ISnewfacets, qh DELAUNAY, 
-                          &bestdist, &isoutside, &numpart);
-    zinc_(Ztotpartcoplanar);
-    zzadd_(Zpartcoplanar, numpart);
-    if (!qh DELAUNAY && !qh KEEPinside) { /*  for 'd', bestdist skips upperDelaunay facets */
-      if (qh KEEPnearinside) {
-        if (bestdist < -qh NEARinside) { 
-          zinc_(Zcoplanarinside);
-	  trace4((qh ferr, "qh_partitioncoplanar: point p%d is more than near-inside facet f%d dist %2.2g findbestnew %d\n",
-		  qh_pointid(point), bestfacet->id, bestdist, qh findbestnew));
-          return;
-        }
-      }else if (bestdist < -qh MAXcoplanar) {
-	  trace4((qh ferr, "qh_partitioncoplanar: point p%d is inside facet f%d dist %2.2g findbestnew %d\n",
-		  qh_pointid(point), bestfacet->id, bestdist, qh findbestnew));
-        zinc_(Zcoplanarinside);
-        return;
-      }
-    }
-  }else {
-    bestfacet= facet;
-    bestdist= *dist;
-  }
-  if (bestdist > qh max_outside) {
-    if (!dist && facet != bestfacet) { 
-      zinc_(Zpartangle);
-      angle= qh_getangle(facet->normal, bestfacet->normal);
-      if (angle < 0) {
-	/* typically due to deleted vertex and coplanar facets, e.g.,
-	     RBOX 1000 s Z1 G1e-13 t1001185205 | QHULL Tv */
-	zinc_(Zpartflip);
-	trace2((qh ferr, "qh_partitioncoplanar: repartition point p%d from f%d.  It is above flipped facet f%d dist %2.2g\n",
-		qh_pointid(point), facet->id, bestfacet->id, bestdist));
-	oldfindbest= qh findbestnew;
-        qh findbestnew= False;
-	qh_partitionpoint(point, bestfacet);
-        qh findbestnew= oldfindbest;
-	return;
-      }
-    }
-    qh max_outside= bestdist;
-    if (bestdist > qh TRACEdist) {
-      fprintf (qh ferr, "qh_partitioncoplanar: ====== p%d from f%d increases max_outside to %2.2g of f%d last p%d\n",
-		     qh_pointid(point), facet->id, bestdist, bestfacet->id, qh furthest_id);
-      qh_errprint ("DISTANT", facet, bestfacet, NULL, NULL);
-    }
-  }
-  if (qh KEEPcoplanar + qh KEEPinside + qh KEEPnearinside) {
-    oldfurthest= (pointT*)qh_setlast (bestfacet->coplanarset);
-    if (oldfurthest) {
-      zinc_(Zcomputefurthest);
-      qh_distplane (oldfurthest, bestfacet, &dist2);
-    }
-    if (!oldfurthest || dist2 < bestdist) 
-      qh_setappend(&bestfacet->coplanarset, point);
-    else 
-      qh_setappend2ndlast(&bestfacet->coplanarset, point);
-  }
-  trace4((qh ferr, "qh_partitioncoplanar: point p%d is coplanar with facet f%d (or inside) dist %2.2g\n",
-	  qh_pointid(point), bestfacet->id, bestdist));
-} /* partitioncoplanar */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="partitionpoint">-</a>
-  
-  qh_partitionpoint( point, facet )
-    assigns point to an outside set, coplanar set, or inside set (i.e., dropt)
-    if qh.findbestnew
-      uses qh_findbestnew() to search all new facets
-    else
-      uses qh_findbest()
-  
-  notes:
-    after qh_distplane(), this and qh_findbest() are most expensive in 3-d
-
-  design:
-    find best facet for point 
-      (either exhaustive search of new facets or directed search from facet)
-    if qh.NARROWhull
-      retain coplanar and nearinside points as outside points
-    if point is outside bestfacet
-      if point above furthest point for bestfacet
-        append point to outside set (it becomes the new furthest)
-        if outside set was empty
-          move bestfacet to end of qh.facet_list (i.e., after qh.facet_next)
-        update bestfacet->furthestdist
-      else
-        append point one before end of outside set
-    else if point is coplanar to bestfacet
-      if keeping coplanar points or need to update qh.max_outside
-        partition coplanar point into bestfacet
-    else if near-inside point        
-      partition as coplanar point into bestfacet
-    else is an inside point
-      if keeping inside points 
-        partition as coplanar point into bestfacet
-*/
-void qh_partitionpoint (pointT *point, facetT *facet) {
-  realT bestdist;
-  boolT isoutside;
-  facetT *bestfacet;
-  int numpart;
-#if qh_COMPUTEfurthest
-  realT dist;
-#endif
-
-  if (qh findbestnew)
-    bestfacet= qh_findbestnew (point, facet, &bestdist, qh BESToutside, &isoutside, &numpart);
-  else
-    bestfacet= qh_findbest (point, facet, qh BESToutside, qh_ISnewfacets, !qh_NOupper,
-			  &bestdist, &isoutside, &numpart);
-  zinc_(Ztotpartition);
-  zzadd_(Zpartition, numpart);
-  if (qh NARROWhull) {
-    if (qh DELAUNAY && !isoutside && bestdist >= -qh MAXcoplanar)
-      qh_precision ("nearly incident point (narrow hull)");
-    if (qh KEEPnearinside) {
-      if (bestdist >= -qh NEARinside)
-	isoutside= True;
-    }else if (bestdist >= -qh MAXcoplanar)
-      isoutside= True;
-  }
-
-  if (isoutside) {
-    if (!bestfacet->outsideset 
-    || !qh_setlast (bestfacet->outsideset)) {
-      qh_setappend(&(bestfacet->outsideset), point);
-      if (!bestfacet->newfacet) {
-        qh_removefacet (bestfacet);  /* make sure it's after qh facet_next */
-        qh_appendfacet (bestfacet);
-      }
-#if !qh_COMPUTEfurthest
-      bestfacet->furthestdist= bestdist;
-#endif
-    }else {
-#if qh_COMPUTEfurthest
-      zinc_(Zcomputefurthest);
-      qh_distplane (oldfurthest, bestfacet, &dist);
-      if (dist < bestdist) 
-	qh_setappend(&(bestfacet->outsideset), point);
-      else
-	qh_setappend2ndlast(&(bestfacet->outsideset), point);
-#else
-      if (bestfacet->furthestdist < bestdist) {
-	qh_setappend(&(bestfacet->outsideset), point);
-	bestfacet->furthestdist= bestdist;
-      }else
-	qh_setappend2ndlast(&(bestfacet->outsideset), point);
-#endif
-    }
-    qh num_outside++;
-    trace4((qh ferr, "qh_partitionpoint: point p%d is outside facet f%d new? %d(or narrowhull)\n",
-	  qh_pointid(point), bestfacet->id, bestfacet->newfacet));
-  }else if (qh DELAUNAY || bestdist >= -qh MAXcoplanar) { /* for 'd', bestdist skips upperDelaunay facets */
-    zzinc_(Zcoplanarpart);
-    if (qh DELAUNAY)
-      qh_precision ("nearly incident point");
-    if ((qh KEEPcoplanar + qh KEEPnearinside) || bestdist > qh max_outside) 
-      qh_partitioncoplanar (point, bestfacet, &bestdist);
-    else {
-      trace4((qh ferr, "qh_partitionpoint: point p%d is coplanar to facet f%d (dropped)\n",
-	  qh_pointid(point), bestfacet->id));
-    }
-  }else if (qh KEEPnearinside && bestdist > -qh NEARinside) {
-    zinc_(Zpartnear);
-    qh_partitioncoplanar (point, bestfacet, &bestdist);
-  }else {
-    zinc_(Zpartinside);
-    trace4((qh ferr, "qh_partitionpoint: point p%d is inside all facets, closest to f%d dist %2.2g\n",
-	  qh_pointid(point), bestfacet->id, bestdist));
-    if (qh KEEPinside)
-      qh_partitioncoplanar (point, bestfacet, &bestdist);
-  }
-} /* partitionpoint */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="partitionvisible">-</a>
-  
-  qh_partitionvisible( allpoints, numoutside )
-    partitions points in visible facets to qh.newfacet_list
-    qh.visible_list= visible facets
-    for visible facets
-      1st neighbor (if any) points to a horizon facet or a new facet
-    if allpoints (not used),
-      repartitions coplanar points
-
-  returns:
-    updates outside sets and coplanar sets of qh.newfacet_list
-    updates qh.num_outside (count of outside points)
-  
-  notes:
-    qh.findbest_notsharp should be clear (extra work if set)
-
-  design:
-    for all visible facets with outside set or coplanar set
-      select a newfacet for visible facet
-      if outside set
-        partition outside set into new facets
-      if coplanar set and keeping coplanar/near-inside/inside points
-        if allpoints
-          partition coplanar set into new facets, may be assigned outside
-        else
-          partition coplanar set into coplanar sets of new facets
-    for each deleted vertex
-      if allpoints
-        partition vertex into new facets, may be assigned outside
-      else
-        partition vertex into coplanar sets of new facets
-*/
-void qh_partitionvisible(/*visible_list*/ boolT allpoints, int *numoutside) {
-  facetT *visible, *newfacet;
-  pointT *point, **pointp;
-  int coplanar=0, size;
-  unsigned count;
-  vertexT *vertex, **vertexp;
-  
-  if (qh ONLYmax)
-    maximize_(qh MINoutside, qh max_vertex);
-  *numoutside= 0;
-  FORALLvisible_facets {
-    if (!visible->outsideset && !visible->coplanarset)
-      continue;
-    newfacet= visible->f.replace;
-    count= 0;
-    while (newfacet && newfacet->visible) {
-      newfacet= newfacet->f.replace;
-      if (count++ > qh facet_id)
-	qh_infiniteloop (visible);
-    }
-    if (!newfacet)
-      newfacet= qh newfacet_list;
-    if (newfacet == qh facet_tail) {
-      fprintf (qh ferr, "qhull precision error (qh_partitionvisible): all new facets deleted as\n        degenerate facets. Can not continue.\n");
-      qh_errexit (qh_ERRprec, NULL, NULL);
-    }
-    if (visible->outsideset) {
-      size= qh_setsize (visible->outsideset);
-      *numoutside += size;
-      qh num_outside -= size;
-      FOREACHpoint_(visible->outsideset) 
-        qh_partitionpoint (point, newfacet);
-    }
-    if (visible->coplanarset && (qh KEEPcoplanar + qh KEEPinside + qh KEEPnearinside)) {
-      size= qh_setsize (visible->coplanarset);
-      coplanar += size;
-      FOREACHpoint_(visible->coplanarset) {
-        if (allpoints) /* not used */
-          qh_partitionpoint (point, newfacet);
-        else
-          qh_partitioncoplanar (point, newfacet, NULL);
-      }
-    }
-  }
-  FOREACHvertex_(qh del_vertices) {
-    if (vertex->point) {
-      if (allpoints) /* not used */
-        qh_partitionpoint (vertex->point, qh newfacet_list);
-      else
-        qh_partitioncoplanar (vertex->point, qh newfacet_list, NULL);
-    }
-  }
-  trace1((qh ferr,"qh_partitionvisible: partitioned %d points from outsidesets and %d points from coplanarsets\n", *numoutside, coplanar));
-} /* partitionvisible */
-
-
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="precision">-</a>
-  
-  qh_precision( reason )
-    restart on precision errors if not merging and if 'QJn'
-*/
-void qh_precision (char *reason) {
-
-  if (qh ALLOWrestart && !qh PREmerge && !qh MERGEexact) {
-    if (qh JOGGLEmax < REALmax/2) {
-      trace0((qh ferr, "qh_precision: qhull restart because of %s\n", reason));
-      longjmp(qh restartexit, qh_ERRprec);
-    }
-  }
-} /* qh_precision */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >-------------------------------</a><a name="printsummary">-</a>
-  
-  qh_printsummary( fp )
-    prints summary to fp
-
-  notes:
-    not in io.c so that user_eg.c can prevent io.c from loading
-    qh_printsummary and qh_countfacets must match counts
-
-  design:
-    determine number of points, vertices, and coplanar points
-    print summary
-*/
-void qh_printsummary(FILE *fp) {
-  realT ratio, outerplane, innerplane;
-  float cpu;
-  int size, id, nummerged, numvertices, numcoplanars= 0, nonsimplicial=0;
-  int goodused;
-  facetT *facet;
-  char *s;
-  int numdel= zzval_(Zdelvertextot);
-  int numtricoplanars= 0;
-
-  size= qh num_points + qh_setsize (qh other_points);
-  numvertices= qh num_vertices - qh_setsize (qh del_vertices);
-  id= qh_pointid (qh GOODpointp);
-  FORALLfacets {
-    if (facet->coplanarset)
-      numcoplanars += qh_setsize( facet->coplanarset);
-    if (facet->good) {
-      if (facet->simplicial) {
-	if (facet->keepcentrum && facet->tricoplanar)
-	  numtricoplanars++;
-      }else if (qh_setsize(facet->vertices) != qh hull_dim)
-	nonsimplicial++;
-    }
-  }
-  if (id >=0 && qh STOPcone-1 != id && -qh STOPpoint-1 != id)
-    size--;
-  if (qh STOPcone || qh STOPpoint)
-      fprintf (fp, "\nAt a premature exit due to 'TVn', 'TCn', 'TRn', or precision error.");
-  if (qh UPPERdelaunay)
-    goodused= qh GOODvertex + qh GOODpoint + qh SPLITthresholds;
-  else if (qh DELAUNAY)
-    goodused= qh GOODvertex + qh GOODpoint + qh GOODthreshold;
-  else
-    goodused= qh num_good;
-  nummerged= zzval_(Ztotmerge) - zzval_(Zcyclehorizon) + zzval_(Zcyclefacettot);
-  if (qh VORONOI) {
-    if (qh UPPERdelaunay)
-      fprintf (fp, "\n\
-Furthest-site Voronoi vertices by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim);
-    else
-      fprintf (fp, "\n\
-Voronoi diagram by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim);
-    fprintf(fp, "  Number of Voronoi regions%s: %d\n",
-              qh ATinfinity ? " and at-infinity" : "", numvertices);
-    if (numdel)
-      fprintf(fp, "  Total number of deleted points due to merging: %d\n", numdel); 
-    if (numcoplanars - numdel > 0) 
-      fprintf(fp, "  Number of nearly incident points: %d\n", numcoplanars - numdel); 
-    else if (size - numvertices - numdel > 0) 
-      fprintf(fp, "  Total number of nearly incident points: %d\n", size - numvertices - numdel); 
-    fprintf(fp, "  Number of%s Voronoi vertices: %d\n", 
-              goodused ? " 'good'" : "", qh num_good);
-    if (nonsimplicial) 
-      fprintf(fp, "  Number of%s non-simplicial Voronoi vertices: %d\n", 
-              goodused ? " 'good'" : "", nonsimplicial);
-  }else if (qh DELAUNAY) {
-    if (qh UPPERdelaunay)
-      fprintf (fp, "\n\
-Furthest-site Delaunay triangulation by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim);
-    else
-      fprintf (fp, "\n\
-Delaunay triangulation by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim);
-    fprintf(fp, "  Number of input sites%s: %d\n", 
-              qh ATinfinity ? " and at-infinity" : "", numvertices);
-    if (numdel)
-      fprintf(fp, "  Total number of deleted points due to merging: %d\n", numdel); 
-    if (numcoplanars - numdel > 0) 
-      fprintf(fp, "  Number of nearly incident points: %d\n", numcoplanars - numdel); 
-    else if (size - numvertices - numdel > 0)
-      fprintf(fp, "  Total number of nearly incident points: %d\n", size - numvertices - numdel); 
-    fprintf(fp, "  Number of%s Delaunay regions: %d\n", 
-              goodused ? " 'good'" : "", qh num_good);
-    if (nonsimplicial) 
-      fprintf(fp, "  Number of%s non-simplicial Delaunay regions: %d\n", 
-              goodused ? " 'good'" : "", nonsimplicial);
-  }else if (qh HALFspace) {
-    fprintf (fp, "\n\
-Halfspace intersection by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim);
-    fprintf(fp, "  Number of halfspaces: %d\n", size);
-    fprintf(fp, "  Number of non-redundant halfspaces: %d\n", numvertices);
-    if (numcoplanars) {
-      if (qh KEEPinside && qh KEEPcoplanar)
-      	s= "similar and redundant";
-      else if (qh KEEPinside)
-        s= "redundant";
-      else
-        s= "similar"; 
-      fprintf(fp, "  Number of %s halfspaces: %d\n", s, numcoplanars);
-    } 
-    fprintf(fp, "  Number of intersection points: %d\n", qh num_facets - qh num_visible);
-    if (goodused)
-      fprintf(fp, "  Number of 'good' intersection points: %d\n", qh num_good);
-    if (nonsimplicial) 
-      fprintf(fp, "  Number of%s non-simplicial intersection points: %d\n", 
-              goodused ? " 'good'" : "", nonsimplicial);
-  }else {
-    fprintf (fp, "\n\
-Convex hull of %d points in %d-d:\n\n", size, qh hull_dim);
-    fprintf(fp, "  Number of vertices: %d\n", numvertices);
-    if (numcoplanars) {
-      if (qh KEEPinside && qh KEEPcoplanar)
-      	s= "coplanar and interior";
-      else if (qh KEEPinside)
-        s= "interior";
-      else
-        s= "coplanar"; 
-      fprintf(fp, "  Number of %s points: %d\n", s, numcoplanars);
-    } 
-    fprintf(fp, "  Number of facets: %d\n", qh num_facets - qh num_visible);
-    if (goodused)
-      fprintf(fp, "  Number of 'good' facets: %d\n", qh num_good);
-    if (nonsimplicial) 
-      fprintf(fp, "  Number of%s non-simplicial facets: %d\n", 
-              goodused ? " 'good'" : "", nonsimplicial);
-  }
-  if (numtricoplanars)
-      fprintf(fp, "  Number of triangulated facets: %d\n", numtricoplanars);
-  fprintf(fp, "\nStatistics for: %s | %s", 
-                      qh rbox_command, qh qhull_command);
-  if (qh ROTATErandom != INT_MIN)
-    fprintf(fp, " QR%d\n\n", qh ROTATErandom);
-  else
-    fprintf(fp, "\n\n");
-  fprintf(fp, "  Number of points processed: %d\n", zzval_(Zprocessed));
-  fprintf(fp, "  Number of hyperplanes created: %d\n", zzval_(Zsetplane));
-  if (qh DELAUNAY)
-    fprintf(fp, "  Number of facets in hull: %d\n", qh num_facets - qh num_visible);
-  fprintf(fp, "  Number of distance tests for qhull: %d\n", zzval_(Zpartition)+
-      zzval_(Zpartitionall)+zzval_(Znumvisibility)+zzval_(Zpartcoplanar));
-#if 0  /* NOTE: must print before printstatistics() */
-  {realT stddev, ave;
-  fprintf(fp, "  average new facet balance: %2.2g\n",
-	  wval_(Wnewbalance)/zval_(Zprocessed));
-  stddev= qh_stddev (zval_(Zprocessed), wval_(Wnewbalance), 
-                                 wval_(Wnewbalance2), &ave);
-  fprintf(fp, "  new facet standard deviation: %2.2g\n", stddev);
-  fprintf(fp, "  average partition balance: %2.2g\n",
-	  wval_(Wpbalance)/zval_(Zpbalance));
-  stddev= qh_stddev (zval_(Zpbalance), wval_(Wpbalance), 
-                                 wval_(Wpbalance2), &ave);
-  fprintf(fp, "  partition standard deviation: %2.2g\n", stddev);
-  }
-#endif
-  if (nummerged) {
-    fprintf(fp,"  Number of distance tests for merging: %d\n",zzval_(Zbestdist)+
-          zzval_(Zcentrumtests)+zzval_(Zdistconvex)+zzval_(Zdistcheck)+
-          zzval_(Zdistzero));
-    fprintf(fp,"  Number of distance tests for checking: %d\n",zzval_(Zcheckpart));
-    fprintf(fp,"  Number of merged facets: %d\n", nummerged);
-  }
-  if (!qh RANDOMoutside && qh QHULLfinished) {
-    cpu= qh hulltime;
-    cpu /= qh_SECticks;
-    wval_(Wcpu)= cpu;
-    fprintf (fp, "  CPU seconds to compute hull (after input): %2.4g\n", cpu);
-  }
-  if (qh RERUN) {
-    if (!qh PREmerge && !qh MERGEexact)
-      fprintf(fp, "  Percentage of runs with precision errors: %4.1f\n",
-	   zzval_(Zretry)*100.0/qh build_cnt);  /* careful of order */
-  }else if (qh JOGGLEmax < REALmax/2) {
-    if (zzval_(Zretry))
-      fprintf(fp, "  After %d retries, input joggled by: %2.2g\n",
-         zzval_(Zretry), qh JOGGLEmax);
-    else
-      fprintf(fp, "  Input joggled by: %2.2g\n", qh JOGGLEmax);
-  }
-  if (qh totarea != 0.0) 
-    fprintf(fp, "  %s facet area:   %2.8g\n", 
-	    zzval_(Ztotmerge) ? "Approximate" : "Total", qh totarea);
-  if (qh totvol != 0.0) 
-    fprintf(fp, "  %s volume:       %2.8g\n", 
-	    zzval_(Ztotmerge) ? "Approximate" : "Total", qh totvol);
-  if (qh MERGING) {
-    qh_outerinner (NULL, &outerplane, &innerplane);
-    if (outerplane > 2 * qh DISTround) {
-      fprintf(fp, "  Maximum distance of %spoint above facet: %2.2g", 
-	    (qh QHULLfinished ? "" : "merged "), outerplane);
-      ratio= outerplane/(qh ONEmerge + qh DISTround);
-      /* don't report ratio if MINoutside is large */
-      if (ratio > 0.05 && 2* qh ONEmerge > qh MINoutside && qh JOGGLEmax > REALmax/2)
-        fprintf (fp, " (%.1fx)\n", ratio);
-      else
-        fprintf (fp, "\n");
-    }
-    if (innerplane < -2 * qh DISTround) {
-      fprintf(fp, "  Maximum distance of %svertex below facet: %2.2g", 
-	    (qh QHULLfinished ? "" : "merged "), innerplane);
-      ratio= -innerplane/(qh ONEmerge+qh DISTround);
-      if (ratio > 0.05 && qh JOGGLEmax > REALmax/2)
-        fprintf (fp, " (%.1fx)\n", ratio);
-      else
-        fprintf (fp, "\n");
-    }
-  }
-  fprintf(fp, "\n");
-} /* printsummary */
-
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull.h
deleted file mode 100644
index ebc0d2becc309ea76adbd9f2d194c29b609b45df..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull.h
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qhull.h
-   user-level header file for using qhull.a library
-
-   see qh-qhull.htm, qhull_a.h
-
-   copyright (c) 1993-2003, The Geometry Center
-
-   NOTE: access to qh_qh is via the 'qh' macro.  This allows
-   qh_qh to be either a pointer or a structure.  An example
-   of using qh is "qh DROPdim" which accesses the DROPdim
-   field of qh_qh.  Similarly, access to qh_qhstat is via
-   the 'qhstat' macro.
-
-   includes function prototypes for qhull.c, geom.c, global.c, io.c, user.c
-
-   use mem.h for mem.c
-   use qset.h for qset.c
-
-   see unix.c for an example of using qhull.h
-
-   recompile qhull if you change this file
-*/
-
-#ifndef qhDEFqhull
-#define qhDEFqhull 1
-
-/*=========================== -included files ==============*/
-
-#include <setjmp.h>
-#include <float.h>
-#include <time.h>
-
-#if __MWERKS__ && __POWERPC__
-#include  <SIOUX.h>
-#include  <Files.h>
-#include    <Desk.h>
-#endif
-
-#ifndef __STDC__
-#ifndef __cplusplus
-#if     !_MSC_VER
-#error  Neither __STDC__ nor __cplusplus is defined.  Please use strict ANSI C or C++ to compile
-#error  Qhull.  You may need to turn off compiler extensions in your project configuration.  If
-#error  your compiler is a standard C compiler, you can delete this warning from qhull.h
-#endif
-#endif
-#endif
-
-#include "user.h"      /* user defineable constants */
-
-/*============ constants and basic types ====================*/
-
-extern char* qh_version; /* defined in global.c */
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="coordT">-</a>
-
-  coordT
-    coordinates and coefficients are stored as realT (i.e., double)
-
-  notes:
-    could use 'float' for data and 'double' for calculations (realT vs. coordT)
-      This requires many type casts, and adjusted error bounds.
-      Also C compilers may do expressions in double anyway.
-*/
-#define coordT realT
-
-/*-<a                             href="qh-geom.htm#TOC"
-  >--------------------------------</a><a name="pointT">-</a>
-
-  pointT
-    a point is an array of DIM3 coordinates
-*/
-#define pointT coordT
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="flagT">-</a>
-
-  flagT
-    Boolean flag as a bit
-*/
-#define flagT unsigned int
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="boolT">-</a>
-
-  boolT
-    boolean value, either True or False
-
-  notes:
-    needed for portability
-*/
-#define boolT unsigned int
-#ifdef False
-#undef False
-#endif
-#ifdef True
-#undef True
-#endif
-#define False 0
-#define True 1
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="CENTERtype">-</a>
-
-  qh_CENTER
-    to distinguish facet->center
-*/
-typedef enum
-{
-    qh_ASnone = 0, qh_ASvoronoi, qh_AScentrum
-}
-qh_CENTER;
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="qh_PRINT">-</a>
-
-  qh_PRINT
-    output formats for printing (qh.PRINTout).
-    'Fa' 'FV' 'Fc' 'FC'
-
-
-   notes:
-   some of these names are similar to qh names.  The similar names are only
-   used in switch statements in qh_printbegin() etc.
-*/
-typedef enum {qh_PRINTnone = 0,
-              qh_PRINTarea, qh_PRINTaverage,           /* 'Fa' 'FV' 'Fc' 'FC' */
-              qh_PRINTcoplanars, qh_PRINTcentrums,
-              qh_PRINTfacets, qh_PRINTfacets_xridge,   /* 'f' 'FF' 'G' 'FI' 'Fi' 'Fn' */
-              qh_PRINTgeom, qh_PRINTids, qh_PRINTinner, qh_PRINTneighbors,
-              qh_PRINTnormals, qh_PRINTouter, qh_PRINTmaple, /* 'n' 'Fo' 'i' 'm' 'Fm' 'FM', 'o' */
-              qh_PRINTincidences, qh_PRINTmathematica, qh_PRINTmerges, qh_PRINToff,
-              qh_PRINToptions, qh_PRINTpointintersect, /* 'FO' 'Fp' 'FP' 'p' 'FQ' 'FS' */
-              qh_PRINTpointnearest, qh_PRINTpoints, qh_PRINTqhull, qh_PRINTsize,
-              qh_PRINTsummary, qh_PRINTtriangles,      /* 'Fs' 'Ft' 'Fv' 'FN' 'Fx' */
-              qh_PRINTvertices, qh_PRINTvneighbors, qh_PRINTextremes,
-              qh_PRINTEND
-             } qh_PRINT;
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="qh_ALL">-</a>
-
-  qh_ALL
-    argument flag for selecting everything
-*/
-#define qh_ALL      True
-#define qh_NOupper  True     /* argument for qh_findbest */
-#define qh_IScheckmax  True     /* argument for qh_findbesthorizon */
-#define qh_ISnewfacets  True     /* argument for qh_findbest */
-#define qh_RESETvisible  True     /* argument for qh_resetlists */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="qh_ERR">-</a>
-
-  qh_ERR
-    Qhull exit codes, for indicating errors
-*/
-#define qh_ERRnone  0    /* no error occurred during qhull */
-#define qh_ERRinput 1    /* input inconsistency */
-#define qh_ERRsingular 2 /* singular input data */
-#define qh_ERRprec  3    /* precision error */
-#define qh_ERRmem   4    /* insufficient memory, matches mem.h */
-#define qh_ERRqhull 5    /* internal error detected, matches mem.h */
-
-/* ============ -structures- ====================
-   each of the following structures is defined by a typedef
-   all realT and coordT fields occur at the beginning of a structure
-        (otherwise space may be wasted due to alignment)
-   define all flags together and pack into 32-bit number
-*/
-
-typedef struct vertexT vertexT;
-typedef struct ridgeT ridgeT;
-typedef struct facetT facetT;
-#ifndef DEFsetT
-#define DEFsetT 1
-typedef struct setT setT;          /* defined in qset.h */
-#endif
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="facetT">-</a>
-
-  facetT
-    defines a facet
-
-  notes:
-   qhull() generates the hull as a list of facets.
-
-  topological information:
-    f.previous,next     doubly-linked list of facets
-    f.vertices          set of vertices
-    f.ridges            set of ridges
-    f.neighbors         set of neighbors
-    f.toporient         True if facet has top-orientation (else bottom)
-
-  geometric information:
-    f.offset,normal     hyperplane equation
-    f.maxoutside        offset to outer plane -- all points inside
-    f.center            centrum for testing convexity
-    f.simplicial        True if facet is simplicial
-    f.flipped           True if facet does not include qh.interior_point
-
-  for constructing hull:
-    f.visible           True if facet on list of visible facets (will be deleted)
-    f.newfacet          True if facet on list of newly created facets
-    f.coplanarset       set of points coplanar with this facet
-                        (includes near-inside points for later testing)
-    f.outsideset        set of points outside of this facet
-    f.furthestdist      distance to furthest point of outside set
-    f.visitid           marks visited facets during a loop
-    f.replace           replacement facet for to-be-deleted, visible facets
-    f.samecycle,newcycle cycle of facets for merging into horizon facet
-
-  see below for other flags and fields
-*/
-struct facetT
-{
-#if !qh_COMPUTEfurthest
-    coordT   furthestdist;/* distance to furthest point of outsideset */
-#endif
-#if qh_MAXoutside
-    coordT   maxoutside;  /* max computed distance of point to facet
-            Before QHULLfinished this is an approximation
-            since maxdist not always set for mergefacet
-            Actual outer plane is +DISTround and
-            computed outer plane is +2*DISTround */
-#endif
-    coordT   offset;      /* exact offset of hyperplane from origin */
-    coordT*  normal;      /* normal of hyperplane, hull_dim coefficients */
-    /*   if tricoplanar, shared with a neighbor */
-    union                 /* in order of testing */
-    {
-        realT   area;        /* area of facet, only in io.c if  ->isarea */
-        facetT* replace; /*  replacement facet if ->visible and NEWfacets
-                 is NULL only if qh_mergedegen_redundant or interior */
-        facetT* samecycle;   /*  cycle of facets from the same visible/horizon intersection,
-                 if ->newfacet */
-        facetT* newcycle;    /*  in horizon facet, current samecycle of new facets */
-        facetT* trivisible;  /* visible facet for ->tricoplanar facets during qh_triangulate() */
-        facetT* triowner;    /* owner facet for ->tricoplanar, !isarea facets w/ ->keepcentrum */
-    } f;
-    coordT*  center;      /*  centrum for convexity, qh CENTERtype == qh_AScentrum */
-    /*  Voronoi center, qh CENTERtype == qh_ASvoronoi */
-    /*   if tricoplanar, shared with a neighbor */
-    facetT*  previous;    /* previous facet in the facet_list */
-    facetT*  next;        /* next facet in the facet_list */
-    setT*    vertices;    /* vertices for this facet, inverse sorted by ID
-                           if simplicial, 1st vertex was apex/furthest */
-    setT*    ridges;      /* explicit ridges for nonsimplicial facets.
-               for simplicial facets, neighbors defines ridge */
-    setT*    neighbors;   /* neighbors of the facet.  If simplicial, the kth
-               neighbor is opposite the kth vertex, and the first
-               neighbor is the horizon facet for the first vertex*/
-    setT*    outsideset;  /* set of points outside this facet
-                   if non-empty, last point is furthest
-               if NARROWhull, includes coplanars for partitioning*/
-    setT*    coplanarset; /* set of points coplanar with this facet
-               > qh.min_vertex and <= facet->max_outside
-                           a point is assigned to the furthest facet
-                   if non-empty, last point is furthest away */
-    unsigned visitid;     /* visit_id, for visiting all neighbors,
-               all uses are independent */
-    unsigned id;          /* unique identifier from qh facet_id */
-    unsigned nummerge: 9; /* number of merges */
-#define qh_MAXnummerge 511 /*     2^9-1, 32 flags total, see "flags:" in io.c */
-    flagT    tricoplanar: 1; /* True if TRIangulate and simplicial and coplanar with a neighbor */
-    /*   all tricoplanars share the same ->center, ->normal, ->offset, ->maxoutside */
-    /*   all tricoplanars share the same apex */
-    /*   if ->degenerate, does not span facet (one logical ridge) */
-    /*   one tricoplanar has ->keepcentrum and ->coplanarset */
-    /*   during qh_triangulate, f.trivisible points to original facet */
-    flagT    newfacet: 1; /* True if facet on qh newfacet_list (new or merged) */
-    flagT    visible: 1;  /* True if visible facet (will be deleted) */
-    flagT    toporient: 1; /* True if created with top orientation
-               after merging, use ridge orientation */
-    flagT    simplicial: 1; /* True if simplicial facet, ->ridges may be implicit */
-    flagT    seen: 1;     /* used to perform operations only once, like visitid */
-    flagT    seen2: 1;    /* used to perform operations only once, like visitid */
-    flagT    flipped: 1;  /* True if facet is flipped */
-    flagT    upperdelaunay: 1; /* True if facet is upper envelope of Delaunay triangulation */
-    flagT    notfurthest: 1; /* True if last point of outsideset is not furthest*/
-
-    /*-------- flags primarily for output ---------*/
-    flagT    good: 1;     /* True if a facet marked good for output */
-    flagT    isarea: 1;   /* True if facet->f.area is defined */
-
-    /*-------- flags for merging ------------------*/
-    flagT    dupridge: 1; /* True if duplicate ridge in facet */
-    flagT    mergeridge: 1; /* True if facet or neighbor contains a qh_MERGEridge
-                            ->normal defined (also defined for mergeridge2) */
-    flagT    mergeridge2: 1; /* True if neighbor contains a qh_MERGEridge (mark_dupridges */
-    flagT    coplanar: 1; /* True if horizon facet is coplanar at last use */
-    flagT     mergehorizon: 1; /* True if will merge into horizon (->coplanar) */
-    flagT     cycledone: 1; /* True if mergecycle_all already done */
-    flagT    tested: 1;   /* True if facet convexity has been tested (false after merge */
-    flagT    keepcentrum: 1; /* True if keep old centrum after a merge, or marks owner for ->tricoplanar */
-    flagT    newmerge: 1; /* True if facet is newly merged for reducevertices */
-    flagT    degenerate: 1; /* True if facet is degenerate (degen_mergeset or ->tricoplanar) */
-    flagT    redundant: 1; /* True if facet is redundant (degen_mergeset) */
-};
-
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="ridgeT">-</a>
-
-  ridgeT
-    defines a ridge
-
-  notes:
-  a ridge is DIM3-1 simplex between two neighboring facets.  If the
-  facets are non-simplicial, there may be more than one ridge between
-  two facets.  E.G. a 4-d hypercube has two triangles between each pair
-  of neighboring facets.
-
-  topological information:
-    vertices            a set of vertices
-    top,bottom          neighboring facets with orientation
-
-  geometric information:
-    tested              True if ridge is clearly convex
-    nonconvex           True if ridge is non-convex
-*/
-struct ridgeT
-{
-    setT*    vertices;    /* vertices belonging to this ridge, inverse sorted by ID
-                           NULL if a degen ridge (matchsame) */
-    facetT*  top;         /* top facet this ridge is part of */
-    facetT*  bottom;      /* bottom facet this ridge is part of */
-    unsigned id: 24;      /* unique identifier, =>room for 8 flags */
-    flagT    seen: 1;     /* used to perform operations only once */
-    flagT    tested: 1;   /* True when ridge is tested for convexity */
-    flagT    nonconvex: 1; /* True if getmergeset detected a non-convex neighbor
-               only one ridge between neighbors may have nonconvex */
-};
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="vertexT">-</a>
-
-  vertexT
-     defines a vertex
-
-  topological information:
-    next,previous       doubly-linked list of all vertices
-    neighbors           set of adjacent facets (only if qh.VERTEXneighbors)
-
-  geometric information:
-    point               array of DIM3 coordinates
-*/
-struct vertexT
-{
-    vertexT* next;        /* next vertex in vertex_list */
-    vertexT* previous;    /* previous vertex in vertex_list */
-    pointT*  point;       /* hull_dim coordinates (coordT) */
-    setT*    neighbors;   /* neighboring facets of vertex, qh_vertexneighbors()
-               inits in io.c or after first merge */
-    unsigned visitid; /* for use with qh vertex_visit */
-    unsigned id: 24;  /* unique identifier, =>room for 8 flags */
-    flagT    seen: 1;     /* used to perform operations only once */
-    flagT    seen2: 1;    /* another seen flag */
-    flagT    delridge: 1; /* vertex was part of a deleted ridge */
-    flagT    deleted: 1;  /* true if vertex on qh del_vertices */
-    flagT    newlist: 1;  /* true if vertex on qh newvertex_list */
-};
-
-/*======= -global variables -qh ============================*/
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >--------------------------------</a><a name="qh">-</a>
-
-  qh
-   all global variables for qhull are in qh, qhmem, and qhstat
-
-  notes:
-   qhmem is defined in mem.h and qhstat is defined in stat.h
-   Access to qh_qh is via the "qh" macro.  See qh_QHpointer in user.h
-*/
-typedef struct qhT qhT;
-#if qh_QHpointer
-#define qh qh_qh->
-extern qhT* qh_qh;     /* allocated in global.c */
-#else
-#define qh qh_qh.
-extern qhT qh_qh;
-#endif
-
-struct qhT
-{
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-const">-</a>
-
-      qh constants
-        configuration flags and constants for Qhull
-
-      notes:
-        The user configures Qhull by defining flags.  They are
-        copied into qh by qh_setflags().  qh-quick.htm#options defines the flags.
-    */
-    boolT ALLpoints;        /* true 'Qs' if search all points for initial simplex */
-    boolT ANGLEmerge;   /* true 'Qa' if sort potential merges by angle */
-    boolT APPROXhull;       /* true 'Wn' if MINoutside set */
-    realT MINoutside;       /*   'Wn' min. distance for an outside point */
-    boolT ATinfinity;       /* true 'Qz' if point num_points-1 is "at-infinity"
-                             for improving precision in Delaunay triangulations */
-    boolT AVOIDold;         /* true 'Q4' if avoid old->new merges */
-    boolT BESToutside;      /* true 'Qf' if partition points into best outsideset */
-    boolT CDDinput;         /* true 'Pc' if input uses CDD format (1.0/offset first) */
-    boolT CDDoutput;        /* true 'PC' if print normals in CDD format (offset first) */
-    boolT CHECKfrequently;  /* true 'Tc' if checking frequently */
-    realT premerge_cos;     /*   'A-n'   cos_max when pre merging */
-    realT postmerge_cos;    /*   'An'    cos_max when post merging */
-    boolT DELAUNAY;         /* true 'd' if computing DELAUNAY triangulation */
-    boolT DOintersections;  /* true 'Gh' if print hyperplane intersections */
-    int   DROPdim;          /* drops dim 'GDn' for 4-d -> 3-d output */
-    boolT FORCEoutput;      /* true 'Po' if forcing output despite degeneracies */
-    int   GOODpoint;        /* 1+n for 'QGn', good facet if visible/not(-) from point n*/
-    pointT* GOODpointp;     /*   the actual point */
-    boolT GOODthreshold;    /* true if qh lower_threshold/upper_threshold defined
-                 false if qh SPLITthreshold */
-    int   GOODvertex;       /* 1+n, good facet if vertex for point n */
-    pointT* GOODvertexp;     /*   the actual point */
-    boolT HALFspace;        /* true 'Hn,n,n' if halfspace intersection */
-    int   IStracing;        /* trace execution, 0=none, 1=least, 4=most, -1=events */
-    int   KEEParea;         /* 'PAn' number of largest facets to keep */
-    boolT KEEPcoplanar;     /* true 'Qc' if keeping nearest facet for coplanar points */
-    boolT KEEPinside;       /* true 'Qi' if keeping nearest facet for inside points
-                  set automatically if 'd Qc' */
-    int   KEEPmerge;        /* 'PMn' number of facets to keep with most merges */
-    realT KEEPminArea;      /* 'PFn' minimum facet area to keep */
-    realT MAXcoplanar;      /* 'Un' max distance below a facet to be coplanar*/
-    boolT MERGEexact;   /* true 'Qx' if exact merges (coplanar, degen, dupridge, flipped) */
-    boolT MERGEindependent; /* true 'Q2' if merging independent sets */
-    boolT MERGING;          /* true if exact-, pre- or post-merging, with angle and centrum tests */
-    realT   premerge_centrum;  /*   'C-n' centrum_radius when pre merging.  Default is round-off */
-    realT   postmerge_centrum; /*   'Cn' centrum_radius when post merging.  Default is round-off */
-    boolT MERGEvertices;    /* true 'Q3' if merging redundant vertices */
-    realT MINvisible;       /* 'Vn' min. distance for a facet to be visible */
-    boolT NOnarrow;         /* true 'Q10' if no special processing for narrow distributions */
-    boolT NOnearinside;     /* true 'Q8' if ignore near-inside points when partitioning */
-    boolT NOpremerge;       /* true 'Q0' if no defaults for C-0 or Qx */
-    boolT ONLYgood;     /* true 'Qg' if process points with good visible or horizon facets */
-    boolT ONLYmax;      /* true 'Qm' if only process points that increase max_outside */
-    boolT PICKfurthest;     /* true 'Q9' if process furthest of furthest points*/
-    boolT POSTmerge;        /* true if merging after buildhull (Cn or An) */
-    boolT PREmerge;         /* true if merging during buildhull (C-n or A-n) */
-    /* NOTE: some of these names are similar to qh_PRINT names */
-    boolT PRINTcentrums;    /* true 'Gc' if printing centrums */
-    boolT PRINTcoplanar;    /* true 'Gp' if printing coplanar points */
-    int   PRINTdim;         /* print dimension for Geomview output */
-    boolT PRINTdots;        /* true 'Ga' if printing all points as dots */
-    boolT PRINTgood;        /* true 'Pg' if printing good facets */
-    boolT PRINTinner;   /* true 'Gi' if printing inner planes */
-    boolT PRINTneighbors;   /* true 'PG' if printing neighbors of good facets */
-    boolT PRINTnoplanes;    /* true 'Gn' if printing no planes */
-    boolT PRINToptions1st;  /* true 'FO' if printing options to stderr */
-    boolT PRINTouter;   /* true 'Go' if printing outer planes */
-    boolT PRINTprecision;   /* false 'Pp' if not reporting precision problems */
-    qh_PRINT PRINTout[qh_PRINTEND]; /* list of output formats to print */
-    boolT PRINTridges;      /* true 'Gr' if print ridges */
-    boolT PRINTspheres;     /* true 'Gv' if print vertices as spheres */
-    boolT PRINTstatistics;  /* true 'Ts' if printing statistics to stderr */
-    boolT PRINTsummary;     /* true 's' if printing summary to stderr */
-    boolT PRINTtransparent; /* true 'Gt' if print transparent outer ridges */
-    boolT PROJECTdelaunay;  /* true if DELAUNAY, no readpoints() and
-                 need projectinput() for Delaunay in qh_init_B */
-    int   PROJECTinput;     /* number of projected dimensions 'bn:0Bn:0' */
-    boolT QUICKhelp;    /* true if quick help message for degen input */
-    boolT RANDOMdist;       /* true if randomly change distplane and setfacetplane */
-    realT RANDOMfactor;     /*    maximum random perturbation */
-    realT RANDOMa;         /*  qh_randomfactor is randr * RANDOMa + RANDOMb */
-    realT RANDOMb;
-    boolT RANDOMoutside;    /* true if select a random outside point */
-    int   REPORTfreq;       /* buildtracing reports every n facets */
-    int   REPORTfreq2;      /* tracemerging reports every REPORTfreq/2 facets */
-    int   RERUN;            /* 'TRn' rerun qhull n times (qh.build_cnt) */
-    int   ROTATErandom;     /* 'QRn' seed, 0 time, >= rotate input */
-    boolT SCALEinput;       /* true 'Qbk' if scaling input */
-    boolT SCALElast;        /* true 'Qbb' if scale last coord to max prev coord */
-    boolT SETroundoff;      /* true 'E' if qh DISTround is predefined */
-    boolT SKIPcheckmax;     /* true 'Q5' if skip qh_check_maxout */
-    boolT SKIPconvex;       /* true 'Q6' if skip convexity testing during pre-merge */
-    boolT SPLITthresholds;  /* true if upper_/lower_threshold defines a region
-                               used only for printing (not for qh ONLYgood) */
-    int   STOPcone;         /* 'TCn' 1+n for stopping after cone for point n*/
-    /*       also used by qh_build_withresart for err exit*/
-    int   STOPpoint;        /* 'TVn' 'TV-n' 1+n for stopping after/before(-)
-                            adding point n */
-    int   TESTpoints;   /* 'QTn' num of test points after qh.num_points.  Test points always coplanar. */
-    boolT TESTvneighbors;   /*  true 'Qv' if test vertex neighbors at end */
-    int   TRACElevel;       /* 'Tn' conditional IStracing level */
-    int   TRACElastrun;     /*  qh.TRACElevel applies to last qh.RERUN */
-    int   TRACEpoint;       /* 'TPn' start tracing when point n is a vertex */
-    realT TRACEdist;        /* 'TWn' start tracing when merge distance too big */
-    int   TRACEmerge;       /* 'TMn' start tracing before this merge */
-    boolT TRIangulate;      /* true 'Qt' if triangulate non-simplicial facets */
-    boolT TRInormals;   /* true 'Q11' if triangulate duplicates normals (sets Qt) */
-    boolT UPPERdelaunay;    /* true 'Qu' if computing furthest-site Delaunay */
-    boolT VERIFYoutput;     /* true 'Tv' if verify output at end of qhull */
-    boolT VIRTUALmemory;    /* true 'Q7' if depth-first processing in buildhull */
-    boolT VORONOI;      /* true 'v' if computing Voronoi diagram */
-
-    /*--------input constants ---------*/
-    realT AREAfactor;       /* 1/(hull_dim-1)! for converting det's to area */
-    boolT DOcheckmax;       /* true if calling qh_check_maxout (qh_initqhull_globals) */
-    char*  feasible_string;  /* feasible point 'Hn,n,n' for halfspace intersection */
-    coordT* feasible_point;  /*    as coordinates, both malloc'd */
-    boolT GETarea;          /* true 'Fa', 'FA', 'FS', 'PAn', 'PFn' if compute facet area/Voronoi volume in io.c */
-    boolT KEEPnearinside;   /* true if near-inside points in coplanarset */
-    int   hull_dim;         /* dimension of hull, set by initbuffers */
-    int   input_dim;    /* dimension of input, set by initbuffers */
-    int   num_points;       /* number of input points */
-    pointT* first_point;    /* array of input points, see POINTSmalloc */
-    boolT POINTSmalloc;     /*   true if qh first_point/num_points allocated */
-    pointT* input_points;   /* copy of original qh.first_point for input points for qh_joggleinput */
-    boolT input_malloc;     /* true if qh input_points malloc'd */
-    char  qhull_command[256];/* command line that invoked this program */
-    char  rbox_command[256]; /* command line that produced the input points */
-    char  qhull_options[512];/* descriptive list of options */
-    int   qhull_optionlen;  /*    length of last line */
-    int   qhull_optionsiz;  /*     size of qhull_options before qh_initbuild */
-    boolT VERTEXneighbors;  /* true if maintaining vertex neighbors */
-    boolT ZEROcentrum;      /* true if 'C-0' or 'C-0 Qx'.  sets ZEROall_ok */
-    realT* upper_threshold; /* don't print if facet->normal[k]>=upper_threshold[k]
-                             must set either GOODthreshold or SPLITthreshold
-                 if Delaunay, default is 0.0 for upper envelope */
-    realT* lower_threshold; /* don't print if facet->normal[k] <=lower_threshold[k] */
-    realT* upper_bound;     /* scale point[k] to new upper bound */
-    realT* lower_bound;     /* scale point[k] to new lower bound
-                 project if both upper_ and lower_bound == 0 */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-prec">-</a>
-
-      qh precision constants
-        precision constants for Qhull
-
-      notes:
-        qh_detroundoff() computes the maximum roundoff error for distance
-        and other computations.  It also sets default values for the
-        qh constants above.
-    */
-    realT ANGLEround;       /* max round off error for angles */
-    realT centrum_radius;   /* max centrum radius for convexity (roundoff added) */
-    realT cos_max;      /* max cosine for convexity (roundoff added) */
-    realT DISTround;        /* max round off error for distances, 'E' overrides */
-    realT MAXabs_coord;     /* max absolute coordinate */
-    realT MAXlastcoord;     /* max last coordinate for qh_scalelast */
-    realT MAXsumcoord;      /* max sum of coordinates */
-    realT MAXwidth;         /* max rectilinear width of point coordinates */
-    realT MINdenom_1;       /* min. abs. value for 1/x */
-    realT MINdenom;         /*    use divzero if denominator < MINdenom */
-    realT MINdenom_1_2;     /* min. abs. val for 1/x that allows normalization */
-    realT MINdenom_2;       /*    use divzero if denominator < MINdenom_2 */
-    realT MINlastcoord;     /* min. last coordinate for qh_scalelast */
-    boolT NARROWhull;       /* set in qh_initialhull if angle < qh_MAXnarrow */
-    realT* NEARzero;        /* hull_dim array for near zero in gausselim */
-    realT NEARinside;       /* keep points for qh_check_maxout if close to facet */
-    realT ONEmerge;         /* max distance for merging simplicial facets */
-    realT outside_err;      /* application's epsilon for coplanar points
-                             qh_check_bestdist() qh_check_points() reports error if point outside */
-    realT WIDEfacet;        /* size of wide facet for skipping ridge in
-                 area computation and locking centrum */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-intern">-</a>
-
-      qh internal constants
-        internal constants for Qhull
-    */
-    char qhull[sizeof("qhull")]; /* for checking ownership */
-    void* old_stat;         /* pointer to saved qh_qhstat, qh_save_qhull */
-    jmp_buf errexit;        /* exit label for qh_errexit, defined by setjmp() */
-    char jmpXtra[40];       /* extra bytes in case jmp_buf is defined wrong by compiler */
-    jmp_buf restartexit;    /* restart label for qh_errexit, defined by setjmp() */
-    char jmpXtra2[40];      /* extra bytes in case jmp_buf is defined wrong by compiler*/
-    FILE* fin;              /* pointer to input file, init by qh_meminit */
-    FILE* fout;             /* pointer to output file */
-    FILE* ferr;             /* pointer to error file */
-    pointT* interior_point; /* center point of the initial simplex*/
-    int   normal_size;      /* size in bytes for facet normals and point coords*/
-    int   center_size;      /* size in bytes for Voronoi centers */
-    int   TEMPsize;         /* size for small, temporary sets (in quick mem) */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-lists">-</a>
-
-      qh facet and vertex lists
-        defines lists of facets, new facets, visible facets, vertices, and
-        new vertices.  Includes counts, next ids, and trace ids.
-      see:
-        qh_resetlists()
-    */
-    facetT* facet_list;     /* first facet */
-    facetT*  facet_tail;     /* end of facet_list (dummy facet) */
-    facetT* facet_next;     /* next facet for buildhull()
-                     previous facets do not have outside sets
-                             NARROWhull: previous facets may have coplanar outside sets for qh_outcoplanar */
-    facetT* newfacet_list;  /* list of new facets to end of facet_list */
-    facetT* visible_list;   /* list of visible facets preceeding newfacet_list,
-                             facet->visible set */
-    int       num_visible;  /* current number of visible facets */
-    unsigned tracefacet_id;  /* set at init, then can print whenever */
-    facetT* tracefacet;     /*   set in newfacet/mergefacet, undone in delfacet*/
-    unsigned tracevertex_id;  /* set at buildtracing, can print whenever */
-    vertexT* tracevertex;     /*   set in newvertex, undone in delvertex*/
-    vertexT* vertex_list;     /* list of all vertices, to vertex_tail */
-    vertexT*  vertex_tail;    /*      end of vertex_list (dummy vertex) */
-    vertexT* newvertex_list; /* list of vertices in newfacet_list, to vertex_tail
-                             all vertices have 'newlist' set */
-    int   num_facets;   /* number of facets in facet_list
-                 includes visble faces (num_visible) */
-    int   num_vertices;     /* number of vertices in facet_list */
-    int   num_outside;      /* number of points in outsidesets (for tracing and RANDOMoutside)
-                               includes coplanar outsideset points for NARROWhull/qh_outcoplanar() */
-    int   num_good;         /* number of good facets (after findgood_all) */
-    unsigned facet_id;      /* ID of next, new facet from newfacet() */
-    unsigned ridge_id;      /* ID of next, new ridge from newridge() */
-    unsigned vertex_id;     /* ID of next, new vertex from newvertex() */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-var">-</a>
-
-      qh global variables
-        defines minimum and maximum distances, next visit ids, several flags,
-        and other global variables.
-        initialize in qh_initbuild or qh_maxmin if used in qh_buildhull
-    */
-    unsigned long hulltime; /* ignore time to set up input and randomize */
-    /*   use unsigned to avoid wrap-around errors */
-    boolT ALLOWrestart;     /* true if qh_precision can use qh.restartexit */
-    int   build_cnt;        /* number of calls to qh_initbuild */
-    qh_CENTER CENTERtype;   /* current type of facet->center, qh_CENTER */
-    int   furthest_id;      /* pointid of furthest point, for tracing */
-    facetT* GOODclosest;    /* closest facet to GOODthreshold in qh_findgood */
-    realT JOGGLEmax;        /* set 'QJn' if randomly joggle input */
-    boolT maxoutdone;       /* set qh_check_maxout(), cleared by qh_addpoint() */
-    realT max_outside;      /* maximum distance from a point to a facet,
-                   before roundoff, not simplicial vertices
-                   actual outer plane is +DISTround and
-                   computed outer plane is +2*DISTround */
-    realT max_vertex;       /* maximum distance (>0) from vertex to a facet,
-                   before roundoff, due to a merge */
-    realT min_vertex;       /* minimum distance (<0) from vertex to a facet,
-                   before roundoff, due to a merge
-                   if qh.JOGGLEmax, qh_makenewplanes sets it
-                   recomputed if qh.DOcheckmax, default -qh.DISTround */
-    boolT NEWfacets;        /* true while visible facets invalid due to new or merge
-                  from makecone/attachnewfacets to deletevisible */
-    boolT findbestnew;      /* true if partitioning calls qh_findbestnew */
-    boolT findbest_notsharp; /* true if new facets are at least 90 degrees */
-    boolT NOerrexit;        /* true if qh.errexit is not available */
-    realT PRINTcradius;     /* radius for printing centrums */
-    realT PRINTradius;      /* radius for printing vertex spheres and points */
-    boolT POSTmerging;      /* true when post merging */
-    int   printoutvar;      /* temporary variable for qh_printbegin, etc. */
-    int   printoutnum;      /* number of facets printed */
-    boolT QHULLfinished;    /* True after qhull() is finished */
-    realT totarea;          /* 'FA': total facet area computed by qh_getarea */
-    realT totvol;           /* 'FA': total volume computed by qh_getarea */
-    unsigned int visit_id;  /* unique ID for searching neighborhoods, */
-    unsigned int vertex_visit; /* unique ID for searching vertices */
-    boolT ZEROall_ok;       /* True if qh_checkzero always succeeds */
-    boolT WAScoplanar;      /* True if qh_partitioncoplanar (qh_check_maxout) */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-set">-</a>
-
-      qh global sets
-        defines sets for merging, initial simplex, hashing, extra input points,
-        and deleted vertices
-    */
-    setT* facet_mergeset;   /* temporary set of merges to be done */
-    setT* degen_mergeset;   /* temporary set of degenerate and redundant merges */
-    setT* hash_table;   /* hash table for matching ridges in qh_matchfacets
-                             size is setsize() */
-    setT* other_points;     /* additional points (first is qh interior_point) */
-    setT* del_vertices;     /* vertices to partition and delete with visible
-                             facets.  Have deleted set for checkfacet */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-buf">-</a>
-
-      qh global buffers
-        defines buffers for maxtrix operations, input, and error messages
-    */
-    coordT* gm_matrix;      /* (dim+1)Xdim matrix for geom.c */
-    coordT** gm_row;        /* array of gm_matrix rows */
-    char* line;             /* malloc'd input line of maxline+1 chars */
-    int maxline;
-    coordT* half_space;     /* malloc'd input array for halfspace (qh normal_size+coordT) */
-    coordT* temp_malloc;    /* malloc'd input array for points */
-
-    /*-<a                             href="qh-globa.htm#TOC"
-      >--------------------------------</a><a name="qh-static">-</a>
-
-      qh static variables
-        defines static variables for individual functions
-
-      notes:
-        do not use 'static' within a function.  Multiple instances of qhull
-        may exist.
-
-        do not assume zero initialization, 'QPn' may cause a restart
-    */
-    boolT ERREXITcalled;    /* true during errexit (prevents duplicate calls */
-    boolT firstcentrum;     /* for qh_printcentrum */
-    realT last_low;         /* qh_scalelast parameters for qh_setdelaunay */
-    realT last_high;
-    realT last_newhigh;
-    unsigned lastreport;    /* for qh_buildtracing */
-    int mergereport;        /* for qh_tracemerging */
-    boolT old_randomdist;   /* save RANDOMdist when io, tracing, or statistics */
-    int   ridgeoutnum;      /* number of ridges in 4OFF output */
-    void* old_qhstat;       /* for saving qh_qhstat in save_qhull() */
-    setT* old_tempstack;     /* for saving qhmem.tempstack in save_qhull */
-    setT* coplanarset;      /* set of coplanar facets for searching qh_findbesthorizon() */
-};
-
-/*=========== -macros- =========================*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="otherfacet_">-</a>
-
-  otherfacet_(ridge, facet)
-    return neighboring facet for a ridge in facet
-*/
-#define otherfacet_(ridge, facet) \
-    (((ridge)->top == (facet)) ? (ridge)->bottom : (ridge)->top)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="getid_">-</a>
-
-  getid_(p)
-    return ID for facet, ridge, or vertex
-    return MAXINT if NULL (-1 causes type conversion error )
-*/
-#define getid_(p)       ((p) ? (p)->id : -1)
-
-/*============== FORALL macros ===================*/
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLfacets">-</a>
-
-  FORALLfacets { ... }
-    assign 'facet' to each facet in qh.facet_list
-
-  notes:
-    uses 'facetT *facet;'
-    assumes last facet is a sentinel
-
-  see:
-    FORALLfacet_( facetlist )
-*/
-#define FORALLfacets for (facet=qh facet_list;facet && facet->next;facet=facet->next)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLpoints">-</a>
-
-  FORALLpoints { ... }
-    assign 'point' to each point in qh.first_point, qh.num_points
-
-  declare:
-    coordT *point, *pointtemp;
-*/
-#define FORALLpoints FORALLpoint_(qh first_point, qh num_points)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLpoint_">-</a>
-
-  FORALLpoint_( points, num) { ... }
-    assign 'point' to each point in points array of num points
-
-  declare:
-    coordT *point, *pointtemp;
-*/
-#define FORALLpoint_(points, num) for(point= (points), \
-                                      pointtemp= (points)+qh hull_dim*(num); point < pointtemp; point += qh hull_dim)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FORALLvertices">-</a>
-
-  FORALLvertices { ... }
-    assign 'vertex' to each vertex in qh.vertex_list
-
-  declare:
-    vertexT *vertex;
-
-  notes:
-    assumes qh.vertex_list terminated with a sentinel
-*/
-#define FORALLvertices for (vertex=qh vertex_list;vertex && vertex->next;vertex= vertex->next)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHfacet_">-</a>
-
-  FOREACHfacet_( facets ) { ... }
-    assign 'facet' to each facet in facets
-
-  declare:
-    facetT *facet, **facetp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHfacet_(facets)    FOREACHsetelement_(facetT, facets, facet)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHneighbor_">-</a>
-
-  FOREACHneighbor_( facet ) { ... }
-    assign 'neighbor' to each neighbor in facet->neighbors
-
-  FOREACHneighbor_( vertex ) { ... }
-    assign 'neighbor' to each neighbor in vertex->neighbors
-
-  declare:
-    facetT *neighbor, **neighborp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHneighbor_(facet)  FOREACHsetelement_(facetT, facet->neighbors, neighbor)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHpoint_">-</a>
-
-  FOREACHpoint_( points ) { ... }
-    assign 'point' to each point in points set
-
-  declare:
-    pointT *point, **pointp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHpoint_(points)    FOREACHsetelement_(pointT, points, point)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHridge_">-</a>
-
-  FOREACHridge_( ridges ) { ... }
-    assign 'ridge' to each ridge in ridges set
-
-  declare:
-    ridgeT *ridge, **ridgep;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHridge_(ridges)    FOREACHsetelement_(ridgeT, ridges, ridge)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertex_">-</a>
-
-  FOREACHvertex_( vertices ) { ... }
-    assign 'vertex' to each vertex in vertices set
-
-  declare:
-    vertexT *vertex, **vertexp;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertex_(vertices) FOREACHsetelement_(vertexT, vertices,vertex)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHfacet_i_">-</a>
-
-  FOREACHfacet_i_( facets ) { ... }
-    assign 'facet' and 'facet_i' for each facet in facets set
-
-  declare:
-    facetT *facet;
-    int     facet_n, facet_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHfacet_i_(facets)    FOREACHsetelement_i_(facetT, facets, facet)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHneighbor_i_">-</a>
-
-  FOREACHneighbor_i_( facet ) { ... }
-    assign 'neighbor' and 'neighbor_i' for each neighbor in facet->neighbors
-
-  FOREACHneighbor_i_( vertex ) { ... }
-    assign 'neighbor' and 'neighbor_i' for each neighbor in vertex->neighbors
-
-  declare:
-    facetT *neighbor;
-    int     neighbor_n, neighbor_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHneighbor_i_(facet)  FOREACHsetelement_i_(facetT, facet->neighbors, neighbor)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHpoint_i_">-</a>
-
-  FOREACHpoint_i_( points ) { ... }
-    assign 'point' and 'point_i' for each point in points set
-
-  declare:
-    pointT *point;
-    int     point_n, point_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHpoint_i_(points)    FOREACHsetelement_i_(pointT, points, point)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHridge_i_">-</a>
-
-  FOREACHridge_i_( ridges ) { ... }
-    assign 'ridge' and 'ridge_i' for each ridge in ridges set
-
-  declare:
-    ridgeT *ridge;
-    int     ridge_n, ridge_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHridge_i_(ridges)    FOREACHsetelement_i_(ridgeT, ridges, ridge)
-
-/*-<a                             href="qh-poly.htm#TOC"
-  >--------------------------------</a><a name="FOREACHvertex_i_">-</a>
-
-  FOREACHvertex_i_( vertices ) { ... }
-    assign 'vertex' and 'vertex_i' for each vertex in vertices set
-
-  declare:
-    vertexT *vertex;
-    int     vertex_n, vertex_i;
-
-  see:
-    <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
- */
-#define FOREACHvertex_i_(vertices) FOREACHsetelement_i_(vertexT, vertices,vertex)
-
-/********* -qhull.c prototypes (duplicated from qhull_a.h) **********************/
-
-void    qh_qhull(void);
-boolT   qh_addpoint(pointT* furthest, facetT* facet, boolT checkdist);
-void    qh_printsummary(FILE* fp);
-
-/********* -user.c prototypes (alphabetical) **********************/
-
-void    qh_errexit(int exitcode, facetT* facet, ridgeT* ridge);
-void    qh_errprint(char* string, facetT* atfacet, facetT* otherfacet, ridgeT* atridge, vertexT* atvertex);
-int     qh_new_qhull(int dim, int numpoints, coordT* points, boolT ismalloc,
-                     char* qhull_cmd, FILE* outfile, FILE* errfile);
-void    qh_printfacetlist(facetT* facetlist, setT* facets, boolT printall);
-void    qh_user_memsizes(void);
-
-/***** -geom.c/geom2.c prototypes (duplicated from geom.h) ****************/
-
-facetT* qh_findbest(pointT* point, facetT* startfacet,
-                    boolT bestoutside, boolT newfacets, boolT noupper,
-                    realT* dist, boolT* isoutside, int* numpart);
-facetT* qh_findbestnew(pointT* point, facetT* startfacet,
-                       realT* dist, boolT bestoutside, boolT* isoutside, int* numpart);
-boolT   qh_gram_schmidt(int dim, realT** rows);
-void    qh_outerinner(facetT* facet, realT* outerplane, realT* innerplane);
-void    qh_printsummary(FILE* fp);
-void    qh_projectinput(void);
-void    qh_randommatrix(realT* buffer, int dim, realT** row);
-void    qh_rotateinput(realT** rows);
-void    qh_scaleinput(void);
-void    qh_setdelaunay(int dim, int count, pointT* points);
-coordT*  qh_sethalfspace_all(int dim, int count, coordT* halfspaces, pointT* feasible);
-
-/***** -global.c prototypes (alphabetical) ***********************/
-
-unsigned long qh_clock(void);
-void    qh_checkflags(char* command, char* hiddenflags);
-void    qh_freebuffers(void);
-void    qh_freeqhull(boolT allmem);
-void    qh_init_A(FILE* infile, FILE* outfile, FILE* errfile, int argc, char* argv[]);
-void    qh_init_B(coordT* points, int numpoints, int dim, boolT ismalloc);
-void    qh_init_qhull_command(int argc, char* argv[]);
-void    qh_initbuffers(coordT* points, int numpoints, int dim, boolT ismalloc);
-void    qh_initflags(char* command);
-void    qh_initqhull_buffers(void);
-void    qh_initqhull_globals(coordT* points, int numpoints, int dim, boolT ismalloc);
-void    qh_initqhull_mem(void);
-void    qh_initqhull_start(FILE* infile, FILE* outfile, FILE* errfile);
-void    qh_initthresholds(char* command);
-void    qh_option(char* option, int* i, realT* r);
-#if qh_QHpointer
-void    qh_restore_qhull(qhT** oldqh);
-qhT*    qh_save_qhull(void);
-#endif
-
-/***** -io.c prototypes (duplicated from io.h) ***********************/
-
-void    dfacet(unsigned id);
-void    dvertex(unsigned id);
-void    qh_printneighborhood(FILE* fp, int format, facetT* facetA, facetT* facetB, boolT printall);
-void    qh_produce_output(void);
-coordT* qh_readpoints(int* numpoints, int* dimension, boolT* ismalloc);
-
-
-/********* -mem.c prototypes (duplicated from mem.h) **********************/
-
-void qh_meminit(FILE* ferr);
-void qh_memfreeshort(int* curlong, int* totlong);
-
-/********* -poly.c/poly2.c prototypes (duplicated from poly.h) **********************/
-
-void    qh_check_output(void);
-void    qh_check_points(void);
-setT*   qh_facetvertices(facetT* facetlist, setT* facets, boolT allfacets);
-facetT* qh_findbestfacet(pointT* point, boolT bestoutside,
-                         realT* bestdist, boolT* isoutside);
-vertexT* qh_nearvertex(facetT* facet, pointT* point, realT* bestdistp);
-pointT* qh_point(int id);
-setT*   qh_pointfacet(void /*qh.facet_list*/);
-int     qh_pointid(pointT* point);
-setT*   qh_pointvertex(void /*qh.facet_list*/);
-void    qh_setvoronoi_all(void);
-void    qh_triangulate(void /*qh facet_list*/);
-
-/********* -stat.c prototypes (duplicated from stat.h) **********************/
-
-void    qh_collectstatistics(void);
-void    qh_printallstatistics(FILE* fp, char* string);
-
-#endif /* qhDEFqhull */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull_a.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull_a.h
deleted file mode 100644
index 5d985a084ab6fd201a6864692d249972ab5cb2f7..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull_a.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*<html><pre>  -<a                             href="qh-qhull.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qhull_a.h
-   all header files for compiling qhull
-
-   see qh-qhull.htm
-
-   see qhull.h for user-level definitions
-
-   see user.h for user-defineable constants
-
-   defines internal functions for qhull.c global.c
-
-   copyright (c) 1993-2003, The Geometry Center
-
-   Notes:  grep for ((" and (" to catch fprintf("lkasdjf");
-           full parens around (x?y:z)
-       use '#include qhull/qhull_a.h' to avoid name clashes
-*/
-
-#pragma once
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <string.h>
-#include <math.h>
-#include <float.h>    /* some compilers will not need float.h */
-#include <limits.h>
-#include <time.h>
-#include <ctype.h>
-/*** uncomment here and qset.c
-     if string.h does not define memcpy()
-#include <memory.h>
-*/
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-#include "geom.h"
-#include "merge.h"
-#include "poly.h"
-#include "io.h"
-#include "stat.h"
-
-#if qh_CLOCKtype == 2  /* defined in user.h from qhull.h */
-#include <sys/types.h>
-#include <sys/times.h>
-#include <unistd.h>
-#endif
-
-#ifdef _MSC_VER  /* Microsoft Visual C++ */
-#pragma warning( disable : 4056)  /* float constant expression.  Looks like a compiler bug */
-#pragma warning( disable : 4146)  /* unary minus applied to unsigned type */
-#pragma warning( disable : 4244)  /* conversion from 'unsigned long' to 'real' */
-#pragma warning( disable : 4305)  /* conversion from 'const double' to 'float' */
-#endif
-
-/* ======= -macros- =========== */
-
-/*-<a                             href="qh-qhull.htm#TOC"
-  >--------------------------------</a><a name="traceN">-</a>
-
-  traceN((fp.ferr, "format\n", vars));
-    calls fprintf if qh.IStracing >= N
-
-  notes:
-    removing tracing reduces code size but doesn't change execution speed
-*/
-#ifndef qh_NOtrace
-#define trace0(args) {if (qh IStracing) fprintf args;}
-#define trace1(args) {if (qh IStracing >= 1) fprintf args;}
-#define trace2(args) {if (qh IStracing >= 2) fprintf args;}
-#define trace3(args) {if (qh IStracing >= 3) fprintf args;}
-#define trace4(args) {if (qh IStracing >= 4) fprintf args;}
-#define trace5(args) {if (qh IStracing >= 5) fprintf args;}
-#else /* qh_NOtrace */
-#define trace0(args) {}
-#define trace1(args) {}
-#define trace2(args) {}
-#define trace3(args) {}
-#define trace4(args) {}
-#define trace5(args) {}
-#endif /* qh_NOtrace */
-
-/***** -qhull.c prototypes (alphabetical after qhull) ********************/
-
-void    qh_qhull(void);
-boolT   qh_addpoint(pointT* furthest, facetT* facet, boolT checkdist);
-void    qh_buildhull(void);
-void    qh_buildtracing(pointT* furthest, facetT* facet);
-void    qh_build_withrestart(void);
-void    qh_errexit2(int exitcode, facetT* facet, facetT* otherfacet);
-void    qh_findhorizon(pointT* point, facetT* facet, int* goodvisible, int* goodhorizon);
-pointT* qh_nextfurthest(facetT** visible);
-void    qh_partitionall(setT* vertices, pointT* points, int npoints);
-void    qh_partitioncoplanar(pointT* point, facetT* facet, realT* dist);
-void    qh_partitionpoint(pointT* point, facetT* facet);
-void    qh_partitionvisible(boolT allpoints, int* numpoints);
-void    qh_precision(char* reason);
-void    qh_printsummary(FILE* fp);
-
-/***** -global.c internal prototypes (alphabetical) ***********************/
-
-void    qh_appendprint(qh_PRINT format);
-void    qh_freebuild(boolT allmem);
-void    qh_freebuffers(void);
-void    qh_initbuffers(coordT* points, int numpoints, int dim, boolT ismalloc);
-int     qh_strtol(const char* s, char** endp);
-double  qh_strtod(const char* s, char** endp);
-
-/***** -stat.c internal prototypes (alphabetical) ***********************/
-
-void    qh_allstatA(void);
-void    qh_allstatB(void);
-void    qh_allstatC(void);
-void    qh_allstatD(void);
-void    qh_allstatE(void);
-void    qh_allstatE2(void);
-void    qh_allstatF(void);
-void    qh_allstatG(void);
-void    qh_allstatH(void);
-void    qh_freebuffers(void);
-void    qh_initbuffers(coordT* points, int numpoints, int dim, boolT ismalloc);
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull_interface.cpp b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull_interface.cpp
deleted file mode 100644
index b4a420a736930a2042c8e9741ec2f251f28abc41..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qhull_interface.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*<html><pre>  -<a                             href="qh-user.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-*/
-
-#include <iostream.h>
-#include <conio.h>
-
-//--- Include qhull, so it works from with in a C++ source file
-//---
-//--- In MVC one cannot just do:
-//---
-//---    extern "C"
-//---    {
-//---      #include "qhull_a.h"
-//---    }
-//---
-//--- Because qhull_a.h includes math.h, which can not appear
-//--- inside a extern "C" declaration.
-//---
-//--- Maybe that why Numerical recipes in C avoid this problem, by removing
-//--- standard include headers from its header files and add them in the
-//--- respective source files instead.
-//---
-//--- [K. Erleben]
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <qhull/qhull.h>
-#include <qhull/mem.h>
-#include <qhull/qset.h>
-#include <qhull/geom.h>
-#include <qhull/merge.h>
-#include <qhull/poly.h>
-#include <qhull/io.h>
-#include <qhull/stat.h>
-#if defined(__cplusplus)
-}
-#endif
-
-/*********************************************************************/
-/*                                                                   */
-/*                                                                   */
-/*                                                                   */
-/*                                                                   */
-/*********************************************************************/
-
-void compute_convex_hull(void)
-{
-    int dim;                  /* dimension of points */
-    int numpoints;            /* number of points */
-    coordT* points;           /* array of coordinates for each point */
-    boolT ismalloc;           /* True if qhull should free points in qh_freeqhull() or reallocation */
-    char flags[] = "qhull Tv"; /* option flags for qhull, see qh_opt.htm */
-    FILE* outfile = stdout;    /* output from qh_produce_output()
-                                 use NULL to skip qh_produce_output() */
-    FILE* errfile = stderr;   /* error messages from qhull code */
-    int exitcode;             /* 0 if no error from qhull */
-    facetT* facet;            /* set by FORALLfacets */
-    int curlong, totlong;     /* memory remaining after qh_memfreeshort */
-
-    /* initialize dim, numpoints, points[], ismalloc here */
-    exitcode = qh_new_qhull(dim, numpoints, points, ismalloc,
-                            flags, outfile, errfile);
-
-    if (!exitcode)   /* if no error */
-    {
-        /* 'qh facet_list' contains the convex hull */
-        FORALLfacets
-        {
-            /* ... your code ... */
-        }
-    }
-
-    qh_freeqhull(!qh_ALL);
-    qh_memfreeshort(&curlong, &totlong);
-
-    if (curlong || totlong)
-        fprintf(errfile, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n",
-                totlong, curlong);
-};
-
-/*********************************************************************/
-/*                                                                   */
-/*                                                                   */
-/*                                                                   */
-/*                                                                   */
-/*********************************************************************/
-
-void main()
-{
-    cout << "Hello world" << endl;
-
-    cout << "Press any key..." << endl;
-
-    while (!_kbhit());
-
-};
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qset.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qset.c
deleted file mode 100644
index f902ea7a6cc7cf0c3f064471d9d83564f9008f6c..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qset.c
+++ /dev/null
@@ -1,1301 +0,0 @@
-/*<html><pre>  -<a                             href="qh-set.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qset.c 
-   implements set manipulations needed for quickhull 
-
-   see qh-set.htm and qset.h
-
-   copyright (c) 1993-2003 The Geometry Center        
-*/
-
-#include <stdio.h>
-#include <string.h>
-/*** uncomment here and qhull_a.h 
-     if string.h does not define memcpy()
-#include <memory.h>
-*/
-#include "qset.h"
-#include "mem.h"
-
-#ifndef qhDEFqhull
-typedef struct ridgeT ridgeT;
-typedef struct facetT facetT;
-void    qh_errexit(int exitcode, facetT *, ridgeT *);
-#endif
-
-/*=============== internal macros ===========================*/
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="SETsizeaddr_">-</a>
-   
-  SETsizeaddr_(set) 
-    return pointer to actual size+1 of set (set CANNOT be NULL!!)
-      
-  notes:
-    *SETsizeaddr==NULL or e[*SETsizeaddr-1].p==NULL
-*/
-#define SETsizeaddr_(set) (&((set)->e[(set)->maxsize].i))
-
-/*============ functions in alphabetical order ===================*/
-  
-/*-<a                             href="qh-set.htm#TOC"
-  >--------------------------------<a name="setaddnth">-</a>
-   
-  qh_setaddnth( setp, nth, newelem)
-    adds newelem as n'th element of sorted or unsorted *setp
-      
-  notes:
-    *setp and newelem must be defined
-    *setp may be a temp set
-    nth=0 is first element
-    errors if nth is out of bounds
-   
-  design:
-    expand *setp if empty or full
-    move tail of *setp up one
-    insert newelem
-*/
-void qh_setaddnth(setT **setp, int nth, void *newelem) {
-  int *sizep, oldsize, i;
-  void **oldp, **newp;
-
-  if (!*setp || !*(sizep= SETsizeaddr_(*setp))) {
-    qh_setlarger(setp);
-    sizep= SETsizeaddr_(*setp);
-  }
-  oldsize= *sizep - 1;
-  if (nth < 0 || nth > oldsize) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setaddnth): nth %d is out-of-bounds for set:\n", nth);
-    qh_setprint (qhmem.ferr, "", *setp);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  (*sizep)++;
-  oldp= SETelemaddr_(*setp, oldsize, void);   /* NULL */
-  newp= oldp+1;
-  for (i= oldsize-nth+1; i--; )  /* move at least NULL  */
-    *(newp--)= *(oldp--);       /* may overwrite *sizep */
-  *newp= newelem;
-} /* setaddnth */
-
-
-/*-<a                              href="qh-set.htm#TOC"
-  >--------------------------------<a name="setaddsorted">-</a>
-   
-  setaddsorted( setp, newelem )
-    adds an newelem into sorted *setp
-      
-  notes:
-    *setp and newelem must be defined
-    *setp may be a temp set
-    nop if newelem already in set
-  
-  design:
-    find newelem's position in *setp
-    insert newelem
-*/
-void qh_setaddsorted(setT **setp, void *newelem) {
-  int newindex=0;
-  void *elem, **elemp;
-
-  FOREACHelem_(*setp) {          /* could use binary search instead */
-    if (elem < newelem)
-      newindex++;
-    else if (elem == newelem)
-      return;
-    else
-      break;
-  }
-  qh_setaddnth(setp, newindex, newelem);
-} /* setaddsorted */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setappend">-</a>
-  
-  qh_setappend( setp, newelem)
-    append newelem to *setp
-
-  notes:
-    *setp may be a temp set
-    *setp and newelem may be NULL
-
-  design:
-    expand *setp if empty or full
-    append newelem to *setp
-    
-*/
-void qh_setappend(setT **setp, void *newelem) {
-  int *sizep;
-  void **endp;
-
-  if (!newelem)
-    return;
-  if (!*setp || !*(sizep= SETsizeaddr_(*setp))) {
-    qh_setlarger(setp);
-    sizep= SETsizeaddr_(*setp);
-  }
-  *(endp= &((*setp)->e[(*sizep)++ - 1].p))= newelem;
-  *(++endp)= NULL;
-} /* setappend */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setappend_set">-</a>
-  
-  qh_setappend_set( setp, setA) 
-    appends setA to *setp
-
-  notes:
-    *setp can not be a temp set
-    *setp and setA may be NULL
-
-  design:
-    setup for copy
-    expand *setp if it is too small
-    append all elements of setA to *setp 
-*/
-void qh_setappend_set(setT **setp, setT *setA) {
-  int *sizep, sizeA, size;
-  setT *oldset;
-
-  if (!setA)
-    return;
-  SETreturnsize_(setA, sizeA);
-  if (!*setp)
-    *setp= qh_setnew (sizeA);
-  sizep= SETsizeaddr_(*setp);
-  if (!(size= *sizep))
-    size= (*setp)->maxsize;
-  else
-    size--;
-  if (size + sizeA > (*setp)->maxsize) {
-    oldset= *setp;
-    *setp= qh_setcopy (oldset, sizeA);
-    qh_setfree (&oldset);
-    sizep= SETsizeaddr_(*setp);
-  }
-  *sizep= size+sizeA+1;   /* memcpy may overwrite */
-  if (sizeA > 0) 
-    memcpy((char *)&((*setp)->e[size].p), (char *)&(setA->e[0].p), SETelemsize *(sizeA+1));
-} /* setappend_set */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setappend2ndlast">-</a>
-  
-  qh_setappend2ndlast( setp, newelem )
-    makes newelem the next to the last element in *setp
-
-  notes:
-    *setp must have at least one element
-    newelem must be defined
-    *setp may be a temp set
-
-  design:
-    expand *setp if empty or full
-    move last element of *setp up one
-    insert newelem
-*/
-void qh_setappend2ndlast(setT **setp, void *newelem) {
-  int *sizep;
-  void **endp, **lastp;
-  
-  if (!*setp || !*(sizep= SETsizeaddr_(*setp))) {
-    qh_setlarger(setp);
-    sizep= SETsizeaddr_(*setp);
-  }
-  endp= SETelemaddr_(*setp, (*sizep)++ -1, void); /* NULL */
-  lastp= endp-1;
-  *(endp++)= *lastp;
-  *endp= NULL;    /* may overwrite *sizep */
-  *lastp= newelem;
-} /* setappend2ndlast */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setcheck">-</a>
-  
-  qh_setcheck( set, typename, id ) 
-    check set for validity
-    report errors with typename and id
-
-  design:
-    checks that maxsize, actual size, and NULL terminator agree
-*/
-void qh_setcheck(setT *set, char *tname, int id) {
-  int maxsize, size;
-  int waserr= 0;
-
-  if (!set)
-    return;
-  SETreturnsize_(set, size);
-  maxsize= set->maxsize;
-  if (size > maxsize || !maxsize) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setcheck): actual size %d of %s%d is greater than max size %d\n",
-	     size, tname, id, maxsize);
-    waserr= 1;
-  }else if (set->e[size].p) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setcheck): %s%d (size %d max %d) is not null terminated.\n",
-	     tname, id, maxsize, size-1);
-    waserr= 1;
-  }
-  if (waserr) {
-    qh_setprint (qhmem.ferr, "ERRONEOUS", set);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-} /* setcheck */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setcompact">-</a>
-  
-  qh_setcompact( set )
-    remove internal NULLs from an unsorted set
-
-  returns:
-    updated set
-
-  notes:
-    set may be NULL
-    it would be faster to swap tail of set into holes, like qh_setdel
-
-  design:
-    setup pointers into set
-    skip NULLs while copying elements to start of set 
-    update the actual size
-*/
-void qh_setcompact(setT *set) {
-  int size;
-  void **destp, **elemp, **endp, **firstp;
-
-  if (!set)
-    return;
-  SETreturnsize_(set, size);
-  destp= elemp= firstp= SETaddr_(set, void);
-  endp= destp + size;
-  while (1) {
-    if (!(*destp++ = *elemp++)) {
-      destp--;
-      if (elemp > endp)
-	break;
-    }
-  }
-  qh_settruncate (set, destp-firstp);
-} /* setcompact */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setcopy">-</a>
-  
-  qh_setcopy( set, extra )
-    make a copy of a sorted or unsorted set with extra slots
-
-  returns:
-    new set
-
-  design:
-    create a newset with extra slots
-    copy the elements to the newset
-    
-*/
-setT *qh_setcopy(setT *set, int extra) {
-  setT *newset;
-  int size;
-
-  if (extra < 0)
-    extra= 0;
-  SETreturnsize_(set, size);
-  newset= qh_setnew(size+extra);
-  *SETsizeaddr_(newset)= size+1;    /* memcpy may overwrite */
-  memcpy((char *)&(newset->e[0].p), (char *)&(set->e[0].p), SETelemsize *(size+1));
-  return (newset);
-} /* setcopy */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setdel">-</a>
-  
-  qh_setdel( set, oldelem )
-    delete oldelem from an unsorted set
-
-  returns:
-    returns oldelem if found
-    returns NULL otherwise
-    
-  notes:
-    set may be NULL
-    oldelem must not be NULL;
-    only deletes one copy of oldelem in set
-     
-  design:
-    locate oldelem
-    update actual size if it was full
-    move the last element to the oldelem's location
-*/
-void *qh_setdel(setT *set, void *oldelem) {
-  void **elemp, **lastp;
-  int *sizep;
-
-  if (!set)
-    return NULL;
-  elemp= SETaddr_(set, void);
-  while (*elemp != oldelem && *elemp)
-    elemp++;
-  if (*elemp) {
-    sizep= SETsizeaddr_(set);
-    if (!(*sizep)--)         /*  if was a full set */
-      *sizep= set->maxsize;  /*     *sizep= (maxsize-1)+ 1 */
-    lastp= SETelemaddr_(set, *sizep-1, void);
-    *elemp= *lastp;      /* may overwrite itself */
-    *lastp= NULL;
-    return oldelem;
-  }
-  return NULL;
-} /* setdel */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setdellast">-</a>
-  
-  qh_setdellast( set) 
-    return last element of set or NULL
-
-  notes:
-    deletes element from set
-    set may be NULL
-
-  design:
-    return NULL if empty
-    if full set
-      delete last element and set actual size
-    else
-      delete last element and update actual size 
-*/
-void *qh_setdellast(setT *set) {
-  int setsize;  /* actually, actual_size + 1 */
-  int maxsize;
-  int *sizep;
-  void *returnvalue;
-  
-  if (!set || !(set->e[0].p))
-    return NULL;
-  sizep= SETsizeaddr_(set);
-  if ((setsize= *sizep)) {
-    returnvalue= set->e[setsize - 2].p;
-    set->e[setsize - 2].p= NULL;
-    (*sizep)--;
-  }else {
-    maxsize= set->maxsize;
-    returnvalue= set->e[maxsize - 1].p;
-    set->e[maxsize - 1].p= NULL;
-    *sizep= maxsize;
-  }
-  return returnvalue;
-} /* setdellast */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setdelnth">-</a>
-  
-  qh_setdelnth( set, nth )
-    deletes nth element from unsorted set 
-    0 is first element
-
-  returns:
-    returns the element (needs type conversion)
-
-  notes:
-    errors if nth invalid
-
-  design:
-    setup points and check nth
-    delete nth element and overwrite with last element
-*/
-void *qh_setdelnth(setT *set, int nth) {
-  void **elemp, **lastp, *elem;
-  int *sizep;
-
-
-  elemp= SETelemaddr_(set, nth, void);
-  sizep= SETsizeaddr_(set);
-  if (!(*sizep)--)         /*  if was a full set */
-    *sizep= set->maxsize;  /*     *sizep= (maxsize-1)+ 1 */
-  if (nth < 0 || nth >= *sizep) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setaddnth): nth %d is out-of-bounds for set:\n", nth);
-    qh_setprint (qhmem.ferr, "", set);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  lastp= SETelemaddr_(set, *sizep-1, void);
-  elem= *elemp;
-  *elemp= *lastp;      /* may overwrite itself */
-  *lastp= NULL;
-  return elem;
-} /* setdelnth */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setdelnthsorted">-</a>
-  
-  qh_setdelnthsorted( set, nth )
-    deletes nth element from sorted set
-
-  returns:
-    returns the element (use type conversion)
-  
-  notes:
-    errors if nth invalid
-    
-  see also: 
-    setnew_delnthsorted
-
-  design:
-    setup points and check nth
-    copy remaining elements down one
-    update actual size  
-*/
-void *qh_setdelnthsorted(setT *set, int nth) {
-  void **newp, **oldp, *elem;
-  int *sizep;
-
-  sizep= SETsizeaddr_(set);
-  if (nth < 0 || (*sizep && nth >= *sizep-1) || nth >= set->maxsize) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setaddnth): nth %d is out-of-bounds for set:\n", nth);
-    qh_setprint (qhmem.ferr, "", set);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  newp= SETelemaddr_(set, nth, void);
-  elem= *newp;
-  oldp= newp+1;
-  while ((*(newp++)= *(oldp++)))
-    ; /* copy remaining elements and NULL */
-  if (!(*sizep)--)         /*  if was a full set */
-    *sizep= set->maxsize;  /*     *sizep= (max size-1)+ 1 */
-  return elem;
-} /* setdelnthsorted */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setdelsorted">-</a>
-  
-  qh_setdelsorted( set, oldelem )
-    deletes oldelem from sorted set
-
-  returns:
-    returns oldelem if it was deleted
-  
-  notes:
-    set may be NULL
-
-  design:
-    locate oldelem in set
-    copy remaining elements down one
-    update actual size  
-*/
-void *qh_setdelsorted(setT *set, void *oldelem) {
-  void **newp, **oldp;
-  int *sizep;
-
-  if (!set)
-    return NULL;
-  newp= SETaddr_(set, void);
-  while(*newp != oldelem && *newp)
-    newp++;
-  if (*newp) {
-    oldp= newp+1;
-    while ((*(newp++)= *(oldp++)))
-      ; /* copy remaining elements */
-    sizep= SETsizeaddr_(set);
-    if (!(*sizep)--)    /*  if was a full set */
-      *sizep= set->maxsize;  /*     *sizep= (max size-1)+ 1 */
-    return oldelem;
-  }
-  return NULL;
-} /* setdelsorted */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setduplicate">-</a>
-  
-  qh_setduplicate( set, elemsize )
-    duplicate a set of elemsize elements
-
-  notes:
-    use setcopy if retaining old elements
-
-  design:
-    create a new set
-    for each elem of the old set
-      create a newelem
-      append newelem to newset
-*/
-setT *qh_setduplicate (setT *set, int elemsize) {
-  void		*elem, **elemp, *newElem;
-  setT		*newSet;
-  int		size;
-  
-  if (!(size= qh_setsize (set)))
-    return NULL;
-  newSet= qh_setnew (size);
-  FOREACHelem_(set) {
-    newElem= qh_memalloc (elemsize);
-    memcpy (newElem, elem, elemsize);
-    qh_setappend (&newSet, newElem);
-  }
-  return newSet;
-} /* setduplicate */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setequal">-</a>
-  
-  qh_setequal(  )
-    returns 1 if two sorted sets are equal, otherwise returns 0
-
-  notes:
-    either set may be NULL
-
-  design:
-    check size of each set
-    setup pointers
-    compare elements of each set
-*/
-int qh_setequal(setT *setA, setT *setB) {
-  void **elemAp, **elemBp;
-  int sizeA, sizeB;
-  
-  SETreturnsize_(setA, sizeA);
-  SETreturnsize_(setB, sizeB);
-  if (sizeA != sizeB)
-    return 0;
-  if (!sizeA)
-    return 1;
-  elemAp= SETaddr_(setA, void);
-  elemBp= SETaddr_(setB, void);
-  if (!memcmp((char *)elemAp, (char *)elemBp, sizeA*SETelemsize))
-    return 1;
-  return 0;
-} /* setequal */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setequal_except">-</a>
-  
-  qh_setequal_except( setA, skipelemA, setB, skipelemB )
-    returns 1 if sorted setA and setB are equal except for skipelemA & B
-
-  returns:
-    false if either skipelemA or skipelemB are missing
-  
-  notes:
-    neither set may be NULL
-
-    if skipelemB is NULL, 
-      can skip any one element of setB
-
-  design:
-    setup pointers
-    search for skipelemA, skipelemB, and mismatches
-    check results
-*/
-int qh_setequal_except (setT *setA, void *skipelemA, setT *setB, void *skipelemB) {
-  void **elemA, **elemB;
-  int skip=0;
-
-  elemA= SETaddr_(setA, void);
-  elemB= SETaddr_(setB, void);
-  while (1) {
-    if (*elemA == skipelemA) {
-      skip++;
-      elemA++;
-    }
-    if (skipelemB) {
-      if (*elemB == skipelemB) {
-        skip++;
-        elemB++;
-      }
-    }else if (*elemA != *elemB) {
-      skip++;
-      if (!(skipelemB= *elemB++))
-        return 0;
-    }
-    if (!*elemA)
-      break;
-    if (*elemA++ != *elemB++) 
-      return 0;
-  }
-  if (skip != 2 || *elemB)
-    return 0;
-  return 1;
-} /* setequal_except */
-  
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setequal_skip">-</a>
-  
-  qh_setequal_skip( setA, skipA, setB, skipB )
-    returns 1 if sorted setA and setB are equal except for elements skipA & B
-
-  returns:
-    false if different size
-
-  notes:
-    neither set may be NULL
-
-  design:
-    setup pointers
-    search for mismatches while skipping skipA and skipB
-*/
-int qh_setequal_skip (setT *setA, int skipA, setT *setB, int skipB) {
-  void **elemA, **elemB, **skipAp, **skipBp;
-
-  elemA= SETaddr_(setA, void);
-  elemB= SETaddr_(setB, void);
-  skipAp= SETelemaddr_(setA, skipA, void);
-  skipBp= SETelemaddr_(setB, skipB, void);
-  while (1) {
-    if (elemA == skipAp)
-      elemA++;
-    if (elemB == skipBp)
-      elemB++;
-    if (!*elemA)
-      break;
-    if (*elemA++ != *elemB++) 
-      return 0;
-  }
-  if (*elemB)
-    return 0;
-  return 1;
-} /* setequal_skip */
-  
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setfree">-</a>
-  
-  qh_setfree( setp )
-    frees the space occupied by a sorted or unsorted set
-
-  returns:
-    sets setp to NULL
-    
-  notes:
-    set may be NULL
-
-  design:
-    free array
-    free set
-*/
-void qh_setfree(setT **setp) {
-  int size;
-  void **freelistp;  /* used !qh_NOmem */
-  
-  if (*setp) {
-    size= sizeof(setT) + ((*setp)->maxsize)*SETelemsize; 
-    if (size <= qhmem.LASTsize) {
-      qh_memfree_(*setp, size, freelistp);
-    }else
-      qh_memfree (*setp, size);
-    *setp= NULL;
-  }
-} /* setfree */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setfree2">-</a>
-  
-  qh_setfree2( setp, elemsize )
-    frees the space occupied by a set and its elements
-
-  notes:
-    set may be NULL
-
-  design:
-    free each element
-    free set 
-*/
-void qh_setfree2 (setT **setp, int elemsize) {
-  void		*elem, **elemp;
-  
-  FOREACHelem_(*setp)
-    qh_memfree (elem, elemsize);
-  qh_setfree (setp);
-} /* setfree2 */
-
-
-      
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setfreelong">-</a>
-  
-  qh_setfreelong( setp )
-    frees a set only if it's in long memory
-
-  returns:
-    sets setp to NULL if it is freed
-    
-  notes:
-    set may be NULL
-
-  design:
-    if set is large
-      free it    
-*/
-void qh_setfreelong(setT **setp) {
-  int size;
-  
-  if (*setp) {
-    size= sizeof(setT) + ((*setp)->maxsize)*SETelemsize; 
-    if (size > qhmem.LASTsize) {
-      qh_memfree (*setp, size);
-      *setp= NULL;
-    }
-  }
-} /* setfreelong */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setin">-</a>
-  
-  qh_setin( set, setelem )
-    returns 1 if setelem is in a set, 0 otherwise
-
-  notes:
-    set may be NULL or unsorted
-
-  design:
-    scans set for setelem
-*/
-int qh_setin(setT *set, void *setelem) {
-  void *elem, **elemp;
-
-  FOREACHelem_(set) {
-    if (elem == setelem)
-      return 1;
-  }
-  return 0;
-} /* setin */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setindex">-</a>
-  
-  qh_setindex( set, atelem )
-    returns the index of atelem in set.   
-    returns -1, if not in set or maxsize wrong
-
-  notes:
-    set may be NULL and may contain nulls.
-
-  design:
-    checks maxsize
-    scans set for atelem
-*/
-int qh_setindex(setT *set, void *atelem) {
-  void **elem;
-  int size, i;
-
-  SETreturnsize_(set, size);
-  if (size > set->maxsize)
-    return -1;
-  elem= SETaddr_(set, void);
-  for (i=0; i < size; i++) {
-    if (*elem++ == atelem)
-      return i;
-  }
-  return -1;
-} /* setindex */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setlarger">-</a>
-  
-  qh_setlarger( oldsetp )
-    returns a larger set that contains all elements of *oldsetp
-
-  notes:
-    the set is at least twice as large
-    if temp set, updates qhmem.tempstack
-
-  design:
-    creates a new set
-    copies the old set to the new set
-    updates pointers in tempstack
-    deletes the old set
-*/
-void qh_setlarger(setT **oldsetp) {
-  int size= 1, *sizep;
-  setT *newset, *set, **setp, *oldset;
-  void **oldp, **newp;
-
-  if (*oldsetp) {
-    oldset= *oldsetp;
-    SETreturnsize_(oldset, size);
-    qhmem.cntlarger++;
-    qhmem.totlarger += size+1;
-    newset= qh_setnew(2 * size);
-    oldp= SETaddr_(oldset, void);
-    newp= SETaddr_(newset, void);
-    memcpy((char *)newp, (char *)oldp, (size+1) * SETelemsize);
-    sizep= SETsizeaddr_(newset);
-    *sizep= size+1;
-    FOREACHset_((setT *)qhmem.tempstack) {
-      if (set == oldset)
-	*(setp-1)= newset;
-    }
-    qh_setfree(oldsetp);
-  }else 
-    newset= qh_setnew(3);
-  *oldsetp= newset;
-} /* setlarger */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setlast">-</a>
-  
-  qh_setlast(  )
-    return last element of set or NULL (use type conversion)
-
-  notes:
-    set may be NULL
-
-  design:
-    return last element  
-*/
-void *qh_setlast(setT *set) {
-  int size;
-
-  if (set) {
-    size= *SETsizeaddr_(set);
-    if (!size) 
-      return SETelem_(set, set->maxsize - 1);
-    else if (size > 1)
-      return SETelem_(set, size - 2);
-  }
-  return NULL;
-} /* setlast */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setnew">-</a>
-  
-  qh_setnew( setsize )
-    creates and allocates space for a set
-
-  notes:
-    setsize means the number of elements (NOT including the NULL terminator)
-    use qh_settemp/qh_setfreetemp if set is temporary
-
-  design:
-    allocate memory for set
-    roundup memory if small set
-    initialize as empty set
-*/
-setT *qh_setnew(int setsize) {
-  setT *set;
-  int sizereceived; /* used !qh_NOmem */
-  int size;
-  void **freelistp; /* used !qh_NOmem */
-
-  if (!setsize)
-    setsize++;
-  size= sizeof(setT) + setsize * SETelemsize;
-  if ((unsigned) size <= (unsigned) qhmem.LASTsize) {
-    qh_memalloc_(size, freelistp, set, setT);
-#ifndef qh_NOmem
-    sizereceived= qhmem.sizetable[ qhmem.indextable[size]];
-    if (sizereceived > size) 
-      setsize += (sizereceived - size)/SETelemsize;
-#endif
-  }else
-    set= (setT*)qh_memalloc (size);
-  set->maxsize= setsize;
-  set->e[setsize].i= 1;
-  set->e[0].p= NULL;
-  return (set);
-} /* setnew */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setnew_delnthsorted">-</a>
-  
-  qh_setnew_delnthsorted( set, size, nth, prepend )
-    creates a sorted set not containing nth element
-    if prepend, the first prepend elements are undefined
-
-  notes:
-    set must be defined
-    checks nth
-    see also: setdelnthsorted
-
-  design:
-    create new set
-    setup pointers and allocate room for prepend'ed entries
-    append head of old set to new set
-    append tail of old set to new set
-*/
-setT *qh_setnew_delnthsorted(setT *set, int size, int nth, int prepend) {
-  setT *newset;
-  void **oldp, **newp;
-  int tailsize= size - nth -1, newsize;
-
-  if (tailsize < 0) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setaddnth): nth %d is out-of-bounds for set:\n", nth);
-    qh_setprint (qhmem.ferr, "", set);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  newsize= size-1 + prepend;
-  newset= qh_setnew(newsize);
-  newset->e[newset->maxsize].i= newsize+1;  /* may be overwritten */
-  oldp= SETaddr_(set, void);
-  newp= SETaddr_(newset, void) + prepend;
-  switch (nth) {
-  case 0:
-    break;
-  case 1:
-    *(newp++)= *oldp++;
-    break;
-  case 2:
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    break;
-  case 3:
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    break;
-  case 4:
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    break;
-  default:
-    memcpy((char *)newp, (char *)oldp, nth * SETelemsize);
-    newp += nth;
-    oldp += nth;
-    break;
-  }
-  oldp++;
-  switch (tailsize) {
-  case 0:
-    break;
-  case 1:
-    *(newp++)= *oldp++;
-    break;
-  case 2:
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    break;
-  case 3:
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    break;
-  case 4:
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    *(newp++)= *oldp++;
-    break;
-  default:
-    memcpy((char *)newp, (char *)oldp, tailsize * SETelemsize);
-    newp += tailsize;
-  }
-  *newp= NULL;
-  return(newset);
-} /* setnew_delnthsorted */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setprint">-</a>
-  
-  qh_setprint( fp, string, set )
-    print set elements to fp with identifying string
-
-  notes:
-    never errors
-*/
-void qh_setprint(FILE *fp, char* string, setT *set) {
-  int size, k;
-
-  if (!set)
-    fprintf (fp, "%s set is null\n", string);
-  else {
-    SETreturnsize_(set, size);
-    fprintf (fp, "%s set=%p maxsize=%d size=%d elems=",
-	     string, set, set->maxsize, size);
-    if (size > set->maxsize)
-      size= set->maxsize+1;
-    for (k=0; k < size; k++)
-      fprintf(fp, " %p", set->e[k].p);
-    fprintf(fp, "\n");
-  }
-} /* setprint */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setreplace">-</a>
-  
-  qh_setreplace( set, oldelem, newelem )
-    replaces oldelem in set with newelem
-
-  notes:
-    errors if oldelem not in the set
-    newelem may be NULL, but it turns the set into an indexed set (no FOREACH)
-
-  design:
-    find oldelem
-    replace with newelem
-*/
-void qh_setreplace(setT *set, void *oldelem, void *newelem) {
-  void **elemp;
-  
-  elemp= SETaddr_(set, void);
-  while(*elemp != oldelem && *elemp)
-    elemp++;
-  if (*elemp)
-    *elemp= newelem;
-  else {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setreplace): elem %p not found in set\n",
-       oldelem);
-    qh_setprint (qhmem.ferr, "", set);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-} /* setreplace */
-
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setsize">-</a>
-  
-  qh_setsize( set )
-    returns the size of a set
-
-  notes:
-    errors if set's maxsize is incorrect
-    same as SETreturnsize_(set)
-
-  design:
-    determine actual size of set from maxsize
-*/
-int qh_setsize(setT *set) {
-  int size, *sizep;
-  
-  if (!set)
-    return (0);
-  sizep= SETsizeaddr_(set);
-  if ((size= *sizep)) {
-    size--;
-    if (size > set->maxsize) {
-      fprintf (qhmem.ferr, "qhull internal error (qh_setsize): current set size %d is greater than maximum size %d\n",
-	       size, set->maxsize);
-      qh_setprint (qhmem.ferr, "set: ", set);
-      qh_errexit (qhmem_ERRqhull, NULL, NULL);
-    }
-  }else
-    size= set->maxsize;
-  return size;
-} /* setsize */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="settemp">-</a>
-  
-  qh_settemp( setsize )
-    return a stacked, temporary set of upto setsize elements
-
-  notes:
-    use settempfree or settempfree_all to release from qhmem.tempstack
-    see also qh_setnew
-
-  design:
-    allocate set
-    append to qhmem.tempstack
-    
-*/
-setT *qh_settemp(int setsize) {
-  setT *newset;
-  
-  newset= qh_setnew (setsize);
-  qh_setappend ((setT **)&qhmem.tempstack, newset);
-  if (qhmem.IStracing >= 5)
-    fprintf (qhmem.ferr, "qh_settemp: temp set %p of %d elements, depth %d\n",
-       newset, newset->maxsize, qh_setsize ((setT*)qhmem.tempstack));
-  return newset;
-} /* settemp */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="settempfree">-</a>
-  
-  qh_settempfree( set )
-    free temporary set at top of qhmem.tempstack
-
-  notes:
-    nop if set is NULL
-    errors if set not from previous   qh_settemp
-  
-  to locate errors:
-    use 'T2' to find source and then find mis-matching qh_settemp
-
-  design:
-    check top of qhmem.tempstack
-    free it
-*/
-void qh_settempfree(setT **set) {
-  setT *stackedset;
-
-  if (!*set)
-    return;
-  stackedset= qh_settemppop ();
-  if (stackedset != *set) {
-    qh_settemppush(stackedset);
-    fprintf (qhmem.ferr, "qhull internal error (qh_settempfree): set %p (size %d) was not last temporary allocated (depth %d, set %p, size %d)\n",
-	     *set, qh_setsize(*set), qh_setsize((setT*)qhmem.tempstack)+1,
-	     stackedset, qh_setsize(stackedset));
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  qh_setfree (set);
-} /* settempfree */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="settempfree_all">-</a>
-  
-  qh_settempfree_all(  )
-    free all temporary sets in qhmem.tempstack
-
-  design:
-    for each set in tempstack
-      free set
-    free qhmem.tempstack
-*/
-void qh_settempfree_all(void) {
-  setT *set, **setp;
-
-  FOREACHset_((setT *)qhmem.tempstack) 
-    qh_setfree(&set);
-  qh_setfree((setT **)&qhmem.tempstack);
-} /* settempfree_all */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="settemppop">-</a>
-  
-  qh_settemppop(  )
-    pop and return temporary set from qhmem.tempstack 
-
-  notes:
-    the returned set is permanent
-    
-  design:
-    pop and check top of qhmem.tempstack
-*/
-setT *qh_settemppop(void) {
-  setT *stackedset;
-  
-  stackedset= (setT*)qh_setdellast((setT *)qhmem.tempstack);
-  if (!stackedset) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_settemppop): pop from empty temporary stack\n");
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  if (qhmem.IStracing >= 5)
-    fprintf (qhmem.ferr, "qh_settemppop: depth %d temp set %p of %d elements\n",
-       qh_setsize((setT*)qhmem.tempstack)+1, stackedset, qh_setsize(stackedset));
-  return stackedset;
-} /* settemppop */
-
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="settemppush">-</a>
-  
-  qh_settemppush( set )
-    push temporary set unto qhmem.tempstack (makes it temporary)
-
-  notes:
-    duplicates settemp() for tracing
-
-  design:
-    append set to tempstack  
-*/
-void qh_settemppush(setT *set) {
-  
-  qh_setappend ((setT**)&qhmem.tempstack, set);
-  if (qhmem.IStracing >= 5)
-    fprintf (qhmem.ferr, "qh_settemppush: depth %d temp set %p of %d elements\n",
-    qh_setsize((setT*)qhmem.tempstack), set, qh_setsize(set));
-} /* settemppush */
-
- 
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="settruncate">-</a>
-  
-  qh_settruncate( set, size )
-    truncate set to size elements
-
-  notes:
-    set must be defined
-  
-  see:
-    SETtruncate_
-
-  design:
-    check size
-    update actual size of set
-*/
-void qh_settruncate (setT *set, int size) {
-
-  if (size < 0 || size > set->maxsize) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_settruncate): size %d out of bounds for set:\n", size);
-    qh_setprint (qhmem.ferr, "", set);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  set->e[set->maxsize].i= size+1;   /* maybe overwritten */
-  set->e[size].p= NULL;
-} /* settruncate */
-    
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setunique">-</a>
-  
-  qh_setunique( set, elem )
-    add elem to unsorted set unless it is already in set
-
-  notes:
-    returns 1 if it is appended
-
-  design:
-    if elem not in set
-      append elem to set
-*/
-int qh_setunique (setT **set, void *elem) {
-
-  if (!qh_setin (*set, elem)) {
-    qh_setappend (set, elem);
-    return 1;
-  }
-  return 0;
-} /* setunique */
-    
-/*-<a                             href="qh-set.htm#TOC"
-  >-------------------------------<a name="setzero">-</a>
-  
-  qh_setzero( set, index, size )
-    zero elements from index on
-    set actual size of set to size
-
-  notes:
-    set must be defined
-    the set becomes an indexed set (can not use FOREACH...)
-  
-  see also:
-    qh_settruncate
-    
-  design:
-    check index and size
-    update actual size
-    zero elements starting at e[index]   
-*/
-void qh_setzero (setT *set, int index, int size) {
-  int count;
-
-  if (index < 0 || index >= size || size > set->maxsize) {
-    fprintf (qhmem.ferr, "qhull internal error (qh_setzero): index %d or size %d out of bounds for set:\n", index, size);
-    qh_setprint (qhmem.ferr, "", set);
-    qh_errexit (qhmem_ERRqhull, NULL, NULL);
-  }
-  set->e[set->maxsize].i=  size+1;  /* may be overwritten */
-  count= size - index + 1;   /* +1 for NULL terminator */
-  memset ((char *)SETelemaddr_(set, index, void), 0, count * SETelemsize);
-} /* setzero */
-
-    
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qset.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qset.h
deleted file mode 100644
index 165a84c3b361527d8478a66c829d29e49420816a..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/qset.h
+++ /dev/null
@@ -1,470 +0,0 @@
-/*<html><pre>  -<a                             href="qh-set.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   qset.h
-     header file for qset.c that implements set
-
-   see qh-set.htm and qset.c
-
-   only uses mem.c, malloc/free
-
-   for error handling, writes message and calls
-      qh_errexit (qhmem_ERRqhull, NULL, NULL);
-
-   set operations satisfy the following properties:
-    - sets have a max size, the actual size (if different) is stored at the end
-    - every set is NULL terminated
-    - sets may be sorted or unsorted, the caller must distinguish this
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#ifndef qhDEFset
-#define qhDEFset 1
-
-/*================= -structures- ===============*/
-
-#ifndef DEFsetT
-#define DEFsetT 1
-typedef struct setT setT;   /* a set is a sorted or unsorted array of pointers */
-#endif
-
-/*-<a                                      href="qh-set.htm#TOC"
->----------------------------------------</a><a name="setT">-</a>
-
-setT
-  a set or list of pointers with maximum size and actual size.
-
-variations:
-  unsorted, unique   -- a list of unique pointers with NULL terminator
-               user guarantees uniqueness
-  sorted         -- a sorted list of unique pointers with NULL terminator
-               qset.c guarantees uniqueness
-  unsorted           -- a list of pointers terminated with NULL
-  indexed        -- an array of pointers with NULL elements
-
-structure for set of n elements:
-
-    --------------
-    |  maxsize
-    --------------
-    |  e[0] - a pointer, may be NULL for indexed sets
-    --------------
-    |  e[1]
-
-    --------------
-    |  ...
-    --------------
-    |  e[n-1]
-    --------------
-    |  e[n] = NULL
-    --------------
-    |  ...
-    --------------
-    |  e[maxsize] - n+1 or NULL (determines actual size of set)
-    --------------
-
-*/
-
-/*-- setelemT -- internal type to allow both pointers and indices
-*/
-typedef union setelemT setelemT;
-union setelemT
-{
-    void*    p;
-    int      i;         /* integer used for e[maxSize] */
-};
-
-struct setT
-{
-    int maxsize;          /* maximum number of elements (except NULL) */
-    setelemT e[1];        /* array of pointers, tail is NULL */
-    /* last slot (unless NULL) is actual size+1
-       e[maxsize]==NULL or e[e[maxsize]-1]==NULL */
-    /* this may generate a warning since e[] contains
-    maxsize elements */
-};
-
-/*=========== -constants- =========================*/
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="SETelemsize">-</a>
-
-  SETelemsize
-    size of a set element in bytes
-*/
-#define SETelemsize sizeof(setelemT)
-
-
-/*=========== -macros- =========================*/
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHsetelement_">-</a>
-
-   FOREACHsetelement_(type, set, variable)
-     define FOREACH iterator
-
-   declare:
-     assumes *variable and **variablep are declared
-     no space in "variable)" [DEC Alpha cc compiler]
-
-   each iteration:
-     variable is set element
-     variablep is one beyond variable.
-
-   to repeat an element:
-     variablep--; / *repeat* /
-
-   at exit:
-     variable is NULL at end of loop
-
-   example:
-     #define FOREACHfacet_( facets ) FOREACHsetelement_( facetT, facets, facet )
-
-   notes:
-     use FOREACHsetelement_i_() if need index or include NULLs
-
-   WARNING:
-     nested loops can't use the same variable (define another FOREACH)
-
-     needs braces if nested inside another FOREACH
-     this includes intervening blocks, e.g. FOREACH...{ if () FOREACH...} )
-*/
-#define FOREACHsetelement_(type, set, variable) \
-    if (((variable= NULL), set)) for(\
-                                         variable##p= (type **)&((set)->e[0].p); \
-                                         (variable= *variable##p++);)
-
-/*-<a                                      href="qh-set.htm#TOC"
-  >----------------------------------------</a><a name="FOREACHsetelement_i_">-</a>
-
-   FOREACHsetelement_i_(type, set, variable)
-     define indexed FOREACH iterator
-
-   declare:
-     type *variable, variable_n, variable_i;
-
-   each iteration:
-     variable is set element, may be NULL
-     variable_i is index, variable_n is qh_setsize()
-
-   to repeat an element:
-     variable_i--; variable_n-- repeats for deleted element
-
-   at exit:
-     variable==NULL and variable_i==variable_n
-
-   example:
-     #define FOREACHfacet_i_( facets ) FOREACHsetelement_i_( facetT, facets, facet )
-
-   WARNING:
-     nested loops can't use the same variable (define another FOREACH)
-
-     needs braces if nested inside another FOREACH
-     this includes intervening blocks, e.g. FOREACH...{ if () FOREACH...} )
-*/
-#define FOREACHsetelement_i_(type, set, variable) \
-    if (((variable= NULL), set)) for (\
-                                          variable##_i= 0, variable= (type *)((set)->e[0].p), \
-                                          variable##_n= qh_setsize(set);\
-                                          variable##_i < variable##_n;\
-                                          variable= (type *)((set)->e[++variable##_i].p) )
-
-/*-<a                                    href="qh-set.htm#TOC"
-  >--------------------------------------</a><a name="FOREACHsetelementreverse_">-</a>
-
-   FOREACHsetelementreverse_(type, set, variable)-
-     define FOREACH iterator in reverse order
-
-   declare:
-     assumes *variable and **variablep are declared
-     also declare 'int variabletemp'
-
-   each iteration:
-     variable is set element
-
-   to repeat an element:
-     variabletemp++; / *repeat* /
-
-   at exit:
-     variable is NULL
-
-   example:
-     #define FOREACHvertexreverse_( vertices ) FOREACHsetelementreverse_( vertexT, vertices, vertex )
-
-   notes:
-     use FOREACHsetelementreverse12_() to reverse first two elements
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHsetelementreverse_(type, set, variable) \
-    if (((variable= NULL), set)) for(\
-                                         variable##temp= qh_setsize(set)-1, variable= qh_setlast(set);\
-                                         variable; variable= \
-                                                 ((--variable##temp >= 0) ? SETelemt_(set, variable##temp, type) : NULL))
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHsetelementreverse12_">-</a>
-
-   FOREACHsetelementreverse12_(type, set, variable)-
-     define FOREACH iterator with e[1] and e[0] reversed
-
-   declare:
-     assumes *variable and **variablep are declared
-
-   each iteration:
-     variable is set element
-     variablep is one after variable.
-
-   to repeat an element:
-     variablep--; / *repeat* /
-
-   at exit:
-     variable is NULL at end of loop
-
-   example
-     #define FOREACHvertexreverse12_( vertices ) FOREACHsetelementreverse12_( vertexT, vertices, vertex )
-
-   notes:
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHsetelementreverse12_(type, set, variable) \
-    if (((variable= NULL), set)) for(\
-                                         variable##p= (type **)&((set)->e[1].p); \
-                                         (variable= *variable##p); \
-                                         variable##p == ((type **)&((set)->e[0].p))?variable##p += 2: \
-                                                 (variable##p == ((type **)&((set)->e[1].p))?variable##p--:variable##p++))
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHelem_">-</a>
-
-   FOREACHelem_( set )-
-     iterate elements in a set
-
-   declare:
-     void *elem, *elemp;
-
-   each iteration:
-     elem is set element
-     elemp is one beyond
-
-   to repeat an element:
-     elemp--; / *repeat* /
-
-   at exit:
-     elem == NULL at end of loop
-
-   example:
-     FOREACHelem_(set) {
-
-   notes:
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHelem_(set) FOREACHsetelement_(void, set, elem)
-
-/*-<a                                 href="qh-set.htm#TOC"
-  >-----------------------------------</a><a name="FOREACHset_">-</a>
-
-   FOREACHset_( set )-
-     iterate a set of sets
-
-   declare:
-     setT *set, **setp;
-
-   each iteration:
-     set is set element
-     setp is one beyond
-
-   to repeat an element:
-     setp--; / *repeat* /
-
-   at exit:
-     set == NULL at end of loop
-
-   example
-     FOREACHset_(sets) {
-
-   notes:
-     WARNING: needs braces if nested inside another FOREACH
-*/
-#define FOREACHset_(sets) FOREACHsetelement_(setT, sets, set)
-
-/*-<a                                       href="qh-set.htm#TOC"
-  >-----------------------------------------</a><a name="SETindex_">-</a>
-
-   SETindex_( set, elem )
-     return index of elem in set
-
-   notes:
-     for use with FOREACH iteration
-
-   example:
-     i= SETindex_(ridges, ridge)
-*/
-#define SETindex_(set, elem) ((void **)elem##p - (void **)&(set)->e[1].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETref_">-</a>
-
-   SETref_( elem )
-     l.h.s. for modifying the current element in a FOREACH iteration
-
-   example:
-     SETref_(ridge)= anotherridge;
-*/
-#define SETref_(elem) (elem##p[-1])
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETelem_">-</a>
-
-   SETelem_(set, n)
-     return the n'th element of set
-
-   notes:
-      assumes that n is valid [0..size] and that set is defined
-      use SETelemt_() for type cast
-*/
-#define SETelem_(set, n)           ((set)->e[n].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETelemt_">-</a>
-
-   SETelemt_(set, n, type)
-     return the n'th element of set as a type
-
-   notes:
-      assumes that n is valid [0..size] and that set is defined
-*/
-#define SETelemt_(set, n, type)    ((type*)((set)->e[n].p))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETelemaddr_">-</a>
-
-   SETelemaddr_(set, n, type)
-     return address of the n'th element of a set
-
-   notes:
-      assumes that n is valid [0..size] and set is defined
-*/
-#define SETelemaddr_(set, n, type) ((type **)(&((set)->e[n].p)))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETfirst_">-</a>
-
-   SETfirst_(set)
-     return first element of set
-
-*/
-#define SETfirst_(set)             ((set)->e[0].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETfirstt_">-</a>
-
-   SETfirstt_(set, type)
-     return first element of set as a type
-
-*/
-#define SETfirstt_(set, type)      ((type*)((set)->e[0].p))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETsecond_">-</a>
-
-   SETsecond_(set)
-     return second element of set
-
-*/
-#define SETsecond_(set)            ((set)->e[1].p)
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETsecondt_">-</a>
-
-   SETsecondt_(set, type)
-     return second element of set as a type
-*/
-#define SETsecondt_(set, type)     ((type*)((set)->e[1].p))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETaddr_">-</a>
-
-   SETaddr_(set, type)
-       return address of set's elements
-*/
-#define SETaddr_(set,type)     ((type **)(&((set)->e[0].p)))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETreturnsize_">-</a>
-
-   SETreturnsize_(set, size)
-     return size of a set
-
-   notes:
-      set must be defined
-      use qh_setsize(set) unless speed is critical
-*/
-#define SETreturnsize_(set, size) (((size)= ((set)->e[(set)->maxsize].i))?(--(size)):((size)= (set)->maxsize))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETempty_">-</a>
-
-   SETempty_(set)
-     return true (1) if set is empty
-
-   notes:
-      set may be NULL
-*/
-#define SETempty_(set)            (!set || (SETfirst_(set) ? 0:1))
-
-/*-<a                                     href="qh-set.htm#TOC"
-  >---------------------------------------</a><a name="SETtruncate_">-</a>
-
-   SETtruncate_(set)
-     return first element of set
-
-   see:
-     qh_settruncate()
-
-*/
-#define SETtruncate_(set, size) {set->e[set->maxsize].i= size+1; /* maybe overwritten */ \
-        set->e[size].p= NULL;}
-
-/*======= prototypes in alphabetical order ============*/
-
-void  qh_setaddsorted(setT** setp, void* elem);
-void  qh_setaddnth(setT** setp, int nth, void* newelem);
-void  qh_setappend(setT** setp, void* elem);
-void  qh_setappend_set(setT** setp, setT* setA);
-void  qh_setappend2ndlast(setT** setp, void* elem);
-void  qh_setcheck(setT* set, char* tname, int id);
-void  qh_setcompact(setT* set);
-setT* qh_setcopy(setT* set, int extra);
-void* qh_setdel(setT* set, void* elem);
-void* qh_setdellast(setT* set);
-void* qh_setdelnth(setT* set, int nth);
-void* qh_setdelnthsorted(setT* set, int nth);
-void* qh_setdelsorted(setT* set, void* newelem);
-setT* qh_setduplicate(setT* set, int elemsize);
-int   qh_setequal(setT* setA, setT* setB);
-int   qh_setequal_except(setT* setA, void* skipelemA, setT* setB, void* skipelemB);
-int   qh_setequal_skip(setT* setA, int skipA, setT* setB, int skipB);
-void  qh_setfree(setT** set);
-void  qh_setfree2(setT** setp, int elemsize);
-void  qh_setfreelong(setT** set);
-int   qh_setin(setT* set, void* setelem);
-int   qh_setindex(setT* set, void* setelem);
-void  qh_setlarger(setT** setp);
-void* qh_setlast(setT* set);
-setT* qh_setnew(int size);
-setT* qh_setnew_delnthsorted(setT* set, int size, int nth, int prepend);
-void  qh_setprint(FILE* fp, char* string, setT* set);
-void  qh_setreplace(setT* set, void* oldelem, void* newelem);
-int   qh_setsize(setT* set);
-setT* qh_settemp(int setsize);
-void  qh_settempfree(setT** set);
-void  qh_settempfree_all(void);
-setT* qh_settemppop(void);
-void  qh_settemppush(setT* set);
-void  qh_settruncate(setT* set, int size);
-int   qh_setunique(setT** set, void* elem);
-void  qh_setzero(setT* set, int index, int size);
-
-
-#endif /* qhDEFset */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/stat.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/stat.c
deleted file mode 100644
index 9ac3b0e74312f7e9ebe731d614ad4507d7f99ec8..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/stat.c
+++ /dev/null
@@ -1,702 +0,0 @@
-/*<html><pre>  -<a                             href="qh-stat.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   stat.c 
-   contains all statistics that are collected for qhull
-
-   see qh-stat.htm and stat.h
-
-   copyright (c) 1993-2003, The Geometry Center
-*/
-
-#include "qhull_a.h"
-
-/*============ global data structure ==========*/
-
-#if qh_QHpointer
-qhstatT *qh_qhstat=NULL;  /* global data structure */
-#else
-qhstatT qh_qhstat;   /* add "={0}" if this causes a compiler error */
-#endif
-
-/*========== functions in alphabetic order ================*/
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="allstatA">-</a>
-  
-  qh_allstatA()
-    define statistics in groups of 20
-
-  notes:
-    (otherwise, 'gcc -O2' uses too much memory)
-    uses qhstat.next
-*/
-void qh_allstatA (void) {
-  
-   /* zdef_(type,name,doc,average) */
-  zzdef_(zdoc, Zdoc2, "precision statistics", -1);
-  zdef_(zinc, Znewvertex, NULL, -1);
-  zdef_(wadd, Wnewvertex, "ave. distance of a new vertex to a facet (not 0s)", Znewvertex);
-  zzdef_(wmax, Wnewvertexmax, "max. distance of a new vertex to a facet", -1);
-  zdef_(wmax, Wvertexmax, "max. distance of an output vertex to a facet", -1);
-  zdef_(wmin, Wvertexmin, "min. distance of an output vertex to a facet", -1);
-  zdef_(wmin, Wmindenom, "min. denominator in hyperplane computation", -1);
-
-  qhstat precision= qhstat next;  /* call qh_precision for each of these */
-  zzdef_(zdoc, Zdoc3, "precision problems (corrected unless 'Q0' or an error)", -1);
-  zzdef_(zinc, Zcoplanarridges, "coplanar half ridges in output", -1);
-  zzdef_(zinc, Zconcaveridges, "concave half ridges in output", -1);
-  zzdef_(zinc, Zflippedfacets, "flipped facets", -1);
-  zzdef_(zinc, Zcoplanarhorizon, "coplanar horizon facets for new vertices", -1);
-  zzdef_(zinc, Zcoplanarpart, "coplanar points during partitioning", -1);
-  zzdef_(zinc, Zminnorm, "degenerate hyperplanes recomputed with gaussian elimination", -1);
-  zzdef_(zinc, Znearlysingular, "nearly singular or axis-parallel hyperplanes", -1);
-  zzdef_(zinc, Zback0, "zero divisors during back substitute", -1);
-  zzdef_(zinc, Zgauss0, "zero divisors during gaussian elimination", -1);
-  zzdef_(zinc, Zmultiridge, "ridges with multiple neighbors", -1);
-}
-void qh_allstatB (void) {
-  zzdef_(zdoc, Zdoc1, "summary information", -1);
-  zdef_(zinc, Zvertices, "number of vertices in output", -1);
-  zdef_(zinc, Znumfacets, "number of facets in output", -1);
-  zdef_(zinc, Znonsimplicial, "number of non-simplicial facets in output", -1);
-  zdef_(zinc, Znowsimplicial, "number of simplicial facets that were merged", -1);
-  zdef_(zinc, Znumridges, "number of ridges in output", -1);
-  zdef_(zadd, Znumridges, "average number of ridges per facet", Znumfacets);
-  zdef_(zmax, Zmaxridges, "maximum number of ridges", -1);
-  zdef_(zadd, Znumneighbors, "average number of neighbors per facet", Znumfacets);
-  zdef_(zmax, Zmaxneighbors, "maximum number of neighbors", -1);
-  zdef_(zadd, Znumvertices, "average number of vertices per facet", Znumfacets);
-  zdef_(zmax, Zmaxvertices, "maximum number of vertices", -1);
-  zdef_(zadd, Znumvneighbors, "average number of neighbors per vertex", Zvertices);
-  zdef_(zmax, Zmaxvneighbors, "maximum number of neighbors", -1);
-  zdef_(wadd, Wcpu, "cpu seconds for qhull after input", -1);
-  zdef_(zinc, Ztotvertices, "vertices created altogether", -1);
-  zzdef_(zinc, Zsetplane, "facets created altogether", -1);
-  zdef_(zinc, Ztotridges, "ridges created altogether", -1);
-  zdef_(zinc, Zpostfacets, "facets before post merge", -1);
-  zdef_(zadd, Znummergetot, "average merges per facet (at most 511)", Znumfacets);
-  zdef_(zmax, Znummergemax, "  maximum merges for a facet (at most 511)", -1);
-  zdef_(zinc, Zangle, NULL, -1);
-  zdef_(wadd, Wangle, "average angle (cosine) of facet normals for all ridges", Zangle);
-  zdef_(wmax, Wanglemax, "  maximum angle (cosine) of facet normals across a ridge", -1);
-  zdef_(wmin, Wanglemin, "  minimum angle (cosine) of facet normals across a ridge", -1);
-  zdef_(wadd, Wareatot, "total area of facets", -1);
-  zdef_(wmax, Wareamax, "  maximum facet area", -1);
-  zdef_(wmin, Wareamin, "  minimum facet area", -1);
-}  
-void qh_allstatC (void) {
-  zdef_(zdoc, Zdoc9, "build hull statistics", -1);
-  zzdef_(zinc, Zprocessed, "points processed", -1);
-  zzdef_(zinc, Zretry, "retries due to precision problems", -1);
-  zdef_(wmax, Wretrymax, "  max. random joggle", -1);
-  zdef_(zmax, Zmaxvertex, "max. vertices at any one time", -1);
-  zdef_(zinc, Ztotvisible, "ave. visible facets per iteration", Zprocessed);
-  zdef_(zinc, Zinsidevisible, "  ave. visible facets without an horizon neighbor", Zprocessed);
-  zdef_(zadd, Zvisfacettot,  "  ave. facets deleted per iteration", Zprocessed);
-  zdef_(zmax, Zvisfacetmax,  "    maximum", -1);
-  zdef_(zadd, Zvisvertextot, "ave. visible vertices per iteration", Zprocessed);
-  zdef_(zmax, Zvisvertexmax, "    maximum", -1);
-  zdef_(zinc, Ztothorizon, "ave. horizon facets per iteration", Zprocessed);
-  zdef_(zadd, Znewfacettot,  "ave. new or merged facets per iteration", Zprocessed);
-  zdef_(zmax, Znewfacetmax,  "    maximum (includes initial simplex)", -1);
-  zdef_(wadd, Wnewbalance, "average new facet balance", Zprocessed);
-  zdef_(wadd, Wnewbalance2, "  standard deviation", -1);
-  zdef_(wadd, Wpbalance, "average partition balance", Zpbalance);
-  zdef_(wadd, Wpbalance2, "  standard deviation", -1);
-  zdef_(zinc, Zpbalance, "  number of trials", -1);
-  zdef_(zinc, Zsearchpoints, "searches of all points for initial simplex", -1);
-  zdef_(zinc, Zdetsimplex, "determinants computed (area & initial hull)", -1);
-  zdef_(zinc, Znoarea, "determinants not computed because vertex too low", -1);
-  zdef_(zinc, Znotmax, "points ignored (not above max_outside)", -1);
-  zdef_(zinc, Znotgood, "points ignored (not above a good facet)", -1);
-  zdef_(zinc, Znotgoodnew, "points ignored (didn't create a good new facet)", -1);
-  zdef_(zinc, Zgoodfacet, "good facets found", -1);
-  zzdef_(zinc, Znumvisibility, "distance tests for facet visibility", -1);
-  zdef_(zinc, Zdistvertex, "distance tests to report minimum vertex", -1);
-  zdef_(zinc, Ztotcheck, "points checked for facets' outer planes", -1);
-  zzdef_(zinc, Zcheckpart, "  ave. distance tests per check", Ztotcheck);
-}
-void qh_allstatD(void) {
-  zdef_(zdoc, Zdoc4, "partitioning statistics (see previous for outer planes)", -1);
-  zzdef_(zadd, Zdelvertextot, "total vertices deleted", -1);
-  zdef_(zmax, Zdelvertexmax, "    maximum vertices deleted per iteration", -1);
-  zdef_(zinc, Zfindbest, "calls to findbest", -1);
-  zdef_(zadd, Zfindbesttot, " ave. facets tested", Zfindbest);
-  zdef_(zmax, Zfindbestmax, " max. facets tested", -1);
-  zdef_(zadd, Zfindcoplanar, " ave. coplanar search", Zfindbest);
-  zdef_(zinc, Zfindnew, "calls to findbestnew", -1);
-  zdef_(zadd, Zfindnewtot, " ave. facets tested", Zfindnew);
-  zdef_(zmax, Zfindnewmax, " max. facets tested", -1);
-  zdef_(zinc, Zfindnewjump, " ave. clearly better", Zfindnew);
-  zdef_(zinc, Zfindnewsharp, " calls due to qh_sharpnewfacets", -1);
-  zdef_(zinc, Zfindhorizon, "calls to findhorizon", -1);
-  zdef_(zadd, Zfindhorizontot, " ave. facets tested", Zfindhorizon);
-  zdef_(zmax, Zfindhorizonmax, " max. facets tested", -1);
-  zdef_(zinc, Zfindjump,       " ave. clearly better", Zfindhorizon);
-  zdef_(zinc, Zparthorizon, " horizon facets better than bestfacet", -1);
-  zdef_(zinc, Zpartangle, "angle tests for repartitioned coplanar points", -1);
-  zdef_(zinc, Zpartflip, "  repartitioned coplanar points for flipped orientation", -1);
-}
-void qh_allstatE(void) {
-  zdef_(zinc, Zpartinside, "inside points", -1);
-  zdef_(zinc, Zpartnear, "  inside points kept with a facet", -1);
-  zdef_(zinc, Zcoplanarinside, "  inside points that were coplanar with a facet", -1);
-  zdef_(zinc, Zbestlower, "calls to findbestlower", -1);
-  zdef_(zinc, Zbestlowerv, "  with search of vertex neighbors", -1);
-  zdef_(wadd, Wmaxout, "difference in max_outside at final check", -1);
-  zzdef_(zinc, Zpartitionall, "distance tests for initial partition", -1);
-  zdef_(zinc, Ztotpartition, "partitions of a point", -1);
-  zzdef_(zinc, Zpartition, "distance tests for partitioning", -1);
-  zzdef_(zinc, Zdistcheck, "distance tests for checking flipped facets", -1); 
-  zzdef_(zinc, Zdistconvex, "distance tests for checking convexity", -1); 
-  zdef_(zinc, Zdistgood, "distance tests for checking good point", -1); 
-  zdef_(zinc, Zdistio, "distance tests for output", -1); 
-  zdef_(zinc, Zdiststat, "distance tests for statistics", -1); 
-  zdef_(zinc, Zdistplane, "total number of distance tests", -1);
-  zdef_(zinc, Ztotpartcoplanar, "partitions of coplanar points or deleted vertices", -1);
-  zzdef_(zinc, Zpartcoplanar, "   distance tests for these partitions", -1);
-  zdef_(zinc, Zcomputefurthest, "distance tests for computing furthest", -1);
-}
-void qh_allstatE2(void) {
-  zdef_(zdoc, Zdoc5, "statistics for matching ridges", -1);
-  zdef_(zinc, Zhashlookup, "total lookups for matching ridges of new facets", -1);
-  zdef_(zinc, Zhashtests, "average number of tests to match a ridge", Zhashlookup);
-  zdef_(zinc, Zhashridge, "total lookups of subridges (duplicates and boundary)", -1);
-  zdef_(zinc, Zhashridgetest, "average number of tests per subridge", Zhashridge);
-  zdef_(zinc, Zdupsame, "duplicated ridges in same merge cycle", -1);
-  zdef_(zinc, Zdupflip, "duplicated ridges with flipped facets", -1);
-
-  zdef_(zdoc, Zdoc6, "statistics for determining merges", -1);
-  zdef_(zinc, Zangletests, "angles computed for ridge convexity", -1);
-  zdef_(zinc, Zbestcentrum, "best merges used centrum instead of vertices",-1);
-  zzdef_(zinc, Zbestdist, "distance tests for best merge", -1);
-  zzdef_(zinc, Zcentrumtests, "distance tests for centrum convexity", -1);
-  zzdef_(zinc, Zdistzero, "distance tests for checking simplicial convexity", -1);
-  zdef_(zinc, Zcoplanarangle, "coplanar angles in getmergeset", -1);
-  zdef_(zinc, Zcoplanarcentrum, "coplanar centrums in getmergeset", -1);
-  zdef_(zinc, Zconcaveridge, "concave ridges in getmergeset", -1);
-}
-void qh_allstatF(void) {
-  zdef_(zdoc, Zdoc7, "statistics for merging", -1);
-  zdef_(zinc, Zpremergetot, "merge iterations", -1);
-  zdef_(zadd, Zmergeinittot, "ave. initial non-convex ridges per iteration", Zpremergetot);
-  zdef_(zadd, Zmergeinitmax, "  maximum", -1);
-  zdef_(zadd, Zmergesettot, "  ave. additional non-convex ridges per iteration", Zpremergetot);
-  zdef_(zadd, Zmergesetmax, "  maximum additional in one pass", -1);
-  zdef_(zadd, Zmergeinittot2, "initial non-convex ridges for post merging", -1);
-  zdef_(zadd, Zmergesettot2, "  additional non-convex ridges", -1);
-  zdef_(wmax, Wmaxoutside, "max distance of vertex or coplanar point above facet (w/roundoff)", -1);
-  zdef_(wmin, Wminvertex, "max distance of merged vertex below facet (or roundoff)", -1);
-  zdef_(zinc, Zwidefacet, "centrums frozen due to a wide merge", -1);
-  zdef_(zinc, Zwidevertices, "centrums frozen due to extra vertices", -1);
-  zzdef_(zinc, Ztotmerge, "total number of facets or cycles of facets merged", -1);
-  zdef_(zinc, Zmergesimplex, "merged a simplex", -1);
-  zdef_(zinc, Zonehorizon, "simplices merged into coplanar horizon", -1);
-  zzdef_(zinc, Zcyclehorizon, "cycles of facets merged into coplanar horizon", -1);
-  zzdef_(zadd, Zcyclefacettot, "  ave. facets per cycle", Zcyclehorizon);
-  zdef_(zmax, Zcyclefacetmax, "  max. facets", -1);
-  zdef_(zinc, Zmergeintohorizon, "new facets merged into horizon", -1);
-  zdef_(zinc, Zmergenew, "new facets merged", -1);
-  zdef_(zinc, Zmergehorizon, "horizon facets merged into new facets", -1);
-  zdef_(zinc, Zmergevertex, "vertices deleted by merging", -1);
-  zdef_(zinc, Zcyclevertex, "vertices deleted by merging into coplanar horizon", -1);
-  zdef_(zinc, Zdegenvertex, "vertices deleted by degenerate facet", -1);
-  zdef_(zinc, Zmergeflipdup, "merges due to flipped facets in duplicated ridge", -1);
-  zdef_(zinc, Zneighbor, "merges due to redundant neighbors", -1);
-  zdef_(zadd, Ztestvneighbor, "non-convex vertex neighbors", -1); 
-}
-void qh_allstatG(void) {
-  zdef_(zinc, Zacoplanar, "merges due to angle coplanar facets", -1);
-  zdef_(wadd, Wacoplanartot, "  average merge distance", Zacoplanar);
-  zdef_(wmax, Wacoplanarmax, "  maximum merge distance", -1);
-  zdef_(zinc, Zcoplanar, "merges due to coplanar facets", -1);
-  zdef_(wadd, Wcoplanartot, "  average merge distance", Zcoplanar);
-  zdef_(wmax, Wcoplanarmax, "  maximum merge distance", -1);
-  zdef_(zinc, Zconcave, "merges due to concave facets", -1);
-  zdef_(wadd, Wconcavetot, "  average merge distance", Zconcave);
-  zdef_(wmax, Wconcavemax, "  maximum merge distance", -1);
-  zdef_(zinc, Zavoidold, "coplanar/concave merges due to avoiding old merge", -1);
-  zdef_(wadd, Wavoidoldtot, "  average merge distance", Zavoidold);
-  zdef_(wmax, Wavoidoldmax, "  maximum merge distance", -1);
-  zdef_(zinc, Zdegen, "merges due to degenerate facets", -1);
-  zdef_(wadd, Wdegentot, "  average merge distance", Zdegen);
-  zdef_(wmax, Wdegenmax, "  maximum merge distance", -1);
-  zdef_(zinc, Zflipped, "merges due to removing flipped facets", -1);
-  zdef_(wadd, Wflippedtot, "  average merge distance", Zflipped);
-  zdef_(wmax, Wflippedmax, "  maximum merge distance", -1);
-  zdef_(zinc, Zduplicate, "merges due to duplicated ridges", -1);
-  zdef_(wadd, Wduplicatetot, "  average merge distance", Zduplicate);
-  zdef_(wmax, Wduplicatemax, "  maximum merge distance", -1);
-}
-void qh_allstatH(void) {
-  zdef_(zdoc, Zdoc8, "renamed vertex statistics", -1);
-  zdef_(zinc, Zrenameshare, "renamed vertices shared by two facets", -1);
-  zdef_(zinc, Zrenamepinch, "renamed vertices in a pinched facet", -1);
-  zdef_(zinc, Zrenameall, "renamed vertices shared by multiple facets", -1);
-  zdef_(zinc, Zfindfail, "rename failures due to duplicated ridges", -1);
-  zdef_(zinc, Zdupridge, "  duplicate ridges detected", -1);
-  zdef_(zinc, Zdelridge, "deleted ridges due to renamed vertices", -1);
-  zdef_(zinc, Zdropneighbor, "dropped neighbors due to renamed vertices", -1);
-  zdef_(zinc, Zdropdegen, "degenerate facets due to dropped neighbors", -1);
-  zdef_(zinc, Zdelfacetdup, "  facets deleted because of no neighbors", -1);
-  zdef_(zinc, Zremvertex, "vertices removed from facets due to no ridges", -1);
-  zdef_(zinc, Zremvertexdel, "  deleted", -1);
-  zdef_(zinc, Zintersectnum, "vertex intersections for locating redundant vertices", -1);
-  zdef_(zinc, Zintersectfail, "intersections failed to find a redundant vertex", -1);
-  zdef_(zinc, Zintersect, "intersections found redundant vertices", -1);
-  zdef_(zadd, Zintersecttot, "   ave. number found per vertex", Zintersect);
-  zdef_(zmax, Zintersectmax, "   max. found for a vertex", -1);
-  zdef_(zinc, Zvertexridge, NULL, -1);
-  zdef_(zadd, Zvertexridgetot, "  ave. number of ridges per tested vertex", Zvertexridge);
-  zdef_(zmax, Zvertexridgemax, "  max. number of ridges per tested vertex", -1);
-
-  zdef_(zdoc, Zdoc10, "memory usage statistics (in bytes)", -1);
-  zdef_(zadd, Zmemfacets, "for facets and their normals, neighbor and vertex sets", -1);
-  zdef_(zadd, Zmemvertices, "for vertices and their neighbor sets", -1);
-  zdef_(zadd, Zmempoints, "for input points and outside and coplanar sets",-1);
-  zdef_(zadd, Zmemridges, "for ridges and their vertex sets", -1);
-} /* allstat */
-
-void qh_allstatI(void) {
-  qhstat vridges= qhstat next;
-  zzdef_(zdoc, Zdoc11, "Voronoi ridge statistics", -1);
-  zzdef_(zinc, Zridge, "non-simplicial Voronoi vertices for all ridges", -1);
-  zzdef_(wadd, Wridge, "  ave. distance to ridge", Zridge);
-  zzdef_(wmax, Wridgemax, "  max. distance to ridge", -1);
-  zzdef_(zinc, Zridgemid, "bounded ridges", -1);
-  zzdef_(wadd, Wridgemid, "  ave. distance of midpoint to ridge", Zridgemid);
-  zzdef_(wmax, Wridgemidmax, "  max. distance of midpoint to ridge", -1);
-  zzdef_(zinc, Zridgeok, "bounded ridges with ok normal", -1);
-  zzdef_(wadd, Wridgeok, "  ave. angle to ridge", Zridgeok);
-  zzdef_(wmax, Wridgeokmax, "  max. angle to ridge", -1);
-  zzdef_(zinc, Zridge0, "bounded ridges with near-zero normal", -1);
-  zzdef_(wadd, Wridge0, "  ave. angle to ridge", Zridge0);
-  zzdef_(wmax, Wridge0max, "  max. angle to ridge", -1);
-
-  zdef_(zdoc, Zdoc12, "Triangulation statistics (Qt)", -1);
-  zdef_(zinc, Ztricoplanar, "non-simplicial facets triangulated", -1);
-  zdef_(zadd, Ztricoplanartot, "  ave. new facets created (may be deleted)", Ztricoplanar);
-  zdef_(zmax, Ztricoplanarmax, "  max. new facets created", -1);
-  zdef_(zinc, Ztrinull, "null new facets deleted (duplicated vertex)", -1);
-  zdef_(zinc, Ztrimirror, "mirrored pairs of new facets deleted (same vertices)", -1);
-  zdef_(zinc, Ztridegen, "degenerate new facets in output (same ridge)", -1);
-} /* allstat */
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="allstatistics">-</a>
-  
-  qh_allstatistics()
-    reset printed flag for all statistics
-*/
-void qh_allstatistics (void) {
-  int i;
-  
-  for (i=ZEND; i--; ) 
-    qhstat printed[i]= False;
-} /* allstatistics */
-
-#if qh_KEEPstatistics
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="collectstatistics">-</a>
-  
-  qh_collectstatistics()
-    collect statistics for qh.facet_list
-
-*/
-void qh_collectstatistics (void) {
-  facetT *facet, *neighbor, **neighborp;
-  vertexT *vertex, **vertexp;
-  realT dotproduct, dist;
-  int sizneighbors, sizridges, sizvertices, i;
-  
-  qh old_randomdist= qh RANDOMdist;
-  qh RANDOMdist= False;
-  zval_(Zmempoints)= qh num_points * qh normal_size + 
-                             sizeof (qhT) + sizeof (qhstatT);
-  zval_(Zmemfacets)= 0;
-  zval_(Zmemridges)= 0;
-  zval_(Zmemvertices)= 0;
-  zval_(Zangle)= 0;
-  wval_(Wangle)= 0.0;
-  zval_(Znumridges)= 0;
-  zval_(Znumfacets)= 0;
-  zval_(Znumneighbors)= 0;
-  zval_(Znumvertices)= 0;
-  zval_(Znumvneighbors)= 0;
-  zval_(Znummergetot)= 0;
-  zval_(Znummergemax)= 0;
-  zval_(Zvertices)= qh num_vertices - qh_setsize (qh del_vertices);
-  if (qh MERGING || qh APPROXhull || qh JOGGLEmax < REALmax/2)
-    wmax_(Wmaxoutside, qh max_outside);
-  if (qh MERGING)
-    wmin_(Wminvertex, qh min_vertex);
-  FORALLfacets
-    facet->seen= False;
-  if (qh DELAUNAY) {
-    FORALLfacets {
-      if (facet->upperdelaunay != qh UPPERdelaunay)
-        facet->seen= True; /* remove from angle statistics */
-    }
-  }
-  FORALLfacets {
-    if (facet->visible && qh NEWfacets)
-      continue;
-    sizvertices= qh_setsize (facet->vertices);
-    sizneighbors= qh_setsize (facet->neighbors);
-    sizridges= qh_setsize (facet->ridges);
-    zinc_(Znumfacets);
-    zadd_(Znumvertices, sizvertices);
-    zmax_(Zmaxvertices, sizvertices);
-    zadd_(Znumneighbors, sizneighbors);
-    zmax_(Zmaxneighbors, sizneighbors);
-    zadd_(Znummergetot, facet->nummerge);
-    i= facet->nummerge; /* avoid warnings */
-    zmax_(Znummergemax, i); 
-    if (!facet->simplicial) {
-      if (sizvertices == qh hull_dim) {
-	zinc_(Znowsimplicial);
-      }else {
-        zinc_(Znonsimplicial);
-      }
-    }
-    if (sizridges) {
-      zadd_(Znumridges, sizridges);
-      zmax_(Zmaxridges, sizridges);
-    }
-    zadd_(Zmemfacets, sizeof (facetT) + qh normal_size + 2*sizeof (setT) 
-       + SETelemsize * (sizneighbors + sizvertices));
-    if (facet->ridges) {
-      zadd_(Zmemridges,
-	 sizeof (setT) + SETelemsize * sizridges + sizridges * 
-         (sizeof (ridgeT) + sizeof (setT) + SETelemsize * (qh hull_dim-1))/2);
-    }
-    if (facet->outsideset)
-      zadd_(Zmempoints, sizeof (setT) + SETelemsize * qh_setsize (facet->outsideset));
-    if (facet->coplanarset)
-      zadd_(Zmempoints, sizeof (setT) + SETelemsize * qh_setsize (facet->coplanarset));
-    if (facet->seen) /* Delaunay upper envelope */
-      continue;
-    facet->seen= True;
-    FOREACHneighbor_(facet) {
-      if (neighbor == qh_DUPLICATEridge || neighbor == qh_MERGEridge
-	  || neighbor->seen || !facet->normal || !neighbor->normal)
-	continue;
-      dotproduct= qh_getangle(facet->normal, neighbor->normal);
-      zinc_(Zangle);
-      wadd_(Wangle, dotproduct);
-      wmax_(Wanglemax, dotproduct)
-      wmin_(Wanglemin, dotproduct)
-    }
-    if (facet->normal) {
-      FOREACHvertex_(facet->vertices) {
-        zinc_(Zdiststat);
-        qh_distplane(vertex->point, facet, &dist);
-        wmax_(Wvertexmax, dist);
-        wmin_(Wvertexmin, dist);
-      }
-    }
-  }
-  FORALLvertices {
-    if (vertex->deleted)
-      continue;
-    zadd_(Zmemvertices, sizeof (vertexT));
-    if (vertex->neighbors) {
-      sizneighbors= qh_setsize (vertex->neighbors);
-      zadd_(Znumvneighbors, sizneighbors);
-      zmax_(Zmaxvneighbors, sizneighbors);
-      zadd_(Zmemvertices, sizeof (vertexT) + SETelemsize * sizneighbors);
-    }
-  }
-  qh RANDOMdist= qh old_randomdist;
-} /* collectstatistics */
-#endif /* qh_KEEPstatistics */
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="freestatistics">-</a>
-  
-  qh_freestatistics(  )
-    free memory used for statistics
-*/
-void qh_freestatistics (void) {
-
-#if qh_QHpointer
-  free (qh_qhstat);
-  qh_qhstat= NULL;
-#endif
-} /* freestatistics */
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="initstatistics">-</a>
-  
-  qh_initstatistics(  )
-    allocate and initialize statistics
-
-  notes:
-    uses malloc() instead of qh_memalloc() since mem.c not set up yet
-*/
-void qh_initstatistics (void) {
-  int i;
-  realT realx;
-  int intx;
-
-#if qh_QHpointer
-  if (!(qh_qhstat= (qhstatT *)malloc (sizeof(qhstatT)))) {
-    fprintf (qhmem.ferr, "qhull error (qh_initstatistics): insufficient memory\n");
-    exit (1);  /* can not use qh_errexit() */
-  }
-#endif
-  
-  qhstat next= 0;
-  qh_allstatA();
-  qh_allstatB();
-  qh_allstatC();
-  qh_allstatD();
-  qh_allstatE();
-  qh_allstatE2();
-  qh_allstatF();
-  qh_allstatG();
-  qh_allstatH();
-  qh_allstatI();
-  if (qhstat next > sizeof(qhstat id)) {
-    fprintf (qhmem.ferr, "qhull error (qh_initstatistics): increase size of qhstat.id[].\n\
-      qhstat.next %d should be <= sizeof(qhstat id) %lu\n", qhstat next, sizeof(qhstat id));
-#if 0 /* for locating error, Znumridges should be duplicated */
-    for (i=0; i < ZEND; i++) {
-      int j;
-      for (j=i+1; j < ZEND; j++) {
-	if (qhstat id[i] == qhstat id[j]) {
-          fprintf (qhmem.ferr, "qhull error (qh_initstatistics): duplicated statistic %d at indices %d and %d\n", 
-	      qhstat id[i], i, j);
-	}
-      }
-    }
-#endif 
-    exit (1);  /* can not use qh_errexit() */
-  }
-  qhstat init[zinc].i= 0;
-  qhstat init[zadd].i= 0;
-  qhstat init[zmin].i= INT_MAX;
-  qhstat init[zmax].i= INT_MIN;
-  qhstat init[wadd].r= 0;
-  qhstat init[wmin].r= REALmax;
-  qhstat init[wmax].r= -REALmax;
-  for (i=0; i < ZEND; i++) {
-    if (qhstat type[i] > ZTYPEreal) {
-      realx= qhstat init[(unsigned char)(qhstat type[i])].r;
-      qhstat stats[i].r= realx;
-    }else if (qhstat type[i] != zdoc) {
-      intx= qhstat init[(unsigned char)(qhstat type[i])].i;
-      qhstat stats[i].i= intx;
-    }
-  }
-} /* initstatistics */
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="newstats">-</a>
-  
-  qh_newstats(  )
-    returns True if statistics for zdoc
-
-  returns:
-    next zdoc
-*/
-boolT qh_newstats (int index, int *nextindex) {
-  boolT isnew= False;
-  int start, i;
-
-  if (qhstat type[qhstat id[index]] == zdoc) 
-    start= index+1;
-  else
-    start= index;
-  for (i= start; i < qhstat next && qhstat type[qhstat id[i]] != zdoc; i++) {
-    if (!qh_nostatistic(qhstat id[i]) && !qhstat printed[qhstat id[i]])
-	isnew= True;
-  }
-  *nextindex= i;
-  return isnew;
-} /* newstats */
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="nostatistic">-</a>
-  
-  qh_nostatistic( index )
-    true if no statistic to print
-*/
-boolT qh_nostatistic (int i) {
-  
-  if ((qhstat type[i] > ZTYPEreal
-       &&qhstat stats[i].r == qhstat init[(unsigned char)(qhstat type[i])].r)
-      || (qhstat type[i] < ZTYPEreal
-	  &&qhstat stats[i].i == qhstat init[(unsigned char)(qhstat type[i])].i))
-    return True;
-  return False;
-} /* nostatistic */
-
-#if qh_KEEPstatistics
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="printallstatistics">-</a>
-  
-  qh_printallstatistics( fp, string )
-    print all statistics with header 'string'
-*/
-void qh_printallstatistics (FILE *fp, char *string) {
-
-  qh_allstatistics();
-  qh_collectstatistics();
-  qh_printstatistics (fp, string);
-  qh_memstatistics (fp);
-}
-
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="printstatistics">-</a>
-  
-  qh_printstatistics( fp, string )
-    print statistics to a file with header 'string'
-    skips statistics with qhstat.printed[] (reset with qh_allstatistics)
-
-  see: 
-    qh_printallstatistics()
-*/
-void qh_printstatistics (FILE *fp, char *string) {
-  int i, k;
-  realT ave;
-  
-  if (qh num_points != qh num_vertices) {
-    wval_(Wpbalance)= 0;
-    wval_(Wpbalance2)= 0;
-  }else
-    wval_(Wpbalance2)= qh_stddev (zval_(Zpbalance), wval_(Wpbalance), 
-                                 wval_(Wpbalance2), &ave);
-  wval_(Wnewbalance2)= qh_stddev (zval_(Zprocessed), wval_(Wnewbalance), 
-                                 wval_(Wnewbalance2), &ave);
-  fprintf (fp, "\n\
-%s\n\
- qhull invoked by: %s | %s\n%s with options:\n%s\n", string, qh rbox_command, 
-     qh qhull_command, qh_version, qh qhull_options);
-  fprintf (fp, "\nprecision constants:\n\
- %6.2g max. abs. coordinate in the (transformed) input ('Qbd:n')\n\
- %6.2g max. roundoff error for distance computation ('En')\n\
- %6.2g max. roundoff error for angle computations\n\
- %6.2g min. distance for outside points ('Wn')\n\
- %6.2g min. distance for visible facets ('Vn')\n\
- %6.2g max. distance for coplanar facets ('Un')\n\
- %6.2g max. facet width for recomputing centrum and area\n\
-", 
-  qh MAXabs_coord, qh DISTround, qh ANGLEround, qh MINoutside, 
-        qh MINvisible, qh MAXcoplanar, qh WIDEfacet);
-  if (qh KEEPnearinside)
-    fprintf(fp, "\
- %6.2g max. distance for near-inside points\n", qh NEARinside);
-  if (qh premerge_cos < REALmax/2) fprintf (fp, "\
- %6.2g max. cosine for pre-merge angle\n", qh premerge_cos);
-  if (qh PREmerge) fprintf (fp, "\
- %6.2g radius of pre-merge centrum\n", qh premerge_centrum);
-  if (qh postmerge_cos < REALmax/2) fprintf (fp, "\
- %6.2g max. cosine for post-merge angle\n", qh postmerge_cos);
-  if (qh POSTmerge) fprintf (fp, "\
- %6.2g radius of post-merge centrum\n", qh postmerge_centrum);
-  fprintf (fp, "\
- %6.2g max. distance for merging two simplicial facets\n\
- %6.2g max. roundoff error for arithmetic operations\n\
- %6.2g min. denominator for divisions\n\
-  zero diagonal for Gauss: ", qh ONEmerge, REALepsilon, qh MINdenom);
-  for (k=0; k < qh hull_dim; k++)
-    fprintf (fp, "%6.2e ", qh NEARzero[k]);
-  fprintf (fp, "\n\n");
-  for (i=0 ; i < qhstat next; ) 
-    qh_printstats (fp, i, &i);
-} /* printstatistics */
-#endif /* qh_KEEPstatistics */
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="printstatlevel">-</a>
-  
-  qh_printstatlevel( fp, id )
-    print level information for a statistic
-
-  notes:
-    nop if id >= ZEND, printed, or same as initial value
-*/
-void qh_printstatlevel (FILE *fp, int id, int start) {
-#define NULLfield "       "
-
-  if (id >= ZEND || qhstat printed[id])
-    return;
-  if (qhstat type[id] == zdoc) {
-    fprintf (fp, "%s\n", qhstat doc[id]);
-    return;
-  }
-  start= 0; /* not used */
-  if (qh_nostatistic(id) || !qhstat doc[id])
-    return;
-  qhstat printed[id]= True;
-  if (qhstat count[id] != -1 
-      && qhstat stats[(unsigned char)(qhstat count[id])].i == 0)
-    fprintf (fp, " *0 cnt*");
-  else if (qhstat type[id] >= ZTYPEreal && qhstat count[id] == -1)
-    fprintf (fp, "%7.2g", qhstat stats[id].r);
-  else if (qhstat type[id] >= ZTYPEreal && qhstat count[id] != -1)
-    fprintf (fp, "%7.2g", qhstat stats[id].r/ qhstat stats[(unsigned char)(qhstat count[id])].i);
-  else if (qhstat type[id] < ZTYPEreal && qhstat count[id] == -1)
-    fprintf (fp, "%7d", qhstat stats[id].i);
-  else if (qhstat type[id] < ZTYPEreal && qhstat count[id] != -1)
-    fprintf (fp, "%7.3g", (realT) qhstat stats[id].i / qhstat stats[(unsigned char)(qhstat count[id])].i);
-  fprintf (fp, " %s\n", qhstat doc[id]);
-} /* printstatlevel */
-
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="printstats">-</a>
-  
-  qh_printstats( fp, index, nextindex )
-    print statistics for a zdoc group
-
-  returns:
-    next zdoc if non-null
-*/
-void qh_printstats (FILE *fp, int index, int *nextindex) {
-  int j, nexti;
-
-  if (qh_newstats (index, &nexti)) {
-    fprintf (fp, "\n");
-    for (j=index; j<nexti; j++)
-      qh_printstatlevel (fp, qhstat id[j], 0);
-  }
-  if (nextindex)
-    *nextindex= nexti;
-} /* printstats */
-
-#if qh_KEEPstatistics
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="stddev">-</a>
-  
-  qh_stddev( num, tot, tot2, ave )
-    compute the standard deviation and average from statistics
-
-    tot2 is the sum of the squares
-  notes:
-    computes r.m.s.: 
-      (x-ave)^2 
-      == x^2 - 2x tot/num +   (tot/num)^2
-      == tot2 - 2 tot tot/num + tot tot/num 
-      == tot2 - tot ave
-*/
-realT qh_stddev (int num, realT tot, realT tot2, realT *ave) {
-  realT stddev;
-
-  *ave= tot/num;
-  stddev= sqrt (tot2/num - *ave * *ave);
-  return stddev;
-} /* stddev */
-
-#endif /* qh_KEEPstatistics */ 
-
-#if !qh_KEEPstatistics
-void    qh_collectstatistics (void) {}
-void    qh_printallstatistics (FILE *fp, char *string) {};
-void    qh_printstatistics (FILE *fp, char *string) {}
-#endif
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/stat.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/stat.h
deleted file mode 100644
index 6e7b0fc60e59b0b60d74d338425efe5812a1b554..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/stat.h
+++ /dev/null
@@ -1,528 +0,0 @@
-/*<html><pre>  -<a                             href="qh-stat.htm"
->-------------------------------</a><a name="TOP">-</a>
-
- stat.h
-   contains all statistics that are collected for qhull
-
- see qh-stat.htm and stat.c
-
- copyright (c) 1993-2003, The Geometry Center
-
- recompile qhull if you change this file
-
- Integer statistics are Z* while real statistics are W*.
-
- define maydebugx to call a routine at every statistic event
-
-*/
-
-#ifndef qhDEFstat
-#define qhDEFstat 1
-
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="KEEPstatistics">-</a>
-
-  qh_KEEPstatistics
-    0 turns off statistic gathering (except zzdef/zzinc/zzadd/zzval/wwval)
-*/
-#ifndef qh_KEEPstatistics
-#define qh_KEEPstatistics 1
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="statistics">-</a>
-
-  Zxxx for integers, Wxxx for reals
-
-  notes:
-    be sure that all statistics are defined in stat.c
-      otherwise initialization may core dump
-    can pick up all statistics by:
-      grep '[zw].*_[(][ZW]' *.c >z.x
-    remove trailers with query">-</a>
-    remove leaders with  query-replace-regexp [ ^I]+  (
-*/
-#if qh_KEEPstatistics
-enum statistics       /* alphabetical after Z/W */
-{
-    Zacoplanar,
-    Wacoplanarmax,
-    Wacoplanartot,
-    Zangle,
-    Wangle,
-    Wanglemax,
-    Wanglemin,
-    Zangletests,
-    Wareatot,
-    Wareamax,
-    Wareamin,
-    Zavoidold,
-    Wavoidoldmax,
-    Wavoidoldtot,
-    Zback0,
-    Zbestcentrum,
-    Zbestdist,
-    Zbestlower,
-    Zbestlowerv,
-    Zcentrumtests,
-    Zcheckpart,
-    Zcomputefurthest,
-    Zconcave,
-    Wconcavemax,
-    Wconcavetot,
-    Zconcaveridges,
-    Zconcaveridge,
-    Zcoplanar,
-    Wcoplanarmax,
-    Wcoplanartot,
-    Zcoplanarangle,
-    Zcoplanarcentrum,
-    Zcoplanarhorizon,
-    Zcoplanarinside,
-    Zcoplanarpart,
-    Zcoplanarridges,
-    Wcpu,
-    Zcyclefacetmax,
-    Zcyclefacettot,
-    Zcyclehorizon,
-    Zcyclevertex,
-    Zdegen,
-    Wdegenmax,
-    Wdegentot,
-    Zdegenvertex,
-    Zdelfacetdup,
-    Zdelridge,
-    Zdelvertextot,
-    Zdelvertexmax,
-    Zdetsimplex,
-    Zdistcheck,
-    Zdistconvex,
-    Zdistgood,
-    Zdistio,
-    Zdistplane,
-    Zdiststat,
-    Zdistvertex,
-    Zdistzero,
-    Zdoc1,
-    Zdoc2,
-    Zdoc3,
-    Zdoc4,
-    Zdoc5,
-    Zdoc6,
-    Zdoc7,
-    Zdoc8,
-    Zdoc9,
-    Zdoc10,
-    Zdoc11,
-    Zdoc12,
-    Zdropdegen,
-    Zdropneighbor,
-    Zdupflip,
-    Zduplicate,
-    Wduplicatemax,
-    Wduplicatetot,
-    Zdupridge,
-    Zdupsame,
-    Zflipped,
-    Wflippedmax,
-    Wflippedtot,
-    Zflippedfacets,
-    Zfindbest,
-    Zfindbestmax,
-    Zfindbesttot,
-    Zfindcoplanar,
-    Zfindfail,
-    Zfindhorizon,
-    Zfindhorizonmax,
-    Zfindhorizontot,
-    Zfindjump,
-    Zfindnew,
-    Zfindnewmax,
-    Zfindnewtot,
-    Zfindnewjump,
-    Zfindnewsharp,
-    Zgauss0,
-    Zgoodfacet,
-    Zhashlookup,
-    Zhashridge,
-    Zhashridgetest,
-    Zhashtests,
-    Zinsidevisible,
-    Zintersect,
-    Zintersectfail,
-    Zintersectmax,
-    Zintersectnum,
-    Zintersecttot,
-    Zmaxneighbors,
-    Wmaxout,
-    Wmaxoutside,
-    Zmaxridges,
-    Zmaxvertex,
-    Zmaxvertices,
-    Zmaxvneighbors,
-    Zmemfacets,
-    Zmempoints,
-    Zmemridges,
-    Zmemvertices,
-    Zmergeflipdup,
-    Zmergehorizon,
-    Zmergeinittot,
-    Zmergeinitmax,
-    Zmergeinittot2,
-    Zmergeintohorizon,
-    Zmergenew,
-    Zmergesettot,
-    Zmergesetmax,
-    Zmergesettot2,
-    Zmergesimplex,
-    Zmergevertex,
-    Wmindenom,
-    Wminvertex,
-    Zminnorm,
-    Zmultiridge,
-    Znearlysingular,
-    Zneighbor,
-    Wnewbalance,
-    Wnewbalance2,
-    Znewfacettot,
-    Znewfacetmax,
-    Znewvertex,
-    Wnewvertex,
-    Wnewvertexmax,
-    Znoarea,
-    Znonsimplicial,
-    Znowsimplicial,
-    Znotgood,
-    Znotgoodnew,
-    Znotmax,
-    Znumfacets,
-    Znummergemax,
-    Znummergetot,
-    Znumneighbors,
-    Znumridges,
-    Znumvertices,
-    Znumvisibility,
-    Znumvneighbors,
-    Zonehorizon,
-    Zpartangle,
-    Zpartcoplanar,
-    Zpartflip,
-    Zparthorizon,
-    Zpartinside,
-    Zpartition,
-    Zpartitionall,
-    Zpartnear,
-    Zpbalance,
-    Wpbalance,
-    Wpbalance2,
-    Zpostfacets,
-    Zpremergetot,
-    Zprocessed,
-    Zremvertex,
-    Zremvertexdel,
-    Zrenameall,
-    Zrenamepinch,
-    Zrenameshare,
-    Zretry,
-    Wretrymax,
-    Zridge,
-    Wridge,
-    Wridgemax,
-    Zridge0,
-    Wridge0,
-    Wridge0max,
-    Zridgemid,
-    Wridgemid,
-    Wridgemidmax,
-    Zridgeok,
-    Wridgeok,
-    Wridgeokmax,
-    Zsearchpoints,
-    Zsetplane,
-    Ztestvneighbor,
-    Ztotcheck,
-    Ztothorizon,
-    Ztotmerge,
-    Ztotpartcoplanar,
-    Ztotpartition,
-    Ztotridges,
-    Ztotvertices,
-    Ztotvisible,
-    Ztricoplanar,
-    Ztricoplanarmax,
-    Ztricoplanartot,
-    Ztridegen,
-    Ztrimirror,
-    Ztrinull,
-    Wvertexmax,
-    Wvertexmin,
-    Zvertexridge,
-    Zvertexridgetot,
-    Zvertexridgemax,
-    Zvertices,
-    Zvisfacettot,
-    Zvisfacetmax,
-    Zvisvertextot,
-    Zvisvertexmax,
-    Zwidefacet,
-    Zwidevertices,
-    ZEND
-};
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="ZZstat">-</a>
-
-  Zxxx/Wxxx statistics that remain defined if qh_KEEPstatistics=0
-
-  notes:
-    be sure to use zzdef, zzinc, etc. with these statistics (no double checking!)
-*/
-#else
-enum statistics       /* for zzdef etc. macros */
-{
-    Zback0,
-    Zbestdist,
-    Zcentrumtests,
-    Zcheckpart,
-    Zconcaveridges,
-    Zcoplanarhorizon,
-    Zcoplanarpart,
-    Zcoplanarridges,
-    Zcyclefacettot,
-    Zcyclehorizon,
-    Zdelvertextot,
-    Zdistcheck,
-    Zdistconvex,
-    Zdistzero,
-    Zdoc1,
-    Zdoc2,
-    Zdoc3,
-    Zdoc11,
-    Zflippedfacets,
-    Zgauss0,
-    Zminnorm,
-    Zmultiridge,
-    Znearlysingular,
-    Wnewvertexmax,
-    Znumvisibility,
-    Zpartcoplanar,
-    Zpartition,
-    Zpartitionall,
-    Zprocessed,
-    Zretry,
-    Zridge,
-    Wridge,
-    Wridgemax,
-    Zridge0,
-    Wridge0,
-    Wridge0max,
-    Zridgemid,
-    Wridgemid,
-    Wridgemidmax,
-    Zridgeok,
-    Wridgeok,
-    Wridgeokmax,
-    Zsetplane,
-    Ztotmerge,
-    ZEND
-};
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >-------------------------------</a><a name="ztype">-</a>
-
-  ztype
-    the type of a statistic sets its initial value.
-
-  notes:
-    The type should be the same as the macro for collecting the statistic
-*/
-enum ztypes {zdoc, zinc, zadd, zmax, zmin, ZTYPEreal, wadd, wmax, wmin, ZTYPEend};
-
-/*========== macros and constants =============*/
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="MAYdebugx">-</a>
-
-  MAYdebugx
-    define as maydebug() to be called frequently for error trapping
-*/
-#define MAYdebugx
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zdef_">-</a>
-
-  zzdef_, zdef_( type, name, doc, -1)
-    define a statistic (assumes 'qhstat.next= 0;')
-
-  zdef_( type, name, doc, count)
-    define an averaged statistic
-    printed as name/count
-*/
-#define zzdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
-    qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
-#if qh_KEEPstatistics
-#define zdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
-    qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
-#else
-#define zdef_(type,name,doc,count)
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zinc_">-</a>
-
-  zzinc_( name ), zinc_( name)
-    increment an integer statistic
-*/
-#define zzinc_(id) {MAYdebugx; qhstat stats[id].i++;}
-#if qh_KEEPstatistics
-#define zinc_(id) {MAYdebugx; qhstat stats[id].i++;}
-#else
-#define zinc_(id) {}
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zadd_">-</a>
-
-  zzadd_( name, value ), zadd_( name, value ), wadd_( name, value )
-    add value to an integer or real statistic
-*/
-#define zzadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
-#define wwadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
-#if qh_KEEPstatistics
-#define zadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
-#define wadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
-#else
-#define zadd_(id, val) {}
-#define wadd_(id, val) {}
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zval_">-</a>
-
-  zzval_( name ), zval_( name ), wwval_( name )
-    set or return value of a statistic
-*/
-#define zzval_(id) ((qhstat stats[id]).i)
-#define wwval_(id) ((qhstat stats[id]).r)
-#if qh_KEEPstatistics
-#define zval_(id) ((qhstat stats[id]).i)
-#define wval_(id) ((qhstat stats[id]).r)
-#else
-#define zval_(id) qhstat tempi
-#define wval_(id) qhstat tempr
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zmax_">-</a>
-
-  zmax_( id, val ), wmax_( id, value )
-    maximize id with val
-*/
-#define wwmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
-#if qh_KEEPstatistics
-#define zmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].i,(val));}
-#define wmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
-#else
-#define zmax_(id, val) {}
-#define wmax_(id, val) {}
-#endif
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="zmin_">-</a>
-
-  zmin_( id, val ), wmin_( id, value )
-    minimize id with val
-*/
-#if qh_KEEPstatistics
-#define zmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].i,(val));}
-#define wmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].r,(val));}
-#else
-#define zmin_(id, val) {}
-#define wmin_(id, val) {}
-#endif
-
-/*================== stat.h types ==============*/
-
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="intrealT">-</a>
-
-  intrealT
-    union of integer and real, used for statistics
-*/
-typedef union intrealT intrealT;    /* union of int and realT */
-union intrealT
-{
-    int i;
-    realT r;
-};
-
-/*-<a                             href="qh-stat.htm#TOC"
-  >--------------------------------</a><a name="qhstat">-</a>
-
-  qhstat
-    global data structure for statistics
-
-  notes:
-   access to qh_qhstat is via the "qhstat" macro.  There are two choices
-   qh_QHpointer = 1     access globals via a pointer
-                        enables qh_saveqhull() and qh_restoreqhull()
-        = 0     qh_qhstat is a static data structure
-                only one instance of qhull() can be active at a time
-            default value
-   qh_QHpointer is defined in qhull.h
-
-   allocated in stat.c
-*/
-typedef struct qhstatT qhstatT;
-#if qh_QHpointer
-#define qhstat qh_qhstat->
-extern qhstatT* qh_qhstat;
-#else
-#define qhstat qh_qhstat.
-extern qhstatT qh_qhstat;
-#endif
-struct qhstatT
-{
-    intrealT   stats[ZEND];     /* integer and real statistics */
-    unsigned   char id[ZEND + 10]; /* id's in print order */
-    char*      doc[ZEND];       /* array of documentation strings */
-    short int  count[ZEND];     /* -1 if none, else index of count to use */
-    char       type[ZEND];      /* type, see ztypes above */
-    char       printed[ZEND];   /* true, if statistic has been printed */
-    intrealT   init[ZTYPEend];  /* initial values by types, set initstatistics */
-
-    int        next;            /* next index for zdef_ */
-    int        precision;       /* index for precision problems */
-    int        vridges;         /* index for Voronoi ridges */
-    int        tempi;
-    realT      tempr;
-};
-
-/*========== function prototypes ===========*/
-
-void    qh_allstatA(void);
-void    qh_allstatB(void);
-void    qh_allstatC(void);
-void    qh_allstatD(void);
-void    qh_allstatE(void);
-void    qh_allstatE2(void);
-void    qh_allstatF(void);
-void    qh_allstatG(void);
-void    qh_allstatH(void);
-void    qh_allstatI(void);
-void    qh_allstatistics(void);
-void    qh_collectstatistics(void);
-void    qh_freestatistics(void);
-void    qh_initstatistics(void);
-boolT   qh_newstats(int index, int* nextindex);
-boolT   qh_nostatistic(int i);
-void    qh_printallstatistics(FILE* fp, char* string);
-void    qh_printstatistics(FILE* fp, char* string);
-void    qh_printstatlevel(FILE* fp, int id, int start);
-void    qh_printstats(FILE* fp, int index, int* nextindex);
-realT   qh_stddev(int num, realT tot, realT tot2, realT* ave);
-
-#endif   /* qhDEFstat */
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/user.c b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/user.c
deleted file mode 100644
index b9a75a0b15c3d3786dff33afefe3b3d81301a6c7..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/user.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*<html><pre>  -<a                             href="qh-user.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   user.c 
-   user redefinable functions
-
-   see README.txt  see COPYING.txt for copyright information.
-
-   see qhull.h for data structures, macros, and user-callable functions.
-
-   see user_eg.c, unix.c, and qhull_interface.cpp for examples.
-
-   see user.h for user-definable constants
-
-      use qh_NOmem in mem.h to turn off memory management
-      use qh_NOmerge in user.h to turn off facet merging
-      set qh_KEEPstatistics in user.h to 0 to turn off statistics
-
-   This is unsupported software.  You're welcome to make changes,
-   but you're on your own if something goes wrong.  Use 'Tc' to
-   check frequently.  Usually qhull will report an error if 
-   a data structure becomes inconsistent.  If so, it also reports
-   the last point added to the hull, e.g., 102.  You can then trace
-   the execution of qhull with "T4P102".  
-
-   Please report any errors that you fix to qhull@qhull.org
-
-   call_qhull is a template for calling qhull from within your application
-
-   if you recompile and load this module, then user.o will not be loaded
-   from qhull.a
-
-   you can add additional quick allocation sizes in qh_user_memsizes
-
-   if the other functions here are redefined to not use qh_print...,
-   then io.o will not be loaded from qhull.a.  See user_eg.c for an
-   example.  We recommend keeping io.o for the extra debugging 
-   information it supplies.
-*/
-
-#include "qhull_a.h" 
-
-/*-<a                             href="qh-user.htm#TOC"
-  >-------------------------------</a><a name="call_qhull">-</a>
-
-  qh_call_qhull( void )
-    template for calling qhull from inside your program
-    remove #if 0, #endif to compile
-
-  returns: 
-    exit code (see qh_ERR... in qhull.h)
-    all memory freed
-
-  notes:
-    This can be called any number of times.  
-
-  see:
-    qh_call_qhull_once()
-    
-*/
-#if 0
-{
-  int dim;	            /* dimension of points */
-  int numpoints;            /* number of points */
-  coordT *points;           /* array of coordinates for each point */
-  boolT ismalloc;           /* True if qhull should free points in qh_freeqhull() or reallocation */
-  char flags[]= "qhull Tv"; /* option flags for qhull, see qh_opt.htm */
-  FILE *outfile= stdout;    /* output from qh_produce_output()
-			       use NULL to skip qh_produce_output() */
-  FILE *errfile= stderr;    /* error messages from qhull code */
-  int exitcode;             /* 0 if no error from qhull */
-  facetT *facet;	    /* set by FORALLfacets */
-  int curlong, totlong;	    /* memory remaining after qh_memfreeshort */
-
-  /* initialize dim, numpoints, points[], ismalloc here */
-  exitcode= qh_new_qhull (dim, numpoints, points, ismalloc,
-                      flags, outfile, errfile); 
-  if (!exitcode) {                  /* if no error */
-    /* 'qh facet_list' contains the convex hull */
-    FORALLfacets {
-       /* ... your code ... */
-    }
-  }
-  qh_freeqhull(!qh_ALL);
-  qh_memfreeshort (&curlong, &totlong);
-  if (curlong || totlong) 
-    fprintf (errfile, "qhull internal warning (main): did not free %d bytes of long memory (%d pieces)\n", totlong, curlong);
-}
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >-------------------------------</a><a name="new_qhull">-</a>
-
-  qh_new_qhull( dim, numpoints, points, ismalloc, qhull_cmd, outfile, errfile )
-    build new qhull data structure and return exitcode (0 if no errors)
-
-  notes:
-    do not modify points until finished with results.
-      The qhull data structure contains pointers into the points array.
-    do not call qhull functions before qh_new_qhull().
-      The qhull data structure is not initialized until qh_new_qhull().
-
-    outfile may be null
-    qhull_cmd must start with "qhull "
-    projects points to a new point array for Delaunay triangulations ('d' and 'v')
-    transforms points into a new point array for halfspace intersection ('H')
-       
-
-  To allow multiple, concurrent calls to qhull() 
-    - set qh_QHpointer in user.h
-    - use qh_save_qhull and qh_restore_qhull to swap the global data structure between calls.
-    - use qh_freeqhull(qh_ALL) to free intermediate convex hulls
-
-  see:
-    user_eg.c for an example
-*/
-int qh_new_qhull (int dim, int numpoints, coordT *points, boolT ismalloc, 
-		char *qhull_cmd, FILE *outfile, FILE *errfile) {
-  int exitcode, hulldim;
-  boolT new_ismalloc;
-  static boolT firstcall = True;
-  coordT *new_points;
-
-  if (firstcall) {
-    qh_meminit (errfile);
-    firstcall= False;
-  }
-  if (strncmp (qhull_cmd,"qhull ", 6)) {
-    fprintf (errfile, "qh_new_qhull: start qhull_cmd argument with \"qhull \"\n");
-    exit(1);
-  }
-  qh_initqhull_start (NULL, outfile, errfile);
-  trace1(( qh ferr, "qh_new_qhull: build new Qhull for %d %d-d points with %s\n", numpoints, dim, qhull_cmd));
-  exitcode = setjmp (qh errexit);
-  if (!exitcode)
-  {
-    qh NOerrexit = False;
-    qh_initflags (qhull_cmd);
-    if (qh DELAUNAY)
-      qh PROJECTdelaunay= True;
-    if (qh HALFspace) {
-      /* points is an array of halfspaces, 
-         the last coordinate of each halfspace is its offset */
-      hulldim= dim-1;
-      qh_setfeasible (hulldim); 
-      new_points= qh_sethalfspace_all (dim, numpoints, points, qh feasible_point);
-      new_ismalloc= True;
-      if (ismalloc)
-	free (points);
-    }else {
-      hulldim= dim;
-      new_points= points;
-      new_ismalloc= ismalloc;
-    }
-    qh_init_B (new_points, numpoints, hulldim, new_ismalloc);
-    qh_qhull();
-    qh_check_output();
-    if (outfile)
-      qh_produce_output(); 
-    if (qh VERIFYoutput && !qh STOPpoint && !qh STOPcone)
-      qh_check_points();
-  }
-  qh NOerrexit = True;
-  return exitcode;
-} /* new_qhull */
-
-/*-<a                             href="qh-user.htm#TOC"
-  >-------------------------------</a><a name="errexit">-</a>
-  
-  qh_errexit( exitcode, facet, ridge )
-    report and exit from an error
-    report facet and ridge if non-NULL
-    reports useful information such as last point processed
-    set qh.FORCEoutput to print neighborhood of facet
-
-  see: 
-    qh_errexit2() in qhull.c for printing 2 facets
-
-  design:
-    check for error within error processing
-    compute qh.hulltime
-    print facet and ridge (if any)
-    report commandString, options, qh.furthest_id
-    print summary and statistics (including precision statistics)
-    if qh_ERRsingular
-      print help text for singular data set
-    exit program via long jump (if defined) or exit()      
-*/
-void qh_errexit(int exitcode, facetT *facet, ridgeT *ridge) {
-
-  if (qh ERREXITcalled) {
-    fprintf (qh ferr, "\nqhull error while processing previous error.  Exit program\n");
-    exit(1);
-  }
-  qh ERREXITcalled= True;
-  if (!qh QHULLfinished)
-    qh hulltime= qh_CPUclock - qh hulltime;
-  qh_errprint("ERRONEOUS", facet, NULL, ridge, NULL);
-  fprintf (qh ferr, "\nWhile executing: %s | %s\n", qh rbox_command, qh qhull_command);
-  fprintf(qh ferr, "Options selected for Qhull %s:\n%s\n", qh_version, qh qhull_options);
-  if (qh furthest_id >= 0) {
-    fprintf(qh ferr, "Last point added to hull was p%d.", qh furthest_id);
-    if (zzval_(Ztotmerge))
-      fprintf(qh ferr, "  Last merge was #%d.", zzval_(Ztotmerge));
-    if (qh QHULLfinished)
-      fprintf(qh ferr, "\nQhull has finished constructing the hull.");
-    else if (qh POSTmerging)
-      fprintf(qh ferr, "\nQhull has started post-merging.");
-    fprintf (qh ferr, "\n");
-  }
-  if (qh FORCEoutput && (qh QHULLfinished || (!facet && !ridge)))
-    qh_produce_output();
-  else {
-    if (exitcode != qh_ERRsingular && zzval_(Zsetplane) > qh hull_dim+1) {
-      fprintf (qh ferr, "\nAt error exit:\n");
-      qh_printsummary (qh ferr);
-      if (qh PRINTstatistics) {
-	qh_collectstatistics();
-	qh_printstatistics(qh ferr, "at error exit");
-	qh_memstatistics (qh ferr);
-      }
-    }
-    if (qh PRINTprecision)
-      qh_printstats (qh ferr, qhstat precision, NULL);
-  }
-  if (!exitcode)
-    exitcode= qh_ERRqhull;
-  else if (exitcode == qh_ERRsingular)
-    qh_printhelp_singular(qh ferr);
-  else if (exitcode == qh_ERRprec && !qh PREmerge)
-    qh_printhelp_degenerate (qh ferr);
-  if (qh NOerrexit) {
-    fprintf (qh ferr, "qhull error while ending program.  Exit program\n");
-    exit(1);
-  }
-  qh NOerrexit= True;
-  longjmp(qh errexit, exitcode);
-} /* errexit */
-
-
-/*-<a                             href="qh-user.htm#TOC"
-  >-------------------------------</a><a name="errprint">-</a>
-  
-  qh_errprint( fp, string, atfacet, otherfacet, atridge, atvertex )
-    prints out the information of facets and ridges to fp
-    also prints neighbors and geomview output
-    
-  notes:
-    except for string, any parameter may be NULL
-*/
-void qh_errprint(char *string, facetT *atfacet, facetT *otherfacet, ridgeT *atridge, vertexT *atvertex) {
-  int i;
-
-  if (atfacet) {
-    fprintf(qh ferr, "%s FACET:\n", string);
-    qh_printfacet(qh ferr, atfacet);
-  }
-  if (otherfacet) {
-    fprintf(qh ferr, "%s OTHER FACET:\n", string);
-    qh_printfacet(qh ferr, otherfacet);
-  }
-  if (atridge) {
-    fprintf(qh ferr, "%s RIDGE:\n", string);
-    qh_printridge(qh ferr, atridge);
-    if (atridge->top && atridge->top != atfacet && atridge->top != otherfacet)
-      qh_printfacet(qh ferr, atridge->top);
-    if (atridge->bottom
-	&& atridge->bottom != atfacet && atridge->bottom != otherfacet)
-      qh_printfacet(qh ferr, atridge->bottom);
-    if (!atfacet)
-      atfacet= atridge->top;
-    if (!otherfacet)
-      otherfacet= otherfacet_(atridge, atfacet);
-  }
-  if (atvertex) {
-    fprintf(qh ferr, "%s VERTEX:\n", string);
-    qh_printvertex (qh ferr, atvertex);
-  }
-  if (qh fout && qh FORCEoutput && atfacet && !qh QHULLfinished && !qh IStracing) {
-    fprintf(qh ferr, "ERRONEOUS and NEIGHBORING FACETS to output\n");
-    for (i= 0; i < qh_PRINTEND; i++)  /* use fout for geomview output */
-      qh_printneighborhood (qh fout, qh PRINTout[i], atfacet, otherfacet,
-			    !qh_ALL);
-  }
-} /* errprint */
-
-
-/*-<a                             href="qh-user.htm#TOC"
-  >-------------------------------</a><a name="printfacetlist">-</a>
-  
-  qh_printfacetlist( fp, facetlist, facets, printall )
-    print all fields for a facet list and/or set of facets to fp
-    if !printall, 
-      only prints good facets
-
-  notes:
-    also prints all vertices
-*/
-void qh_printfacetlist(facetT *facetlist, setT *facets, boolT printall) {
-  facetT *facet, **facetp;
-
-  qh_printbegin (qh ferr, qh_PRINTfacets, facetlist, facets, printall);
-  FORALLfacet_(facetlist)
-    qh_printafacet(qh ferr, qh_PRINTfacets, facet, printall);
-  FOREACHfacet_(facets)
-    qh_printafacet(qh ferr, qh_PRINTfacets, facet, printall);
-  qh_printend (qh ferr, qh_PRINTfacets, facetlist, facets, printall);
-} /* printfacetlist */
-
-
-/*-<a                             href="qh-globa.htm#TOC"
-  >-------------------------------</a><a name="user_memsizes">-</a>
-  
-  qh_user_memsizes()
-    allocate up to 10 additional, quick allocation sizes
-
-  notes:
-    increase maximum number of allocations in qh_initqhull_mem()
-*/
-void qh_user_memsizes (void) {
-
-  /* qh_memsize (size); */
-} /* user_memsizes */
-
diff --git a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/user.h b/GraspPlanning/ExternalDependencies/qhull-2003.1/src/user.h
deleted file mode 100644
index 63ee9e5b77500cba8fbbc5ed2f4769d24b38d663..0000000000000000000000000000000000000000
--- a/GraspPlanning/ExternalDependencies/qhull-2003.1/src/user.h
+++ /dev/null
@@ -1,762 +0,0 @@
-/*<html><pre>  -<a                             href="qh-user.htm"
-  >-------------------------------</a><a name="TOP">-</a>
-
-   user.h
-   user redefinable constants
-
-   see qh-user.htm.  see COPYING for copyright information.
-
-   before reading any code, review qhull.h for data structure definitions and
-   the "qh" macro.
-*/
-
-#ifndef qhDEFuser
-#define qhDEFuser 1
-
-/*============= data types and configuration macros ==========*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="realT">-</a>
-
-  realT
-    set the size of floating point numbers
-
-  qh_REALdigits
-    maximimum number of significant digits
-
-  qh_REAL_1, qh_REAL_2n, qh_REAL_3n
-    format strings for printf
-
-  qh_REALmax, qh_REALmin
-    maximum and minimum (near zero) values
-
-  qh_REALepsilon
-    machine roundoff.  Maximum roundoff error for addition and multiplication.
-
-  notes:
-   Select whether to store floating point numbers in single precision (float)
-   or double precision (double).
-
-   Use 'float' to save about 8% in time and 25% in space.  This is particularly
-   help if high-d where convex hulls are space limited.  Using 'float' also
-   reduces the printed size of Qhull's output since numbers have 8 digits of
-   precision.
-
-   Use 'double' when greater arithmetic precision is needed.  This is needed
-   for Delaunay triangulations and Voronoi diagrams when you are not merging
-   facets.
-
-   If 'double' gives insufficient precision, your data probably includes
-   degeneracies.  If so you should use facet merging (done by default)
-   or exact arithmetic (see imprecision section of manual, qh-impre.htm).
-   You may also use option 'Po' to force output despite precision errors.
-
-   You may use 'long double', but many format statements need to be changed
-   and you may need a 'long double' square root routine.  S. Grundmann
-   (sg@eeiwzb.et.tu-dresden.de) has done this.  He reports that the code runs
-   much slower with little gain in precision.
-
-   WARNING: on some machines,    int f(){realT a= REALmax;return (a == REALmax);}
-      returns False.  Use (a > REALmax/2) instead of (a == REALmax).
-
-   REALfloat =   1      all numbers are 'float' type
-             =   0      all numbers are 'double' type
-*/
-#define REALfloat 0
-
-#if (REALfloat == 1)
-#define realT float
-#define REALmax FLT_MAX
-#define REALmin FLT_MIN
-#define REALepsilon FLT_EPSILON
-#define qh_REALdigits 8   /* maximum number of significant digits */
-#define qh_REAL_1 "%6.8g "
-#define qh_REAL_2n "%6.8g %6.8g\n"
-#define qh_REAL_3n "%6.8g %6.8g %6.8g\n"
-
-#elif (REALfloat == 0)
-#define realT double
-#define REALmax DBL_MAX
-#define REALmin DBL_MIN
-#define REALepsilon DBL_EPSILON
-#define qh_REALdigits 16    /* maximum number of significant digits */
-#define qh_REAL_1 "%6.16g "
-#define qh_REAL_2n "%6.16g %6.16g\n"
-#define qh_REAL_3n "%6.16g %6.16g %6.16g\n"
-
-#else
-#error unknown float option
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="CPUclock">-</a>
-
-  qh_CPUclock
-    define the clock() function for reporting the total time spent by Qhull
-    returns CPU ticks as a 'long int'
-    qh_CPUclock is only used for reporting the total time spent by Qhull
-
-  qh_SECticks
-    the number of clock ticks per second
-
-  notes:
-    looks for CLOCKS_PER_SEC, CLOCKS_PER_SECOND, or assumes microseconds
-    to define a custom clock, set qh_CLOCKtype to 0
-
-    if your system does not use clock() to return CPU ticks, replace
-    qh_CPUclock with the corresponding function.  It is converted
-    to unsigned long to prevent wrap-around during long runs.
-
-
-   Set qh_CLOCKtype to
-
-     1      for CLOCKS_PER_SEC, CLOCKS_PER_SECOND, or microsecond
-                Note:  may fail if more than 1 hour elapsed time
-
-     2      use qh_clock() with POSIX times() (see global.c)
-*/
-#define qh_CLOCKtype 1  /* change to the desired number */
-
-#if (qh_CLOCKtype == 1)
-
-#if defined (CLOCKS_PER_SECOND)
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks CLOCKS_PER_SECOND
-
-#elif defined (CLOCKS_PER_SEC)
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks CLOCKS_PER_SEC
-
-#elif defined (CLK_TCK)
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks CLK_TCK
-
-#else
-#define qh_CPUclock    ((unsigned long)clock())  /* return CPU clock */
-#define qh_SECticks 1E6
-#endif
-
-#elif (qh_CLOCKtype == 2)
-#define qh_CPUclock    qh_clock()  /* return CPU clock */
-#define qh_SECticks 100
-
-#else /* qh_CLOCKtype == ? */
-#error unknown clock option
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="RANDOM">-</a>
-
-  qh_RANDOMtype, qh_RANDOMmax, qh_RANDOMseed
-    define random number generator
-
-    qh_RANDOMint generates a random integer between 0 and qh_RANDOMmax.
-    qh_RANDOMseed sets the random number seed for qh_RANDOMint
-
-  Set qh_RANDOMtype (default 5) to:
-    1       for random() with 31 bits (UCB)
-    2       for rand() with RAND_MAX or 15 bits (system 5)
-    3       for rand() with 31 bits (Sun)
-    4       for lrand48() with 31 bits (Solaris)
-    5       for qh_rand() with 31 bits (included with Qhull)
-
-  notes:
-    Random numbers are used by rbox to generate point sets.  Random
-    numbers are used by Qhull to rotate the input ('QRn' option),
-    simulate a randomized algorithm ('Qr' option), and to simulate
-    roundoff errors ('Rn' option).
-
-    Random number generators differ between systems.  Most systems provide
-    rand() but the period varies.  The period of rand() is not critical
-    since qhull does not normally use random numbers.
-
-    The default generator is Park & Miller's minimal standard random
-    number generator [CACM 31:1195 '88].  It is included with Qhull.
-
-    If qh_RANDOMmax is wrong, qhull will report a warning and Geomview
-    output will likely be invisible.
-*/
-#define qh_RANDOMtype 5   /* *** change to the desired number *** */
-
-#if (qh_RANDOMtype == 1)
-#define qh_RANDOMmax ((realT)0x7fffffffUL)  /* 31 bits, random()/MAX */
-#define qh_RANDOMint random()
-#define qh_RANDOMseed_(seed) srandom(seed);
-
-#elif (qh_RANDOMtype == 2)
-#ifdef RAND_MAX
-#define qh_RANDOMmax ((realT)RAND_MAX)
-#else
-#define qh_RANDOMmax ((realT)32767)   /* 15 bits (System 5) */
-#endif
-#define qh_RANDOMint  rand()
-#define qh_RANDOMseed_(seed) srand((unsigned)seed);
-
-#elif (qh_RANDOMtype == 3)
-#define qh_RANDOMmax ((realT)0x7fffffffUL)  /* 31 bits, Sun */
-#define qh_RANDOMint  rand()
-#define qh_RANDOMseed_(seed) srand((unsigned)seed);
-
-#elif (qh_RANDOMtype == 4)
-#define qh_RANDOMmax ((realT)0x7fffffffUL)  /* 31 bits, lrand38()/MAX */
-#define qh_RANDOMint lrand48()
-#define qh_RANDOMseed_(seed) srand48(seed);
-
-#elif (qh_RANDOMtype == 5)
-#define qh_RANDOMmax ((realT)2147483646UL)  /* 31 bits, qh_rand/MAX */
-#define qh_RANDOMint qh_rand()
-#define qh_RANDOMseed_(seed) qh_srand(seed);
-/* unlike rand(), never returns 0 */
-
-#else
-#error: unknown random option
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="ORIENTclock">-</a>
-
-  qh_ORIENTclock
-    0 for inward pointing normals by Geomview convention
-*/
-#define qh_ORIENTclock 0
-
-
-/*========= performance related constants =========*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="HASHfactor">-</a>
-
-  qh_HASHfactor
-    total hash slots / used hash slots.  Must be at least 1.1.
-
-  notes:
-    =2 for at worst 50% occupancy for qh hash_table and normally 25% occupancy
-*/
-#define qh_HASHfactor 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="VERIFYdirect">-</a>
-
-  qh_VERIFYdirect
-    with 'Tv' verify all points against all facets if op count is smaller
-
-  notes:
-    if greater, calls qh_check_bestdist() instead
-*/
-#define qh_VERIFYdirect 1000000
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="INITIALsearch">-</a>
-
-  qh_INITIALsearch
-     if qh_INITIALmax, search points up to this dimension
-*/
-#define qh_INITIALsearch 6
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="INITIALmax">-</a>
-
-  qh_INITIALmax
-    if dim >= qh_INITIALmax, use min/max coordinate points for initial simplex
-
-  notes:
-    from points with non-zero determinants
-    use option 'Qs' to override (much slower)
-*/
-#define qh_INITIALmax 8
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEdefault">-</a>
-
-  qh_JOGGLEdefault
-    default qh.JOGGLEmax is qh.DISTround * qh_JOGGLEdefault
-
-  notes:
-    rbox s r 100 | qhull QJ1e-15 QR0 generates 90% faults at distround 7e-16
-    rbox s r 100 | qhull QJ1e-14 QR0 generates 70% faults
-    rbox s r 100 | qhull QJ1e-13 QR0 generates 35% faults
-    rbox s r 100 | qhull QJ1e-12 QR0 generates 8% faults
-    rbox s r 100 | qhull QJ1e-11 QR0 generates 1% faults
-    rbox s r 100 | qhull QJ1e-10 QR0 generates 0% faults
-    rbox 1000 W0 | qhull QJ1e-12 QR0 generates 86% faults
-    rbox 1000 W0 | qhull QJ1e-11 QR0 generates 20% faults
-    rbox 1000 W0 | qhull QJ1e-10 QR0 generates 2% faults
-    the later have about 20 points per facet, each of which may interfere
-
-    pick a value large enough to avoid retries on most inputs
-*/
-#define qh_JOGGLEdefault 30000.0
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEincrease">-</a>
-
-  qh_JOGGLEincrease
-    factor to increase qh.JOGGLEmax on qh_JOGGLEretry or qh_JOGGLEagain
-*/
-#define qh_JOGGLEincrease 10.0
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEretry">-</a>
-
-  qh_JOGGLEretry
-    if ZZretry = qh_JOGGLEretry, increase qh.JOGGLEmax
-
-  notes:
-    try twice at the original value in case of bad luck the first time
-*/
-#define qh_JOGGLEretry 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEagain">-</a>
-
-  qh_JOGGLEagain
-    every following qh_JOGGLEagain, increase qh.JOGGLEmax
-
-  notes:
-    1 is OK since it's already failed qh_JOGGLEretry times
-*/
-#define qh_JOGGLEagain 1
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEmaxincrease">-</a>
-
-  qh_JOGGLEmaxincrease
-    maximum qh.JOGGLEmax due to qh_JOGGLEincrease
-    relative to qh.MAXwidth
-
-  notes:
-    qh.joggleinput will retry at this value until qh_JOGGLEmaxretry
-*/
-#define qh_JOGGLEmaxincrease 1e-2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="JOGGLEmaxretry">-</a>
-
-  qh_JOGGLEmaxretry
-    stop after qh_JOGGLEmaxretry attempts
-*/
-#define qh_JOGGLEmaxretry 100
-
-/*========= memory constants =========*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MEMalign">-</a>
-
-  qh_MEMalign
-    memory alignment for qh_meminitbuffers() in global.c
-
-  notes:
-    to avoid bus errors, memory allocation must consider alignment requirements.
-    malloc() automatically takes care of alignment.   Since mem.c manages
-    its own memory, we need to explicitly specify alignment in
-    qh_meminitbuffers().
-
-    A safe choice is sizeof(double).  sizeof(float) may be used if doubles
-    do not occur in data structures and pointers are the same size.  Be careful
-    of machines (e.g., DEC Alpha) with large pointers.
-
-    If using gcc, best alignment is
-              #define qh_MEMalign fmax_(__alignof__(realT),__alignof__(void *))
-*/
-#define qh_MEMalign fmax_(sizeof(realT), sizeof(void *))
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MEMbufsize">-</a>
-
-  qh_MEMbufsize
-    size of additional memory buffers
-
-  notes:
-    used for qh_meminitbuffers() in global.c
-*/
-#define qh_MEMbufsize 0x10000       /* allocate 64K memory buffers */
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MEMinitbuf">-</a>
-
-  qh_MEMinitbuf
-    size of initial memory buffer
-
-  notes:
-    use for qh_meminitbuffers() in global.c
-*/
-#define qh_MEMinitbuf 0x20000      /* initially allocate 128K buffer */
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="INFINITE">-</a>
-
-  qh_INFINITE
-    on output, indicates Voronoi center at infinity
-*/
-#define qh_INFINITE  -10.101
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DEFAULTbox">-</a>
-
-  qh_DEFAULTbox
-    default box size (Geomview expects 0.5)
-*/
-#define qh_DEFAULTbox 0.5
-
-/*======= conditional compilation ============================*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="compiler">-</a>
-
-  __cplusplus
-    defined by C++ compilers
-
-  __MSC_VER
-    defined by Microsoft Visual C++
-
-  __MWERKS__ && __POWERPC__
-    defined by Metrowerks when compiling for the Power Macintosh
-
-  __STDC__
-    defined for strict ANSI C
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="COMPUTEfurthest">-</a>
-
-  qh_COMPUTEfurthest
-    compute furthest distance to an outside point instead of storing it with the facet
-    =1 to compute furthest
-
-  notes:
-    computing furthest saves memory but costs time
-      about 40% more distance tests for partitioning
-      removes facet->furthestdist
-*/
-#define qh_COMPUTEfurthest 0
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="KEEPstatistics">-</a>
-
-  qh_KEEPstatistics
-    =0 removes most of statistic gathering and reporting
-
-  notes:
-    if 0, code size is reduced by about 4%.
-*/
-#define qh_KEEPstatistics 1
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXoutside">-</a>
-
-  qh_MAXoutside
-    record outer plane for each facet
-    =1 to record facet->maxoutside
-
-  notes:
-    this takes a realT per facet and slightly slows down qhull
-    it produces better outer planes for geomview output
-*/
-#define qh_MAXoutside 1
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="NOmerge">-</a>
-
-  qh_NOmerge
-    disables facet merging if defined
-
-  notes:
-    This saves about 10% space.
-
-    Unless 'Q0'
-      qh_NOmerge sets 'QJ' to avoid precision errors
-
-    #define qh_NOmerge
-
-  see:
-    <a href="mem.h#NOmem">qh_NOmem</a> in mem.c
-
-    see user.c/user_eg.c for removing io.o
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="NOtrace">-</a>
-
-  qh_NOtrace
-    no tracing if defined
-
-  notes:
-    This saves about 5% space.
-
-    #define qh_NOtrace
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="QHpointer">-</a>
-
-  qh_QHpointer
-    access global data with pointer or static structure
-
-  qh_QHpointer  = 1     access globals via a pointer to allocated memory
-                        enables qh_saveqhull() and qh_restoreqhull()
-            costs about 8% in time and 2% in space
-
-        = 0     qh_qh and qh_qhstat are static data structures
-                only one instance of qhull() can be active at a time
-            default value
-
-  notes:
-    all global variables for qhull are in qh, qhmem, and qhstat
-    qh is defined in qhull.h
-    qhmem is defined in mem.h
-    qhstat is defined in stat.h
-
-  see:
-    user_eg.c for an example
-*/
-#define qh_QHpointer 0
-#if 0  /* sample code */
-qhT* oldqhA, *oldqhB;
-
-exitcode = qh_new_qhull(dim, numpoints, points, ismalloc,
-                        flags, outfile, errfile);
-/* use results from first call to qh_new_qhull */
-oldqhA = qh_save_qhull();
-exitcode = qh_new_qhull(dimB, numpointsB, pointsB, ismalloc,
-                        flags, outfile, errfile);
-/* use results from second call to qh_new_qhull */
-oldqhB = qh_save_qhull();
-qh_restore_qhull(&oldqhA);
-/* use results from first call to qh_new_qhull */
-qh_freeqhull(qh_ALL);   /* frees all memory used by first call */
-qh_restore_qhull(&oldqhB);
-/* use results from second call to qh_new_qhull */
-qh_freeqhull(!qh_ALL);  /* frees long memory used by second call */
-qh_memfreeshort(&curlong, &totlong);   /* frees short memory and memory allocator */
-#endif
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="QUICKhelp">-</a>
-
-  qh_QUICKhelp
-    =1 to use abbreviated help messages, e.g., for degenerate inputs
-*/
-#define qh_QUICKhelp    0
-
-/* ============ -merge constants- ====================
-
-   These constants effect facet merging.  You probably will not need
-   to modify these.  They effect the performance of facet merging.
-*/
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DIMmergeVertex">-</a>
-
-  qh_DIMmergeVertex
-    max dimension for vertex merging (it is not effective in high-d)
-*/
-#define qh_DIMmergeVertex 6
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DIMreduceBuild">-</a>
-
-  qh_DIMreduceBuild
-     max dimension for vertex reduction during build (slow in high-d)
-*/
-#define qh_DIMreduceBuild 5
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="BESTcentrum">-</a>
-
-  qh_BESTcentrum
-     if > 2*dim+n vertices, qh_findbestneighbor() tests centrums (faster)
-     else, qh_findbestneighbor() tests all vertices (much better merges)
-
-  qh_BESTcentrum2
-     if qh_BESTcentrum2 * DIM3 + BESTcentrum < #vertices tests centrums
-*/
-#define qh_BESTcentrum 20
-#define qh_BESTcentrum2 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="BESTnonconvex">-</a>
-
-  qh_BESTnonconvex
-    if > dim+n neighbors, qh_findbestneighbor() tests nonconvex ridges.
-
-  notes:
-    It is needed because qh_findbestneighbor is slow for large facets
-*/
-#define qh_BESTnonconvex 15
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXnewmerges">-</a>
-
-  qh_MAXnewmerges
-    if >n newmerges, qh_merge_nonconvex() calls qh_reducevertices_centrums.
-
-  notes:
-    It is needed because postmerge can merge many facets at once
-*/
-#define qh_MAXnewmerges 2
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXnewcentrum">-</a>
-
-  qh_MAXnewcentrum
-    if <= dim+n vertices (n approximates the number of merges),
-      reset the centrum in qh_updatetested() and qh_mergecycle_facets()
-
-  notes:
-    needed to reduce cost and because centrums may move too much if
-    many vertices in high-d
-*/
-#define qh_MAXnewcentrum 5
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="COPLANARratio">-</a>
-
-  qh_COPLANARratio
-    for 3-d+ merging, qh.MINvisible is n*premerge_centrum
-
-  notes:
-    for non-merging, it's DISTround
-*/
-#define qh_COPLANARratio 3
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="DISToutside">-</a>
-
-  qh_DISToutside
-    When is a point clearly outside of a facet?
-    Stops search in qh_findbestnew or qh_partitionall
-    qh_findbest uses qh.MINoutside since since it is only called if no merges.
-
-  notes:
-    'Qf' always searches for best facet
-    if !qh.MERGING, same as qh.MINoutside.
-    if qh_USEfindbestnew, increase value since neighboring facets may be ill-behaved
-      [Note: Zdelvertextot occurs normally with interior points]
-            RBOX 1000 s Z1 G1e-13 t1001188774 | QHULL Tv
-    When there is a sharp edge, need to move points to a
-    clearly good facet; otherwise may be lost in another partitioning.
-    if too big then O(n^2) behavior for partitioning in cone
-    if very small then important points not processed
-    Needed in qh_partitionall for
-      RBOX 1000 s Z1 G1e-13 t1001032651 | QHULL Tv
-    Needed in qh_findbestnew for many instances of
-      RBOX 1000 s Z1 G1e-13 t | QHULL Tv
-
-  See:
-    qh_DISToutside -- when is a point clearly outside of a facet
-    qh_SEARCHdist -- when is facet coplanar with the best facet?
-    qh_USEfindbestnew -- when to use qh_findbestnew for qh_partitionpoint()
-*/
-#define qh_DISToutside ((qh_USEfindbestnew ? 2 : 1) * \
-                        fmax_((qh MERGING ? 2 : 1)*qh MINoutside, qh max_outside))
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="RATIOnearinside">-</a>
-
-  qh_RATIOnearinside
-    ratio of qh.NEARinside to qh.ONEmerge for retaining inside points for
-    qh_check_maxout().
-
-  notes:
-    This is overkill since do not know the correct value.
-    It effects whether 'Qc' reports all coplanar points
-    Not used for 'd' since non-extreme points are coplanar
-*/
-#define qh_RATIOnearinside 5
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="SEARCHdist">-</a>
-
-  qh_SEARCHdist
-    When is a facet coplanar with the best facet?
-    qh_findbesthorizon: all coplanar facets of the best facet need to be searched.
-
-  See:
-    qh_DISToutside -- when is a point clearly outside of a facet
-    qh_SEARCHdist -- when is facet coplanar with the best facet?
-    qh_USEfindbestnew -- when to use qh_findbestnew for qh_partitionpoint()
-*/
-#define qh_SEARCHdist ((qh_USEfindbestnew ? 2 : 1) * \
-                       (qh max_outside + 2 * qh DISTround + fmax_( qh MINvisible, qh MAXcoplanar)));
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="USEfindbestnew">-</a>
-
-  qh_USEfindbestnew
-     Always use qh_findbestnew for qh_partitionpoint, otherwise use
-     qh_findbestnew if merged new facet or sharpnewfacets.
-
-  See:
-    qh_DISToutside -- when is a point clearly outside of a facet
-    qh_SEARCHdist -- when is facet coplanar with the best facet?
-    qh_USEfindbestnew -- when to use qh_findbestnew for qh_partitionpoint()
-*/
-#define qh_USEfindbestnew (zzval_(Ztotmerge) > 50)
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="WIDEcoplanar">-</a>
-
-  qh_WIDEcoplanar
-    n*MAXcoplanar or n*MINvisible for a WIDEfacet
-
-    if vertex is further than qh.WIDEfacet from the hyperplane
-    then its ridges are not counted in computing the area, and
-    the facet's centrum is frozen.
-
-  notes:
-   qh.WIDEfacet= max(qh.MAXoutside,qh_WIDEcoplanar*qh.MAXcoplanar,
-      qh_WIDEcoplanar * qh.MINvisible);
-*/
-#define qh_WIDEcoplanar 6
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="MAXnarrow">-</a>
-
-  qh_MAXnarrow
-    max. cosine in initial hull that sets qh.NARROWhull
-
-  notes:
-    If qh.NARROWhull, the initial partition does not make
-    coplanar points.  If narrow, a coplanar point can be
-    coplanar to two facets of opposite orientations and
-    distant from the exact convex hull.
-
-    Conservative estimate.  Don't actually see problems until it is -1.0
-*/
-#define qh_MAXnarrow -0.99999999
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="WARNnarrow">-</a>
-
-  qh_WARNnarrow
-    max. cosine in initial hull to warn about qh.NARROWhull
-
-  notes:
-    this is a conservative estimate.
-    Don't actually see problems until it is -1.0.  See qh-impre.htm
-*/
-#define qh_WARNnarrow -0.999999999999999
-
-/*-<a                             href="qh-user.htm#TOC"
-  >--------------------------------</a><a name="ZEROdelaunay">-</a>
-
-  qh_ZEROdelaunay
-    a zero Delaunay facet occurs for input sites coplanar with their convex hull
-    the last normal coefficient of a zero Delaunay facet is within
-        qh_ZEROdelaunay * qh.ANGLEround of 0
-
-  notes:
-    qh_ZEROdelaunay does not allow for joggled input ('QJ').
-
-    You can avoid zero Delaunay facets by surrounding the input with a box.
-
-    Use option 'PDk:-n' to explicitly define zero Delaunay facets
-      k= dimension of input sites (e.g., 3 for 3-d Delaunay triangulation)
-      n= the cutoff for zero Delaunay facets (e.g., 'PD3:-1e-12')
-*/
-#define qh_ZEROdelaunay 2
-
-#endif /* qh_DEFuser */
-
-
-