使用 Octave 绘制旋转曲面

问题描述 投票:0回答:1

我正在尝试绘制从 2D 函数 r=sin^2(theta) 获得的 3D 旋转曲面。 2D 图是正确的(图 1),但 3D 表面(在我看来)不正确(图 2)(澄清一下:我期望一个“甜甜圈”表面,没有任何“尖峰”): enter image description here enter image description here

脚本是(抱歉用法语评论):

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;

您能帮我理解这里发生了什么吗?

plot 3d octave
1个回答
0
投票

尚不完全清楚你的错误是什么,因为你的代码不包含

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');

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.