SAGA API v9.10
Loading...
Searching...
No Matches
mat_grid_radius.cpp
Go to the documentation of this file.
1/**********************************************************
2 * Version $Id$
3 *********************************************************/
4
6// //
7// SAGA //
8// //
9// System for Automated Geoscientific Analyses //
10// //
11// Application Programming Interface //
12// //
13// Library: SAGA_API //
14// //
15//-------------------------------------------------------//
16// //
17// mat_grid_radius.cpp //
18// //
19// Copyright (C) 2005 by Olaf Conrad //
20// //
21//-------------------------------------------------------//
22// //
23// This file is part of 'SAGA - System for Automated //
24// Geoscientific Analyses'. //
25// //
26// This library is free software; you can redistribute //
27// it and/or modify it under the terms of the GNU Lesser //
28// General Public License as published by the Free //
29// Software Foundation, either version 2.1 of the //
30// License, or (at your option) any later version. //
31// //
32// This library is distributed in the hope that it will //
33// be useful, but WITHOUT ANY WARRANTY; without even the //
34// implied warranty of MERCHANTABILITY or FITNESS FOR A //
35// PARTICULAR PURPOSE. See the GNU Lesser General Public //
36// License for more details. //
37// //
38// You should have received a copy of the GNU Lesser //
39// General Public License along with this program; if //
40// not, see <http://www.gnu.org/licenses/>. //
41// //
42//-------------------------------------------------------//
43// //
44// contact: Olaf Conrad //
45// Institute of Geography //
46// University of Goettingen //
47// Goldschmidtstr. 5 //
48// 37077 Goettingen //
49// Germany //
50// //
51// e-mail: oconrad@saga-gis.org //
52// //
54
55//---------------------------------------------------------
56
57
59// //
60// Grid Radius //
61// //
63
64//---------------------------------------------------------
65#include "mat_tools.h"
66#include "grid.h"
67
68
70// //
71// //
72// //
74
75//---------------------------------------------------------
77{
78 m_maxRadius = 0;
79 m_nPoints = 0;
80 m_Points = NULL;
81 m_nPoints_R = NULL;
82 m_Points_R = NULL;
83
84 Create(maxRadius);
85}
86
87//---------------------------------------------------------
92
93
95// //
96// //
97// //
99
100//---------------------------------------------------------
101bool CSG_Grid_Radius::Create(int maxRadius)
102{
103 Destroy();
104
105 //-----------------------------------------------------
106 if( maxRadius > 0 && maxRadius != m_maxRadius )
107 {
108 int x, y, i, n;
109 double d;
110
111 m_maxRadius = maxRadius;
112
113 m_nPoints_R = (int *)SG_Calloc(m_maxRadius + 1, sizeof(int));
114
115 for(y=-m_maxRadius; y<=m_maxRadius; y++)
116 {
117 for(x=-m_maxRadius; x<=m_maxRadius; x++)
118 {
119 if( (d = M_GET_LENGTH(x, y)) <= m_maxRadius )
120 {
121 m_nPoints++;
122 m_nPoints_R[(int)d]++;
123 }
124 }
125 }
126
127 //-------------------------------------------------
128 if( m_nPoints > 0 )
129 {
130 m_Points = (TSG_Grid_Radius *)SG_Calloc(m_nPoints , sizeof(TSG_Grid_Radius ));
131 m_Points_R = (TSG_Grid_Radius **)SG_Calloc(m_maxRadius + 1, sizeof(TSG_Grid_Radius *));
132
133 for(i=0, n=0; i<=m_maxRadius; i++)
134 {
135 m_Points_R [i] = m_Points + n;
136 n += m_nPoints_R[i];
137 m_nPoints_R[i] = 0;
138 }
139
140 //---------------------------------------------
141 for(y=-m_maxRadius; y<=m_maxRadius; y++)
142 {
143 for(x=-m_maxRadius; x<=m_maxRadius; x++)
144 {
145 if( (d = M_GET_LENGTH(x, y)) <= m_maxRadius )
146 {
147 i = (int)d;
148 n = m_nPoints_R[i]++;
149
150 m_Points_R[i][n].x = x;
151 m_Points_R[i][n].y = y;
152 m_Points_R[i][n].d = d;
153 }
154 }
155 }
156
157 return( true );
158 }
159 }
160
161 //-----------------------------------------------------
162 Destroy();
163
164 return( false );
165}
166
167//---------------------------------------------------------
169{
170 if( m_Points )
171 {
172 SG_Free(m_Points);
173 }
174
175 if( m_nPoints_R )
176 {
177 SG_Free(m_nPoints_R);
178 }
179
180 if( m_Points_R )
181 {
182 SG_Free(m_Points_R);
183 }
184
185 m_maxRadius = 0;
186 m_nPoints = 0;
187 m_Points = NULL;
188 m_nPoints_R = NULL;
189 m_Points_R = NULL;
190}
191
192
194// //
195// //
196// //
198
199//---------------------------------------------------------
SAGA_API_DLL_EXPORT void SG_Free(void *memblock)
SAGA_API_DLL_EXPORT void * SG_Calloc(size_t num, size_t size)
CSG_Grid_Radius(int maxRadius=0)
bool Create(int maxRadius)
#define M_GET_LENGTH(x, y)
Definition mat_tools.h:139