我正在尝试绘制从 2D 函数 r=sin^2(theta) 获得的 3D 旋转曲面。 2D 图是正确的(图 1),但 3D 表面(在我看来)不正确(图 2)(澄清一下:我期望一个“甜甜圈”表面,没有任何“尖峰”):
脚本是(抱歉用法语评论):
theta=linspace(-pi,pi,200);
f=sin(theta).^2;
x=f.*cos(theta);
y=f.*sin(theta);
figure;
plot(x,y);
axis equal;
% Création des points pour la surface de révolution
u = linspace(-pi, pi, 200); % Angles de révolution
[U, T] = meshgrid(u, theta); % Création des grilles pour les coordonnées
% Coordonnées x, y et z pour la surface de révolution
X = R .* cos(U); % Coordonnée x après rotation
Y = R .* sin(U); % Coordonnée y après rotation
%Z = repmat(theta', 1, length(u)); % Coordonnée z reste alpha
% Tracé de la surface de révolution
figure;
surf(X, Y, Z);
xlabel('X'); ylabel('Y'); zlabel('Z');
title('Surface de révolution: r = sin^2(theta)');
shading interp;
您能帮我理解这里发生了什么吗?
尚不完全清楚你的错误是什么,因为你的代码不包含
R
的定义(更不用说
Z
已被注释掉),但我怀疑您围绕错误的轴进行了旋转。如果您这样做,这可能会对您有所帮助
在 x
、z
坐标中开始 2D 绘图,因为在 3D 绘图中,垂直轴将为 Z
:
theta=linspace(-pi,pi,200);
f=sin(theta).^2;
x=f.*cos(theta);
z=f.*sin(theta);
plot(x,z);
axis equal;
用 3D 坐标编写并用
T
代替 theta
(数学符号,而不是代码):
X = sin(T)^3
Y = 0
Z = sin(T)^2 * cos(T)
并执行
U
绕 Z
轴的旋转(再次强调,这不是八度音阶代码):
X = X * cos(U) - Y * sin(U) = sin(theta)^2 * cos(theta) * cos(U)
Y = X * sin(U) + Y * cos(U) = sin(theta)^2 * cos(theta) * sin(U)
Z = Z = sin(theta)^3
使用您的变量将其写在八度音程中,3D 图为:
theta=linspace(-pi,pi,200);
u = linspace(-pi, pi, 200);
[U, T] = meshgrid(u, theta);
X = sin(T).^2 .* cos(T) .* cos(U)
Y = sin(T).^2 .* cos(T) .* sin(U)
Z = sin(T).^3
surf(X, Y, Z);
axis equal;
xlabel('X'); ylabel('Y'); zlabel('Z');