Plot 3D cylindrical voxels filled or empty (boolean)

48 views (last 30 days)
Hi,
I have a matrix called h of size 9x36x20 [r, theta, z], containing 1's and 0's. Each number represent a voxel in a cylindrical figure. I would like to be able to plot in a 3d figure those with a 1 with some filled color, while leaving those with a zero transparent (could be with borders though, to make them look like a grid).
I would like to obtain something like this (drawn in inkscape, the matlab figure would be the whole cylinder with some red voxels).
Is it possible? I have already plotted some horizontal slices using patch to show the data at different heights, but this way is more representative

Accepted Answer

darova
darova on 24 May 2020
I draw your data
clc,clear
cla
load example.mat
[m,n,k] = size(diff);
[r,t,z] = ndgrid(1:m,1:n,1:k);
[x,y] = pol2cart(t,r);
ix = logical(diff);
plot3(x(ix),y(ix),z(ix),'.r')
axis vis3d
Here is the result. It's hard to see anything. Can you explain more?
  6 Comments
darova
darova on 25 May 2020
Easy way to add walls
t = (-15:15)*pi/180; % angle
t = [t(1) t t(end)];
[x1,y1] = pol2cart(t,1); % small arc
[x2,y2] = pol2cart(t,2); % large arc
x2([1 end]) = x1([1 end]);
y2([1 end]) = y1([1 end]);

Sign in to comment.

More Answers (1)

Diego Mesa
Diego Mesa on 24 May 2020
Edited: Diego Mesa on 24 May 2020
Here I'm attaching some example data.
Also I'm showing a slice, so it's easier to understand what I need. Instead of presenting 20 horizontal slices (as z has 20 values), I need to build a 3D plot, showing all the voxels.
Thanks!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!