pbuk said:
In order to get as smooth a 3D shape as possible, there are two important things to get exactly right:
- the angles at the top of the pieces must add up to 360°
- there must be no angle at the mid point
We cannot get anything
exactly right, because we are using flat fabric pieces to approximate a surface that is nowhere flat. But we can approximate the shape. The higher the values we take for the two parameters I specified in my first post, the closer the approximation will be. The limit of the angle sum at the pole, as both n and m approach infinity, will be 360 degrees. But in fact it will come very close even for quite modest values of those parameters. Similarly, the angle at the midpoint approaches 180 degrees (straight) as m (the number of segments in half a lune) approaches infinity.
Naturally the case with four lunes, each of only two segments - the octahedron - is a poor approximation. Nobody would suggest using only four lunes, or only two segments. The purpose of including those drawings was to demonstrate how quickly the approximation improves as we increase the number of segments, and also because it makes it easier to conceptualise the shape of the segments.
pbuk said:
your pieces are too high ... a regular octahedron would be a better approximation to a sphere.
That's an excellent observation. It made me realize I got the horizontal scale wrong in the diagrams. The shape is indeed a regular octahedron. I've redone the diagrams with the scale corrected, and replaced the ones in my post above.
In drawing the diagrams I used the following equation for the distance to the lune outline from its centre line:
$$r \cos \theta\sin(\pi/n)$$
where ##\theta## is the elevation of the point above the equatorial plane and n is the number of lunes. That is half the length of an edge of the regular n-gon inscribed in the latitudinal circle at latitude ##\theta##.
The shape, for high m (number of segments per lune) is very close to the convex hull of n evenly spaced longitudinal great circles. It's what we'd get if we made a wire ball out of n evenly spaced longitudinal great circles and covered it in cling wrap. As n goes to infinity, that shape approximates a sphere.
More generally, the shape for any n and m is the convex hull of points on the surface of a sphere at the intersections of latitudinal lines of which there are m-1 in each hemisphere, excluding the equator, and n evenly spaced longitudinal lines (meridians). It's what we'd get if we made a spiky ball of radial wires going from the centre of a sphere to those points, and covered it with cling wrap that was strong enough not to be pierced by the ends of the wires. The shape is a polyhedron, so the surface is flat everywhere except at edges and vertices (which is required as we are using flat fabric) and it is easy to see that it approximates a sphere as n and m go to infinity.
I attach the R code used to produce the plots, for anybody that is interested.
[CODE title="Code for diagrams"]
n.lat.rng <- c(1, 2, 3, 10)
# c(5,10,20, 50) # number of latitudinal segments per hemisphere - span pi / 2
n.long.rng <- c(4, 12) # number of lunes (around the equator - span 2 pi)
r <- 1
setwd('/media/data/temp')
cols <- rep('black', 100)
#cols <- c('blue', 'green', 'red', 'black')
for (n.long in n.long.rng){
for (i in 1:length (n.lat.rng)){
png(paste('lune.', n.long, '.', n.lat.rng
, '.png', sep = '' ))
lats <- pi * (seq(0, 1, 1/(2 * n.lat.rng)) - 0.5)
dr <- r * diff(cos(lats)) * cos(pi / n.long)
dz <- r * diff(sin(lats))
dh <- sqrt(dz^2 + dr^2)
x <- c(0, cumsum(dh))
y1 <- r * cos(lats) * sin(pi / n.long)
plot(x = range(x), y = 1.1 * max(y1) * c(-1, 1), type = 'n',pty = 's', asp = 1, xlab = '', ylab = '')
lines(x, y1, col = cols)
lines(x, -y1, col = cols)
for (j in 1:length(x))
lines(x = rep(x[j], 2), y = c(-1,1) * y1[j])
dev.off()
}
}
[/CODE]