以下是两种不同的实现方法:
1. 3D心形图
方法一:参数方程心形
matlab
% 3D心形图 - 参数方程方法
figure('Position', [100, 100, 1200, 500]);
% 子图1:参数方程心形
subplot(1,2,1);
% 创建网格
[u, v] = meshgrid(linspace(0, 2*pi, 50), linspace(0, 2*pi, 50));
% 心形参数方程
x = (1 - sin(u)) .* cos(u) .* (1 + cos(v)) + sin(u);
y = (1 - sin(u)) .* sin(u) .* (1 + cos(v)) + cos(u);
z = -cos(u) .* (1 + cos(v));
% 绘制3D心形
surf(x, y, z, 'EdgeColor', 'none', 'FaceAlpha', 0.9);
colormap('hot');
shading interp;
light('Position', [1, 1, 1], 'Style', 'infinite');
lighting gouraud;
title('3D心形图 - 参数方程', 'FontSize', 14);
axis equal;
grid on;
view(45, 20);
方法二:隐函数心形
matlab
% 子图2:隐函数心形
subplot(1,2,2);
% 定义网格范围
[x, y, z] = meshgrid(-2:0.05:2, -2:0.05:2, -1:0.05:1);
% 心形隐函数方程
F = (x.^2 + 9/4*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - 9/80*y.^2.*z.^3;
% 提取等值面
p = patch(isosurface(x, y, z, F, 0));
isonormals(x, y, z, F, p);
% 设置心形属性
set(p, 'FaceColor', [0.9, 0.2, 0.2], 'EdgeColor', 'none', ...
'FaceAlpha', 0.8, 'FaceLighting', 'gouraud');
% 添加光照和美化
camlight('headlight');
lighting phong;
title('3D心形图 - 隐函数', 'FontSize', 14);
axis equal;
grid on;
view(30, 20);
2. 3D玫瑰花图案
方法一:经典3D玫瑰
matlab
% 3D玫瑰花图案
figure('Position', [100, 100, 1200, 500]);
% 子图1:单朵玫瑰
subplot(1,2,1);
theta = linspace(0, 12*pi, 1000); % 增加圈数使花瓣更多
k = 5; % 花瓣数量参数
% 3D玫瑰线参数方程
x = sin(k*theta) .* cos(theta);
y = sin(k*theta) .* sin(theta);
z = cos(k*theta);
% 绘制3D玫瑰线
plot3(x, y, z, 'r', 'LineWidth', 2);
hold on;
% 添加渐变颜色
num_points = length(theta);
for i = 1:num_points-1
plot3(x(i:i+1), y(i:i+1), z(i:i+1), ...
'Color', [0.8, 0.2, 0.2, i/num_points], ...
'LineWidth', 2);
end
% 添加散点装饰
scatter3(x(1:10:end), y(1:10:end), z(1:10:end), ...
30, 'filled', 'MarkerFaceColor', 'yellow');
title('3D玫瑰花', 'FontSize', 14);
axis equal;
grid on;
view(45, 30);
方法二:盛开的多层玫瑰
matlab
% 子图2:多层玫瑰
subplot(1,2,2);
% 参数设置
n_petals = 6; % 花瓣数
n_layers = 5; % 层数
theta = linspace(0, 4*pi, 200);
% 绘制多层玫瑰
colors = jet(n_layers); % 使用彩虹色
for layer = 1:n_layers
r = layer * 0.2; % 半径随层数增加
% 3D玫瑰方程
x = r * sin(n_petals*theta) .* cos(theta);
y = r * sin(n_petals*theta) .* sin(theta);
z = layer * 0.3 * ones(size(theta));
% 绘制每层玫瑰
plot3(x, y, z, 'Color', colors(layer,:), 'LineWidth', 2);
hold on;
% 填充花瓣区域
fill3(x, y, z, colors(layer,:), 'FaceAlpha', 0.2);
end
% 添加花蕊
t = linspace(0, 2*pi, 50);
[x_c, y_c] = pol2cart(t, 0.1);
plot3(x_c, y_c, zeros(size(x_c)), 'y-', 'LineWidth', 3);
title('多层3D玫瑰花', 'FontSize', 14);
axis equal;
grid on;
view(45, 30);
3. 高级版本:可旋转的3D心形玫瑰
matlab
% 高级版:可旋转的心形玫瑰
figure('Position', [200, 200, 1000, 800]);
% 创建心形网格
[u, v] = meshgrid(linspace(0, 2*pi, 100));
% 心形方程
x = 16 * (sin(u)).^3;
y = 13 * cos(u) - 5 * cos(2*u) - 2 * cos(3*u) - cos(4*u);
z = 10 * sin(v) .* (1 - abs(sin(u)));
% 玫瑰花瓣效果
rose_factor = 5; % 玫瑰花瓣数量
x_rose = x .* (1 + 0.1 * cos(rose_factor * v));
y_rose = y .* (1 + 0.1 * cos(rose_factor * v));
z_rose = z .* (1 + 0.1 * sin(rose_factor * u));
% 绘制3D图形
surf(x_rose, y_rose, z_rose, ...
'FaceColor', [0.9, 0.1, 0.3], ...
'EdgeColor', 'none', ...
'FaceAlpha', 0.9, ...
'FaceLighting', 'gouraud');
% 添加光照
light('Position', [1, 0, 1], 'Style', 'infinite');
light('Position', [-1, -1, 0.5], 'Style', 'infinite');
lighting phong;
% 美化图形
colormap('hot');
axis equal off;
title('3D心形玫瑰', 'FontSize', 16, 'FontWeight', 'bold');
% 添加旋转动画
for angle = 0:1:360
view(angle, 20);
pause(0.01);
drawnow;
end
4. 简洁版本(一次性运行)
matlab
% 简洁版:同时绘制心形和玫瑰
figure;
% 心形
subplot(1,2,1);
t = linspace(0, 2*pi, 100);
x = 16*sin(t).^3;
y = 13*cos(t) - 5*cos(2*t) - 2*cos(3*t) - cos(4*t);
z = zeros(size(t));
fill3(x, y, z, 'r');
title('2D心形(3D视角)');
view(3); axis equal; grid on;
% 玫瑰
subplot(1,2,2);
theta = linspace(0, 10*pi, 500);
r = cos(5*theta);
[x, y, z] = pol2cart(theta, r, theta/(5*pi));
plot3(x, y, z, 'm-', 'LineWidth', 2);
title('3D玫瑰花');
axis equal; grid on; view(45, 30);
参考代码 海洋声传播程序 www.3dddown.com/csa/97361.html
使用说明:
-
运行方式:
- 可以将代码复制到MATLAB编辑器中,分块运行
- 或者将每个部分保存为独立的.m文件运行
-
参数调整:
- 调整
k值可以改变玫瑰花的花瓣数量 - 修改
n_layers可以改变玫瑰花的层数 - 调整
view()函数参数可以改变观察角度
- 调整
-
可视化效果:
- 代码包含颜色渐变、光照效果和透明度设置
- 高级版本包含旋转动画