Mercurial > octave
annotate scripts/plot/draw/private/__calc_isovalue_from_data__.m @ 23219:3ac9f9ecfae5 stable
maint: Update copyright dates.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 22 Feb 2017 12:39:29 -0500 |
parents | e9a0469dedd9 |
children | 092078913d54 |
rev | line source |
---|---|
23219
3ac9f9ecfae5
maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents:
23083
diff
changeset
|
1 ## Copyright (C) 2016-2017 Markus Muetzel |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
2 ## |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
3 ## This file is part of Octave. |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
4 ## |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or (at |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
8 ## your option) any later version. |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
9 ## |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
13 ## General Public License for more details. |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
14 ## |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
17 ## <http://www.gnu.org/licenses/>. |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
18 |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
19 ## Undocumented internal function. |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
20 |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
21 ## -*- texinfo -*- |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
22 ## @deftypefn {} {@var{isoval} =} __calc_isovalue_from_data__ (@var{data}) |
22299
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22232
diff
changeset
|
23 ## Calculate a @nospell{"good"} iso value from histogram of data. |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
24 ## @end deftypefn |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
25 |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
26 ## called from isocaps, isosurface |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
27 |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
28 function isoval = __calc_isovalue_from_data__ (data) |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
29 |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
30 ## use a maximum of 10,000-20,000 samples to limit runtime of hist |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
31 step = 1; |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
32 ndata = numel (data); |
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
33 if (ndata > 20_000) |
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
34 step = floor (ndata / 10_000); |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
35 data = data(1:step:end); |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
36 ndata = numel (data); |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
37 endif |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
38 |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
39 num_bins = 100; |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
40 [bin_count, bin_centers] = hist (data(:), num_bins); |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
41 |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
42 ## if one of the first two bins contains more than 10 times the count as |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
43 ## compared to equally distributed data, remove both (zero-padded + noise) |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
44 if (any (bin_count(1:2) > 10 * (ndata / num_bins))) |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
45 bin_count(1:2) = []; |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
46 bin_centers(1:2) = []; |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
47 endif |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
48 |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
49 ## if bins have low counts, remove them (but keep them if we would lose |
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
50 ## more than 90% of bins) |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
51 bins_to_remove = find (bin_count < max (bin_count)/50); |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
52 if (length (bins_to_remove) < .9 * num_bins) |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
53 bin_centers(bins_to_remove) = []; |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
54 endif |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
55 |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
56 ## select middle bar of histogram with previous conditions |
22232
a8fd02bc895b
Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents:
22035
diff
changeset
|
57 isoval = bin_centers(floor (numel (bin_centers) / 2)); |
22035
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
58 |
634fbedbfb5b
Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
59 endfunction |