MATLAB | 七夕节用MATLAB画个玫瑰花束叭

Hey又是一年七夕节要到了,每年一次直男审美MATLAB绘图大赛开始hiahiahia,真的这些代码越写越不知道咋写,又不想每年把之前的代码翻出来再发一遍,于是今年又对我之前写的老代码进行了点优化组合,整了个花球变花束:

在此祝各位成双成对和形单影只的都七夕节快乐叭!!!

先稍微说一下原理,再去给完整代码哈。


玫瑰花

玫瑰花咋画以及怎么旋转到合适的位置可以参见这篇推送:

  • https://slandarer.blog.csdn.net/article/details/117048623

我当时还是写的非常详细的,可以看的时候顺手点个赞hiahiahia。


周围小花

是把以下这段很简单的代码进行了微调改了改颜色啥的:

rb=0:.01:1;
tb=linspace(0,2,151);
Wb=rb'*((abs((1-mod(tb*5,2))))/2+.3);
Xb=Wb.*cospi(tb);
Yb=Wb.*sinpi(tb); 
zb=@(a)(-cospi(Wb*a)+1).^.2;
Zb=zb(1.2);
g=@(i)i(:,1:30:151)/2;
plot3(g(Xb),g(Yb),g(zb(1)*2.3),'k');
surface(Xb,Yb,Zb,'EdgeColor','none');


花杆和颜色

花杆就直接用贝塞尔曲线插了一下值,让其比较顺滑且扭转了起来,颜色的话把代码中的colorList换一下的话可以自行调整,这里给点颜色数值以供参考哈:

c1=[0.5600    0.2200    0.03000.6700    0.2900    0.05000.8300    0.4900    0.09000.8500    0.6200    0.13000.8800    0.7600    0.13000.9100    0.8300    0.20001.0000    0.9200    0.3100];
c2=[0.1800    0.0900    0.18000.3100    0.0800    0.24000.5100    0.0800    0.34000.6500    0.1200    0.35000.8600    0.3200    0.4500];
c3=[0.1100    0.3100    0.75000.3400    0.2900    0.68000.5100    0.2700    0.64000.5900    0.2700    0.62000.7600    0.2500    0.5700];
c4=[0.1400    0.1400    0.14000.2200    0.2200    0.22000.4100    0.4100    0.41000.6000    0.6000    0.60000.7500    0.7500    0.75000.8900    0.8900    0.8900];
c5=[0.3300    0.3300    0.69000.5300    0.4000    0.68000.6800    0.4200    0.63000.7800    0.4200    0.57000.9100    0.4900    0.47000.9600    0.7300    0.4400];
c6=[0.5300    0.8300    0.81000.5200    0.7500    0.82000.4900    0.6200    0.84000.4900    0.5600    0.84000.4700    0.4900    0.85000.4500    0.3500    0.87000.9500    0.9500    0.9500];

hiahiahia奇怪的颜色增加了:


完整代码

感觉要运行的话至少需要R17b版本(17b也不算新了最新版都是更了十几代了),要把代码改的适应更之前的版本老麻烦了。。。建议大家用点比较新的版本!!不然平白无故多写老多代码新版本还不一定用的了。

