function v=blinnblob(centers,nx,ny,nz)
% Blinn's blobs
%
% Make something vaguely benzene like as follows:
%
% centers=[20+8*cos(theta);20+8*sin(theta);20+zeros(1,6)]'
% v=blob(centers,40,40,40)
% isosurface(v,.125)
% Written by Mike Garrity
% Copyright 2000, 2001, 2002, 2003, 2004, 2005 The MathWorks Inc
%
% From ACM Transactions on Graphics, July 1982, Volume 1, Number 3.
% "A Generalization of A;gebraic Surface Drawing" James F. Blinn
x=makeXMat(nx,ny,nz);
y=makeYMat(nx,ny,nz);
z=makeZMat(nx,ny,nz);
a=.05;
b=1;
numCenters=size(centers,1);
v=zeros(nx,ny,nz);
for i=1:numCenters
dx=centers(i,1)-x;
dy=centers(i,2)-y;
dz=centers(i,3)-z;
v=v+b*exp(-a*(dx.^2 + dy.^2 + dz.^2));
end
function x=makeXMat(nx,ny,nz)
x=repmat([1:ny],[nx 1 nz]);
function y=makeYMat(nx,ny,nz)
y=repmat([1:nx]',[1 ny nz]);
function z=makeZMat(nx,ny,nz)
z=repmat([1:nz],nx*ny,1);
z=reshape(z,[nx ny nz]);