
How to form a sphere with 1's in a 3D matrix
    19 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
I have a matrix X=zeros(m,n,p);
If I know the radius value and matrix index for centroid position of sphere, how do I distribute 1's in the matrix such that it forms a sphere in the matrix? (Ignore part of sphere if it goes outside matrix dimensions)
Thank you.
0 commentaires
Réponse acceptée
  Wan Ji
      
 le 31 Août 2021
        
      Modifié(e) : Wan Ji
      
 le 31 Août 2021
  
      If there is no scale factor effect with different directions:
m = 80; n = 100; p=90;
[px,py,pz] = meshgrid(1:n, 1:m, 1:p);
radius = 20;
xc = 40; yc = 30; zc = 60; % the center of sphere
logicalSphere = (px-xc).^2 + (py-yc).^2 + (pz-zc).^2 <=radius*radius;
X = zeros(m,n,p);
X(logicalSphere) = 1; % set to zero
You can also show this sphere with isosurface and patch function
axis([0,n,0,m,0,p])
p=patch(isosurface(px,py,pz,X,0));
set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
daspect([1 1 1])
view(3)
hold on 
scatter3(px(:),py(:),pz(:),1,X(:),'filled')
camlight; lighting phong
The sphere is shown like

0 commentaires
Plus de réponses (2)
  Chunru
      
      
 le 31 Août 2021
        
      Modifié(e) : Chunru
      
      
 le 31 Août 2021
  
      [m, n, p] = deal(10, 12, 14);
[xg, yg, zg] = ndgrid(1:m, 1:n, 1:p);
xc = round(m/2); yc=round(n/2); zc=round(p/2);      % center
r = 3;
idx = (xg-xc).^2 + (yg-yc).^2 + (zg-zc).^2 <= r.^2;
s = false(size(xg));                                % the sphere
s(idx) = true;
plot3(xg(s), yg(s), zg(s), 'o');
grid on; box on
0 commentaires
Voir également
Catégories
				En savoir plus sur Surface and Mesh Plots dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
