1
Name
2
3
      qhull, rbox         2012.1     2012/02/18
4
  
5
Convex hull, Delaunay triangulation, Voronoi diagrams, Halfspace intersection
6
 
7
      Documentation:
8
        html/index.htm
9
        http://www.qhull.org/html
10
11
      Available from:
12
        <http://www.qhull.org>
13
        <git@gitorious.org:qhull/qhull.git>
14
        <http://packages.debian.org/sid/libqhull5> [out-of-date]
15
 
16
      News and a paper:
17
        <http://www.qhull.org/news>
18
        <http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.117.405>
19
20
     Version 1 (simplicial only):
21
        <http://www.qhull.org/download/qhull-1.0.tar.gz>
22
       
23
24
Purpose
25
26
  Qhull is a general dimension convex hull program that reads a set 
27
  of points from stdin, and outputs the smallest convex set that contains 
28
  the points to stdout.  It also generates Delaunay triangulations, Voronoi 
29
  diagrams, furthest-site Voronoi diagrams, and halfspace intersections
30
  about a point.
31
32
  Rbox is a useful tool in generating input for Qhull; it generates 
33
  hypercubes, diamonds, cones, circles, simplices, spirals, 
34
  lattices, and random points.
35
  
36
  Qhull produces graphical output for Geomview.  This helps with
37
  understanding the output. <http://www.geomview.org>
38
39
Environment requirements
40
41
  Qhull and rbox should run on all 32-bit and 64-bit computers.  Use
42
  an ANSI C or C++ compiler to compile the program.  The software is 
43
  self-contained.  It comes with examples and test scripts.
44
  
45
  Qhull's C++ interface uses the STL.  The C++ test program uses QTestLib 
46
  from Nokia's Qt Framework.  Qhull's C++ interface may change without 
47
  notice.  Eventually, it will move into the qhull shared library.
48
  
49
  Qhull is copyrighted software.  Please read COPYING.txt and REGISTER.txt
50
  before using or distributing Qhull.
51
52
To cite Qhull, please use
53
54
  Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., "The Quickhull 
55
  algorithm for convex hulls," ACM Trans. on Mathematical Software,
56
  22(4):469-483, Dec 1996, http://www.qhull.org.
