
How to form a sphere with 1's in a 3D matrix
    19 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Vinit Nagda
 am 31 Aug. 2021
  
    
    
    
    
    Kommentiert: Vinit Nagda
 am 31 Aug. 2021
            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 Kommentare
Akzeptierte Antwort
  Wan Ji
      
 am 31 Aug. 2021
        
      Bearbeitet: Wan Ji
      
 am 31 Aug. 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 Kommentare
Weitere Antworten (2)
  Chunru
      
      
 am 31 Aug. 2021
        
      Bearbeitet: Chunru
      
      
 am 31 Aug. 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 Kommentare
Siehe auch
Kategorien
				Mehr zu Surface and Mesh Plots finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
