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

📄 reflash.m

📁 matlab源代码,适用于开发研究,带来很好的学习效果.
💻 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 + -