- Here, z is a row vector
- Z = z(:,ones(1,N)) is the same as z(:,[1 1 1 ... 1]) or repmat(z(:,1),1,N)
I can not create a 3D object with the following code
4 views (last 30 days)
Show older comments
Long
on 29 Mar 2024 at 13:02
Commented: Long
on 29 Mar 2024 at 16:06
%Generate a volume-swept 3D object
N = 40; %number of increments
z = linspace (-5,5,N);
radius = sqrt(1 +z.^2);
theta = 2*pi*linspace(0,1,N);
X = radius.*cos(theta);
Y = radius.*sin(theta);
Z = z(:,ones(1,N));% <-- Do not understand the code? Create a matrix Z?
surf(X,Y,Z)
axis equal
Error: Z is not a matrix
Thanks in advance!
0 Comments
Accepted Answer
Cris LaPierre
on 29 Mar 2024 at 14:17
Edited: Cris LaPierre
on 29 Mar 2024 at 14:19
To create a surface, your Z input must contain a value for every X-Y combination organized in a grid (matrix). Columns correspond to X, rows correspond to y.
Use MATLAB to see what that code is doing:
N=4;
z = linspace (-5,5,N)
z(:,ones(1,N))
repmat(z(:,1),1,N)
It just repeats the first value of your vector N times.
I think you are not getting the results you expect because z is a row vector, not a column vector. Perhaps this is what you intended?
N = 40; %number of increments
z = linspace (-5,5,N)'; % use ' to turn z into a column vector
radius = sqrt(1 +z.^2);
theta = 2*pi*linspace(0,1,N);
X = radius.*cos(theta);
Y = radius.*sin(theta);
Z = z(:,ones(1,N));% <-- Do not understand the code? Create a matrix Z?
surf(X,Y,Z)
axis equal
If you did intend for z to be a vector, you can use any 3D plotting functino to view it. Here is a result using scatter3.
%Generate a volume-swept 3D object
N = 40; %number of increments
z = linspace (-5,5,N);
radius = sqrt(1 +z.^2);
theta = 2*pi*linspace(0,1,N);
X = radius.*cos(theta);
Y = radius.*sin(theta);
Z = z(:,ones(1,N));% <-- Do not understand the code? Create a matrix Z?
scatter3(X,Y,Z)
axis equal
More Answers (0)
See Also
Categories
Find more on Object Containers in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!