数学七夕花礼(MATLAB版)
前言
参考的视频在抖音,电脑版的抖音一直登录不了,用手机分享的链接如下所示。
4.35 I@v.FH yTl:/ 04/04 复制打开抖音👀数学送的七夕花礼,记得查收噢.# 七夕花礼请查收 ... https://v.douyin.com/H-YpOJCyQyg/
rho=4sin(8theta)
公式:
% rho=4sin(8theta)
clc; % 清空命令窗口
clear; % 清空工作区变量
close all; % 关闭所有图形窗口% 首先生成数据
theta = linspace(0, 2*pi, 1000); % 创建0到2π之间的1000个角度点
rho = 4 * sin(8 * theta); % 计算极径值% 创建最终结果的图形窗口(优先显示)- 修改背景为白色
figure('Position', [100, 100, 800, 600], 'Name', '最终结果 - 八瓣玫瑰曲线', 'Color', 'white');
polarplot(theta, rho, 'Color', [1, 0.5, 0], 'LineWidth', 2.5); % 使用橙色绘制
title('\rho = 4 sin(8\theta)', 'FontSize', 14, 'FontWeight', 'bold');
grid on;
rlim([0 4]);% 隐藏极坐标轴的标签和刻度
ax = gca;
ax.ThetaTickLabel = {};
ax.RTickLabel = {};
ax.ThetaTick = [];
ax.RTick = [];% 添加信息文本框
annotation('textbox', [0.04, 0.04, 0.2, 0.12], 'String', ...{'极坐标方程: ρ = 4sin(8θ)', '八瓣玫瑰曲线', '橙色线条'}, ...'FitBoxToText', 'on', 'BackgroundColor', 'white', 'FontSize', 10);% 然后创建动画图形窗口
figure('Position', [900, 100, 800, 600], 'Name', '动画绘制过程');% 转换为直角坐标系用于绘图
x = rho .* cos(theta);
y = rho .* sin(theta);% 创建极坐标轴
polaraxes;
hold on; % 保持图形,允许多次绘制% 设置极坐标图范围
rlim([0 4]); % 设置径向范围
title('\rho = 4 sin(8\theta) - 绘制过程'); % 添加标题
grid on; % 显示网格% 初始化绘图,只绘制第一个点
h = polarplot(theta(1), rho(1), 'Color', [1, 0.5, 0], 'LineWidth', 1.5); % 橙色% 动画循环 - 逐步绘制曲线
for i = 2:length(theta)% 更新数据点set(h, 'ThetaData', theta(1:i), 'RData', rho(1:i));% 暂停一小段时间,创建动画效果pause(0.01);% 刷新显示drawnow;
end% 将焦点返回到最终结果窗口
figure(1);
rho = n + (|cos(3θ)| + 2(0.25 - |cos(3θ + π/2)|)) / (2 + 8|cos(6θ + π/2)|)
公式:
% 花朵曲线方程: rho = n + (|cos(3θ)| + 2(0.25 - |cos(3θ + π/2)|)) / (2 + 8|cos(6θ + π/2)|)
clc; % 清空命令窗口
clear; % 清空工作区变量
close all; % 关闭所有图形窗口% 定义n值
n_values = [0, 0.5, 1, 1.5, 2];
theta = linspace(0, 2*pi, 2000); % 角度值
colors = lines(length(n_values)); % 生成不同的颜色% 创建最终结果的图形窗口
figure('Position', [100, 100, 800, 600], 'Name', '花朵曲线比较', 'Color', 'white');
hold on;% 为每个n值计算并绘制曲线
for i = 1:length(n_values)n = n_values(i);% 计算 rhocos3theta = cos(3*theta);cos6theta_pi2 = cos(6*theta + pi/2);abs_cos3theta = abs(cos3theta);abs_cos6theta_pi2 = abs(cos6theta_pi2);numerator = abs_cos3theta + 2*(0.25 - abs(cos(3*theta + pi/2)));denominator = 2 + 8*abs_cos6theta_pi2;rho = n + numerator ./ denominator;% 转换为笛卡尔坐标x = rho .* cos(theta);y = rho .* sin(theta);% 绘制最终曲线plot(x, y, 'Color', colors(i,:), 'LineWidth', 2.5, 'DisplayName', sprintf('n=%.1f', n));
end% 设置图形属性
axis equal;
axis off; % 关闭坐标轴
title('花朵曲线比较', 'FontSize', 14, 'FontWeight', 'bold');% 添加图例(替代坐标轴信息)
legend('show', 'Location', 'best', 'FontSize', 10, 'Box', 'off');% 添加信息文本框
annotation('textbox', [0.02, 0.02, 0.3, 0.1], 'String', ...{'ρ = n + (|cos(3θ)| + 2(0.25 - |cos(3θ + π/2)|))', '/ (2 + 8|cos(6θ + π/2)|)'}, ...'FitBoxToText', 'on', 'BackgroundColor', 'white', 'FontSize', 9, ...'EdgeColor', 'none');hold off;% 创建动画窗口
figure('Position', [900, 100, 800, 600], 'Name', '花朵曲线动画绘制');% 动画绘制过程
for i = 1:length(n_values)n = n_values(i);% 计算当前n值的rhocos3theta = cos(3*theta);cos6theta_pi2 = cos(6*theta + pi/2);abs_cos3theta = abs(cos3theta);abs_cos6theta_pi2 = abs(cos6theta_pi2);numerator = abs_cos3theta + 2*(0.25 - abs(cos(3*theta + pi/2)));denominator = 2 + 8*abs_cos6theta_pi2;rho = n + numerator ./ denominator;% 转换为笛卡尔坐标x = rho .* cos(theta);y = rho .* sin(theta);% 清空当前图形clf;hold on;% 绘制所有已完成的曲线for j = 1:i-1n_prev = n_values(j);% 重新计算之前n值的rho(为了动画效果)cos3theta_prev = cos(3*theta);cos6theta_pi2_prev = cos(6*theta + pi/2);abs_cos3theta_prev = abs(cos3theta_prev);abs_cos6theta_pi2_prev = abs(cos6theta_pi2_prev);numerator_prev = abs_cos3theta_prev + 2*(0.25 - abs(cos(3*theta + pi/2)));denominator_prev = 2 + 8*abs_cos6theta_pi2_prev;rho_prev = n_prev + numerator_prev ./ denominator_prev;x_prev = rho_prev .* cos(theta);y_prev = rho_prev .* sin(theta);plot(x_prev, y_prev, 'Color', colors(j,:), 'LineWidth', 2, 'DisplayName', sprintf('n=%.1f', n_prev));end% 动画绘制当前曲线h = plot(x(1), y(1), 'Color', colors(i,:), 'LineWidth', 2, 'DisplayName', sprintf('n=%.1f', n));% 逐步绘制当前曲线for k = 2:50:length(theta) % 步长为50,加快动画速度set(h, 'XData', x(1:k), 'YData', y(1:k));drawnow;pause(0.005);end% 完成当前曲线的绘制set(h, 'XData', x, 'YData', y);% 设置图形属性axis equal;axis off; % 关闭坐标轴title(sprintf('绘制过程: n = %.1f', n), 'FontSize', 12);legend('show', 'Location', 'best', 'Box', 'off');drawnow;% 暂停一下,显示当前曲线pause(0.5);
end% 添加最终标题
title('所有花朵曲线绘制完成', 'FontSize', 12);
hold off;% 将焦点返回到最终结果窗口
figure(1);
rho=(sin 0.9 theta)(3-|5cos(0.9 theta)|)
公式:
% rho=(sin 0.9 theta)(3-|5cos(0.9 theta)|) clc; % 清空命令窗口
clear; % 清空工作区变量
close all; % 关闭所有图形窗口% 创建最终结果的图形窗口(可移动,无坐标轴)- 白色背景
finalFig = figure('Position', [100, 100, 800, 800], 'Name', '最终结果 (0-32π)', ...'NumberTitle', 'off', 'MenuBar', 'none', 'ToolBar', 'none', ...'Color', 'white');
movegui(finalFig, 'center'); % 将窗口移动到屏幕中央% 计算32π范围的图形
theta_range = linspace(0, 32*pi, 10000);
rho_range = sin(0.9 * theta_range) .* (3 - abs(5 * cos(0.9 * theta_range)));% 转换为笛卡尔坐标
x_range = rho_range .* cos(theta_range);
y_range = rho_range .* sin(theta_range);% 绘制最终结果(无坐标轴)- 白色背景
plot(x_range, y_range, 'b', 'LineWidth', 1.5);
axis equal;
axis off; % 关闭坐标轴
set(gca, 'Color', 'white'); % 设置坐标区域背景为白色
title('最终图形 (θ = 0 到 32π)', 'FontSize', 12);% 创建动画窗口(可移动)- 白色背景
animFig = figure('Position', [300, 300, 600, 600], 'Name', '动画绘制过程', ...'NumberTitle', 'off', 'Color', 'white');
movegui(animFig, 'center'); % 将窗口移动到屏幕中央% 准备动画数据
theta = linspace(0, 32*pi, 5000);
rho = sin(0.9 * theta) .* (3 - abs(5 * cos(0.9 * theta)));
x = rho .* cos(theta);
y = rho .* sin(theta);% 绘制动画
h = plot(x(1), y(1), 'b-', 'LineWidth', 1.5);
axis equal;
grid on;
title('动画绘制过程 (θ = 0 到 32π)');
xlabel('x');
ylabel('y');
xlim([min(x) max(x)]);
ylim([min(y) max(y)]);
set(gca, 'Color', 'white'); % 设置坐标区域背景为白色% 绘制动画过程
for k = 1:50:length(theta)set(h, 'XData', x(1:k), 'YData', y(1:k));drawnow;
end% 优先显示最终结果的窗口
figure(finalFig);
rho = cos(2.25θ) + 0.53
公式:
% rho = cos(2.25θ) + 0.53
clc; % 清空命令窗口
clear; % 清空工作区变量
close all; % 关闭所有图形窗口% 参数设置
theta_max = 16*pi;
theta_steps = linspace(0, theta_max, 200);
theta_full = linspace(0, theta_max, 5000);% 计算完整图形数据
rho_full = cos(2.25 * theta_full) + 0.53;
x_full = rho_full .* cos(theta_full);
y_full = rho_full .* sin(theta_full);% 获取屏幕尺寸
screen_size = get(0, 'ScreenSize');
screen_width = screen_size(3);
screen_height = screen_size(4);% 窗口尺寸设置
window_width = 600; % 窗口宽度
window_height = 600; % 窗口高度% 创建最终结果窗口(可移动位置)
final_fig = figure('Name', '最终结果 - ρ = cos(2.25θ) + 0.53', 'Color', 'white');
set(final_fig, 'Position', [100, screen_height-window_height-100, window_width, window_height]); % 左上角位置
plot(x_full, y_full, 'Color', [0.6, 0.2, 0.8], 'LineWidth', 2); % 紫色线条,稍微减小线宽
axis equal;
axis off; % 关闭坐标轴
title('ρ = cos(2.25θ) + 0.53', 'FontSize', 12, 'FontWeight', 'bold', 'Color', [0.4, 0.1, 0.6]);% 添加信息文本框
annotation('textbox', [0.02, 0.02, 0.25, 0.08], 'String', ...{'ρ = cos(2.25θ) + 0.53', '复杂玫瑰曲线'}, ...'FitBoxToText', 'on', 'BackgroundColor', 'white', 'FontSize', 9, ...'EdgeColor', 'none', 'Color', [0.4, 0.1, 0.6]);% 创建动画窗口(可移动位置)
anim_fig = figure('Name', '动画绘制过程 - ρ = cos(2.25θ) + 0.53');
set(anim_fig, 'Position', [screen_width-window_width-100, screen_height-window_height-100, window_width, window_height]); % 右上角位置
hold on;
axis equal;
grid on;
title('图形形成过程', 'Color', [0.4, 0.1, 0.6], 'FontSize', 12);
xlabel('x', 'FontSize', 10);
ylabel('y', 'FontSize', 10);% 预绘制完整图形(浅色背景)
plot(x_full, y_full, 'Color', [0.9, 0.85, 0.95], 'LineWidth', 0.5); % 淡紫色背景% 动画绘制
h = plot(NaN, NaN, 'Color', [0.6, 0.2, 0.8], 'LineWidth', 1.5); % 紫色线条,稍微减小线宽for i = 1:length(theta_steps)current_theta = linspace(0, theta_steps(i), 1000);current_rho = cos(2.25 * current_theta) + 0.53;current_x = current_rho .* cos(current_theta);current_y = current_rho .* sin(current_theta);set(h, 'XData', current_x, 'YData', current_y);title(sprintf('θ = %.1fπ', theta_steps(i)/pi), 'Color', [0.4, 0.1, 0.6], 'FontSize', 12);drawnow;pause(0.02);
end% 动画完成后显示完整图形
set(h, 'XData', x_full, 'YData', y_full);
title('绘制完成', 'Color', [0.4, 0.1, 0.6], 'FontSize', 12);% 将焦点返回到最终结果窗口
figure(final_fig);
rho=sin(1.2 theta)^(8)+cos(6theta)^(5)+1
公式:
% rho=sin(1.2 theta)^(8)+cos(6theta)^(5)+1
clc; % 清空命令窗口
clear; % 清空工作区变量
close all; % 关闭所有图形窗口% 参数设置
theta_max = 20*pi;
theta_full = linspace(0, theta_max, 5000);% 计算完整图形
sin_part = sin(1.2 * theta_full);
cos_part = cos(6 * theta_full);
rho_full = abs(sin_part).^8 .* sign(sin_part) + abs(cos_part).^5 .* sign(cos_part) + 1;
x_full = rho_full .* cos(theta_full);
y_full = rho_full .* sin(theta_full);% 创建最终结果窗口(无坐标轴,粉色线条)
finalFig = figure('Position', [100, 100, 700, 700], 'Name', '最终结果', ...'NumberTitle', 'off', 'Color', 'white');
movegui(finalFig, 'center');plot(x_full, y_full, 'Color', [1, 0.4, 0.6], 'LineWidth', 2); % 粉色线条
axis equal;
axis off; % 关闭坐标轴
title('最终图形 (θ = 0 到 20π)', 'FontSize', 14, 'Color', [0.5, 0, 0.5]);% 创建动画窗口
animFig = figure('Position', [300, 300, 700, 700], 'Name', '图形形成过程', ...'NumberTitle', 'off', 'Color', 'white');
movegui(animFig, 'center');
hold on;
axis equal;
grid on;
title('图形形成过程');
xlabel('x');
ylabel('y');% 预绘制完整图形(浅色背景)
plot(x_full, y_full, 'Color', [0.9, 0.9, 0.9], 'LineWidth', 0.5);% 动画绘制(粉色线条)
theta_steps = linspace(0, theta_max, 150);
h = plot(NaN, NaN, 'Color', [1, 0.4, 0.6], 'LineWidth', 2); % 粉色线条for i = 1:length(theta_steps)current_theta = linspace(0, theta_steps(i), 1000);sin_current = sin(1.2 * current_theta);cos_current = cos(6 * current_theta);current_rho = abs(sin_current).^8 .* sign(sin_current) + abs(cos_current).^5 .* sign(cos_current) + 1;current_x = current_rho .* cos(current_theta);current_y = current_rho .* sin(current_theta);set(h, 'XData', current_x, 'YData', current_y);title(sprintf('θ = %.1fπ', theta_steps(i)/pi));drawnow;pause(0.02);
end% 优先显示最终结果的窗口
figure(finalFig);
rho=1+((|cos(-5.63 theta)|)+2(0.25-|sin(-5.63 theta)|))/(2+8|sin(-11.26 theta)|)
公式:
% rho=1+((|cos(-5.63 theta)|)+2(0.25-|sin(-5.63 theta)|))/(2+8|sin(-11.26 theta)|)
clc; % 清空命令窗口
clear; % 清空工作区变量
close all; % 关闭所有图形窗口% 参数设置
theta_max = 6*pi;
theta_full = linspace(0, theta_max, 5000);% 计算完整图形
cos_full = cos(-5.63 * theta_full);
sin1_full = sin(-5.63 * theta_full);
sin2_full = sin(-11.26 * theta_full);
numerator_full = abs(cos_full) + 2*(0.25 - abs(sin1_full));
denominator_full = 2 + 8*abs(sin2_full);
rho_full = 1 + numerator_full ./ denominator_full;
x_full = rho_full .* cos(theta_full);
y_full = rho_full .* sin(theta_full);% 创建最终结果窗口(无坐标轴,绿色线条)
finalFig = figure('Position', [100, 100, 700, 700], 'Name', '最终结果', ...'NumberTitle', 'off', 'Color', 'white');
movegui(finalFig, 'center');plot(x_full, y_full, 'Color', [0, 0.8, 0], 'LineWidth', 2.5); % 绿色线条
axis equal;
axis off; % 关闭坐标轴
title('最终图形 (θ = 0 到 6π)', 'FontSize', 14, 'Color', [0, 0.5, 0]);% 创建动画窗口
animFig = figure('Position', [300, 300, 700, 700], 'Name', '图形形成过程', ...'NumberTitle', 'off', 'Color', 'white');
movegui(animFig, 'center');
hold on;
axis equal;
grid on;
title('图形形成过程');
xlabel('x');
ylabel('y');% 预绘制完整图形(浅色背景)
plot(x_full, y_full, 'Color', [0.9, 0.9, 0.9], 'LineWidth', 0.5);% 动画绘制(绿色线条)
theta_steps = linspace(0, theta_max, 200);
h = plot(NaN, NaN, 'Color', [0, 0.8, 0], 'LineWidth', 2); % 绿色线条for i = 1:length(theta_steps)current_theta = linspace(0, theta_steps(i), 1000);cos_current = cos(-5.63 * current_theta);sin1_current = sin(-5.63 * current_theta);sin2_current = sin(-11.26 * current_theta);numerator_current = abs(cos_current) + 2*(0.25 - abs(sin1_current));denominator_current = 2 + 8*abs(sin2_current);current_rho = 1 + numerator_current ./ denominator_current;current_x = current_rho .* cos(current_theta);current_y = current_rho .* sin(current_theta);set(h, 'XData', current_x, 'YData', current_y);title(sprintf('θ = %.1fπ', theta_steps(i)/pi));drawnow;pause(0.03);
end% 优先显示最终结果的窗口
figure(finalFig);