📄 reflash.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 + -