Mercurial > hg > octave-jordi
annotate src/DLD-FUNCTIONS/convhulln.cc @ 14339:3e4350f09a55 stable
close temporary files opened for Qhull
* __delaunay__.cc (close_fcn): New static function.
(F__delaunay__): Add close_fcn and outfile to unwind protect stack.
* __voronoi__.cc (close_fcn): New static function.
(F__voronoi__): Add close_fcn and outfile to unwind protect stack.
* convhull.cc (close_fcn): New static function.
(Fconvhull): Add close_fcn and outfile to unwind protect stack.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 06 Feb 2012 15:54:10 -0500 |
parents | decea31ea010 |
children | 9b23169e2712 065bc7944335 |
rev | line source |
---|---|
6823 | 1 /* |
2 | |
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
14043
diff
changeset
|
3 Copyright (C) 2000-2012 Kai Habel |
6823 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
6823 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
6823 | 20 |
21 */ | |
22 | |
23 /* | |
24 29. July 2000 - Kai Habel: first release | |
25 2002-04-22 Paul Kienzle | |
26 * Use warning(...) function rather than writing to cerr | |
27 2006-05-01 Tom Holroyd | |
28 * add support for consistent winding in all dimensions; output is | |
29 * guaranteed to be simplicial. | |
30 */ | |
31 | |
32 #ifdef HAVE_CONFIG_H | |
33 #include <config.h> | |
34 #endif | |
9786
2c279308f6ab
fix includes in some src/DLD-FUNCTIONS files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
35 |
2c279308f6ab
fix includes in some src/DLD-FUNCTIONS files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
36 #include <sstream> |
2c279308f6ab
fix includes in some src/DLD-FUNCTIONS files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
37 |
6823 | 38 #include "Cell.h" |
9786
2c279308f6ab
fix includes in some src/DLD-FUNCTIONS files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
39 #include "defun-dld.h" |
2c279308f6ab
fix includes in some src/DLD-FUNCTIONS files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
40 #include "error.h" |
2c279308f6ab
fix includes in some src/DLD-FUNCTIONS files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
41 #include "oct-obj.h" |
2c279308f6ab
fix includes in some src/DLD-FUNCTIONS files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
42 #include "parse.h" |
14339
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
43 #include "unwind-prot.h" |
6823 | 44 |
14043
f913363318e0
handle new names and locations of qhull include files (bug #33712)
John W. Eaton <jwe@octave.org>
parents:
13879
diff
changeset
|
45 #if defined (HAVE_QHULL) |
f913363318e0
handle new names and locations of qhull include files (bug #33712)
John W. Eaton <jwe@octave.org>
parents:
13879
diff
changeset
|
46 # include "oct-qhull.h" |
f913363318e0
handle new names and locations of qhull include files (bug #33712)
John W. Eaton <jwe@octave.org>
parents:
13879
diff
changeset
|
47 # if defined (NEED_QHULL_VERSION) |
6823 | 48 char qh_version[] = "convhulln.oct 2007-07-24"; |
10474
b2143d97c002
Neither include qhull/qhull_a.h nor run tests unless we HAVE_QHULL.
David Grundberg <davidg@cs.umu.se>
parents:
10257
diff
changeset
|
49 # endif |
14043
f913363318e0
handle new names and locations of qhull include files (bug #33712)
John W. Eaton <jwe@octave.org>
parents:
13879
diff
changeset
|
50 #endif |
6823 | 51 |
14339
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
52 static void |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
53 close_fcn (FILE *f) |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
54 { |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
55 gnulib::fclose (f); |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
56 } |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
57 |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
58 DEFUN_DLD (convhulln, args, nargout, |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
59 "-*- texinfo -*-\n\ |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
60 @deftypefn {Loadable Function} {@var{h} =} convhulln (@var{pts})\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
61 @deftypefnx {Loadable Function} {@var{h} =} convhulln (@var{pts}, @var{options})\n\ |
8788 | 62 @deftypefnx {Loadable Function} {[@var{h}, @var{v}] =} convhulln (@dots{})\n\ |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
63 Compute the convex hull of the set of points @var{pts} which is a matrix\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
64 of size [n, dim] containing n points in a space of dimension dim.\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
65 The hull @var{h} is an index vector into the set of points and specifies\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
66 which points form the enclosing hull.\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
67 \n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
68 An optional second argument, which must be a string or cell array of strings,\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
69 contains options passed to the underlying qhull command.\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
70 See the documentation for the Qhull library for details\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
71 @url{http://www.qhull.org/html/qh-quick.htm#options}.\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
72 The default options depend on the dimension of the input:\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
73 \n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
74 @itemize\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
75 @item 2D, 3D, 4D: @var{options} = @code{@{\"Qt\"@}}\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
76 \n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
77 @item 5D and higher: @var{options} = @code{@{\"Qt\", \"Qx\"@}}\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
78 @end itemize\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
79 \n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
80 If @var{options} is not present or @code{[]} then the default arguments are\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
81 used. Otherwise, @var{options} replaces the default argument list.\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
82 To append user options to the defaults it is necessary to repeat the\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
83 default arguments in @var{options}. Use a null string to pass no arguments.\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
84 \n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
85 If the second output @var{v} is requested the volume of the enclosing\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
86 convex hull is calculated.\n\n\ |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
87 @seealso{convhull, delaunayn, voronoin}\n\ |
6823 | 88 @end deftypefn") |
89 { | |
90 octave_value_list retval; | |
6959 | 91 |
14043
f913363318e0
handle new names and locations of qhull include files (bug #33712)
John W. Eaton <jwe@octave.org>
parents:
13879
diff
changeset
|
92 #if defined (HAVE_QHULL) |
6823 | 93 |
6959 | 94 int nargin = args.length (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
95 if (nargin < 1 || nargin > 2) |
6823 | 96 { |
97 print_usage (); | |
98 return retval; | |
99 } | |
100 | |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
101 Matrix points (args(0).matrix_value ()); |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
102 const octave_idx_type dim = points.columns (); |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
103 const octave_idx_type num_points = points.rows (); |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
104 |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
105 points = points.transpose (); |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
106 |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
107 std::string options; |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
108 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
109 if (dim <= 4) |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
110 options = " Qt"; |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
111 else |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
112 options = " Qt Qx"; |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
113 |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
114 if (nargin == 2) |
6823 | 115 { |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
116 if (args(1).is_string ()) |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
117 options = " " + args(1).string_value (); |
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
118 else if (args(1).is_empty ()) |
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
119 ; // Use default options. |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
120 else if (args(1).is_cellstr ()) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
121 { |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
122 options = ""; |
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
123 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
124 Array<std::string> tmp = args(1).cellstr_value (); |
6823 | 125 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
126 for (octave_idx_type i = 0; i < tmp.numel (); i++) |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
127 options += " " + tmp(i); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
128 } |
6823 | 129 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
130 { |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
131 error ("convhulln: OPTIONS must be a string, cell array of strings, or empty"); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
132 return retval; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
133 } |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
134 } |
6823 | 135 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
136 boolT ismalloc = false; |
10257
cd550069240e
assume vsnprintf from gnulib; use sstream instead of snprintf
John W. Eaton <jwe@octave.org>
parents:
10154
diff
changeset
|
137 |
14339
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
138 unwind_protect frame; |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
139 |
14309
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
140 // Replace the outfile pointer with stdout for debugging information. |
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
141 #if defined (OCTAVE_HAVE_WINDOWS_FILESYSTEM) && ! defined (OCTAVE_HAVE_POSIX_FILESYSTEM) |
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
142 FILE *outfile = gnulib::fopen ("NUL", "w"); |
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
143 #else |
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
144 FILE *outfile = gnulib::fopen ("/dev/null", "w"); |
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
145 #endif |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
146 FILE *errfile = stderr; |
14339
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
147 |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
148 if (outfile) |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
149 frame.add_fcn (close_fcn, outfile); |
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
150 else |
14309
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
151 { |
14339
3e4350f09a55
close temporary files opened for Qhull
John W. Eaton <jwe@octave.org>
parents:
14310
diff
changeset
|
152 error ("convhulln: unable to create temporary file for output"); |
14309
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
153 return retval; |
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
154 } |
824e5d362aba
Fix Qhull calling convention by passing true file pointer to qh_new_qhull
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
155 |
13879
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
156 // qh_new_qhull command and points arguments are not const... |
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
157 |
440d7914cf01
fix regression in __voronoi__ and convhulln option processing
John W. Eaton <jwe@octave.org>
parents:
13877
diff
changeset
|
158 std::string cmd = "qhull" + options; |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
159 |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
160 OCTAVE_LOCAL_BUFFER (char, cmd_str, cmd.length () + 1); |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
161 |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
162 strcpy (cmd_str, cmd.c_str ()); |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
163 |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
164 int exitcode = qh_new_qhull (dim, num_points, points.fortran_vec (), |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
165 ismalloc, cmd_str, outfile, errfile); |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
166 if (! exitcode) |
6823 | 167 { |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
168 bool nonsimp_seen = false; |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
169 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
170 octave_idx_type nf = qh num_facets; |
6823 | 171 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
172 Matrix idx (nf, dim + 1); |
6823 | 173 |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
174 facetT *facet; |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
175 |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
176 octave_idx_type i = 0; |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
177 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
178 FORALLfacets |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
179 { |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
180 octave_idx_type j = 0; |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
181 |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
182 if (! nonsimp_seen && ! facet->simplicial) |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
183 { |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
184 nonsimp_seen = true; |
6823 | 185 |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
186 if (cmd.find ("QJ") != std::string::npos) |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
187 { |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
188 // Should never happen with QJ. |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
189 error ("convhulln: qhull failed: option 'QJ' returned non-simplicial facet"); |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
190 return retval; |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
191 } |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
192 } |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
193 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
194 if (dim == 3) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
195 { |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
196 setT *vertices = qh_facet3vertex (facet); |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
197 |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
198 vertexT *vertex, **vertexp; |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
199 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
200 FOREACHvertex_ (vertices) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
201 idx(i, j++) = 1 + qh_pointid(vertex->point); |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
202 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
203 qh_settempfree (&vertices); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
204 } |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
205 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
206 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
207 if (facet->toporient ^ qh_ORIENTclock) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
208 { |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
209 vertexT *vertex, **vertexp; |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
210 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
211 FOREACHvertex_ (facet->vertices) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
212 idx(i, j++) = 1 + qh_pointid(vertex->point); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
213 } |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
214 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
215 { |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
216 vertexT *vertex, **vertexp; |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
217 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
218 FOREACHvertexreverse12_ (facet->vertices) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
219 idx(i, j++) = 1 + qh_pointid(vertex->point); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
220 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
221 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
222 if (j < dim) |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
223 warning ("convhulln: facet %d only has %d vertices", i, j); |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
224 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
225 i++; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
226 } |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
227 |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
228 // Remove extra dimension if all facets were simplicial. |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
229 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
230 if (! nonsimp_seen) |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
231 idx.resize (nf, dim, 0.0); |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
232 |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
233 if (nargout == 2) |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
234 { |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
235 // Calculate volume of convex hull, taken from qhull src/geom2.c. |
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
236 |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
237 realT area; |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
238 realT dist; |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
239 |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
240 FORALLfacets |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
241 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
242 if (! facet->normal) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
243 continue; |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
244 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
245 if (facet->upperdelaunay && qh ATinfinity) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
246 continue; |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
247 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
248 facet->f.area = area = qh_facetarea (facet); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
249 facet->isarea = True; |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
250 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
251 if (qh DELAUNAY) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
252 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
253 if (facet->upperdelaunay == qh UPPERdelaunay) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
254 qh totarea += area; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
255 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
256 else |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
257 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
258 qh totarea += area; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
259 qh_distplane (qh interior_point, facet, &dist); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
260 qh totvol += -dist * area/ qh hull_dim; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
261 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9786
diff
changeset
|
262 } |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
263 |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
264 retval(1) = octave_value (qh totvol); |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
265 } |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
266 |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
267 retval(0) = idx; |
6823 | 268 } |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
269 else |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
270 error ("convhulln: qhull failed"); |
6959 | 271 |
13877
0d32a681d943
* convhulln.cc: Clean up argument parsing and variable decls.
John W. Eaton <jwe@octave.org>
parents:
13746
diff
changeset
|
272 // Free memory from Qhull |
6959 | 273 qh_freeqhull (! qh_ALL); |
274 | |
6823 | 275 int curlong, totlong; |
276 qh_memfreeshort (&curlong, &totlong); | |
277 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
278 if (curlong || totlong) |
6959 | 279 warning ("convhulln: did not free %d bytes of long memory (%d pieces)", |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
280 totlong, curlong); |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
281 |
6823 | 282 #else |
283 error ("convhulln: not available in this version of Octave"); | |
284 #endif | |
6959 | 285 |
6823 | 286 return retval; |
287 } | |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
288 |
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
289 /* |
10474
b2143d97c002
Neither include qhull/qhull_a.h nor run tests unless we HAVE_QHULL.
David Grundberg <davidg@cs.umu.se>
parents:
10257
diff
changeset
|
290 %!testif HAVE_QHULL |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
291 %! cube = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1]; |
14310 | 292 %! [h, v] = convhulln (cube, "Qt"); |
293 %! assert (size (h), [12 3]); | |
294 %! h = sortrows (sort (h, 2), [1:3]); | |
295 %! assert (h, [1 2 4; 1 2 6; 1 4 8; 1 5 6; 1 5 8; 2 3 4; 2 3 7; 2 6 7; 3 4 7; 4 7 8; 5 6 7; 5 7 8]); | |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
296 %! assert (v, 1, 10*eps); |
14310 | 297 %! [h2, v2] = convhulln (cube); % Test defaut option = "Qt" |
298 %! assert (size (h2), size (h)) | |
299 %! h2 = sortrows (sort (h2, 2), [1:3]); | |
300 %! assert (h2, h); | |
301 %! assert (v2, v, 10*eps); | |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
302 |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
303 %!testif HAVE_QHULL |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
304 %! cube = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1]; |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
305 %! [h, v] = convhulln (cube, "QJ"); |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
306 %! assert (size (h), [12 3]); |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
307 %! assert (sortrows (sort (h, 2), [1:3]), [1 2 4; 1 2 5; 1 4 5; 2 3 4; 2 3 6; 2 5 6; 3 4 8; 3 6 7; 3 7 8; 4 5 8; 5 6 8; 6 7 8]); |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
308 %! assert (v, 1.0, 1e6*eps); |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
309 |
10474
b2143d97c002
Neither include qhull/qhull_a.h nor run tests unless we HAVE_QHULL.
David Grundberg <davidg@cs.umu.se>
parents:
10257
diff
changeset
|
310 %!testif HAVE_QHULL |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
311 %! tetrahedron = [1 1 1;-1 -1 1;-1 1 -1;1 -1 -1]; |
13746
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
312 %! [h, v] = convhulln (tetrahedron); |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
313 %! h = sortrows (sort (h, 2), [1 2 3]); |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
314 %! assert (h, [1 2 3;1 2 4; 1 3 4; 2 3 4]); |
7ff0bdc3dc4c
Revamp geometry functions dependent on Qhull (Bug #34604, Bug #33346)
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
315 %! assert (v, 8/3, 10*eps); |
8786
dbd428efbf56
Add calculation convex hull volume
Kai Habel <kai.habel@gmx.de>
parents:
7520
diff
changeset
|
316 */ |