Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear %Because when variables, such as a, b, ti[me] are changed, sizes of arrays get changed, and it's inconvenient to stumble over "array of wrong size" all over again
- %When translating from Maple to Matlab/Octave/OML, replace all := with =, and then replace all : with ;
- REa=6.3781;REb=6.3568;RM=1.73814;RS=696;%Constants
- ESa=152098.232;ESb=147098.290;ESan=0;EStilt=pi*(23+26/60+21/3600)/180;%Pi in Maple, case matters
- ST=8766.1536;MT=27.3*24;SMtilt=pi*5.1/180;
- EMa=405.696;EMb=363.104;
- %a='a';b='b'; in Maple, equations are symbolic, and variables such as a, b
- %and time need to be given values only at the end
- a=(0:0.05:2)*pi;b=0.0:0.02:1.0;ti=-2.5:0.05:2.5;tim=1:length(ti);%for "array index"%b should be between 0 and 1, but poles are difficult to evaluate, division by 0
- tir=repmat (ti', [1 length(a) length(b)]);
- %Sun movement relative to Earth
- SCX(tim)=ESa*cos(ESan+2*pi*ti/ST)*cos(EStilt);%Center of the Sun
- SX=zeros(length(ti),length(a),length(b));%Surface of the Sun
- for index=1:length(ti)%bad fix, but 3D arrays in Matlab get irritating
- SX(index,:,:)=RS*cos(a')*cos(b*2*pi)+SCX(index);
- end
- SCY(tim)=ESb*sin(ESan+((2.*pi.*ti)/ST));
- %SY(tim)=RS*cos(a')*sin(b*2*pi)+SCY(tim);
- for index=1:length(ti)
- SY(index,:,:)=RS*cos(a')*sin(b*2*pi)+SCY(index);
- end
- SCZ(tim)=ESa*cos(ESan+((2*pi*ti)/ST))*sin(EStilt); %???
- %SZ(tim)=RS*sin(a)+SCZ(tim);
- for index=1:length(ti)
- SZ(index,:,:)=RS*sin(a')*ones(1,length(b))+SCZ(index);
- end
- try
- SXd(tim,:,:)=SX(tim,:,:).*cos(pi*ti'/12)+SY(tim,:,:).*sin(pi*ti'/12); %Matlab
- SYd(tim,:,:)=SY(tim,:,:).*cos(pi*ti'/12)-SX(tim,:,:).*sin(pi*ti'/12);
- catch
- SXd(tim,:,:)=SX(tim,:,:).*cos(pi*tir/12)+SY(tim,:,:).*sin(pi*tir/12); %Compose
- SYd(tim,:,:)=SY(tim,:,:).*cos(pi*tir/12)-SX(tim,:,:).*sin(pi*tir/12);
- end
- SCXd(tim)=SCX(tim).*cos(pi*ti/12)+SCY(tim).*sin(pi*ti/12);
- SCYd(tim)=SCY(tim).*cos(pi*ti/12)-SCX(tim).*sin(pi*ti/12);
- %Moon movement relative to Earth
- MXel(tim)=EMb*cos(2*pi*ti/MT); MYel(tim)=EMa*sin(2*pi*ti/MT);
- MXSM(tim)=MXel(tim); MYSM(tim)=MYel(tim)*cos(SMtilt); MZSM(tim)=MYel(tim)*sin(SMtilt);
- MXSME(tim)=MXSM(tim)*cos(ESan)+MYSM(tim)*sin(ESan); MYSME(tim)=MYSM(tim)*cos(ESan)-MXSM(tim)*sin(ESan); MZSME(tim)=MZSM(tim);
- MCX(tim)=MXSME(tim)*cos(EStilt)-MZSME(tim)*sin(EStilt); %Center of the Moon
- %MX(tim)=RM.*cos(a')*cos(b*2*pi)+MCX(tim);
- for index=1:length(ti)
- MX(index,:,:)=RM*cos(a')*cos(b*2*pi)+MCX(index);
- end
- MCY(tim)=MYSME(tim);
- %MY(tim)=RM.*cos(a).*sin(b.*2.*pi)+MCY(tim);
- for index=1:length(ti)
- MY(index,:,:)=RM*cos(a')*sin(b*2*pi)+MCY(index);
- end
- MCZ(tim)=MZSME(tim).*cos(EStilt)+MXSME(tim).*sin(EStilt);
- %MZ(tim)=RM.*sin(a)+MCZ(tim);
- for index=1:length(ti)
- MZ(index,:,:)=RM*sin(a')*ones(1,length(b))+MCZ(index);
- end
- try
- MXd(tim,:,:)=MX(tim,:,:).*cos(pi*ti'/12)+MY(tim,:,:).*sin(pi*ti'/12); %Matlab
- MYd(tim,:,:)=MY(tim,:,:).*cos(pi*ti'/12)-MX(tim,:,:).*sin(pi*ti'/12);
- catch
- MXd(tim,:,:)=MX(tim,:,:).*cos(pi*tir/12)+MY(tim,:,:).*sin(pi*tir/12); %Compose
- MYd(tim,:,:)=MY(tim,:,:).*cos(pi*tir/12)-MX(tim,:,:).*sin(pi*tir/12);
- end
- MCXd(tim)=MCX(tim).*cos(pi*ti/12)+MCY(tim).*sin(pi*ti/12);
- MCYd(tim)=MCY(tim).*cos(pi*ti/12)-MCX(tim).*sin(pi*ti/12);
- %Distance between the Moon and the Sun
- MSx(tim)=MCXd(tim)-SCXd(tim);
- MSy(tim)=MCYd(tim)-SCYd(tim);
- MSz(tim)=MCZ(tim)-SCZ(tim);
- MS(tim)=((MSx(tim)).^2+(MSy(tim)).^2+(MSz(tim)).^2).^(0.5);
- %MSa(tim)=arcsin((RS-RM)./MS(tim)); MSo(tim)=arcsin((RS+RM)./MS(tim));%atan
- %too instead of arctan
- MSa(tim)=asin((RS-RM)./MS(tim)); MSo(tim)=asin((RS+RM)./MS(tim));
- %Moon shadow on Earth
- px1(tim)=0;
- py1(tim)=MSz(tim)./(((MSz(tim)).^2+(MSy(tim)).^2).^(0.5));
- pz1(tim)=-MSy(tim)./(((MSz(tim)).^2+(MSy(tim)).^2).^(0.5));
- px2(tim)=MSz(tim)./(((MSz(tim)).^2+(MSx(tim)).^2).^(0.5));
- py2(tim)=0;
- pz2(tim)=-MSx(tim)./(((MSz(tim)).^2+(MSx(tim)).^2).^(0.5));
- vx(tim)=(MSx(tim))./(MS(tim));
- vy(tim)=(MSy(tim))./(MS(tim));
- vz(tim)=(MSz(tim))./(MS(tim));
- cpx(tim)=MCXd(tim)+RM.*vx(tim)./(sin(MSa(tim)));
- cpy(tim)=MCYd(tim)+RM.*vy(tim)./(sin(MSa(tim)));
- cpz(tim)=MCZ(tim)+RM.*vz(tim)./(sin(MSa(tim)));
- opx(tim)=MCXd(tim)-RM.*vx(tim)./(sin(MSo(tim)));
- opy(tim)=MCYd(tim)-RM.*vy(tim)./(sin(MSo(tim)));
- opz(tim)=MCZ(tim)-RM.*vz(tim)./(sin(MSo(tim)));
- %vex='vex';vey='vey';vez='vez';%a='a';b='b';
- vex=zeros(length(ti),length(a),length(b));vey=vex;vez=vex;vox=vex;voy=vox;voz=vox;
- cosbMSa=repmat(cos(b.*MSa(index)),[length(a) 1]);
- cosbMSo=repmat(cos(b.*MSo(index)+(1-b).*MSa(index)),[length(a) 1]);
- try
- for index=1:length(ti)
- vex(index,:,:)=(vx(index)).*cos(b.*MSa(index))+(px1(index)).*cos(a')*sin(b.*MSa(index))+(px2(index)).*sin(a')*sin(b.*MSa(index));
- vey(index,:,:)=(vy(index)).*cos(b.*MSa(index))+(py1(index)).*cos(a')*sin(b.*MSa(index))+(py2(index)).*sin(a')*sin(b.*MSa(index));
- vez(index,:,:)=(vz(index)).*cos(b.*MSa(index))+(pz1(index)).*cos(a')*sin(b.*MSa(index))+(pz2(index)).*sin(a')*sin(b.*MSa(index));
- vox(index,:,:)=(vx(index)).*cos(b.*MSo(index)+(1-b).*MSa(index))+(px1(index)).*cos(a')*sin(b.*MSo(index)+(1-b).*MSa(index))+(px2(index)).*sin(a')*sin(b.*MSo(index)+(1-b).*MSa(index));
- voy(index,:,:)=(vy(index)).*cos(b.*MSo(index)+(1-b).*MSa(index))+(py1(index)).*cos(a')*sin(b.*MSo(index)+(1-b).*MSa(index))+(py2(index)).*sin(a')*sin(b.*MSo(index)+(1-b).*MSa(index));
- voz(index,:,:)=(vz(index)).*cos(b.*MSo(index)+(1-b).*MSa(index))+(pz1(index)).*cos(a')*sin(b.*MSo(index)+(1-b).*MSa(index))+(pz2(index)).*sin(a')*sin(b.*MSo(index)+(1-b).*MSa(index));
- end
- ck(tim,:,:)=(((((cpx(tim)').*vex(tim,:,:)+(cpy(tim)').*vey(tim,:,:))/(REa^2)+((cpz(tim)').*vez(tim,:,:))/(REb^2)).^2-(((vex(tim,:,:)).^2+(vey(tim,:,:)).^2)/(REa^2)+((vez(tim,:,:)).^2)/(REb^2)).*(((cpx(tim)').^2+(cpy(tim)').^2)/(REa.^2)+((cpz(tim)').^2)/(REb^2)-1)).^0.5)./(((vex(tim,:,:)).^2+(vey(tim,:,:)).^2)/(REa^2)+((vez(tim,:,:)).^2)/(REb^2))-(((cpx(tim)').*vex(tim,:,:)+(cpy(tim)').*vey(tim,:,:))/(REa.^2)+((cpz(tim)').*vez(tim,:,:))/(REb^2))./(((vex(tim,:,:)).^2+(vey(tim,:,:)).^2)/(REa^2)+((vez(tim,:,:)).^2)/(REb^2));
- cpxx(tim,:,:)=cpx(tim)'.*ones(length(ti),length(a),length(b))+ck(tim,:,:).*(vex(tim,:,:));
- cpyy(tim,:,:)=cpy(tim)'.*ones(length(ti),length(a),length(b))+ck(tim,:,:).*vey(tim,:,:);
- cpzz(tim,:,:)=cpz(tim)'.*ones(length(ti),length(a),length(b))+ck(tim,:,:).*vez(tim,:,:);
- ok(tim,:,:)=((((((opx(tim)').*vox(tim,:,:)+(opy(tim)').*voy(tim,:,:))/(REa^2)+((opz(tim)').*voz(tim,:,:))/(REb^2)).^2-(((vox(tim,:,:)).^2+(voy(tim,:,:)).^2)/(REa^2)+((voz(tim,:,:)).^2)/(REb^2)).*(((opx(tim)').^2+(opy(tim)').^2)/(REa.^2)+((opz(tim)').^2)/(REb^2)-1)).^0.5)./(((vox(tim,:,:)).^2+(voy(tim,:,:)).^2)/(REa^2)+((voz(tim,:,:)).^2)/(REb^2))-(((opx(tim)').*vox(tim,:,:)+(opy(tim)').*voy(tim,:,:))/(REa.^2)+((opz(tim)').*voz(tim,:,:))/(REb^2))./(((vox(tim,:,:)).^2+(voy(tim,:,:)).^2)/(REa^2)+((voz(tim,:,:)).^2)/(REb^2)));
- opxx(tim,:,:)=opx(tim)'.*ones(length(ti),length(a),length(b))+ok(tim,:,:).*(vox(tim,:,:));
- opyy(tim,:,:)=opy(tim)'.*ones(length(ti),length(a),length(b))+ok(tim,:,:).*voy(tim,:,:);
- opzz(tim,:,:)=opz(tim'.*ones(length(ti),length(a),length(b)))+ok(tim,:,:).*voz(tim,:,:);
- catch
- for index=1:length(ti)
- vex(index,:,:)=(vx(index)).*cosbMSa+(px1(index)).*cos(a')*sin(b.*MSa(index))+(px2(index)).*sin(a')*sin(b.*MSa(index));
- vey(index,:,:)=(vy(index)).*cosbMSa+(py1(index)).*cos(a')*sin(b.*MSa(index))+(py2(index)).*sin(a')*sin(b.*MSa(index));
- vez(index,:,:)=(vz(index)).*cosbMSa+(pz1(index)).*cos(a')*sin(b.*MSa(index))+(pz2(index)).*sin(a')*sin(b.*MSa(index));
- vox(index,:,:)=(vx(index)).*cosbMSo+(px1(index)).*cos(a')*sin(b.*MSo(index)+(1-b).*MSa(index))+(px2(index)).*sin(a')*sin(b.*MSo(index)+(1-b).*MSa(index));
- voy(index,:,:)=(vy(index)).*cosbMSo+(py1(index)).*cos(a')*sin(b.*MSo(index)+(1-b).*MSa(index))+(py2(index)).*sin(a')*sin(b.*MSo(index)+(1-b).*MSa(index));
- voz(index,:,:)=(vz(index)).*cosbMSo+(pz1(index)).*cos(a')*sin(b.*MSo(index)+(1-b).*MSa(index))+(pz2(index)).*sin(a')*sin(b.*MSo(index)+(1-b).*MSa(index));
- end
- cpxtim=repmat(cpx(tim)',[1 length(a) length(b)]);
- cpytim=repmat(cpy(tim)',[1 length(a) length(b)]);
- cpztim=repmat(cpz(tim)',[1 length(a) length(b)]);
- ck(tim,:,:)=((((cpxtim.*vex(tim,:,:)+cpytim.*vey(tim,:,:))/(REa^2)+(cpztim.*vez(tim,:,:))/(REb^2)).^2-(((vex(tim,:,:)).^2+(vey(tim,:,:)).^2)/(REa^2)+((vez(tim,:,:)).^2)/(REb^2)).*((cpxtim.^2+cpytim.^2)/(REa.^2)+(cpztim.^2)/(REb^2)-1)).^0.5)./(((vex(tim,:,:)).^2+(vey(tim,:,:)).^2)/(REa^2)+((vez(tim,:,:)).^2)/(REb^2))-((cpxtim.*vex(tim,:,:)+cpytim.*vey(tim,:,:))/(REa.^2)+(cpztim.*vez(tim,:,:))/(REb^2))./(((vex(tim,:,:)).^2+(vey(tim,:,:)).^2)/(REa^2)+((vez(tim,:,:)).^2)/(REb^2));
- cpxx(tim,:,:)=cpxtim+ck(tim,:,:).*(vex(tim,:,:));
- cpyy(tim,:,:)=cpytim+ck(tim,:,:).*vey(tim,:,:);
- cpzz(tim,:,:)=cpztim+ck(tim,:,:).*vez(tim,:,:);
- opxtim=repmat(opx(tim)',[1 length(a) length(b)]);
- opytim=repmat(opy(tim)',[1 length(a) length(b)]);
- opztim=repmat(opz(tim)',[1 length(a) length(b)]);
- ok(tim,:,:)=(((((opxtim.*vox(tim,:,:)+opytim.*voy(tim,:,:))/(REa^2)+(opztim.*voz(tim,:,:))/(REb^2)).^2-(((vox(tim,:,:)).^2+(voy(tim,:,:)).^2)/(REa^2)+((voz(tim,:,:)).^2)/(REb^2)).*((opxtim.^2+opytim.^2)/(REa.^2)+(opztim.^2)/(REb^2)-1)).^0.5)./(((vox(tim,:,:)).^2+(voy(tim,:,:)).^2)/(REa^2)+((voz(tim,:,:)).^2)/(REb^2))-((opxtim.*vox(tim,:,:)+opytim.*voy(tim,:,:))/(REa.^2)+(opztim.*voz(tim,:,:))/(REb^2))./(((vox(tim,:,:)).^2+(voy(tim,:,:)).^2)/(REa^2)+((voz(tim,:,:)).^2)/(REb^2)));
- opxx(tim,:,:)=opxtim+ok(tim,:,:).*(vox(tim,:,:));
- opyy(tim,:,:)=opytim+ok(tim,:,:).*voy(tim,:,:);
- opzz(tim,:,:)=opztim+ok(tim,:,:).*voz(tim,:,:);
- end
- %Sun shadow - night time - on Earth
- zxya(tim)=atan2((SCZ(tim)),(((SCXd(tim)).^2+(SCYd(tim)).^2).^0.5));
- xya(tim)=atan2((SCYd(tim)),(SCXd(tim)));
- adda(tim,1:length(b))=asin((tan(zxya(tim)'))*(tan(b*pi+0.5*pi))*(REa/REb));
- size(adda)
- %Maple just discards complex parts of numbers, unlike Matlab
- %REa*cos(b*Pi+0.5*Pi)*cos(0.5*a+((adda(ti))*(1-(a/Pi)))+0.5*Pi+xya(ti)),REa*cos(b*Pi+0.5*Pi)*sin(0.5*a+((adda(ti))*(1-a/Pi))+0.5*Pi+xya(ti)),REb*sin(b*Pi+0.5*Pi)
- %plot3(REa*cos(b*pi+0.5*pi)*cos(0.5*ones(length(ti),1)*a+(reshape(adda,[2,length(ti),length(b),1])*(1-(a/pi)))+0.5*pi+xya(:,tim)),REa.*cos(b.*pi+0.5.*pi).*sin(0.5.*a+((adda(tim)).*(1-a/pi))+0.5.*pi+xya(tim)),REb.*sin(b.*pi+0.5.*pi),'m');
- try
- colormap winter;
- catch
- end
- figure;
- s=surf(REa*cos(a')*cos(b*2*pi),REa*cos(a')*sin(b*2*pi),REb*sin(a')*ones(1,length(b)));%Earth itself
- try
- s.EdgeColor = 'none';
- catch
- set(s,'color','b')
- end
- hold on;%If done before surf, hold on makes figure 2D
- xlim([-7 7]) %Focusing on Earth
- ylim([-7 7])
- zlim([-7 7])
- for andex=1:length(a)
- addapi(tim,1:length(b),andex)=((1-(a(andex)/pi))*(adda(tim,:)))+0.5*a(andex)+0.5*pi;
- end
- try
- addapi(tim,:,:,:)=addapi(tim,:,:,:)+xya(:,tim)';
- catch
- addapi(tim,:,:,:)=addapi(tim,:,:,:)+repmat(xya(:,tim)',[1 length(b) length(a)]);
- end
- for andex=1:length(a)
- for bndex=1:length(b)
- darkx(tim,andex,bndex)=REa*cos(b(bndex)*pi+0.5*pi)*cos(addapi(tim,bndex,andex));
- darky(tim,andex,bndex)=REa*cos(b(bndex)*pi+0.5*pi)*sin(addapi(tim,bndex,andex));
- darkz(tim,andex,bndex)=REb*sin(b(bndex)*pi+0.5*pi);
- end
- end
- start=round(0.5*length(ti));%1
- night=surf(squeeze(real(darkx(start,:,:))),squeeze(real(darky(start,:,:))),squeeze(real(darkz(start,:,:))));
- try
- night.EdgeColor = 'black';
- catch
- end
- %hold on;
- c=surf(squeeze(real(cpxx(start,:,:))),squeeze(real(cpyy(start,:,:))),squeeze(real(cpzz(start,:,:))));
- try
- c.EdgeColor = 'yellow';
- catch
- end
- %hold on;
- o=surf(squeeze(real(opxx(start,:,:))),squeeze(real(opyy(start,:,:))),squeeze(real(opzz(start,:,:))));
- try
- o.EdgeColor = 'red';
- catch
- end
- %hold on;
- try
- for index=1:length(ti)
- set(night,'XData',squeeze(real(darkx(index,:,:))));
- set(night,'YData',squeeze(real(darky(index,:,:))));
- set(c,'XData',squeeze(real(cpxx(index,:,:))));
- set(c,'YData',squeeze(real(cpyy(index,:,:))));
- set(c,'ZData',squeeze(real(cpzz(index,:,:))));
- set(o,'XData',squeeze(real(opxx(index,:,:))));
- set(o,'YData',squeeze(real(opyy(index,:,:))));
- set(o,'ZData',squeeze(real(opzz(index,:,:))));
- pause(1);
- end
- catch
- Ex=REa*cos(a')*cos(b*2*pi);
- Ey=REa*cos(a')*sin(b*2*pi);
- Ez=REb*sin(a')*ones(1,length(b));
- for index=min(13,length(ti)):max(13,length(ti)-13)
- clf;
- start=index;
- nightx=squeeze(real(darkx(start,:,:)));
- nighty=squeeze(real(darky(start,:,:)));
- nightz=squeeze(real(darkz(start,:,:)));
- cx=squeeze(real(cpxx(start,:,:)));
- cy=squeeze(real(cpyy(start,:,:)));
- cz=squeeze(real(cpzz(start,:,:)));
- ox=squeeze(real(opxx(start,:,:)));
- oy=squeeze(real(opyy(start,:,:)));
- oz=squeeze(real(opzz(start,:,:)));
- %s=surf([Ex,Ey,Ez],[nightx,nighty,nightz],[cx,cy,cz],[ox,oy,oz]);%everything
- s=surf([Ex,nightx,cx,ox],[Ey,nighty,cy,oy],[Ez,nightz,cz,oz]);%everything
- pause(0.2);
- end
- end
- %plot3(REa*cos(a')*cos(b*2*pi),REa*cos(a')*sin(b*2*pi),REb*sin(a')*ones(1,length(b)),'b');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement