How to form a sphere with 1's in a 3D matrix
18 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 Lighting, Transparency, and Shading 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!