How to create 3D volume plot of curved object with thickness
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Shawn Cheng
el 2 de Nov. de 2021
Comentada: Shawn Cheng
el 15 de Nov. de 2021
Hello all,
I am trying to create a volume that looks like it is part of a pipe in 3D. Currently with my limited ability, the best i can do is to draw a partial outline of the object, and iterate multiple times to create an appearance of depth. However i would like to know how can i best describe this as a proper surface.
parCircle(0,0,0,100,10,30)
function parCircle(x,y,azipos,range,drange,dazi)
degtorad = pi / 180;
lookangle = 10 * degtorad;
incl = 45 * degtorad;
theta = (2*pi-lookangle-incl):lookangle/10:(2*pi-incl);
for i = azipos-dazi:dazi/10:azipos+dazi
x_f = x + (range + drange)* cos(theta);
y_f = y + (range + drange)* sin(theta);
azipos_f = i + zeros(size(x_f));
x_n = x + (range - drange)* cos(theta);
y_n = y + (range- drange)* sin(theta);
azipos_n = i + zeros(size(x_f));
plot3(azipos_f, x_f, y_f,'b');
plot3(azipos_n, x_n, y_n,'r');
end
end
The result of this code is multiple partial circle which forms a top and bottom 'suface' not an actual volume.
0 comentarios
Respuesta aceptada
Abhiroop Rastogi
el 11 de Nov. de 2021
Hi Shawn,
As can be seen from the figure provided in the question, the edges of the top and the bottom surface will serve as the boundaries for the surface enclosing the volume of the pipe. The data points for the boundaries can be stored in the variables "X_Temp", "Y_Temp", and "Z_Temp", as shown below. After which we can use the "surf" function to plot the surface required, and the resultant volume of the pipe will appear as shown below.
parCircle(0,0,0,100,10,30)
function parCircle(x,y,azipos,range,drange,dazi)
degtorad = pi / 180;
lookangle = 10 * degtorad;
incl = 45 * degtorad;
theta = (2*pi-lookangle-incl):lookangle/10:(2*pi-incl);
% introducing new variables
X_F = []; X_N = [];
Y_F = []; Y_N = [];
aZiPos_F = []; aZiPos_N = [];
for i = azipos-dazi:dazi/10:azipos+dazi
x_f = x + (range + drange)* cos(theta);
y_f = y + (range + drange)* sin(theta);
azipos_f = i + zeros(size(x_f));
X_F = [X_F,x_f'];
Y_F = [Y_F,y_f'];
aZiPos_F = [aZiPos_F,azipos_f'];
x_n = x + (range - drange)* cos(theta);
y_n = y + (range- drange)* sin(theta);
azipos_n = i + zeros(size(x_f));
X_N = [X_N,x_n'];
Y_N = [Y_N,y_n'];
aZiPos_N = [aZiPos_N,azipos_n'];
end
% "xx_F" represents the coordinates of bottom surface
% "xx_N" represents the coordinates of top surface
X_Temp = [X_F(1,:),X_F(:,end)',flip(X_F(end,:)),flip(X_F(:,1)');...
X_N(1,:),X_N(:,end)',flip(X_N(end,:)),flip(X_N(:,1)')];
Y_Temp = [Y_F(1,:),Y_F(:,end)',flip(Y_F(end,:)),flip(Y_F(:,1)');...
Y_N(1,:),Y_N(:,end)',flip(Y_N(end,:)),flip(Y_N(:,1)')];
Z_Temp = [aZiPos_F(1,:),aZiPos_F(:,end)',flip(aZiPos_F(end,:)),flip(aZiPos_F(:,1)');...
aZiPos_N(1,:),aZiPos_N(:,end)',flip(aZiPos_N(end,:)),flip(aZiPos_N(:,1)')];
figure()
plot3(aZiPos_F, X_F, Y_F,'b');
hold on
plot3(aZiPos_N, X_N, Y_N,'r');
surf(Z_Temp,X_Temp,Y_Temp)
hold off
grid on
end
You can modify the shape of the pipe by adding more boundaries to the surface, where, the boundaries represent the edges of various cross sections of the pipe.
Más respuestas (0)
Ver también
Categorías
Más información sobre Image Segmentation and Analysis en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!