鼠标在叶子或花朵处滑动就可使其收缩。 完整代码:
function mimose
t1=0:pi/100:pi+2*pi/100;
y=5*abs(sin(t1).^(1/2));
y(t1>pi)=-y(t1>pi);
t1=t1.*cos(pi/9)-y.*sin(pi/9);
y=t1.*sin(pi/9)+y.*cos(pi/9);
T=[];
Y=[];
for i=1:20
T=[T,(i-1)*(pi+2*pi/100)+t1];
Y=[Y,y];
end
L=length(T);
t2=linspace(pi/8,pi-2*pi/5,L);
Y=Y.*sin(t2);
X=T.*cos(pi)-Y.*sin(pi);
Y=T.*sin(pi)+Y.*cos(pi);
X=X-min(X);
X=X.*0.8;
Y=Y.*1.5;
fig=figure('units','pixels',...
'position',[500 100 500 500],...
'Numbertitle','off',...
'Color',[1 1 1],...
'resize','off',...
'visible','on',...
'name','mimose',...
'menubar','none');
ax=axes('Units','pixels',...
'parent',fig,...
'Color',[0.2667 0.4039 0.2745],...
'Position',[0 0 500 500],...
'XLim',[0 100],...
'YLim',[0 100],...
'XColor',[1 1 1],...
'YColor',[1 1 1]);
hold(ax,'on')
%plot(ax,X+20,Y+50)
drawBranch([20,0],[50,10])
drawBranch([20,0],[35,12])
drawBranch([0,0],[15,45])
drawBranch([4,0],[0,20])
leaf.l1=drawLeaf([50,10]+1.*[cos(pi/1.7),sin(pi/1.7)],pi/1.7,X,Y,0.8,1);
leaf.l2=drawLeaf([50,10]+1.*[cos(-pi/8),sin(-pi/8)],-pi/8,X,Y,0.8,1);
leaf.l3=drawLeaf([50,10]+1.*[cos(pi/12),sin(pi/12)],pi/12,X,Y,1,1);
leaf.l4=drawLeaf([50,10]+1.*[cos(pi/3),sin(pi/3)],pi/3,X,Y,1,1);
leaf.l5=drawLeaf([0,45]+1.*[cos(pi/3),sin(pi/3)],pi/3,X,Y,1,1);
leaf.l6=drawLeaf([0,30]+1.*[cos(pi/5),sin(pi/5)],pi/5,X,Y,1,1);
flower.fl1=drawFlower([35,12]);
flower.fl2=drawFlower([20,5]);
fps=25;
mitimer=timer('ExecutionMode', 'fixedRate', 'Period',1/fps, 'TimerFcn', @miMove);
start(mitimer)
function miMove(~,~)
for ii=1:6
if leaf.(['l',num2str(ii)]).ratio0.6
flower.(['fl',num2str(ii)]).ratio=flower.(['fl',num2str(ii)]).ratio-0.2;
end
end
end
end
function bool=closeLeaf(pos1,pos2,pos3)
pL=pos1+(pos2-pos1).*0.1;
pR=pos1+(pos2-pos1).*0.9;
lTotal=norm(pL-pos3)+norm(pR-pos3);
bool=lTotalpi);
t1=t1.*cos(pi/9)-y.*sin(pi/9);
y=t1.*sin(pi/9)+y.*cos(pi/9);
% 将多个压扁倾斜的半圆弧曲线拼接
T=[];
Y=[];
for i=1:20
T=[T,(i-1)*(pi+2*pi/100)+t1];
Y=[Y,y];
end
% 乘以一个类似弧形曲线让每片小叶子不一样长
L=length(T);
t2=linspace(pi/8,pi-2*pi/5,L);
Y=Y.*sin(t2);
% 旋转并调整比例
X=T.*cos(pi)-Y.*sin(pi);
Y=T.*sin(pi)+Y.*cos(pi);
X=X-min(X);
X=X.*0.8;
Y=Y.*1.5;
% 创建figure及axes=========================================================
fig=figure('units','pixels',...
'position',[500 100 500 500],...
'Numbertitle','off',...
'Color',[1 1 1],...
'resize','off',...
'visible','on',...
'name','mimose',...
'menubar','none');
ax=axes('Units','pixels',...
'parent',fig,...
'Color',[0.2667 0.4039 0.2745],...
'Position',[0 0 500 500],...
'XLim',[0 100],...
'YLim',[0 100],...
'XColor',[1 1 1],...
'YColor',[1 1 1]);
hold(ax,'on')
%plot(ax,X+20,Y+50)
% 调用后面定义的函数绘图===================================================
% 绘制树枝
drawBranch([20,0],[50,10])
drawBranch([20,0],[35,12])
drawBranch([0,0],[15,45])
drawBranch([4,0],[0,20])
% 绘制树叶
leaf.l1=drawLeaf([50,10]+1.*[cos(pi/1.7),sin(pi/1.7)],pi/1.7,X,Y,0.8,1);
leaf.l2=drawLeaf([50,10]+1.*[cos(-pi/8),sin(-pi/8)],-pi/8,X,Y,0.8,1);
leaf.l3=drawLeaf([50,10]+1.*[cos(pi/12),sin(pi/12)],pi/12,X,Y,1,1);
leaf.l4=drawLeaf([50,10]+1.*[cos(pi/3),sin(pi/3)],pi/3,X,Y,1,1);
leaf.l5=drawLeaf([0,45]+1.*[cos(pi/3),sin(pi/3)],pi/3,X,Y,1,1);
leaf.l6=drawLeaf([0,30]+1.*[cos(pi/5),sin(pi/5)],pi/5,X,Y,1,1);
% 绘制花朵
flower.fl1=drawFlower([35,12]);
flower.fl2=drawFlower([20,5]);
% 鼠标移动回调=============================================================
fps=25;
mitimer=timer('ExecutionMode', 'fixedRate', 'Period',1/fps, 'TimerFcn', @miMove);
start(mitimer)
% 花朵树叶回缩函数
function miMove(~,~)
for ii=1:6
if leaf.(['l',num2str(ii)]).ratio0.6
flower.(['fl',num2str(ii)]).ratio=flower.(['fl',num2str(ii)]).ratio-0.2;
end
end
end
end
% 距离检测函数,叶子形状近乎于椭圆,当距离俩焦点和小于一定值认为足够近
% 若足够近返回TRUE 否则返回FALSE
function bool=closeLeaf(pos1,pos2,pos3)
pL=pos1+(pos2-pos1).*0.1;
pR=pos1+(pos2-pos1).*0.9;
lTotal=norm(pL-pos3)+norm(pR-pos3);
bool=lTotal
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?