- 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
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
%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 Commenti
Risposta accettata
Cris LaPierre
il 29 Mar 2024
Modificato: Cris LaPierre
il 29 Mar 2024
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
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Object Containers in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!