The goals of having a uniform distribution within the area and a uniform distribution on the boundary conflict; any solution will be a compromise between the two. I augmented the sunflower seed arrangement with an additional parameter alpha
that indicates how much one cares about the evenness of boundary.
alpha=0
gives the typical sunflower arrangement, with jagged boundary:
With alpha=2
the boundary is smoother:
(Increasing alpha further is problematic: Too many points end up on the boundary).
The algorithm places n
points, of which the k
th point is put at distance sqrt(k-1/2)
from the boundary (index begins with k=1
), and with polar angle 2*pi*k/phi^2
where phi
is the golden ratio. Exception: the last alpha*sqrt(n)
points are placed on the outer boundary of the circle, and the polar radius of other points is scaled to account for that. This computation of the polar radius is done in the function radius
.
It is coded in MATLAB.
function sunflower(n, alpha) % example: n=500, alpha=2
clf
hold on
b = round(alpha*sqrt(n)); % number of boundary points
phi = (sqrt(5)+1)/2; % golden ratio
for k=1:n
r = radius(k,n,b);
theta = 2*pi*k/phi^2;
plot(r*cos(theta), r*sin(theta), 'r*');
end
end
function r = radius(k,n,b)
if k>n-b
r = 1; % put on the boundary
else
r = sqrt(k-1/2)/sqrt(n-(b+1)/2); % apply square root
end
end