Skip to content
Tags give the ability to mark specific points in history as being important
  • v8.0.1
    Qhull 8.0.1 (2020.2 2020/07/24)
    
    C++ interface
    - Removed Java-style iterators for Coordinates and PointCoordinates.
      std::vector has an expensive copy constructor and copy assignment, and
      a pointer to std::vector is vulnerable to mysterious overwrites (e.g., deleting
      a returned value and reusing its memory).  Qt's 'foreach' should not be used for
      Coordinates and PointCoordinates.  It copies std::vector
    - QHULL_DECLARE_SEQUENTIAL_ITERATOR: allow temporary results
      The Jave-style iterator copies the container.  Same as Qt's Q_DECLARE_SEQUENTIAL_ITERATOR
    - QhullHyperplaneIterator,QhullPointIterator,QhullPointsIterator: allow temporary results
      These Java-style iterators copy the container instead of pointing to the container
    - QhullLinkedListIterator,QhullFacetListIterator,QhullVertexListIterator: allow temporary results
      These Java-style iterators copy the container instead of pointing to the container
    - QhullSetIterator,QhullFacetSetIterator,QhullPointSetIterator,QhullVertexSetIterator: add documentation about temporary results
      These Java-style iterators have always copied the container
    - QhullUser.h, user_eg3_r.cpp: Removed C++11 dependencies [G. Romualdi, S. Grein #65, #66,#67]
      QhullUser.cpp: Use intptr_t to avoid C++11 dependencies  [S. Grein, Spacelm #68]
    - QhullVertex.cpp: moved the copy constructor to the code file.  It was inline.
    
    Testing and example programs
    - user_eg3_r.cpp: Renamed 'inputSites' to 'voronoiRegions' in qvoronoi_o/qvoronoi_pfn [M. Konecny #72]
    - user_eg3_r.cpp: Replaced C++11's range-based for loops with Qhull's Java-style iterators
    - qh-code.html: Updated qhullcpp code example [M. Konecny #71]
    - QhullFacet_test.cpp: fixed hyperplane epsilon test in t_getSet. The epsilon due to rotation is unknown.
    - Qhull*List_test.cpp,Qhull*Set_test.cpp,QhullRidge_test,QhullVertex_test: test Qt's 'foreach' in t_foreach
    - Qhull*List_test.cpp,Qhull*Set_test.cpp,QhullRidge_test,QhullVertex_test: test C++11 range for in t_foreach
    - Qhull*List_test.cpp,Qhull*Set_test.cpp: test Java-style iterator in t_java_iterator
    - Coordinates_test.cpp,PointCoordinates_test.cpp,QhullHyperplane_test.cpp,QhullPoint_test.cpp,QhullPoints_test.cpp,RboxPoints_test.cpp
      test C++11 range for, Qt's 'foreach', and Java-style iterators (if available)
    
    Builds
    - README.txt: Fixed "cmake -G" for "Installing Qhull with CMake"
    - README.txt: Added a note on 'make install' to "Installing Qhull on Unix"
    - README.txt: Added 'make test' to "Installing Qhull on Unix"
    - README.txt: Added 'ctest' to "Installing Qhull with CMake"
    - README.txt: Added pkg-config notes to "Installing Qhull with CMake"
    - README.txt: Added usage notes for Windows to "Installing Qhull with CMake"
    - README.txt: Added instructions for downloading MinGW-W64-install.exe
    - build/qhull_p.pc.in,qhull_r.pc.in: Delete obsolete files [T. Roehling #63]
    - build/qhull.pc.in: move qhull.pc.in into the build/ directory [T. Roehling #63]
    
    Documentation
    - qh-code.htm, qhull-news.html: Add Toronto and McCarthy, "Practically accurate floating-point math".
    
  • 2020.1
    Qhull 2020.1 2020/05/29 (8.0.0)
    
    Bugs fixed
    - QhullLinkedList::const_iterator: Fixed operator->() for T*.  It returned &i [J. Mirabel 5/1/2020 #61]
    
    API changes
    - RoadError.cpp: stringGlobalLog returns std::string instead of const char* [M. Gehre #46]
    - io_r.c/qh_order_vertexneighbors: order facet neighbors of a vertex by 2-d (orientation), 3-d (adjacency), n-d (f.visitid,id) [I. Gardner]
    - poly2_r.c/qh_nextfacet2d: Return next facet and vertex in qh_ORIENTclock order [N. Katzakis #54]
    
    C++ interface
    - Qhull.cpp: Add isDelaunay().  True if computing Delaunay or Voronoi regions
      Add prepareVoronoi() for Voronoi output.  See user_eg3_r.cpp for examples
      ~Qhull: Change 'Qhull output at end' to 'Qhull messages at ~Qhull()'
    - QhullFacet.cpp: Add visitId() for f.visitid.  Needed for Voronoi output
      Add nextFacet2d(): Iterate 2-d facets and vertices in counter-clockwise order [N. Katzakis #54]
      Add setFacetT()
    - QhullRidge.cpp: Add setRidgeT() and qh()
    - QhullUser.cpp: Add a user-modifiable interface to Qhull using a custom qh_fprintf
      Enhanced qh_fprintf with qhull-2019.1 updates to userprintf_r
         Option 'Ta' prefixes output with message code, [QHnnnn]
         Option 'Tf' flushes the output after each message, for tracing segfaults
         Errors and high-level trace messages prefixed with QHnnnn
         Debugging traps for qh.tracefacet, qh.traceridge, qh.tracevertex
    - QhullVertex.cpp: Add setVertexT()
    - QhullQh.cpp: moved qh_fprintf to QhullUser
    - RoadLogEvent::toString: do not prepend QHnnnn if format_string starts with QHn or [QHn
    - RboxPoints::appendPoints: use current dimension instead of throwing an error
    - user_eg3 rbox: set dimension for multiple options (e.g., user_eg3 rbox D4 5 qhull)
    - user_eg3 eg-convex: a 3-d convex hull using the C++ interface to Qhull [I. Voutchkov]
    - user_eg3 eg-delaunay: a 2-d Delaunay triangulation using the C++ interface to Qhull
    - user_eg3 eg-voronoi: a 2-d Voronoi diagram using the C++ interface to Qhull
    - user_eg3 eg-fifo: hyperplanes separating Voronoi regions via QhullUser and qh_fprintf
    
    Documentation
    - index.htm: Add Teillaud's http://www.computational-geometry.org/
    - index.htm: Add When to use Qhull and Performance of Qhull to the Qhull Manual
    - html/qconvex.htm: Add orientation for options 'i', 'Fx', and 'o'
      qconvex .: keep the option prompt to five columns
    - html/qdelaun.htm: qh_findbestfacet may return an adjacent facet for a point
    - html/qhalf.htm,qh-optf.htm,qh-opto.htm: Added notes for options to halfspaces, e.g., 'Fp' and -10.101 [E. Huang #53]
    - html/qhalf.htm,qhalf.c,qhalf_r.c,qh-optf.htm: Fix documentation for 'qhalf FN'.  The output includes all halfspaces.
    - html/qvoronoi.htm,qvoron_f.htm: Fix link for control option, 'TI file'
    - html/qvoronoi.htm,qvoron_f.htm, qh-optf: the hyperplanes for 'Fi' and 'Fo' include the first vertex
      Option 'Fo' uses the midpoint in place of the vertex at infinity.
    - html/qh-optf.htm: Voronoi options 'Fi' and 'Fo' orient the hyperplane so that the site is below the hyperplane
    - html/qh-optf.htm,qh-optt.htm: Voronoi option 'Fo' does not check the hyperplane with 'Tv'
      The hyperplane check for 'Fi Tv' uses the midpoint, which 'Fo' already used in place of infinity
    - README.txt/Windows install: install Git for Windows in C:\Git\ instead of Program Files
      README.txt/Unix install: add options for 32-bit builds w/o -fpic
      README.txt,Makefile: link libqhullcpp before libqhull_r
    - COPYING.txt: Add a note to COPYING.txt about C.B. Barber [M. Pryczek]
    - libqhull/DEPRECATED.txt: Add link to qh-code.htm#convert
    - Qhull::vertexList: ordered by qh.vertex_list, not by adjacency [N. Katzakis #54]
    - QhullPoints.cpp/extraCoordinatesCount: must be less than point_dimension (-Wconversion)
    - QhullPoints.cpp/indexOf: extra must be less than point_dimension (-Wconversion)
    - io_r.c/qh_detvnorm: add note that qh_sethyperplane_gauss returns nearzero for axis-parallel hyperplanes
    - user_r.h/qh_CPUclock: may be converted to approximate double (-Wconversion)
    - Update copyright to 2020
    
    Build
    - Increase SOVERSION to 8.0 due to ABI breakage in 2019.1 [T. Roehling #58]
      Change SOVERSION to major.minor due to Qhull's global data structure qhT [T. Roehling #58]
      Add symbolic link from SONAME_EXT to libqhull_r [T. Roehling #58]
      Add SO and SONAME_EXT to 'make help'
    - qhull.pc.in: Added for pkg-config support [T. Roehling #60]
    - CMakeLists.txt: Add pkg-config support and change *_INSTALL_DIR to relative paths [T. Roehling #60]
      Change CMAKE_SOURCE_DIR to CMAKE_CURRENT_SOURCE_DIR to allow qhull as a subdirectory [Morwenn #53, A. De #59, A. Maloney, futex]
    - Makefile:
      Add pkg-support [T. Roehling #63]
      Renamed $DESTDIR as $PREFIX to conform with GNU Makefile standards [T. Roehling #63]
      $DESTDIR is for staged installs as defined by GNU Makefile standards [T. Roehling #63]
      Commented out M32=-m32 despite memory savings. It caused build failures, e.g., Mac [J. Hollowed]
      '-fpic' is required for linking to shared libraries [T. Roehling #63]
      Replaced -fpic with FPIC=-fpic for gcc builds
      Added FPIC to CXX_OPTS1 (same as CMakeLists.txt for libqhullcpp)
      Use 'FPIC=' to disable -fpic (may be faster for 32-bit builds on 64-bit hosts)
      Extract qhull_VERSION and qhull_SOVERSION from CMakeLists.txt [T. Roehling #63]
      Move the -lm linker flag to the end of the linker command [T. Roehling #63]
      Add QhullVertexSet.h to LIBQHULLCPP_HDRS
      Invoke q_test via bash to avoid "eg not a valid command"
    - Add build/*vcxproj to Unix distribution
    
    Testing and other changes
    - q_test: Add list of executables via 'which'
      Add tests of user_eg3 with each option and use case
      Add "Testing done" notification
      Add "set +v" for echoes
    - qhull-zip.sh: Add early check for 32-bit release build and modified files
      Add link checks for options
      Add findf for identifying files for link checks
      Add prompts for web.archive and md5sum in qh-get.htm
    
  • v8.0.0
    Qhull 2020.1 2020/05/29 (8.0.0)
    
    Bugs fixed
    - QhullLinkedList::const_iterator: Fixed operator->() for T*.  It returned &i [J. Mirabel 5/1/2020 #61]
    
    API changes
    - RoadError.cpp: stringGlobalLog returns std::string instead of const char* [M. Gehre #46]
    - io_r.c/qh_order_vertexneighbors: order facet neighbors of a vertex by 2-d (orientation), 3-d (adjacency), n-d (f.visitid,id) [I. Gardner]
    - poly2_r.c/qh_nextfacet2d: Return next facet and vertex in qh_ORIENTclock order [N. Katzakis #54]
    
    C++ interface
    - Qhull.cpp: Add isDelaunay().  True if computing Delaunay or Voronoi regions
      Add prepareVoronoi() for Voronoi output.  See user_eg3_r.cpp for examples
      ~Qhull: Change 'Qhull output at end' to 'Qhull messages at ~Qhull()'
    - QhullFacet.cpp: Add visitId() for f.visitid.  Needed for Voronoi output
      Add nextFacet2d(): Iterate 2-d facets and vertices in counter-clockwise order [N. Katzakis #54]
      Add setFacetT()
    - QhullRidge.cpp: Add setRidgeT() and qh()
    - QhullUser.cpp: Add a user-modifiable interface to Qhull using a custom qh_fprintf
      Enhanced qh_fprintf with qhull-2019.1 updates to userprintf_r
         Option 'Ta' prefixes output with message code, [QHnnnn]
         Option 'Tf' flushes the output after each message, for tracing segfaults
         Errors and high-level trace messages prefixed with QHnnnn
         Debugging traps for qh.tracefacet, qh.traceridge, qh.tracevertex
    - QhullVertex.cpp: Add setVertexT()
    - QhullQh.cpp: moved qh_fprintf to QhullUser
    - RoadLogEvent::toString: do not prepend QHnnnn if format_string starts with QHn or [QHn
    - RboxPoints::appendPoints: use current dimension instead of throwing an error
    - user_eg3 rbox: set dimension for multiple options (e.g., user_eg3 rbox D4 5 qhull)
    - user_eg3 eg-convex: a 3-d convex hull using the C++ interface to Qhull [I. Voutchkov]
    - user_eg3 eg-delaunay: a 2-d Delaunay triangulation using the C++ interface to Qhull
    - user_eg3 eg-voronoi: a 2-d Voronoi diagram using the C++ interface to Qhull
    - user_eg3 eg-fifo: hyperplanes separating Voronoi regions via QhullUser and qh_fprintf
    
    Documentation
    - index.htm: Add Teillaud's http://www.computational-geometry.org/
    - index.htm: Add When to use Qhull and Performance of Qhull to the Qhull Manual
    - html/qconvex.htm: Add orientation for options 'i', 'Fx', and 'o'
      qconvex .: keep the option prompt to five columns
    - html/qdelaun.htm: qh_findbestfacet may return an adjacent facet for a point
    - html/qhalf.htm,qh-optf.htm,qh-opto.htm: Added notes for options to halfspaces, e.g., 'Fp' and -10.101 [E. Huang #53]
    - html/qhalf.htm,qhalf.c,qhalf_r.c,qh-optf.htm: Fix documentation for 'qhalf FN'.  The output includes all halfspaces.
    - html/qvoronoi.htm,qvoron_f.htm: Fix link for control option, 'TI file'
    - html/qvoronoi.htm,qvoron_f.htm, qh-optf: the hyperplanes for 'Fi' and 'Fo' include the first vertex
      Option 'Fo' uses the midpoint in place of the vertex at infinity.
    - html/qh-optf.htm: Voronoi options 'Fi' and 'Fo' orient the hyperplane so that the site is below the hyperplane
    - html/qh-optf.htm,qh-optt.htm: Voronoi option 'Fo' does not check the hyperplane with 'Tv'
      The hyperplane check for 'Fi Tv' uses the midpoint, which 'Fo' already used in place of infinity
    - README.txt/Windows install: install Git for Windows in C:\Git\ instead of Program Files
      README.txt/Unix install: add options for 32-bit builds w/o -fpic
      README.txt,Makefile: link libqhullcpp before libqhull_r
    - COPYING.txt: Add a note to COPYING.txt about C.B. Barber [M. Pryczek]
    - libqhull/DEPRECATED.txt: Add link to qh-code.htm#convert
    - Qhull::vertexList: ordered by qh.vertex_list, not by adjacency [N. Katzakis #54]
    - QhullPoints.cpp/extraCoordinatesCount: must be less than point_dimension (-Wconversion)
    - QhullPoints.cpp/indexOf: extra must be less than point_dimension (-Wconversion)
    - io_r.c/qh_detvnorm: add note that qh_sethyperplane_gauss returns nearzero for axis-parallel hyperplanes
    - user_r.h/qh_CPUclock: may be converted to approximate double (-Wconversion)
    - Update copyright to 2020
    
    Build
    - Increase SOVERSION to 8.0 due to ABI breakage in 2019.1 [T. Roehling #58]
      Change SOVERSION to major.minor due to Qhull's global data structure qhT [T. Roehling #58]
      Add symbolic link from SONAME_EXT to libqhull_r [T. Roehling #58]
      Add SO and SONAME_EXT to 'make help'
    - qhull.pc.in: Added for pkg-config support [T. Roehling #60]
    - CMakeLists.txt: Add pkg-config support and change *_INSTALL_DIR to relative paths [T. Roehling #60]
      Change CMAKE_SOURCE_DIR to CMAKE_CURRENT_SOURCE_DIR to allow qhull as a subdirectory [Morwenn #53, A. De #59, A. Maloney, futex]
    - Makefile:
      Add pkg-support [T. Roehling #63]
      Renamed $DESTDIR as $PREFIX to conform with GNU Makefile standards [T. Roehling #63]
      $DESTDIR is for staged installs as defined by GNU Makefile standards [T. Roehling #63]
      Commented out M32=-m32 despite memory savings. It caused build failures, e.g., Mac [J. Hollowed]
      '-fpic' is required for linking to shared libraries [T. Roehling #63]
      Replaced -fpic with FPIC=-fpic for gcc builds
      Added FPIC to CXX_OPTS1 (same as CMakeLists.txt for libqhullcpp)
      Use 'FPIC=' to disable -fpic (may be faster for 32-bit builds on 64-bit hosts)
      Extract qhull_VERSION and qhull_SOVERSION from CMakeLists.txt [T. Roehling #63]
      Move the -lm linker flag to the end of the linker command [T. Roehling #63]
      Add QhullVertexSet.h to LIBQHULLCPP_HDRS
      Invoke q_test via bash to avoid "eg not a valid command"
    - Add build/*vcxproj to Unix distribution
    
    Testing and other changes
    - q_test: Add list of executables via 'which'
      Add tests of user_eg3 with each option and use case
      Add "Testing done" notification
      Add "set +v" for echoes
    - qhull-zip.sh: Add early check for 32-bit release build and modified files
      Add link checks for options
      Add findf for identifying files for link checks
      Add prompts for web.archive and md5sum in qh-get.htm
    
  • 2019.1
    b94cff07 · Ignore Cmake files ·
    Qhull 2019.1 2019/06/21 (7.3.2) released
    
    Qhull 2019.1 contains bug fixes and improvements to logging, error reporting, and merging.
    - Fixed fifty bugs, including initialization bugs and memory corruption bugs
      in qh_readpoints and qh_option. See Bugs and Changes.txt.
    
    - New option 'TAn' stops Qhull after adding n points.
    - New option 'Tf' flushes qh_fprintf. Use 'Tf' when debugging segfaults.
    - New options '--help', '-?', and '--' display a short help message.
      Under Git for Windows or MSYS2, 'qhull' waits for stdin.
    
    - Option 'TP-1' turns on tracing after qh_buildhull and qh_postmerge complete.
      It traces qh_check_maxout, qh_prepare_output, qh_triangulate, and qh_voronoi_center
    - Options 'TI' and 'TO' do not require a space before the filename.
    
    - An unknown Qhull option is an error. It was a warning. Override with option 'Qw'.
    - Short or long input to Qhull is an error. It was a warning. Override with option 'Qa'.
    
    - Documentation encourages the use of joggled input. Joggled input is less precise than facet merging, but it cannot incur merge errors for degenerate input.
    - Documentation refers to 'dupridge' instead of 'duplicate ridge'. A dupridge is an erroneous ridge between four or more facets.
    - Fixed documentation for qh_findbestfacet.
      Delaunay triangulations may return an adjacent triangle [F. Drielsma].
    
    - CMake: export QhullTargets for config.cmake.in and find_package [tamasmeszaros]
    - The C++ interface includes new methods, hasNext() and hasPrevious(), for QhullFacet and QhullVertex.
    - Test scripts qtest.sh and q_benchmark help with logging and optimizing Qhull,
      particularly for intermittent errors and bad cases for Qhull.
    
    Fixed bugs in Qhull 2015.2 (see Changes.txt for the full list)
    - qh_buildcone_onlygood ('Qg') corrupted memory if it called qh_delfacet.
    - qh_check_maxout did not include qh.DISTround when checking f.maxoutside
    - qh_distround did not acount for 'Rn' (random roundoff) in option 'QJn'
    - qh_findbestfacet should document that it may return an adjacent triangle for Delaunay triangulations [F. Drielsma]
    - qh_findfacet_all should not search visible facets or f.upperdelaunay facets [P. Virtanen, S. Dominguez, J.Arkin]
    - qh_findgood may report a bad facet for qh.GOODvertex ('QVn'). Restrict the search to good facets.
    - qh_freebuild deleted unattached ridges, leading to a double delete
    - qh_initial_hull tested 'maybe flipped' instead of 'clearly flipped'. As a result facets could be incorrectly oriented, leading immediately to 'Only 4 facets remain' [S. Caron, P. Virtanen, D. Sterratt, others]
    - qh_initstatistics was missing initialization. As a result, the final qh_checkoutput may be skipped.
    - qh_initstatistics cannot use qh_fprintf to report errors. Use qh_fprintf_stderr
    - qh_maxsimplex did not detect nearly flat simplices except for the last vertex. It assumed the max coordinate was approximately 1. As a result, Qhull reported false narrow hulls or false low dimensional inputs. [J.R. Roussel, D. Sterratt]
    - qh_option could overflow the qh.qhull_options buffer
    - qh_partitionpoint could leave an outside point before qh.next_facet, leading to a skipped point.
    - qh_stddev was incorrect. It should be sqrt of absolute value.
    
    - 'Qbb' scaled the last coordinate to qh.MAXwidth causing loss of precision. It should be qh.MAXabs_coord.
    - 'rbox' and 'user_eg3' returned non-zero exit status for their help prompt. Should be 0.
    - 'rbox Cn,r,m' does not produce points for 'rbox r'
    - An error in qh_initqhull_start2 could loop forever. Need to set qh.NOerrexit
    - Do not call qh_check_points ('Tv') if reporting an error and qh.FORCEoutput ('Po')
    - If 'd' or 'v' was used with 'H', memory corruption occurred. Should be disallowed.
    - Improved searching of coplanar facets by qh_findbesthorizon.
    - Options 'Pdk' and 'Pdk' always returned the closest facet. This should only occur with option 'Pg'.
    - PointCoordinates::appendPoints should not require whitespace after a point
    - Setting qh.MINoutside could lead to verification ('Tv') failures. Fixed by setting qh.KEEPnearinside and calling qh_partitionpoint in qh_partitionall
    
  • v7.3.2
    b94cff07 · Ignore Cmake files ·
    Qhull 2019.1 2019/06/21 (7.3.2) released
    
    Qhull 2019.1 contains bug fixes and improvements to logging, error reporting, and merging.
    - Fixed fifty bugs, including initialization bugs and memory corruption bugs
      in qh_readpoints and qh_option. See Bugs and Changes.txt.
    
    - New option 'TAn' stops Qhull after adding n points.
    - New option 'Tf' flushes qh_fprintf. Use 'Tf' when debugging segfaults.
    - New options '--help', '-?', and '--' display a short help message.
      Under Git for Windows or MSYS2, 'qhull' waits for stdin.
    
    - Option 'TP-1' turns on tracing after qh_buildhull and qh_postmerge complete.
      It traces qh_check_maxout, qh_prepare_output, qh_triangulate, and qh_voronoi_center
    - Options 'TI' and 'TO' do not require a space before the filename.
    
    - An unknown Qhull option is an error. It was a warning. Override with option 'Qw'.
    - Short or long input to Qhull is an error. It was a warning. Override with option 'Qa'.
    
    - Documentation encourages the use of joggled input. Joggled input is less precise than facet merging, but it cannot incur merge errors for degenerate input.
    - Documentation refers to 'dupridge' instead of 'duplicate ridge'. A dupridge is an erroneous ridge between four or more facets.
    - Fixed documentation for qh_findbestfacet.
      Delaunay triangulations may return an adjacent triangle [F. Drielsma].
    
    - CMake: export QhullTargets for config.cmake.in and find_package [tamasmeszaros]
    - The C++ interface includes new methods, hasNext() and hasPrevious(), for QhullFacet and QhullVertex.
    - Test scripts qtest.sh and q_benchmark help with logging and optimizing Qhull,
      particularly for intermittent errors and bad cases for Qhull.
    
    Fixed bugs in Qhull 2015.2 (see Changes.txt for the full list)
    - qh_buildcone_onlygood ('Qg') corrupted memory if it called qh_delfacet.
    - qh_check_maxout did not include qh.DISTround when checking f.maxoutside
    - qh_distround did not acount for 'Rn' (random roundoff) in option 'QJn'
    - qh_findbestfacet should document that it may return an adjacent triangle for Delaunay triangulations [F. Drielsma]
    - qh_findfacet_all should not search visible facets or f.upperdelaunay facets [P. Virtanen, S. Dominguez, J.Arkin]
    - qh_findgood may report a bad facet for qh.GOODvertex ('QVn'). Restrict the search to good facets.
    - qh_freebuild deleted unattached ridges, leading to a double delete
    - qh_initial_hull tested 'maybe flipped' instead of 'clearly flipped'. As a result facets could be incorrectly oriented, leading immediately to 'Only 4 facets remain' [S. Caron, P. Virtanen, D. Sterratt, others]
    - qh_initstatistics was missing initialization. As a result, the final qh_checkoutput may be skipped.
    - qh_initstatistics cannot use qh_fprintf to report errors. Use qh_fprintf_stderr
    - qh_maxsimplex did not detect nearly flat simplices except for the last vertex. It assumed the max coordinate was approximately 1. As a result, Qhull reported false narrow hulls or false low dimensional inputs. [J.R. Roussel, D. Sterratt]
    - qh_option could overflow the qh.qhull_options buffer
    - qh_partitionpoint could leave an outside point before qh.next_facet, leading to a skipped point.
    - qh_stddev was incorrect. It should be sqrt of absolute value.
    
    - 'Qbb' scaled the last coordinate to qh.MAXwidth causing loss of precision. It should be qh.MAXabs_coord.
    - 'rbox' and 'user_eg3' returned non-zero exit status for their help prompt. Should be 0.
    - 'rbox Cn,r,m' does not produce points for 'rbox r'
    - An error in qh_initqhull_start2 could loop forever. Need to set qh.NOerrexit
    - Do not call qh_check_points ('Tv') if reporting an error and qh.FORCEoutput ('Po')
    - If 'd' or 'v' was used with 'H', memory corruption occurred. Should be disallowed.
    - Improved searching of coplanar facets by qh_findbesthorizon.
    - Options 'Pdk' and 'Pdk' always returned the closest facet. This should only occur with option 'Pg'.
    - PointCoordinates::appendPoints should not require whitespace after a point
    - Setting qh.MINoutside could lead to verification ('Tv') failures. Fixed by setting qh.KEEPnearinside and calling qh_partitionpoint in qh_partitionall
    
  • v7.3.1
    30ef8b0c · Fix text for 'Qa' ·
    Qhull 2019.0.1 2019/05/24 (7.3.1)
    
    Qhull options
    - Disallow unknown options and other option errors, allow option warnings with 'Qw'
    - New option 'Qallow-short': allow input with fewer or more points than coordinates
    - New option 'Qwarn-allow': allow option warnings
    - New option 'TAn': stop after adding n vertices
    - New option 'Tf': flush after qh_fprintf for debugging segfaults
    - New experimental option 'Q14-merge-pinched-vertices': merge pinched vertices due to dupridge
      Excessive merging leads to additional topological and wide facet errors
    - New experimental option 'Q15-check-duplicates': check for duplicate ridges with the same vertices
    - Option 'Q1' merges by mergetype/angle instead of mergetype/distance, coplanar merges first
      In 2015.2 by default, Qhull merged by mergetype/angle with lower angles first
    - Option 'TP-1' turns on tracing after qh_buildhull and qh_postmerge
      It traces qh_check_maxout, qh_prepare_output, qh_triangulate, qh_voronoi_center
    - Options '--help', '-?', and '--' display a short help message
      Qhull does not support '--' options.  Git for Windows v2.21.0 does not support isatty ('winpty qhull' is OK)
    - Allow Qhull extra options Q12 and Q14 for qconvex/qdelaunay/qhalf/qvoronoi
    - Allow option 'QRn' (random rotate) for qdelaunay/qhalf/qvoronoi
    - Alphabetize short prompts (qhull .)
    - Alphabetize long prompts w/ normal options first (qhull -)
    - Alphabetize option help by option code
    - Add 'Number of merged pinched vertices' to summary ('s')
    - Add 'TI file' to help message for qconvex/qdelaunay/qhalf/qvoronoi
    - Dropped experimental option 'Q16-simplex-merge'.   Centrums are required for convexity
    - Error if 'd', 'v', or 'Hn,n,n' are used together
    - Ignore missing space after 'TI' or 'TO'.  Allow 'TIinputfile' and 'TOoutputfile'
    - Prefix option errors and warnings with 'qhull option error:' or 'qhull option warning:'
    - Remove hidden option 'normals' from help prompts for qdelaunay, qhalf, qvoronoi
    - Reword short prompts to 'Pdrop-d0:0D0', 'QbBound-0:0.5', and 'off_format'
    - Updated qh-quick.htm, 'qhull -', and 'qhull .' for 'T...' and 'Q...' options.
      Separate help prompts for 'T options' and 'Trace options'
    - Use '-' instead of '_' for word delimiter in option names
    
    Qhull builds, scripts, and debugging
    - Add qh.traceridge, qh.traceridge_id, and qh_delridge for debugging by ridge in qh_fprintf
    - Check for qhull with 'which qhull' instead of 'qhull', avoids hangs in git bash
    - Makefile/CC_WARNINGS: Add instructions for collecting and testing gcc warnings
    - Makefile/benchmark: Add q_benchmark, 10 runs of each
    - Makefile/clean: Delete linked files from src/libqhull and src/libqhull_r, as in their Makefiles
    - Makefile/help: Add 'make all' to 'make help' prompts
    - Makefile/qhullx: Add test of testqset and testqset_r
    - Makefile/qhullx: Create bin/ directory if missing
    - Makefile/test: Add user_eg3 help prompt
    - Makefile/testall: Add q_benchmark, 1 run of each
    - eg/make-vcproj.sh/qhullx: Build bin/qhullx from src/qhullx/ for comparison
    - eg/q_benchmark: new script for measuring Qhull precision and performance with qtest.sh
    - eg/q_test: update error messages for missing bin/ and bin/libqhull_r.dll
    - eg/q_test: tests of Tf and TAn
    - eg/qhull-zip.sh: add note that it requires road-script.sh from http://www.qhull.org/road/
    - eg/qhull-zip.sh: check source depencencies for prompts
    - eg/qtest.sh: new script for testing Qhull and summarizing its trace files
    - libqhull_r/Makefile: install target creates $INCDIR/libqhull_r and $LIBDIR
    - libqhull_r.h/qh_ERRdebug: define error status for debugging exits
    
    Qhull fixed bugs
    - html/qh-optp.htm: options 'PDk' and 'Pdk' require option 'Pg' to return the closest facet
    - Makefile/qhullx: fixed qhullx compile of testqset and testqset_r
    - PointCoordinates.cpp/appendPoints: read 'in >> p' instead of 'in >> p >> ws'
      otherwise istream fails if file does not end with whitespace
    - geom_r.c/qh_findbesthorizon: fix test for Zfindjump (bestdist jumps by searchdist)
    - geom_r.c/qh_findbesthorizon: increased minsearch of coplanar facets if ischeckmax and more than 100 neighbors
    - geom_r.c/qh_sethyperplane_det: dropped precision statistic Znearlysingular (it's Zminnorm)
    - geom2_r.c/qh_detjoggle: use 'En' (roundoff) if specified by options
    - geom2_r.c/qh_distround: move adjustment for 'Rn' into qh_distround.  'QJn' did not account for 'Rn'
    - global_r.c/qh_checkflags: handle two-digit Q options in hiddenflags
    - global_r.c/qh_freebuild: do not delete unattached ridges, otherwise a double delete.  Should not occur
    - global_r.c/qh_option: fix potential overflow of qh.qhull_options
    - global_r.c/qh_initflags: fixed incorrect indentation for option 'TO file'
    - global_r.c/qh_initqhull_start2: set qh.NOerrexit True
    - io_r.c/qh_eachvoronoi: allow fp==NULL for QhullQh::qh_fprintf to appendQhullMessage
    - io_r.c/qh_readpoints: error if 'd' or 'v' with 'H', otherwise memory corruption
    - libqhull_r.h/qh.MERGEvertices: fixed comment, 'Q3' disables this feature
    - libqhull_r.c/qh_buildcone_onlygood: cannot qh_delfacet inside FORALLnew_facets
    - libqhull_r.c/qh_partitionpoint: if qh.NARROWhull and bestdist>qh.MINoutside and isnewoutside,
      may need to move facet to qh.newfacet_list for qh.next_facet
    - libqhull_r.c/qh_printsummary: Zdistconvex is for checking convexity instead of testing convexity
    - libqhull_r.c/qh_findhorizon: coplanar horizon if apex >= -qh.MAXcoplanar, instead of > -qh.MAXcoplanar
    - mem_r.c/qh_memcheck: define null qh_memcheck if qh_NOmem
    - merge_r.c/qh_mergecycle_all: turn on tracing, 'TMn', for coplanar horizon merge of one facet
    - merge_r.c/qh_mergefacet2d: do not create ridges for neighborB.  The opposite neighbor may be tested
    - merge_r.c/qh_test_centrum_merge: coplanar if centrum >= -qh.centrum_radius, instead of > -qh.centrum_radius
    - merge_r.c/qh_test_nonsimplicial_merge: coplanar if centrum >= -qh.centrum_radius, instead of > -qh.centrum_radius
    - merge_r.c/qh_tracemerging: fixed "qhull has merged" prompt
    - merge_r.c/qh_willdelete: empty f.neighbors and f.ridges, references are no longer valid, will be deleted
    - poly_r.c/qh_checkflipped: flipped if qh.interior_point >= -qh.DISTround, instead of > -qh.DISTround
    - poly2_r.c/qh_addfacetvertex: initialize vertex_i in case f.vertices is empty
    - poly2_r.c/qh_check_maxout: need to include qh.DISTround when checking f.maxoutside with qh.maxoutside
    - poly2_r.c/qh_checkconvex: fix documentation for qh_DATAfault.  It is restricted to qh_initialhull with qh.ZEROcentrum
    - poly2_r.c/qh_checkconvex: coplanar if >= -qh.DISTround, instead of > -qh.DISTround
    - poly2_r.c/qh_checkconvex: check simplicial ridges if !qh.MERGING && qh.ZEROcentrum (unlikely or not-possible)
    - poly2_r.c/qh_findgood: restrict qh.GOODvertex ('QVn') to good facets
    - poly2_r.c/qh_findgood_all: unless 'Pg', ignore qh.GOODclosest for nearest facet to thresholds.
         'PdD' reports 0 good facets
    - poly2_r.c/qh_replacefacetvertex: initialize vertex_n in case f.vertices is empty
    - qconvex.c,qdelaunay.c,etc.: remove automatic 'Qx' for 5-d and higher.  Set by default in qh_initqhull_globals
    - qvoronoi_r.c/qh_prompt: remove disabled option 'TRn' from help prompt
    - random_r.c/qh_argv_to_command: fixed missing braces, same behavior as before
    - rbox_r.c: return 0 exit status on prompt
    - rboxlib.c/qh_rboxpoints: use qh_fprintf_stderr instead of qh_fprintf_rbox.  Avoid qh_errexit_rbox
    - rboxlib.c/qh_rboxpoints2: clear rbox_inuse on exit, as in error exit
    - rboxlib_r.c/qh_rboxpoints2: incorrect string arg to 'rbox error: unknown flag'
    - rboxlib_r.c/qh_rboxpoints2: remove superfluous qh_free(*simplex)
    - stat_r.c/qh_initstatistics: due to NOerrors cannot use qh_fprintf, use qh_fprintf_stderr instead
    - stat_r.c/qh_stddev: return sqrt of absolute value
    - testqset_r.c: if qh_NOmem, do not call qh_memfreeshort
    - user_eg_r.c,user_eg2_r.c: if qh_NOmem, call qh_freeqhull(qh, qh_ALL) instead of qh_memfreeshort
    - user_eg3_r.cpp: return 0 exit status on prompt
    
    Qhull fixed bugs introduced by 2018.0
    - libqhull_r.c/qh_addpoint: clear qh.retry_addpoint on success
    - libqhull_r.c/qh_buildcone_mergepinched: cannot qh_delfacet inside FORALLnew_facets
    - libqhull_r.c/qh_partitioncoplanar: clear qh.repart_id on exit for infinite recursion detect
    - geom2_4.c/qh_detmaxoutside: move qh_option call to qh_errexit
    - merge_r.c/mergetypes[]: fixed order by mergeT
    - merge_r.c/qh_all_vertexmerges: fix retryfacet for repeated calls
    - merge_r.c/qh_forcedmerge: f.dupridge retained after MRGdupridge
      hides MRGdegenerate in qh_test_degen_neighbors and qh_test_redundant_neighbors
    - merge_r.c/qh_postmerge: call qh_freemergesets
    - merge_r.c/qh_test_nonsimplicial_merge: clear iscoplanar if isconcave and any vertex is not coplanar
    - poly2_r.c/qh_triangulate: move reset of f.degenerate into delete facet loop
    
    Qhull C++
    - QhullFacet.cpp: add hasNext() and hasPrevious()
    - QhullVertex.cpp: add hasNext() and hasPrevious()
    - qhulltest-64/QhullFacet_test.cpp,QhullVertex_test.cpp: test hasNext, hasPrevious, and hasPrevious iterator
    - user_eg3.cpp: use 'qhull-cout' for option 'Tz' (trace to cout)
    
    Qhull errors, warnings, and tracing
    - Error messages rewritten and error codes changed (see qh_fprintf)
      Renumbered Qhull warnings as 'QH7xxx' if needed (e.g., QH9375)
      Reused unused error and message codes ("def counters" in user_r.h/msgcode)
      Please check your code if it depends on error and message codes
    - Initialize variables to avoid potential uninitialized warnings
    - Use qh_ERRqhull for Qhull internal errors, "qhull internal error (qh_...): ..."
    - Use 'defined()' for qh_QHpointer_dllimport and qh_dllimport (-Wundef)
    - Use 'defined()' for __cplusplus, _MSC_VER, __MWERKS__, and __POWERPC__ (-Wundef)
    - Use 'Early exit' instead of 'At a premature exit'
    - libqhull_r.h/qh_ERRother: define error status for non-internal errors
    - libqhull_r.h/qh_ERRtopology: define error status for qhull topology errors
    - libqhull_r.h/qh_ERRwide: define error status for wide facets due to qhull precision error
    - geom_r.c/qh_setfacetplane: add qh_printfacet if qh.tracefacet for qh.tracefacet_id
    - global_r.c/qh_freebuild: record previousfacet/ridge/vertex in case a memory fault occurs
    - global_r.c/qh_init_flags: improved error message for 'cannot open file' for 'TO f'
    - global_r.c/qh_init_flags: improved warning message for 'unknown option'
    - global_r.c/qh_initbuild: add trace options to "Trace level ..."
    - global_r.c/qh_initqhull_globals: error if qh.VORONOI without qh.DELAUNAY
    - global_r.c/qh_initqhull_globals: error if numpoints is <1 or >qh_POINTSmax (INT_MAX-16)
    - global_r.c/qh_lib_check: use C-style comment for _CrtSetBreakAlloc
    - io_r.c/qh_printfacetheader: add "max" if f.merges==qh_MAXnummerge (511)
    - io_r.c/qh_readpoints: error if numinput is <1 or >qh_POINTSmax (INT_MAX-16)
    - io_r.c/qh_readpoints: moved up 'chop' of qh.rbox_command to report short input errors
    - io_r.c/qh_readpoints: replace warning QH7073 with error message. Override with Qallow-short
    - libqhull_r.c/qh_addpoint: if 'T4', check qh.visible_list before qh_partitionvisible
    - libqhull_r.c/qh_buildtracing: add delta cpu/facets/hyperplanes to QH1049 'qh_addpoint: add p%d...'
    - merge_r.c/qh_findbest_pinchedvertex: replaced assert with a 'qhull internal error'
    - merge_r.c/qh_check_dupridge: drop advice about reporting wide merges for error QH6271
    - merge_r.c/qh_mark_dupridges: topological error if multiple dupridges for one facet, not handled
    - merge_r.c/qh_test_nonsimplicial_merge: if Qx and many merges, replace centrum_radius with maxoutside
    - poly_r.c/qh_matchneighbor: drop extra warnings for duplicate facet (QH7084)
    - poly_r.c/qh_matchnewfacets: check for simplicial facets on qh.newfacet_list, otherwise memory overwrite by qh_matchneighbor
    - poly2_r.c/qh_checkconvex: identify simplicial checking of vertices (qh.ZEROcentrum, default)
    - poly2_r.c/qh_checkconvex: distinguish above from coplanar for non-convex initial simplex
    - poly2_r.c/qh_checkconvex: "non-convex initial simplex" for qh_joggle_restart
    - poly2_r.c/qh_checkfacet: check f.id and f.vertex_visit
    - poly2_r.c/qh_checklists: check and repair facet and vertex lists for infinite loops or overwritten facets/vertices
    - poly2_r.c/qh_checkpolygon: if qh.NEWfacets, check visible facets for empty f.neighbors and f.ridges
    - poly2_r.c/qh_checkpolygon: add qh_checkvertex
    - poly2_r.c/qh_checkpolygon: check f.previous and v.previous links (for C++)
    - poly2_r.c/qh_checkvertex: add parameters for allchecks and waserror (like qh_checkfacet)
    - poly2_r.c/qh_checkvertex: check v.id and v.vertex_visit
    - qvoronoi.c/hidden_options: hide option 'FM'. Maple output is not available
    - rboxlib_r.c/qh_rboxpoints: use QH6... for error codes instead of QH7070 and QH7071
    - stat_r.c/qh_stddev: check for division by 0
    - testqset_r.c: send all messages, except 'OK' to stderr
    - testqset_r.c: reassign unique QH8nnn codes, 8001/etc in use by libqhull_r
    - user_r.c/qh_printhelp_internal: add descriptive message for a Qhull internal error
    - user_r.c/qh_printhelp_narrowhull: add option 'Qs' (search all points)
    - user_r.c/qh_printhelp_topology: add descriptive message for a Qhull topology error
    - user_r.c/qh_printhelp_wide: add descriptive message for a wide merge error
    - user_eg_r.c: add fflush and '=======' markers to interleave stdout with stderr (MSYS2)
    - user_eg2_r.c: add fflush and '=======' markers to interleave stdout with stderr (MSYS2)
    - user_eg2_r.c: add warning about calling qh_addpoint after qh_qhull with 'QJ' (joggle)
    
    Qhull documentation and statistics
    - Add Index to README.txt
    - Add links to Wiki, http://github.com/qhull/qhull/wiki
    - Add links to local home page (index.htm)
    - Add GitHub, Scholar, and Code to navigation bar on home page
    - Change numbered fixups to 'QH110nn FIX:'
    - Chrome and Internet Explorer load '.c' and '.h' files as text/html from the Web
      These browsers along with Firefox do not read disk files as text/html
      Changed 'Functions' link from a local link to "http://www.qhull.org/src/libqhull_r/index.htm"
    - Document implicit parameters at end of parameter list with '/* qh. ... */'
    - Limit maximum length of literals to 1800 characters
    - Move 'called by' comments to start of 'notes:'
    - Option 'QRn' appends the actual QRn to the summary line ('s')
    - Remove references to 'Qx' in 5-d and higher.  It is automatically set by default.
    - Replace references to 'src/libqhull/*.htm' with reentrant 'src/libqhull_r/*_r.htm'
    - Retitle 'Qhull internals' as 'Qhull code'
    - Use 'nearly adjacent vertices' instead of 'nearly coincident points'
    - Use 'dupridge' instead of 'duplicate ridge' for ridges with more than two neighbors.
      Reserve 'duplicate ridge' for two ridges with the same vertices.
    - Various edits to documentation (*.htm)
    - Update copyright to 2019
    - eg/q_test: Add examples to q_test "front ends"
    - html/index.htm: Add 'Limitations of merged facets' to the Qhull manual
    - html/index.htm: Add links to qdelaun_f.htm and qvoroin_f.htm (furthest-site)
    - html/qconvex.htm,etc: update synopsis and options
    - html/qh-code.htm: Add 'qh_addpoint' trace to 'Performance of Qhull'
    - html/qh-code.htm: Add a section on 'Debugging Qhull' with subsections for error codes,
      infinite loops, trace options, core dumps, segfaults, qtest.sh, and memory errors.
    - html/qh-impre.htm: Add 'Topological error' to 'Precision problems'
    - html/qh-impre.htm: Add 'Topological errors' to 'Limitations of merged facets'
    - html/qh-impre.htm: Add "narrow range of values" to 'Uneven dimensions'
    - html/qh-optq.htm: Add note to 'QJ' (joggle) about calls to qh_addpoint
    - html/qh-optt.htm#'Tc': 'T4' makes additional checks beyond check-frequently
    - html/qhalf.htm: Split the first example to clarify the "feasible point" for qhalf
    - html/qhalf.htm: Use 'feasible point' instead of 'interior point' for halfspace intersection
      Same as Qhull::feasiblePoint and distinguished from qh.interior_point
    - html/qhull.man,qhull.txt: updated man page
    - libqhull_r.h: update documentation for PRINTgood, GOODpoint, GOODvertex
    - qhull_ra.h: include '<limits.h>'.  Used for INT_MAX,etc.
    - stat.h: add zretryadd stats for qh_merge_pinchedvertices
    - stat.h: add zvertextests for distance tests of vertices for merging
    - libqhull_r/*: document global variables as 'qh.'
    - libqhull_r/*: fix libqhull/... links
    - libqhull_r.c/qh_partitioncoplanar: reword Zpartflip as Zpartcorner with updated messages
    - merge_r.c/qh_merge_degenredundant: rename statistic Zneighbor to Zredundant
    - stat_r.c: new or reworded statistics for Zpartcorner, Zparthidden, Zparttwisted, Zpinchduplicate, Zpinchedvertex
    - stat_r.c: rename 'renamed vertex statistics' to 'statistics for vertex merges'
    - stat_r.c: add merge statistics for MRGconcavecoplanar
    - stat_r.c/qh_allstat: add ' ' before parens in statistics
    - user_eg_r.c,user_eg2_r.c: rewrote prompt
    
    Qhull changes
    - For simple initializers, remove spaces (e.g., 'for (i=0; ...')
    - Normalize spacing for libqhull
    - Normalize spacing as 'for (i=0; ...' for simple initializers
    - Review use of '>' for comparison to negative quantities.  Usually should be '>=', e.g., for coplanar tests
    - Reassigned 8xxx and 9xxx codes as trace codes if traced at T3 or lower
    - Remove unused variables
    - Test floating point values with 0.0 instead of 0 (qh.premerge_centrum,lower_bound,upper_bound)
    - Use SETsecondt_() and SETelemt_() instead of SETelem_() when assigning to a specific type
    - Use '(type *)' for pointer casts.  It makes the cast more visible.
    - Use void for empty parameter lists
    - geom_r.c/qh_findbesthorizon: mark startfacet visited, avoids unnecessary visit
    - geom2_r.c/qh_detmaxoutside: determine precision target qh.MAXoutside (option _maxoutside at error exit)
      replaces 'maxoutside' computation
    - geom2_r.c/qh_maxsimplex: add ratio test for false narrow hull with search for prevdet
    - global_r.c/qh_freebuild: free global sets first instead of last, otherwise dangling references
    - io_r.c/qh_compare_nummerge: renamed qh_compare_facetmerge due to conflict with merge_r.h
    - io_r.c/qh_compare_vertexpoint: remove this routine.  Not usable in libqhull_r due to 'qh'
    - io_r.c/qh_printfacetridges: do not print ridge if already printed (e.g., duplicate neighbors for merge of simplicial facets)
    - io_r.c/qh_produce_output2: fflush of qh.fout to show statistics and verification after output (MSYS2)
    - libqhull_r.h/qh.ALLOWwide: rename qh.NOwide to qh.ALLOWwide for 'Q12-allow-wide'
    - libqhull_r.h/qh.IGNOREpinched: replaced qh.MERGEpinched with reversed meaning
    - libqhull_r.c/qh_addpoint: 'TVn' stops after qh_all_vertexmerges, not before qh_resetlists.  Matches documentation
    - merge_r.h/MRGdupridge: renamed MRGridge
    - merge_r.h/qh_ANGLEconcave,etc.: replace mergetype indicators with qh_ANGLEnone and m.mergetype
    - merge_r.c/qh_all_vertexmerges: replace qh_getmergeset_initial with qh_getmergeset.  No facets created
    - merge_r.c/qh_all_vertexmerges: move while loop into qh_all_vertexmerges
    - merge_r.c/qh_append_mergeset: ignore merges into a MRGdegen facet (f.degenerate)
    - merge_r.c/qh_buildcone_mergepinched: clean up code and design documentation
    - merge_r.c/qh_compare_anglemerge: renamed qh_compareangle and sort by mergetype as well as angle
    - merge_r.c/qh_compare_facetmerge: merge MRGcoplanar before MRGconcave, opposite order from 2015.2
                                       sort MRGanglecoplanar by angle
    - merge_r.c/qh_degen_redundant_facet,qh_test_degen_neighbors: moved into qh_mergefacet due to qh_willdelete
    - merge_r.c/qh_getmergeset,qh_getmergeset_initial: set f.tested after testing ridges, not before
    - merge_r.c/qh_next_facetmerge: split out next merge from qh_all_merges and replace qsort
    - merge_r.c/qh_findbest_pinchedvertex,qh_findbest_ridgevertex: dropped selecting merge direction via qh_vertex_isbelow.  Expensive and evidence mixed
    - merge_r.c/qh_freemergesets,qh_initmergesets: pair qh_initmergesets with qh_freemergesets
    - merge_r.c/qh_freemergesets,qh_initmergesets: drop the 'all' parameter
    - merge_r.c/qh_mergecycle_all: move qh_merge_degenredundant, etc. to end from qh_premerge
    - merge_r.c/qh_mergesimplex: delete facet1 from facet2.neighbors at end, not at ridge
    - merge_r.c/qh_post_merges,qh_all_merges: remove setting of v.delridge on all vertices, not needed
    - merge_r.c/qh_premerge: replace parameter 'apex' with 'apexpointid'.  Only used for logging
    - merge_r.c/qh_premerge: add qh.newfacet_list as an implicit parameter
    - merge_r.c/qh_test_degen_neighbors: split from qh_degen_redundant_neighbors and qh_mergefacet
    - merge_r.c/qh_test_redundant_neighbors: split from qh_degen_redundant_neighbors and qh_mergefacet
    - poly_r.c/qh_attachnewfacets: clear f.neighbors and f.ridges for visible facets, will be deleted
    - poly_r.c/qh_matchnewfacets: remove call to qh_checkflipped_all for qh.FORCEoutput, checked by qh_setfacetplane
    - poly_r.c/qh_update_vertexneighbors: renamed qh_updatevertices. A future version will optimize
      qh_update_vertexneighbors_cone: optimization for cone of new facets
    - poly2_r.c/qh_checkconvex: immediate skip of f.tricoplanar facets.  Tricoplanar facets not tested.  Called before qh_triangulate
    - poly2_r.c/qh_initbuild: move 'create sentinels' before qh_createsimplex so that qh.vertex_tail is v0 like f0
    - poly2_r.c/qh_initialvertices: cleaned up code for qh_INITIALmax (8-d)
    - poly2_r.c/qh_makenewfacets: clear f.neighbors and f.ridges for visible facets, will be deleted
    - poly2_r.c/qh_matchdupridge: optimize dupridge for flipped->!flipped, good merge, not !flipped->flipped
    - poly2_r.c/qh_matchdupridge_coplanarhorizon: dropped routine.  Results same or slightly worse.  Complex addition, rarely used
    - poly2_r.c/qh_triangulate: rename facet and vertex lists as triangulated_facet_list,etc.
      qh_triangulate does not maintain qh.newfacet_list or qh.visible_list
    - poly2_r.c/qh_triangulate: ignore qh.NEWfacets. qh_checkpolygon is not valid inside qh_triangulate
    - rboxlib_r.c/qh_rboxpoints2: split function from qh_rboxpoints to avoid -Wclobbered
    - stat_r.c/qh_printstatlevel: remove unused NULLfield
    
    Qhull C++ changes
    - Use NULL instead of 0 for pointers
    - Remove old style casts such as '(size_t)...'
    - Define initializers for default constructors even if explicitly assigned
    - Update static initializer list for s_empty_facet, s_empty_ridge, s_empty_vertex
    - Coordinates.h: default constructor clears coordinate_array
    - Coordinates.h: default iterator constructor clears i
    - RboxPoints.cpp/qh_fprintf_rbox: add empty default to switch statement
    
    
  • v7.2.1
    Last commit to master prior to Qhull 2018.0.1 (v7.3.0).
      [2018/12/28] 0db5f89  Merge pull request #33 from anntzer/Wmisleading-indentation
    
    v7.2.1 should be used instead of 'head'
    
  • v7.3.0
    Qhull 2018.0.1 2018/12/28 (7.3.0)
    
  • 2015.2
    Qhull 2015.2 2016/01/18 v7.2.0
    
  • v7.2.0
    Qhull 2015.2 2016/01/18 v7.2.0
    
  • 2015.1
    Qhull 2015.1 2016/01/03 v7.1.0
    
  • v7.1.0
    Qhull 2015.1 2016/01/03 v7.1.0
    
  • 2012.1
    Qhull 2012.1 2012/02/18 v6.3.1.1494
    
  • v6.3.1.1494
    Qhull 2012.1 2012/02/18 v6.3.1.1494
    
  • 2011.2
    be4df757 · Clean up for qhull 2011.2 ·
    Qhull 2011.2 2011/11/29 v6.2.1
    
  • v6.2.1
    be4df757 · Clean up for qhull 2011.2 ·
    Qhull 2011.2 2011/11/29 v6.2.1
    
  • 2011.1
    Qhull 2011.1 2011/05/23 v6.2.0.1385
    
  • v6.2.0
    Qhull 2011.1 2011/05/23 v6.2.0.1385
    
  • 2010.1
    Qhull 2010.1 2010/01/14 v6.1.0
    
  • v6.1.0
    Qhull 2010.1 2010/01/14 v6.1.0