⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reflash.m

📁 在matlab环境下利用句柄图形的方法创建动态图形
💻 M
字号:
function reflash
%动态反射图形

%设置动画图形初始环境变量
clear;clc;close all;
figure;
set(gcf,'DoubleBuffer','on');  %设置图形的刷新模式
axis([0,10,0,8]);              %设置图形的坐标范围
hold on ;
%创建图形的顶板对象
fill([0.4 8 8 0.4],[7 7 7.3 7.3],[0.8 0.1 0.7]); %创建图形中的横栏
text(2,7.6,'{\it\bf{ceiling}}','fontsize',12);  %添加横栏的文字说明

%创建图形的光源对象
Zz=9+7i+exp(i*linspace(pi,2*pi,20))*0.3; %定义半圆光源的数字方程
Fc=fill(real(Zz),imag(Zz),'r');          %绘制半圆光源
set(Fc,'EdgeColor','r');                 %设置光源的边缘颜色

%创建反射半镜对象
Ar=pi/6;
Zx=7+3.5*i+2*exp(i*linspace(Ar,pi-Ar,20));
Fg=fill(real(Zx),imag(Zx),'b');
set(Fg,'EdgeColor','b');

%创建弹簧的球心对象
Zr=(3.5-2*cos(Ar))*i+7;
hc=plot(Zr,'k*');%球心
p1=9+7*i;
p3=4;

%定义发源光线的数学方程
Dtan=abs(angle(p1-Zx)-angle(Zx-p3));  %计算相角差
[a,Kk]=min(Dtan);                     %计算相角差的最小值
p2=Zx(Kk);                            %选择放射半圆中的数据点
Hp1=plot([p1,p2],'r');
Hp2=plot([p3,p2],'K:');

%定义反射半圆的反射光线的数学方程
Af=2*angle(p2-Zr)-angle(p1-p2);
L=(7-imag(p2))/cos(Af-pi/2);
pf=p2+L*exp(i*Af);
Hp3=plot([p2,pf],'r');

%定义弹簧的数学方程以及坐标数值
N=16;
xt=7*ones(1,N);
yt=linspace(0,4.5,N);
Kt=mod(1:N-4,2)-0.5;
xt=xt+[0,0,Kt,0,0];
hpt=plot(xt,yt);

%axis off

%定义图形的初始标题和时间标量
hw=title('t=0','fontsize',16);
text(0.4,2,'t\in[0,20]','fontsize',14,'color',[0.2,0.8,0.6]);

%定义图形动画的初始参数
t=0;               %控制时间
pg=real(pf);      %纪录反射点的轨迹
dt=0.04;          %时间的单位递加量
pause(0.1);       %做一停留

%定义图形动画的循环程序代码
while t<20;
    t=t+dt;
    pd=7+4*i+cos(pi*t)*i*0.5;
    Zx=pd-2*cos(Ar)*i+2*exp(i*linspace(Ar,pi-Ar,60));
    set(Fg,'XData',real(Zx),'YData',imag(Zx));
    Zr=pd-2*cos(Ar)*i;
    set(hc,'XData',real(Zr),'YData',imag(Zr));
    Dtan=abs(angle(p1-Zx)-angle(Zx-p3));
    [a,Kk]=min(Dtan);
    p2=Zx(Kk);
    set(Hp1,'XData',real([p1,p2]),'YData',imag([p1,p2]));
    set(Hp2,'XData',real([p3,p2]),'YData',imag([p3,p2]));
    Af=2*angle(p2-Zr)-angle(p1-p2);
    L=(7-imag(p2))/cos(Af-pi/2);
    pf=p2+L*exp(i*Af);
    pg=[pg,real(pf)];
    set(Hp3,'XData',real([pf,p2]),'YData',imag([pf,p2]));
    yt=linspace(0,min(imag(Zx)),N);
    %Kt=mod(1:N-4,2)-0.5;
    set(hpt,'YData',yt);
    set(hw,'String',['t=',num2str(t)]);
    pause(0.05);
end
%创建一个新的图形窗口
figure;
plot(linspace(0,20,length(pg)),pg);
title('The track of point in ceiling','fontsize',14);
xlable('{\itt}','fontsize',14);
ylable('The abscissa in ceiling','fontsize',14);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -