GRASS Programmer's Manual
6.5.svn(2014)-r66266
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
sphvol.c
Go to the documentation of this file.
1
2
/****************************************************************************
3
* MODULE: R-Tree library
4
*
5
* AUTHOR(S): Antonin Guttman - original code
6
* Daniel Green (green@superliminal.com) - major clean-up
7
* and implementation of bounding spheres
8
*
9
* PURPOSE: Multidimensional index
10
*
11
* COPYRIGHT: (C) 2001 by the GRASS Development Team
12
*
13
* This program is free software under the GNU General Public
14
* License (>=v2). Read the file COPYING that comes with GRASS
15
* for details.
16
*****************************************************************************/
17
18
/*
19
* SPHERE VOLUME
20
* by Daniel Green
21
* dgreen@superliminal.com
22
*
23
* Calculates and prints the volumes of the unit hyperspheres for
24
* dimensions zero through the given value, or 9 by default.
25
* Prints in the form of a C array of double called sphere_volumes.
26
*
27
* From formule in "Regular Polytopes" by H.S.M Coxeter, the volume
28
* of a hypersphere of dimension d is:
29
* Pi^(d/2) / gamma(d/2 + 1)
30
*
31
* This implementation works by first computing the log of the above
32
* function and then returning the exp of that value in order to avoid
33
* instabilities due to the huge values that the real gamma function
34
* would return.
35
*
36
* Multiply the output volumes by R^n to get the volume of an n
37
* dimensional sphere of radius R.
38
*/
39
40
#include <stdlib.h>
41
#include <stdio.h>
42
#include <math.h>
43
#include <grass/gis.h>
44
45
static
void
print_volume(
int
dimension,
double
volume)
46
{
47
fprintf(stdout,
"\t%.6f, /* dimension %3d */\n"
, volume, dimension);
48
}
49
50
static
double
sphere_volume
(
double
dimension)
51
{
52
double
log_gamma, log_volume;
53
54
log_gamma = gamma(dimension / 2.0 + 1);
55
log_volume = dimension / 2.0 *
log
(M_PI) - log_gamma;
56
return
exp(log_volume);
57
}
58
59
extern
int
main
(
int
argc,
char
*argv[])
60
{
61
int
dim, max_dims = 9;
62
63
if
(2 == argc)
64
max_dims = atoi(argv[1]);
65
66
fprintf(stdout,
"static const double sphere_volumes[] = {\n"
);
67
for
(dim = 0; dim < max_dims + 1; dim++)
68
print_volume(dim,
sphere_volume
(dim));
69
fprintf(stdout,
"};\n"
);
70
return
0;
71
}
sphere_volume
double sphere_volume(double dimension)
Definition:
gammavol.c:27
wxnviz.log
log
Definition:
wxnviz.py:54
main
int main(int argc, char *argv[])
Definition:
gem/main.c:302
lib
vector
rtree
sphvol.c
Generated on Sat Jan 2 2016 01:46:49 for GRASS Programmer's Manual by
1.8.5