June 2024
The volume of a unit sphere
in \(N\) dimensions is
$$
f(N) = \frac{(2\pi)^{(N//2)}}{ (N!!) (2)^{ {(-1)}^N } }
\tag{1}$$
where \(N//2\) is
integer division,
and \(N!!\) is the
double factorial.
For a sphere with radius \(R\),
$$
Volume = R^N f(N)
\tag{2}$$
$$
Surface Area = \frac{d}{dR} Volume = N R^{(N-1)} f(N)
\tag{3}$$

import math
# https://en.wikipedia.org/wiki/Double_factorial
def double_factorial(n):
r = 1
m = math.ceil(n/2) - 1
for k in range(m):
r *= (n - 2*k)
return r
def unit_volume(N):
return (2*math.pi)**(N//2) / double_factorial(N) / 2**(-1)**N
def volume(N, r=1.0):
return unit_volume(N) * r**N
def surface_area(N, r=1.0):
return unit_volume(N) * N*r**(N-1)
def circle_area(r):
return volume(2, r)
def circle_perimeter(r):
return surface_area(2, r)
def sphere_volume(r):
return volume(3, r)
def sphere_surface_area(r):
return surface_area(3, r)
# >>> sphere_surface_area(12)
# 1809.5573684677208
#
# >>> sphere_surface_area(0.5)
# 3.141592653589793
#
# >>> sphere_volume(12)
# 7238.229473870882
#
# >>> sphere_volume(0.5)
# 0.5235987755982988
#
# >>> circle_area(12)
# 452.3893421169302
#
# >>> circle_perimeter(12)
# 75.39822368615503

link | nitter