# How do I plot a toroid in MATLAB?

165 Ansichten (letzte 30 Tage)
MathWorks Support Team am 27 Jun. 2009
Beantwortet: DGM am 8 Jan. 2022
I would like to plot a toroid in MATLAB but MATLAB does not have a built in function to do this.

### Akzeptierte Antwort

MathWorks Support Team am 27 Jun. 2009
You will need to formulate the x, y, and z-coordinate matrices manually and then plot them using the SURF function.
The SURF and MESH functions accept only one set of x, y, and z-coordinates, but in a toroid, (x,y) ordered pairs can have two corresponding z-coordinates. Therefore, to plot a toroid in MATLAB, you will need to plot the top and bottom halves as two separate surfaces on the same plot. For example:
%%Create R and THETA data
theta = 0:pi/10:2*pi;
r = 2*pi:pi/20:3*pi;
[R,T] = meshgrid(r,theta);
%%Create top and bottom halves
Z_top = 2*sin(R);
Z_bottom = -2*sin(R);
%%Convert to Cartesian coordinates and plot
[X,Y,Z] = pol2cart(T,R,Z_top);
surf(X,Y,Z);
hold on;
[X,Y,Z] = pol2cart(T,R,Z_bottom);
surf(X,Y,Z);
axis equal
##### 3 Kommentare2 ältere Kommentare anzeigen2 ältere Kommentare ausblenden
Alex Pedcenko am 27 Sep. 2019
you're right

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (2)

Alex Pedcenko am 5 Nov. 2017
Bearbeitet: Alex Pedcenko am 27 Sep. 2019
R=5; % outer radius of torus
th=linspace(0,2*pi,36); % e.g. 36 partitions along perimeter of the tube
phi=linspace(0,2*pi,18); % e.g. 18 partitions along azimuth of torus
% we convert our vectors phi and th to [n x n] matrices with meshgrid command:
[Phi,Th]=meshgrid(phi,th);
% now we generate n x n matrices for x,y,z according to eqn of torus
x=(R+r.*cos(Th)).*cos(Phi);
y=(R+r.*cos(Th)).*sin(Phi);
z=r.*sin(Th);
surf(x,y,z); % plot surface
daspect([1 1 1]) % preserves the shape of torus
colormap('jet') % change color appearance
title('Torus')
xlabel('X');ylabel('Y');zlabel('Z'); ##### 6 Kommentare5 ältere Kommentare anzeigen5 ältere Kommentare ausblenden
Stephen23 am 5 Jul. 2020

Melden Sie sich an, um zu kommentieren.

DGM am 8 Jan. 2022
MATLAB may not have a built-in function, but that doesn't mean there aren't any functions out there that can conveniently do the work.
I'm sure this isn't the only thing on the File Exchange, but it's the one I use. Syntax is similar to sphere() or ellipsoid(), returning three matrices which can be fed to surf() or mesh(). The input arguments are the center location, radii, order, and number of points.
center = [0 0 0];
radius = [1 1 1 3];
order = 2;
npoints = 100;
surf(x,y,z)
axis equal
colormap(parula)
view(-16,27)
camlight As axis orders are independent and user-defined, the profile and sections do not have to be circular, but can be any superellipse:
radius = [1 1 2 3];
order = [5 3]; radius = [1 1 1 3];
order = [0.8 4]; Also included is a generalized superellipsoid tool.
##### 0 Kommentare-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Kategorien

Find more on Surface and Mesh Plots in Help Center and File Exchange

### Tags

Noch keine Tags eingegeben.

### Community Treasure Hunt

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

Start Hunting!