function roseBouquet
figure('Units','normalized','Position',[.2,.1,.6,.7])
%曲面数据计算 ==============================================================
% 玫瑰部分 -----------------------------------------------------------------
[xr,tr]=meshgrid((0:24)./24,(0:0.5:575)./575.*20.*pi+4*pi);
pr=(pi/2)*exp(-tr./(8*pi));
cr=sin(15*tr)/150;
ur=1-(1-mod(3.6*tr,2*pi)./pi).^4./2+cr;
yr=2*(xr.^2-xr).^2.*sin(pr);
rr=ur.*(xr.*sin(pr)+yr.*cos(pr));
hr=ur.*(xr.*cos(pr)-yr.*sin(pr));
% 百合花部分 ---------------------------------------------------------------
rb=0:.01:1;
tb=linspace(0,2,151);
wb=rb'*((abs((1-mod(tb*5,2))))/2+.3);
xb=wb.*cospi(tb);
yb=wb.*sinpi(tb); 
zb=@(a)(-cospi(wb*a)+1).^.2;
Zb=zb(1.2);
g=@(i)i(:,1:30:151)/2;
%颜色映射表 ================================================================
colorList=[0.3300    0.3300    0.69000.5300    0.4000    0.68000.6800    0.4200    0.63000.7800    0.4200    0.57000.9100    0.4900    0.47000.9600    0.7300    0.4400];
% colorList=[0.9176    0.7490    0.3765
%     0.9294    0.7725    0.4902
%     0.9333    0.7451    0.5961
%     0.8902    0.6980    0.5294
%     0.8784    0.6941    0.6235
%     0.9216    0.7412    0.7529
%     0.8588    0.6039    0.7686
%     0.8510    0.4706    0.6392
%     0.7608    0.2118    0.3569];
colorMapr=setColorByH(hr,colorList);
colorMapb=setColorByH(Zb,colorList.*.4+.6);function cMap=setColorByH(H,cList)X=(H-min(min(H)))./(max(max(H))-min(min(H)));xx=(0:size(cList,1)-1)./(size(cList,1)-1);y1=cList(:,1);y2=cList(:,2);y3=cList(:,3);cMap(:,:,1)=interp1(xx,y1,X,'linear');cMap(:,:,2)=interp1(xx,y2,X,'linear');cMap(:,:,3)=interp1(xx,y3,X,'linear');end
% 旋转函数预定义 ===========================================================
yaw_z=72*pi/180;
roll_x_1=pi/8;
roll_x_2=pi/9;
R_z_2=[cos(yaw_z)  , -sin(yaw_z)  , 0; sin(yaw_z)  , cos(yaw_z)  , 0; 0, 0, 1];
R_z_1=[cos(yaw_z/2), -sin(yaw_z/2), 0; sin(yaw_z/2), cos(yaw_z/2), 0; 0, 0, 1];
R_z_3=[cos(yaw_z/3), -sin(yaw_z/3), 0; sin(yaw_z/3), cos(yaw_z/3), 0; 0, 0, 1];
R_x_1=[1, 0, 0; 0, cos(roll_x_1), -sin(roll_x_1); 0, sin(roll_x_1), cos(roll_x_1)];
R_x_2=[1, 0, 0; 0, cos(roll_x_2), -sin(roll_x_2); 0, sin(roll_x_2), cos(roll_x_2)];function [nX,nY,nZ]=rotateXYZ(X,Y,Z,R)nX=zeros(size(X)); nY=zeros(size(Y)); nZ=zeros(size(Z));for i=1:size(X,1)for j=1:size(X,2)v=[X(i,j);Y(i,j);Z(i,j)];nv=R*v; nX(i,j)=nv(1); nY(i,j)=nv(2); nZ(i,j)=nv(3);endendend
% 绘制花杆函数预定义 ========================================================function drawStraw(X,Y,Z)[m,n]=find(Z==min(min(Z)));m=m(1);n=n(1);x1=X(m,n);y1=Y(m,n);z1=Z(m,n)+.03;xx=[x1,0,(x1.*cos(pi/3)-y1.*sin(pi/3))./3].';yy=[y1,0,(y1.*cos(pi/3)+x1.*sin(pi/3))./3].';zz=[z1,-.7,-1.5].';strawPnts=bezierCurve([xx,yy,zz],50);plot3(strawPnts(:,1),strawPnts(:,2),strawPnts(:,3),'Color',[88,130,126]./255,'LineWidth',2)end
% 贝塞尔函数 ---------------------------------------------------------------function pnts=bezierCurve(pnts,N)t=linspace(0,1,N);p=size(pnts,1)-1;coe1=factorial(p)./factorial(0:p)./factorial(p:-1:0);coe2=((t).^((0:p)')).*((1-t).^((p:-1:0)'));pnts=(pnts'*(coe1'.*coe2))';end
%曲面旋转及绘制 ============================================================
hold on
surface(rr.*cos(tr),rr.*sin(tr),hr+0.35,'EdgeAlpha',0.05,...'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMapr,'Tag','slandarer')
[nXr,nYr,nZr]=rotateXYZ(rr.*cos(tr),rr.*sin(tr),hr+0.35,R_x_1);
nYr=nYr-.4;
surface(nXr,nYr,nZr-.1,'EdgeAlpha',0.05,...
'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMapr)
drawStraw(nXr,nYr,nZr-.1)
for k=1:4[nXr,nYr,nZr]=rotateXYZ(nXr,nYr,nZr,R_z_2);surface(nXr,nYr,nZr-.1,'EdgeAlpha',0.05,...'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMapr)drawStraw(nXr,nYr,nZr-.1)
end   
% -------------------------------------------------------------------------
[nXb,nYb,nZb]=rotateXYZ(xb./2.5,yb./2.5,Zb./2.5+.32,R_x_2);
nYb=nYb-1.35;
for k=1:5[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_2);surface(nXb,nYb,nZb,'EdgeColor','none','FaceColor','interp','CData',colorMapb)drawStraw(nXb,nYb,nZb)
end  
[nXb,nYb,nZb]=rotateXYZ(xb./2.5,yb./2.5,Zb./2.5+.32,R_x_2);
nYb=nYb-1.15;
[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_1);
for k=1:5[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_2);surface(nXb,nYb,nZb,'EdgeColor','none','FaceColor','interp','CData',colorMapb)drawStraw(nXb,nYb,nZb)
end
[nXb,nYb,nZb]=rotateXYZ(xb./2.5,yb./2.5,Zb./2.5+.32,R_x_2);
nYb=nYb-1.25;
[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_3);
for k=1:5[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_2);surface(nXb,nYb,nZb,'EdgeColor','none','FaceColor','interp','CData',colorMapb)drawStraw(nXb,nYb,nZb)
end  
[nXb,nYb,nZb]=rotateXYZ(xb./2.5,yb./2.5,Zb./2.5+.32,R_x_2);
nYb=nYb-1.25;
[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_3);
[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_3);
for k=1:5[nXb,nYb,nZb]=rotateXYZ(nXb,nYb,nZb,R_z_2);surface(nXb,nYb,nZb,'EdgeColor','none','FaceColor','interp','CData',colorMapb)drawStraw(nXb,nYb,nZb)
end  
%axes属性调整 ==============================================================
ax=gca;
ax.Position=[0,0,1,1];
grid on
ax.GridLineStyle='--';
ax.LineWidth=1.2;
ax.XColor=[1,1,1].*0.4;
ax.YColor=[1,1,1].*0.4;
ax.ZColor=[1,1,1].*0.4;
ax.DataAspectRatio=[1,1,1];
ax.DataAspectRatioMode='manual';
view(-15,35);
end

再次祝各位成双成对和形单影只的都七夕节快乐叭!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/100127.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握AI助手的魔法工具:解密Prompt(提示)在AIGC时代的应用「上篇」

在当今的AIGC时代,我们面临着越来越多的人工智能技术和应用。其中一个引人注目的工具就是Prompt(提示)。它就像是一种魔法,可以让我们与AI助手进行更加互动和有针对性的对话。那么,让我们一起来了解一下Prompt&#xf…

ElasticSearch学习2

1、索引的操作 1、创建索引 对ES的操作其实就是发送一个restful请求,kibana中在DevTools中进行ES操作 创建索引时需要注意ES的版本,不同版本的ES创建索引的语句略有差别,会导致失败 如下创建一个名为people的索引,settings&…

STM32 CubeMX (第三步Freertos中断管理和软件定时)

STM32 CubeMX STM32 CubeMX (第三步Freertos中断管理和软件定时) STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)使用STM32 CubeMX 库,配置Fre…

k8s扩缩容与滚动更新

使用kubectl run创建应用 kubectl run kubernetes-bootcamp \> --imagedocker.io/jocatalin/kubernetes-bootcamp:v1 \> --port8080 端口暴露出去 kubectl expose pod kubernetes-bootcamp --type"NodePort" --port 8080 使用kubectl create创建应用 kubect…

周期性函数算出其周期(python)

在日常生活中,总是会遇见一些周期性的函数,我们可以人眼看出他们是有一定规律的,但是我们不能准确地发现它们的周期是多少。 创建一根周期性曲线 import numpy as np import matplotlib.pyplot as plt# 定义周期性函数 def periodic_functi…

Linux命令200例:telnet用于远程登录的网络协议(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

windows安装使用RocketMQ常见问题,及springboot整合

win安装rocketmq 官网下载二进制包:https://rocketmq.apache.org/download 解压到不包含中文及空格的目录,配置环境变量 ROCKETMQ_HOME4. 修改runbroker.cmd和runserver.cmd文件 文件地址在rocketmq安装目录下的bin文件夹中。 如果不修改可能会遇见以…

item_search_shop-获得淘宝/天猫店铺的所有商品

一、接口参数说明: item_search_shop-获得店铺的所有商品,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_shop 名称类型必须描述keyString是调用key&…

VS2022解决Protobuf compiler version 23.4 doesn‘t match library version 4.23.4

在使用Visual Studio 2022MinGWCMake作为开发环境时,如果项目中使用了Protobuf,则在CMake运行时,可能会出现Protobuf compiler version 23.4 doesnt match library version 4.23.4的问题: 1> [CMake] CMake Warning at C:/Pro…

Ganache 本地测试网远程连接

文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络,提供图形化界面,log日志等;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…

huggingface datasets离线加载文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——三、综合推理——是否确定信息

真题(2018-40)——综合推理——是否确定信息——确定信息——以确定信息作为解题起点 某海军部队有甲、乙、丙、丁、戊、己、庚7艘舰艇,拟组成两个编队出航,第一编队编列3艘舰艇,第二编队编列4艘舰艇,编列…

【Rust】Rust学习 第十七章Rust 的面向对象特性

面向对象编程(Object-Oriented Programming,OOP)是一种模式化编程方式。对象(Object)来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构中对象之间的消息传递。他在 1967 年创造了 面向对…

PDF怎么转成PPT文件免费?一个软件解决

随着科技的不断发展和进步,电子文档已经成为我们日常工作和学习中不可或缺的一部分。PDF作为一种跨平台的文件格式,以其可靠性和易读性而备受推崇。然而,在某些情况下,我们可能需要PDF怎么转成PPT文件免费,以便更好地展…

春秋云境:CVE-2022-0543(Redis 沙盒逃逸漏洞)

目录 一、i春秋题目 二、CVE-2022-0543:(redis沙盒逃逸) 漏洞介绍: 漏洞复现: 一、i春秋题目 靶标介绍: Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。 进入题目:…

存储系统性能优化中IOMMU的作用是什么?

一、IOMMU原理 IOMMU(Input/Output Memory Management Unit)是一种用于管理计算机内存的技术,它允许将物理内存映射到虚拟地址空间。IOMMU通过使用专用的硬件来管理和优化内存访问,从而提高系统性能和稳定性。本文将详细介绍IOMMU的原理,并介绍一些应用案例和典型的问题解…

【C语言】选择排序

基本原理 先找到数组中最大的那个数,将最大的数放到数组最右端(交换a[maxid]和a[len-1]这两个数的位置),然后继续从a[0]到a[len-2]中找到最大的数,然后交换a[maxid]和a[len-2]位置,依次查找交换&#xff0c…

Web3 solidity订单池操作

前面一篇文章因为一些原因 被设为了进自己可见 需要的朋友可以私信我 之前 我们编写的程序上来看 交易所无非是一个代币的托管上 只是它会更加专业 本文 我们继续来看交易所的一个功能 叫游泳池 例如 我们 100grToken 兑换 1ETH 前提 我们的代币已经能被估值了 例如 你想用人…

时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基于CNN-GRU卷积…

测试框架pytest教程(6)钩子函数hook

在pytest中,"hook"是用于自定义和扩展测试流程的机制。它允许你在特定时间点插入自己的代码,以便对测试进行修改、补充或拦截。 pytest的hook是基于Python的插件系统实现的,使用特定的命名规范和装饰器来定义钩子函数。你可以在py…