How do I plot a toroid in MATLAB?

45 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2009 年 6 月 27 日
回答済み: DGM 2022 年 1 月 8 日
I would like to plot a toroid in MATLAB but MATLAB does not have a built in function to do this.

採用された回答

MathWorks Support Team
MathWorks Support Team 2009 年 6 月 27 日
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
shading interp
  3 件のコメント
Stephen23
Stephen23 2019 年 9 月 27 日
編集済み: MathWorks Support Team 2020 年 1 月 2 日
"This is not a torus..."
That is correct: it is not a torus.
However it is a toroid, which is what the title and the answer state it is.
It might help to revise the difference between a toroid (what this question and answer are about) and a torus (which is what your comment is about), e.g. from Wikipedia:
or from Wolfram Mathematics http://mathworld.wolfram.com/Toroid.html :
The answer creates a toroid from sine curves, just as it states. It does not create a torus, nor does the answer state that it creates a torus.
Alex Pedcenko
Alex Pedcenko 2019 年 9 月 27 日
you're right

サインインしてコメントする。

その他の回答 (2 件)

Alex Pedcenko
Alex Pedcenko 2017 年 11 月 5 日
編集済み: Alex Pedcenko 2019 年 9 月 27 日
R=5; % outer radius of torus
r=2; % inner tube radius
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');
torus1.png
  6 件のコメント
Alex Pedcenko
Alex Pedcenko 2020 年 7 月 5 日
How about 3D spiral?
R=5; % outer radius of torus
a=1; % inner tube smaller radius
b=1; % inner tube larger radius
p=0.5; % pitch in z-direction
N=10; %turns along z
th=linspace(0,2*pi,36); % e.g. 36 partitions along perimeter of the tube
phi=linspace(0,N*2*pi,36*N); % 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+a.*cos(Th)).*cos(Phi);
y=(R+b.*cos(Th)).*sin(Phi);
z=a.*sin(Th)+p*Phi;
surf(x,y,z); % plot surface
daspect([1 1 1]) % preserves the shape of torus
colormap('jet') % change color appearance
%shading interp
title('Not a Torus')
xlabel('X');ylabel('Y');zlabel('Z');
Stephen23
Stephen23 2020 年 7 月 5 日

サインインしてコメントする。


DGM
DGM 2022 年 1 月 8 日
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;
[x y z] = supertoroid(center,radius,order,npoints);
surf(x,y,z)
shading flat
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.

カテゴリ

Help Center および File ExchangeGraph and Network Algorithms についてさらに検索

タグ

タグが未入力です。

製品

Community Treasure Hunt

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

Start Hunting!

Translated by