57
58
To contribute to Qhull
59
60
  Qhull is on Gitorious (http://gitorious.org:qhull, git@gitorious.org:qhull/qhull.git)
61
  
62
  For internal documentation, see html/qh-code.htm
63
64
To install Qhull
65
66
  Qhull is precompiled for Windows, otherwise it needs compilation.
67
  
68
  Besides makefiles for gcc, qhull includes CMakeLists.txt for CMake, 
69
  vcproj/sln files for Microsoft Visual Studio, and .pro files for Qt Creator.
70
  It compiles with mingw.
71
  
72
  Install and build instructions follow.  
73
  
74
  See the end of this document for a list of distributed files.
75
76
-----------------
77
Installing Qhull on Windows
78
79
  The zip file contains rbox.exe, qhull.exe, qconvex.exe, qdelaunay.exe, 
80
  qhalf.exe, qvoronoi.exe, testqset.exe, user_eg*.exe, documentation files, 
81
  and source files.
82
  
83
  To install Qhull:
84
  - Unzip the files into a directory.  You may use WinZip32 <www.hotfiles.com>
85
  - Click on QHULL-GO or open a command window into Qhull's bin directory.
86
    
87
  To uninstall Qhull
88
  - Delete the qhull directory
89
  
90
  To learn about Qhull:
91
  - Execute 'qconvex' for a synopsis and examples.
92
  - Execute 'rbox 10 | qconvex' to compute the convex hull of 10 random points.
93
  - Execute 'rbox 10 | qconvex i TO file' to write results to 'file'.
94
  - Browse the documentation: qhull\html\index.htm
95
  - If an error occurs, Windows sends the error to stdout instead of stderr.
96
    Use 'TO xxx' to send normal output to xxx and error output to stdout
97
98
  To improve the command window
99
  - Double-click the window bar to increase the size of the window
100
  - Right-click the window bar
101
  - Select Properties
102
  - Check QuickEdit Mode
103
    Select text with right-click or Enter
104
    Paste text with right-click
105
  - Change Font to Lucinda Console
106
  - Change Layout to Screen Buffer Height 999, Window Size Height 55
107
  - Change Colors to Screen Background White, Screen Text Black
108
  - Click OK
109
  - Select 'Modify shortcut that started this window', then OK
110
111
  If you use qhull a lot, install MSYS (www.mingw.org),
112
    Road Bash (www.qhull.org/bash), or Cygwin (www.cygwin.com).
113
114
-----------------
115
Installing Qhull on Unix with gcc
116
117
  To build Qhull, static libraries, shared library, and C++ interface
118
  - Extract Qhull from qhull...tgz or qhull...zip
119
  - make
120
  - export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
121
122
  Or, to build Qhull and libqhullstatic.a
123
  - Extract Qhull from qhull...tgz or qhull...zip
124
  - cd src/libqhull
125
  - make
126
127
  The Makefiles may be edited for other compilers.
128
  If 'testqset' exits with an error, qhull is broken
129
  
130
-----------------
131
Installing Qhull with CMake 2.6 or later
132
133
  To build Qhull, static libraries, shared library, and C++ interface
134
  - Extract Qhull from qhull...tgz or qhull...zip
135
  - cd build
136
  - cmake ..
137
  - make
138
  - make install
139
  
140
  On Windows, CMake installs to C:/Program Files/qhull
141
  See CMakeLists.txt for further build instructions
142
143
-----------------
144
Installing Qhull with Qt
145
146
  To build Qhull, static libraries, shared library, C++ interface, and C++ test
147
  - Extract Qhull from qhull...tgz or qhull...zip
148
  - cd src
149
  - qmake
150
  - make
151
  
152
-----------------
153
Installing Qhull with Autoconf [WARNING out-of-date]
154
155
  The tar.gz tarball contains documentation, source files, 
156
  and a config directory [R. Laboissiere].
157
158
  [Nov 2011] Qhull 2009.1.2 does not include the C++ interface
159
  
160
  To install Qhull
161
  - Extract the files
162
  - ./configure
163
  - make
164
  - make install
165
166
-------------------
167
Working with Qhull's C++ interface
168
169
  Qhull's C++ interface is likely to change.  Stay current with Gitorious.
170
171
  To clone Qhull's next branch from http://gitorious.org/qhull
172
    git init
173
    git clone git://gitorious.org/qhull/qhull.git
174
    cd qhull
175
    git checkout next
176
    ...
177
    git pull origin next
178
179
------------------
180
Compiling Qhull with Microsoft Visual C++ 2005 or later
181
182
  To compile Qhull with Microsoft Visual C++
183
  - Extract Qhull from Gitorious, qhull...tgz, or qhull...zip
184
  - Load solution build/qhull.sln 
185
  - Build
186
  - Project qhulltest requires Qt for DevStudio (http://qt.nokia.com/downloads)
187
    Set the QTDIR environment variable to your Qt directory (e.g., c:/qt/4.7.4)
188
    If incorrect, precompile will fail with 'Can not locate the file specified'
189
190
-----------------
191
Compiling Qhull with Qt Creator
192
193
  Qt (http://qt.nokia.com) is a C++ framework for Windows, Linux, and Macintosh
194
195
  Qhull uses QTestLib to test qhull's C++ interface (qhulltest)
196
  
197
  To compile Qhull with Qt Creator
198
  - Extract Qhull from Gitorious, qhull...tgz, or qhull...zip
199
  - Download the Qt SDK from Nokia (http://qt.nokia.com/downloads)
200
  - Start Qt Creator
201
  - Load src/qhull-all.pro
202
  - Build
203
204
-----------------
205
Compiling Qhull with mingw on Windows
206
207
  To compile Qhull with MINGW
208
  - Extract Qhull from Gitorious, qhull...tgz, or qhull...zip
209
  - Install Road Bash (http://www.qhull.org/bash)
210
    or install MSYS (http://www.mingw.org/wiki/msys)
211
  - Install MINGW (http://www.mingw.org/).  Mingw is included with Qt SDK.  
212
  - make
213
  
214
-----------------
215
Compiling Qhull with cygwin on Windows
216
217
  To compile Qhull with cygwin
218
  - Extract Qhull from Gitorious, qhull...tgz, or qhull...zip
219
  - Install cygwin (http://www.cygwin.com)
220
  - Include packages for gcc, make, ar, and ln
221
  - make
222
223
-----------------
224
Compiling from Makfile without gcc
225
226
  The file, qhull-src.tgz, contains documentation and source files for
227
  qhull and rbox.  
228
  
229
  To unpack the gzip file
230
  - tar zxf qhull-src.tgz
231
  - cd qhull
232
  
233
  Compiling qhull and rbox with Makefile
234
  - in Makefile, check the CC, CCOPTS1, PRINTMAN, and PRINTC defines
235
      - the defaults are gcc and enscript
236
      - CCOPTS1 should include the ANSI flag.  It defines __STDC__
237
  - in user.h, check the definitions of qh_SECticks and qh_CPUclock.
238
      - use '#define qh_CLOCKtype 2' for timing runs longer than 1 hour
239
  - type: make 
240
      - this builds: qhull qconvex qdelaunay qhalf qvoronoi rbox libqhull.a
241
  - type: make doc
242
      - this prints the man page
243
      - See also qhull/html/index.htm
244
  - if your compiler reports many errors, it is probably not a ANSI C compiler
245
      - you will need to set the -ansi switch or find another compiler
246
  - if your compiler warns about missing prototypes for fprintf() etc.
247
      - this is ok, your compiler should have these in stdio.h
248
  - if your compiler warns about missing prototypes for memset() etc.
249
      - include memory.h in qhull_a.h
250
  - if your compiler reports "global.c: storage size of 'qh_qh' isn't known"
251
      - delete the initializer "={0}" in global.c, stat.c and mem.c
252
  - if your compiler warns about "stat.c: improper initializer"
253
      - this is ok, the initializer is not used
254
  - if you have trouble building libqhull.a with 'ar'
255
      - try 'make -f Makefile.txt qhullx' 
256
  - if the code compiles, the qhull test case will automatically execute
257
  - if an error occurs, there's an incompatibility between machines
258
      - If you can, try a different compiler 
259
      - You can turn off the Qhull memory manager with qh_NOmem in mem.h
260
      - You can turn off compiler optimization (-O2 in Makefile)
261
      - If you find the source of the problem, please let us know
262
  - to install the programs and their man pages:
263
      - define MANDIR and BINDIR
264
      - type 'make install'
265
266
  - if you have Geomview (www.geomview.org)
267
       - try  'rbox 100 | qconvex G >a' and load 'a' into Geomview
268
       - run 'q_eg' for Geomview examples of Qhull output (see qh-eg.htm)
269
270
------------------
271
Compiling on other machines and compilers
272
273
  Qhull compiles with Borland C++ 5.0 bcc32.  A Makefile is included.
274
  Execute 'make -f Mborland'.  If you use the Borland IDE, set the ANSI
275
  option in Options:Project:Compiler:Source:Language-compliance.
276
  
277
  Qhull compiles with Borland C++ 4.02 for Win32 and DOS Power Pack.  
278
  Use 'make -f Mborland -D_DPMI'.  Qhull 1.0 compiles with Borland 
279
  C++ 4.02.  For rbox 1.0, use "bcc32 -WX -w- -O2-e -erbox -lc rbox.c".  
280
  Use the same options for Qhull 1.0. [D. Zwick]
281
  
282
  Qhull compiles with Metrowerks C++ 1.7 with the ANSI option.
283
  If you turn on full warnings, the compiler will report a number of 
284
  unused variables, variables set but not used, and dead code.  These are
285
  intentional.  For example, variables may be initialized (unnecessarily)
286
  to prevent warnings about possible use of uninitialized variables.  
287
288
  Qhull compiles on the Power Macintosh with Metrowerk's C compiler.
289
  It uses the SIOUX interface to read point coordinates and return output.
290
  There is no graphical output.  For project files, see 'Compiling a
291
  custom build'.  Instead of using SIOUX, Qhull may be embedded within an
292
  application.  
293
294
  Some users have reported problems with compiling Qhull under Irix 5.1.  It
295
  compiles under other versions of Irix. 
296
  
297
  If you have troubles with the memory manager, you can turn it off by
298
  defining qh_NOmem in mem.h.
299
300
-----------------
301
Distributed files
302
303
  README.txt           // Instructions for installing Qhull 
304
  REGISTER.txt         // Qhull registration 
305
  COPYING.txt          // Copyright notice 
306
  QHULL-GO.lnk         // Windows icon for eg/qhull-go.bat
307
  Announce.txt         // Announcement 
308
  CMakeLists.txt       // CMake build file (2.6 or later)
309
  File_id.diz          // Package descriptor
310
  index.htm            // Home page 
311
  Makefile             // Makefile for gcc and other compilers
312
  qhull*.md5sum        // md5sum for all files
313
314
  bin/*		       // Qhull executables and dll (.zip only)
315
  build/qhull.sln      // DevStudio solution and project files (2005 or later)
316
  build/*.vcproj
317
  config/*             // Autoconf files for creating configure (Unix only)
318
  eg/*                 // Test scripts and geomview files from q_eg
319
  html/index.htm       // Manual
320
  html/qh-faq.htm      // Frequently asked questions
321
  html/qh-get.htm      // Download page
322
  html/qhull-cpp.xml   // C++ style notes as a Road FAQ (www.qhull.org/road)
323
  src/Changes.txt      // Change history for Qhull and rbox 
324
  src/qhull-all.pro    // Qt project
325
326
eg/ 
327
  q_eg                 // shell script for Geomview examples (eg.01.cube)
328
  q_egtest             // shell script for Geomview test examples
329
  q_test               // shell script to test qhull
330
  q_test-ok.txt        // output from q_test
331
  qhulltest-ok.txt     // output from qhulltest (Qt only)
332
333
rbox consists of (bin, html):
334
  rbox.exe             // Win32 executable (.zip only) 
335
  rbox.htm             // html manual 
336
  rbox.man             // Unix man page 
337
  rbox.txt
338
339
qhull consists of (bin, html):
340
  qhull.exe            // Win32 executables and dlls (.zip only) 
341
  qconvex.exe
342
  qdelaunay.exe
343
  qhalf.exe
344
  qvoronoi.exe
345
  qhull.dll
346
  qhull_p.dll
347
  qhull-go.bat         // command window
348
  qconvex.htm          // html manual
349
  qdelaun.htm
350
  qdelau_f.htm        
351
  qhalf.htm
352
  qvoronoi.htm
353
  qvoron_f.htm
354
  qh-eg.htm
355
  qh-code.htm
356
  qh-impre.htm
357
  index.htm
358
  qh-opt*.htm
359
  qh-quick.htm
360
  qh--*.gif            // images for manual
361
  normal_voronoi_knauss_oesterle.jpg
362
  qhull.man            // Unix man page 
363
  qhull.txt
364
365
bin/
366
  msvcr80.dll          // Visual C++ redistributable file (.zip only)
367
368
src/
369
  qhull/unix.c         // Qhull and rbox applications
370
  qconvex/qconvex.c    
371
  qhalf/qhalf.c
372
  qdelaunay/qdelaunay.c
373
  qvoronoi/qvoronoi.c
374
  rbox/rbox.c
375
376
  user_eg/user_eg.c    // example of using qhull_p.dll (requires -Dqh_QHpointer)
377
  user_eg2/user_eg2.c  // example of using qhull.dll from a user program
378
  user_eg3/user_eg3.cpp // example of Qhull's C++ interface with libqhullstatic_p.a
379
  qhulltest/qhulltest.cpp // Test of Qhull's C++ interface using Qt's QTestLib
380
  qhull-*.pri          // Include files for Qt projects
381
382
src/libqhull
383
  libqhull.pro         // Qt project for shared library (qhull.dll)
384
  index.htm            // design documentation for libqhull
385
  qh-*.htm
386
  qhull-exports.def    // Export Definition file for Visual C++
387
  Makefile             // Simple gcc Makefile for qhull and libqhullstatic.a
388
  Mborland             // Makefile for Borland C++ 5.0
389
390
  libqhull.h           // header file for qhull
391
  user.h               // header file of user definable constants 
392
  libqhull.c           // Quickhull algorithm with partitioning
393
  user.c               // user re-definable functions 
394
  usermem.c
395
  userprintf.c
396
  userprintf_rbox.c
397
398
  qhull_a.h            // include files for libqhull/*.c 
399
  geom.c               // geometric routines 
400
  geom2.c
401
  geom.h     
402
  global.c             // global variables 
403
  io.c                 // input-output routines 
404
  io.h   
405
  mem.c                // memory routines, this is stand-alone code 
406
  mem.h
407
  merge.c              // merging of non-convex facets 
408
  merge.h
409
  poly.c               // polyhedron routines 
410
  poly2.c
411
  poly.h 
412
  qset.c               // set routines, this only depends on mem.c 
413
  qset.h
414
  random.c             // utilities w/ Park & Miller's random number generator
415
  random.h
416
  rboxlib.c            // point set generator for rbox
417
  stat.c               // statistics 
418
  stat.h
419
420
src/libqhullp
421
  libqhullp.pro        // Qt project for shared library (qhull_p.dll)
422
  qhull_p-exports.def  // Export Definition file for Visual C++
423
424
src/libqhullstatic/
425
  libqhullstatic.pro   // Qt project for static library     
426
     
427
src/libqhullstaticp/
428
  libqhullstaticp.pro  // Qt project for static library with qh_QHpointer
429
     
430
src/libqhullcpp/
431
  libqhullcpp.pro      // Qt project for static C++ library     
432
  Qhull.cpp            // Call libqhull.c from C++
433
  Qhull.h
434
  qt-qhull.cpp         // Supporting methods for Qt
435
  qhull_interface.cpp  // Another approach to C++
436
    
437
  Coordinates.cpp      // input classes
438
  Coordinates.h
439
  PointCoordinates.cpp
440
  PointCoordinates.h
441
  RboxPoints.cpp       // call rboxlib.c from C++
442
  RboxPoints.h
443
444
  QhullFacet.cpp       // data structure classes
445
  QhullFacet.h
446
  QhullHyperplane.cpp
447
  QhullHyperplane.h
448
  QhullPoint.cpp
449
  QhullPoint.h
450
  QhullQh.cpp
451
  QhullStat.cpp
452
  QhullStat.h
453
  QhullVertex.cpp
454
  QhullVertex.h
455
  
456
  QhullFacetList.cpp   // collection classes
457
  QhullFacetList.h
458
  QhullFacetSet.cpp
459
  QhullFacetSet.h
460
  QhullIterator.h
461
  QhullLinkedList.h
462
  QhullPoints.cpp
463
  QhullPoints.h
464
  QhullPointSet.cpp
465
  QhullPointSet.h
466
  QhullRidge.cpp
467
  QhullRidge.h
468
  QhullSet.cpp
469
  QhullSet.h
470
  QhullSets.h
471
  QhullVertexSet.cpp
472
  QhullVertexSet.h
473
474
  functionObjects.h    // supporting classes
475
  QhullError.cpp
476
  QhullError.h
477
  QhullQh.cpp
478
  QhullQh.h
479
  UsingLibQhull.cpp
480
  UsingLibQhull.h
481
482
src/qhulltest/
483
  qhulltest.pro        // Qt project for test of C++ interface     
484
  Coordinates_test.cpp // Test of each class
485
  PointCoordinates_test.cpp
486
  Point_test.cpp
487
  QhullFacetList_test.cpp
488
  QhullFacetSet_test.cpp
489
  QhullFacet_test.cpp
490
  QhullHyperplane_test.cpp
491
  QhullLinkedList_test.cpp
492
  QhullPointSet_test.cpp
493
  QhullPoints_test.cpp
494
  QhullPoint_test.cpp
495
  QhullRidge_test.cpp
496
  QhullSet_test.cpp
497
  QhullVertexSet_test.cpp
498
  QhullVertex_test.cpp
499
  Qhull_test.cpp
500
  RboxPoints_test.cpp
501
  UsingLibQhull_test.cpp
502
503
src/road/
504
  RoadError.cpp        // Supporting base classes
505
  RoadError.h
506
  RoadLogEvent.cpp
507
  RoadLogEvent.h
508
  RoadTest.cpp         // Run multiple test files with QTestLib
509
  RoadTest.h
510
511
src/testqset/
512
  testqset.pro		// Qt project for test qset.c with mem.c
513
  testqset.c
514
  
515
-----------------
516
Authors:
517
518
  C. Bradford Barber                  Hannu Huhdanpaa (Version 1.0)
519
  bradb@shore.net                     hannu@qhull.org
520
  
521
  Qhull 1.0 and 2.0 were developed under NSF grants NSF/DMS-8920161 
522
  and NSF-CCR-91-15793 750-7504 at the Geometry Center and Harvard 
523
  University.  If you find Qhull useful, please let us know.