clc
clear
close all
figure(1)
hold on
%% 设置图的大小和位置
set(gcf,'position',[200,40,1000,740]);
axis equal
title('椭圆焦点反射动态图')
a=10;
b=8;
c=(a^2-b^2)^0.5;
C1=[-c,0];
C2=[c,0];
axis([-a-2 a+2 -b-2 b+2])
alphy=0:0.01:2*pi;
x=a*cos(alphy);
y=b*sin(alphy);
plot(x,y,'b-','LineWidth',2)
plot(-c,0, 'o','markersize', 10,'markerfacecolor','r','MarkerEdgeColor', 'r')
plot(c,0, 'o','markersize', 10,'markerfacecolor','r','MarkerEdgeColor', 'r')
n=25;
beta=linspace(0,2*pi,n);
beta(end)=[];
n=n-1;
step=0.1;
now_p=zeros(n,2);
now_p(:,1)=-c;
for i=1:n
h(i)=plot(now_p(i,1),now_p(i,2), 'o','markersize',5,'markerfacecolor','k','MarkerEdgeColor', 'b');
end
while true
for i=1:n
next_p=[now_p(i,1)+step*cos(beta(i)) now_p(i,2)+step*sin(beta(i))];
if norm(next_p-C1)+norm(next_p-C2)>2*a
[Cross_p,fai]=G_fun(now_p(i,:),next_p,a,b,C1,C2,beta(i));
plot([now_p(i,1),Cross_p(1)],[now_p(i,2),Cross_p(2)],'r-')
step1=step-norm(now_p(i,:)-Cross_p);
beta(i)=fai;
next_p=[Cross_p(1)+step1*cos(beta(i)) Cross_p(2)+step1*sin(beta(i))];
plot([next_p(1),Cross_p(1)],[next_p(2),Cross_p(2)],'r-')
else
plot([now_p(i,1),next_p(1)],[now_p(i,2),next_p(2)],'r-')
end
now_p(i,:)=next_p;
set(h(i),'xdata',next_p(1),'ydata',next_p(2));
end
drawnow
if norm(now_p(end-1,:)-C2)<step/2
break
end
end
%% qq115075524