📄 reflash.m
字号:
%---------------设置动画图形的初始环境变量----------------------------%
clear;clc;close all;
figure;
set(gcf,'DoubleBuffer','on'); %设置图形的刷新模式
axis([0,10,0,8]); %设置图形的坐标轴范围
hold on;
%---------------创建图形的顶板(Ceiling)对象----------------------------%
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,pi*2,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+7i;
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);
%--------------定义图形的初始标题和时间标量----------------------------%
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);
xlabel('{\itt}','fontsize',14);
ylabel('The abscissa in ceiling','fontsize',14);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -