annotate libinterp/corefcn/__contourc__.cc @ 29278:7bfc454b9e08

contourc.m: Overhaul function. * contourc.m: Update calling forms of function in documentation. Wrap documentation to 80 characters. Add input validation that X,Y,Z be real. Rename internal variable vv to output variable lev. Rename internal variable cdat to output variable c. Remove test for nargout > 0 before transferring internal variables to output which prevented 'ans' from being assigned. Add BIST tests for new input validation and update existing BIST tests to pass. * _contourc__.cc: Use Octave convention of cuddling parenthesis to indicate indexing. * _contourc__.cc (__contourc__): Add Texinfo description of function. Remove input validation which is not necessary for internal function.
author Rik <rik@octave.org>
date Thu, 07 Jan 2021 11:11:39 -0800
parents bd51beb6205e
children 7854d5752dd2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
3 // Contour lines for function evaluated on a grid.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // Copyright (C) 2001-2020 The Octave Project Developers
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Adapted to an oct file from the stand alone contourl by Victro Munoz
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // Copyright (C) 2004 Victor Munoz
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // Based on contour plot routine (plcont.c) in PLPlot package
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 // http://plplot.org/
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // Copyright (C) 1995, 2000, 2001 Maurice LeBrun
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // Copyright (C) 2000, 2002 Joao Cardoso
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // Copyright (C) 2000, 2001, 2002, 2004 Alan W. Irwin
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 // Copyright (C) 2004 Andrew Ross
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
25 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
26 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
27 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
28 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
29 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
30 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
31 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
32 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
33 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
34 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
35 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
36 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
37 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
38 ////////////////////////////////////////////////////////////////////////
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
39
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21562
diff changeset
40 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
41 # include "config.h"
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
42 #endif
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
43
23455
73ff72d3d603 maint: Eliminate <cfloat.h> header from libinterp files
Rik <rik@octave.org>
parents: 23220
diff changeset
44 #include <limits>
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
45
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14501
diff changeset
46 #include "defun.h"
23455
73ff72d3d603 maint: Eliminate <cfloat.h> header from libinterp files
Rik <rik@octave.org>
parents: 23220
diff changeset
47 #include "ov.h"
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
48
20802
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
49 // FIXME: this looks like trouble...
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
50 static Matrix this_contour;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
51 static Matrix contourc;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
52 static int elem;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
53
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
54 // This is the quanta in which we increase this_contour.
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
55 #define CONTOUR_QUANT 50
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
56
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
57 // Add a coordinate point (x,y) to this_contour.
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
58 static void
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
59 add_point (double x, double y)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
60 {
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
61 if (elem % CONTOUR_QUANT == 0)
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
62 this_contour = this_contour.append (Matrix (2, CONTOUR_QUANT, 0));
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
63
29278
7bfc454b9e08 contourc.m: Overhaul function.
Rik <rik@octave.org>
parents: 27923
diff changeset
64 this_contour(0, elem) = x;
7bfc454b9e08 contourc.m: Overhaul function.
Rik <rik@octave.org>
parents: 27923
diff changeset
65 this_contour(1, elem) = y;
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
66 elem++;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
67 }
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
68
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
69 // Add contents of current contour to contourc.
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
70 // this_contour.cols () - 1;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
71 static void
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
72 end_contour (void)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
73 {
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
74 if (elem > 2)
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
75 {
29278
7bfc454b9e08 contourc.m: Overhaul function.
Rik <rik@octave.org>
parents: 27923
diff changeset
76 this_contour(1, 0) = elem - 1;
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
77 contourc = contourc.append (this_contour.extract_n (0, 0, 2, elem));
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
78 }
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
79
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
80 this_contour = Matrix ();
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
81 elem = 0;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
82 }
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
83
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
84 // Start a new contour, and add contents of current one to contourc.
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
85
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
86 static void
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
87 start_contour (double lvl, double x, double y)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
88 {
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
89 end_contour ();
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
90 this_contour.resize (2, 0);
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
91 add_point (lvl, 0);
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
92 add_point (x, y);
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
93 }
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
94
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
95 static void
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
96 drawcn (const RowVector& X, const RowVector& Y, const Matrix& Z,
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
97 double lvl, int r, int c, double ct_x, double ct_y,
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
98 unsigned int start_edge, bool first, charMatrix& mark)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
99 {
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
100 double px[4], py[4], pz[4], tmp;
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
101 unsigned int stop_edge, pt[2];
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
102
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
103 // Continue while next facet is not done yet.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
104 while (r >= 0 && c >= 0 && r < mark.rows () && c < mark.cols ()
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
105 && mark(r, c) > 0)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
106 {
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
107
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
108 //get x, y, and z - lvl for current facet
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
109 px[0] = px[3] = X(c);
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
110 px[1] = px[2] = X(c+1);
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
111
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
112 py[0] = py[1] = Y(r);
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
113 py[2] = py[3] = Y(r+1);
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
114
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
115 pz[3] = Z(r+1, c) - lvl;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
116 pz[2] = Z(r+1, c + 1) - lvl;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
117 pz[1] = Z(r, c+1) - lvl;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
118 pz[0] = Z(r, c) - lvl;
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
119
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
120 // Facet edge and point naming assignment.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
121 //
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
122 // 0-----1 .-0-.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
123 // | | | |
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
124 // | | 3 1
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
125 // | | | |
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
126 // 3-----2 .-2-.
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
127
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
128 // Get mark value of current facet.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
129 char id = static_cast<char> (mark(r, c));
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
130
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
131 // Check startedge s.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
132 if (start_edge == 255)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
133 {
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
134 // Find start edge.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
135 for (unsigned int k = 0; k < 4; k++)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
136 if (static_cast<char> (1 << k) & id)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
137 start_edge = k;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
138 }
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
139
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
140 if (start_edge == 255)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
141 break;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
142
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
143 // Decrease mark value of current facet for start edge.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
144 mark(r, c) -= static_cast<char> (1 << start_edge);
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
145
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
146 // Next point (clockwise).
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
147 pt[0] = start_edge;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
148 pt[1] = (pt[0] + 1) % 4;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
149
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
150 // Calculate contour segment start if first of contour.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
151 if (first)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
152 {
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
153 tmp = fabs (pz[pt[1]]) / fabs (pz[pt[0]]);
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
154
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
155 if (octave::math::isnan (tmp))
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
156 ct_x = ct_y = 0.5;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
157 else
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
158 {
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
159 ct_x = px[pt[0]] + (px[pt[1]] - px[pt[0]])/(1 + tmp);
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
160 ct_y = py[pt[0]] + (py[pt[1]] - py[pt[0]])/(1 + tmp);
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
161 }
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
162
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
163 start_contour (lvl, ct_x, ct_y);
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
164 first = false;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
165 }
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
166
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
167 // Find stop edge.
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
168 // FIXME: perhaps this should use a while loop?
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
169 for (unsigned int k = 1; k <= 4; k++)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
170 {
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
171 if (start_edge == 0 || start_edge == 2)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
172 stop_edge = (start_edge + k) % 4;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
173 else
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
174 stop_edge = (start_edge - k) % 4;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
175
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
176 if (static_cast<char> (1 << stop_edge) & id)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
177 break;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
178 }
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
179
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
180 pt[0] = stop_edge;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
181 pt[1] = (pt[0] + 1) % 4;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
182 tmp = fabs (pz[pt[1]]) / fabs (pz[pt[0]]);
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
183
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
184 if (octave::math::isnan (tmp))
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
185 ct_x = ct_y = 0.5;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
186 else
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
187 {
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
188 ct_x = px[pt[0]] + (px[pt[1]] - px[pt[0]])/(1 + tmp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
189 ct_y = py[pt[0]] + (py[pt[1]] - py[pt[0]])/(1 + tmp);
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
190 }
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
191
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
192 // Add point to contour.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
193 add_point (ct_x, ct_y);
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
194
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
195 // Decrease id value of current facet for start edge.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
196 mark(r, c) -= static_cast<char> (1 << stop_edge);
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
197
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
198 // Find next facet.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
199 if (stop_edge == 0)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
200 r--;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
201 else if (stop_edge == 1)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
202 c++;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
203 else if (stop_edge == 2)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
204 r++;
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
205 else if (stop_edge == 3)
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
206 c--;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
207
15867
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
208 // Go to next facet.
704e15f8fecd Modify contourc recursion to a loop to avoid stack overflow (bug #37891)
Mike Miller <mtmiller@ieee.org>
parents: 15220
diff changeset
209 start_edge = (stop_edge + 2) % 4;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
210
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
211 }
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
212 }
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
213
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
214 static void
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
215 mark_facets (const Matrix& Z, charMatrix& mark, double lvl)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
216 {
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
217 unsigned int nr = mark.rows ();
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
218 unsigned int nc = mark.cols ();
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
219
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
220 double f[4];
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
221
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
222 for (unsigned int c = 0; c < nc; c++)
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
223 for (unsigned int r = 0; r < nr; r++)
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
224 {
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
225 f[0] = Z(r, c) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
226 f[1] = Z(r, c+1) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
227 f[3] = Z(r+1, c) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
228 f[2] = Z(r+1, c+1) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
229
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
230 for (unsigned int i = 0; i < 4; i++)
15220
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
231 if (fabs(f[i]) < std::numeric_limits<double>::epsilon ())
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
232 f[i] = std::numeric_limits<double>::epsilon ();
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
233
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
234 if (f[1] * f[2] < 0)
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
235 mark(r, c) += 2;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
236
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
237 if (f[0] * f[3] < 0)
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
238 mark(r, c) += 8;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
239 }
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
240
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
241 for (unsigned int r = 0; r < nr; r++)
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
242 for (unsigned int c = 0; c < nc; c++)
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
243 {
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
244 f[0] = Z(r, c) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
245 f[1] = Z(r, c+1) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
246 f[3] = Z(r+1, c) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
247 f[2] = Z(r+1, c+1) - lvl;
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
248
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
249 for (unsigned int i = 0; i < 4; i++)
15220
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
250 if (fabs(f[i]) < std::numeric_limits<double>::epsilon ())
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
251 f[i] = std::numeric_limits<double>::epsilon ();
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
252
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
253 if (f[0] * f[1] < 0)
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
254 mark(r, c) += 1;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
255
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
256 if (f[2] * f[3] < 0)
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
257 mark(r, c) += 4;
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
258 }
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
259 }
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
260
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
261 static void
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
262 cntr (const RowVector& X, const RowVector& Y, const Matrix& Z, double lvl)
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
263 {
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
264 unsigned int nr = Z.rows ();
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
265 unsigned int nc = Z.cols ();
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
266
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
267 charMatrix mark (nr - 1, nc - 1, 0);
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
268
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
269 mark_facets (Z, mark, lvl);
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
270
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
271 // Find contours that start at a domain edge.
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
272
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
273 for (unsigned int c = 0; c < nc - 1; c++)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
274 {
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
275 // Top.
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
276 if (mark(0, c) & 1)
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
277 drawcn (X, Y, Z, lvl, 0, c, 0.0, 0.0, 0, true, mark);
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
278
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
279 // Bottom.
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
280 if (mark(nr - 2, c) & 4)
10154
40dfc0c99116 DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
281 drawcn (X, Y, Z, lvl, nr - 2, c, 0.0, 0.0, 2, true, mark);
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
282 }
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
283
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
284 for (unsigned int r = 0; r < nr - 1; r++)
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
285 {
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
286 // Left.
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
287 if (mark(r, 0) & 8)
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
288 drawcn (X, Y, Z, lvl, r, 0, 0.0, 0.0, 3, true, mark);
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
289
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
290 // Right.
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
291 if (mark(r, nc - 2) & 2)
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
292 drawcn (X, Y, Z, lvl, r, nc - 2, 0.0, 0.0, 1, true, mark);
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
293 }
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
294
7070
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
295 for (unsigned int r = 0; r < nr - 1; r++)
7593f8e83a2e [project @ 2007-10-25 20:41:16 by jwe]
jwe
parents: 7042
diff changeset
296 for (unsigned int c = 0; c < nc - 1; c++)
7042
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
297 if (mark (r, c) > 0)
e54cc03d53f6 [project @ 2007-10-19 20:43:32 by jwe]
jwe
parents: 7017
diff changeset
298 drawcn (X, Y, Z, lvl, r, c, 0.0, 0.0, 255, true, mark);
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
299 }
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
300
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14501
diff changeset
301 DEFUN (__contourc__, args, ,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21782
diff changeset
302 doc: /* -*- texinfo -*-
29278
7bfc454b9e08 contourc.m: Overhaul function.
Rik <rik@octave.org>
parents: 27923
diff changeset
303 @deftypefn {} {@var{c} =} __contourc__ (@var{x}, @var{y}, @var{z}, @var{levels})
7bfc454b9e08 contourc.m: Overhaul function.
Rik <rik@octave.org>
parents: 27923
diff changeset
304 Calculate Z-level contours (isolines).
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21782
diff changeset
305 @end deftypefn */)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
306 {
20802
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
307 RowVector X = args(0).row_vector_value ();
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
308 RowVector Y = args(1).row_vector_value ();
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
309 Matrix Z = args(2).matrix_value ();
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
310 RowVector L = args(3).row_vector_value ();
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
311
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
312 contourc.resize (2, 0);
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
313
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
314 for (int i = 0; i < L.numel (); i++)
29278
7bfc454b9e08 contourc.m: Overhaul function.
Rik <rik@octave.org>
parents: 27923
diff changeset
315 cntr (X, Y, Z, L(i));
20802
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
316
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
317 end_contour ();
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
318
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20667
diff changeset
319 return octave_value (contourc);
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents:
diff changeset
320 }
12805
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11586
diff changeset
321
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11586
diff changeset
322 /*
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11586
diff changeset
323 ## No test needed for internal helper function.
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11586
diff changeset
324 %!assert (1)
3641167e5b75 codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents: 11586
diff changeset
325 */