使用MATLAB绘制3D心形图和玫瑰花图案

以下是两种不同的实现方法:

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

使用说明:

  1. 运行方式

    • 可以将代码复制到MATLAB编辑器中,分块运行
    • 或者将每个部分保存为独立的.m文件运行
  2. 参数调整

    • 调整k值可以改变玫瑰花的花瓣数量
    • 修改n_layers可以改变玫瑰花的层数
    • 调整view()函数参数可以改变观察角度
  3. 可视化效果

    • 代码包含颜色渐变、光照效果和透明度设置
    • 高级版本包含旋转动画
相关推荐
HDO清风1 小时前
CASIA-HWDB2.x 数据集DGRL文件解析(python)
开发语言·人工智能·pytorch·python·目标检测·计算机视觉·restful
2201_756989091 小时前
C++中的事件驱动编程
开发语言·c++·算法
多米Domi0111 小时前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
2301_822377651 小时前
模板元编程调试方法
开发语言·c++·算法
csbysj20201 小时前
Python 循环嵌套
开发语言
测试_AI_一辰1 小时前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Coding茶水间1 小时前
基于深度学习的输电电力设备检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
清风~徐~来2 小时前
【视频点播系统】BRpc 介绍及使用
开发语言
啟明起鸣2 小时前
【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
开发语言·c++