Skip to content
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