pro grille_sat,alpha=alp,beta=bet,req,e,CML,pointa,grille1,grille2,feature,lieu,anneau,$
fov,plot=plot,meri=meri,par=par,equ=equ,mer_cml=mer_cml,anti_cml=anti_cml
pointa=fltarr(2)
grille1=fltarr(19,720,2)
grille2=fltarr(24,337,2)
feature=fltarr(4,1440,2)
anneau=fltarr(5,1440,2)
lieu=fltarr(5,180,2)
fov=fltarr(2)
sa=double(sin(alp*!dtor))
ca=double(cos(alp*!dtor))
sb=double(sin(bet*!dtor))
cb=double(cos(bet*!dtor))
tb=double(tan(bet*!dtor))
a11=cb & a12=0. & a13=sb
a21=sa*sb & a22=ca & a23=-sa*cb
a31=-sb*ca & a32=sa & a33=ca*cb
e1=1./(1-e)
req2=req^2
rp=(1-e)*req
zeta=atan(-rp/(tb*req))
rpa=abs(-req*sb*cos(zeta)+rp*cb*sin(zeta))
l=findgen(1440)
lambda=l*!dtor/4.
d2=req*sin(lambda)
d3=rpa*cos(lambda)
x2=a22*d2+a32*d3
x3=a32*d2-a22*d3
feature(0,l,0)=x2
feature(0,l,1)=x3
rlimbe=sqrt(x2^2+x3^2) & tanlimbe=atan(x3,x2)
x2test=x2 & x3test=x3
for an=0,4 do begin
case an of
0: ran=1.23
1: ran=1.52
2: ran=1.95
3: ran=2.02
4: ran=2.27
endcase
p=findgen(1440)
psi=p*!dtor/4.
xx1=req*ran*cos(psi)
xx2=req*ran*sin(psi)
xx3=0.
x1=a11*xx1+a12*xx2+a13*xx3
x2=a21*xx1+a22*xx2+a23*xx3
x3=a31*xx1+a32*xx2+a33*xx3
w=where(abs(x2) le 1e-30) & if w(0) ne -1 then x2(w)=1e-30
rl=sqrt(x2^2+x3^2) & tananneau=atan(x3,x2)
if min(rl) le max(rlimbe) then begin
previs=fltarr(1440)
for i=0,1439l do begin
test=abs(tanlimbe-tananneau(i))
retest=where(test eq min(test),count_test)
if count_test ne 0 then previs(i)=retest(0)
endfor
endif else previs=findgen(1440)
vis=where(rl ge rlimbe(previs) or x1 ge 0,count_vis)
if count_vis ne 0 then begin
anneau(an,vis,0)=x2(vis)
anneau(an,vis,1)=x3(vis)
endif
endfor
tanan_int=atan(anneau(0,*,1),anneau(0,*,0)) & rl_int=sqrt(anneau(0,*,0)^2+anneau(0,*,1)^2)
tanan_ext=atan(anneau(4,*,1),anneau(4,*,0)) & rl_ext=sqrt(anneau(4,*,0)^2+anneau(4,*,1)^2)
for i=0l,1439l do begin
test_int=abs(tanan_int-tanlimbe(i)) & test_ext=abs(tanan_ext-tanlimbe(i))
if abs(min(test_int))*!radeg le 1. and abs(min(test_ext))*!radeg le 1. then begin
retest_int=where(test_int eq min(test_int)) & retest_ext=where(test_ext eq min(test_ext))
if retest_int(0) ne -1 and retest_ext(0) ne -1 then begin
if rlimbe(i) ge rl_int(retest_int(0)) and rlimbe(i) le rl_ext(retest_ext(0)) then begin
feature(0,i,0) = 0.
feature(0,i,1) = 0.
endif
endif
endif
endfor
if keyword_set(plot) then begin
w=where(feature(0,*,0) ne 0 and feature(0,*,1) ne 0)
if w(0) ne -1 then oplot,feature(0,w,0),feature(0,w,1),psym=3
for i=0,4 do begin
wi=where(anneau(i,*,0) ne 0 or anneau(i,*,1) ne 0)
if wi(0) ne -1 then oplot,anneau(i,wi,0),anneau(i,wi,1),psym=3
endfor
endif
for l=-9,9 do begin
lambda=10.*l*!dtor
rl=sqrt(req2/(cos(lambda)^2+(sin(lambda)*e1)^2))
d12=rl*cos(lambda)
p=findgen(720)
psi=p*!dtor/2.
xx1=d12*cos(psi)
xx2=d12*sin(psi)
xx3=rl*sin(lambda)
x1=a11*xx1+a12*xx2+a13*xx3
x2=a21*xx1+a22*xx2+a23*xx3
x3=a31*xx1+a32*xx2+a33*xx3
zeta=atan(-rp/(tb*req))
x1_lim=abs(req*cb*cos(zeta)*cos(psi)+rp*sb*sin(zeta)*cos(psi))
if ((bet ge 0. and bet lt 90.) or (bet ge 180. and bet lt 270.)) then begin
vis=where((xx3*cb ge 0. and x1 ge -x1_lim) or (xx3*cb lt 0. and x1 ge x1_lim),count_vis)
endif else begin
vis=where((xx3*cb ge 0 and x1 ge x1_lim) or (xx3*cb lt 0 and x1 ge -x1_lim),count_vis)
endelse
if count_vis ne 0 then begin
grille1(l+9,vis,0)=x2(vis)
grille1(l+9,vis,1)=x3(vis)
endif
tan_par=atan(grille1(l+9,*,1),grille1(l+9,*,0)) & rl_par=sqrt(grille1(l+9,*,0)^2+grille1(l+9,*,1)^2)
for i=0l,n_elements(grille1(l+9,*,0))-1l do begin
test_int=abs(tanan_int-tan_par(i)) & test_ext=abs(tanan_ext-tan_par(i))
if abs(min(test_int))*!radeg le 1. and abs(min(test_ext))*!radeg le 1. then begin
retest_int=where(test_int eq min(test_int)) & retest_ext=where(test_ext eq min(test_ext))
if retest_int(0) ne -1 and retest_ext(0) ne -1 then begin
if rl_par(i) ge rl_int(retest_int(0)) and rl_par(i) le rl_ext(retest_ext(0)) then begin
grille1(l+9,i,0) = 0.
grille1(l+9,i,1) = 0.
endif
endif
endif
endfor
if keyword_set(plot) and keyword_set(par) then begin
w=where(grille1(l+9,*,0) ne 0 or grille1(l+9,*,1) ne 0)
if w(0) ne -1 then oplot,grille1(l+9,w,0),grille1(l+9,w,1),psym=3
endif
endfor
p=findgen(1440)
psi=p*!dtor/4.
xx1=req*cos(psi)
xx2=req*sin(psi)
xx3=0.
x1=a11*xx1+a12*xx2+a13*xx3
x2=a21*xx1+a22*xx2+a23*xx3
x3=a31*xx1+a32*xx2+a33*xx3
vis=where(x1 ge 0,count_vis)
if count_vis ne 0 then begin
feature(1,vis,0)=x2(vis)
feature(1,vis,1)=x3(vis)
endif
tan_eq=atan(feature(1,*,1),feature(1,*,0)) & rl_eq=sqrt(feature(1,*,0)^2+feature(1,*,1)^2)
for i=0l,n_elements(feature(1,*,0))-1l do begin
test_int=abs(tanan_int-tan_eq(i)) & test_ext=abs(tanan_ext-tan_eq(i))
if abs(min(test_int))*!radeg le 1. and abs(min(test_ext))*!radeg le 1. then begin
retest_int=where(test_int eq min(test_int)) & retest_ext=where(test_ext eq min(test_ext))
if retest_int(0) ne -1 and retest_ext(0) ne -1 then begin
if rl_eq(i) ge rl_int(retest_int(0)) and rl_eq(i) le rl_ext(retest_ext(0)) then begin
feature(1,i,0) = 0.
feature(1,i,1) = 0.
endif
endif
endif
endfor
if keyword_set(plot) and keyword_set(equ) then begin
w=where(feature(1,*,0) ne 0 or feature(1,*,1) ne 0)
if w(0) ne -1 then oplot,feature(1,w,0),feature(1,w,1),psym=3
endif
for p=0l,23l do begin
psi=15.*p*!dtor
l=findgen(337)
lambda=(l-168.)*!dtor/2.
rl=sqrt(req2/(cos(lambda)^2+(sin(lambda)*e1)^2))
xx1=rl*cos(psi+CML)*cos(lambda)
xx2=rl*sin(psi+CML)*cos(lambda)
xx3=rl*sin(lambda)
x1=a11*xx1+a12*xx2+a13*xx3
x2=a21*xx1+a22*xx2+a23*xx3
x3=a31*xx1+a32*xx2+a33*xx3
zeta=atan(-rp/(tb*req))
x1_lim=abs(req*cb*cos(zeta)*cos(psi)+rp*sb*sin(zeta)*cos(psi))
if ((bet ge 0. and bet lt 90.) or (bet ge 180. and bet lt 270.)) then begin
vis=where((xx3*cb ge 0 and x1 ge -x1_lim) or (xx3*cb lt 0 and x1 ge x1_lim),count_vis)
endif else begin
vis=where((xx3*cb ge 0 and x1 ge x1_lim) or (xx3*cb lt 0 and x1 ge -x1_lim),count_vis)
endelse
if count_vis ne 0 then begin
grille2(p,vis,0)=x2(vis)
grille2(p,vis,1)=x3(vis)
endif
tan_mer=atan(grille2(p,*,1),grille2(p,*,0)) & rl_mer=sqrt(grille2(p,*,0)^2+grille2(p,*,1)^2)
for i=0l,n_elements(grille2(p,*,0))-1l do begin
test_int=abs(tanan_int-tan_mer(i)) & test_ext=abs(tanan_ext-tan_mer(i))
if abs(min(test_int))*!radeg le 1. and abs(min(test_ext))*!radeg le 1. then begin
retest_int=where(test_int eq min(test_int)) & retest_ext=where(test_ext eq min(test_ext))
if retest_int(0) ne -1 and retest_ext(0) ne -1 then begin
if rl_mer(i) ge rl_int(retest_int(0)) and rl_mer(i) le rl_ext(retest_ext(0)) then begin
grille2(p,i,0) = 0.
grille2(p,i,1) = 0.
endif
endif
endif
endfor
if keyword_set(plot) and keyword_set(meri) then begin
w=where(grille2(p,*,0) ne 0 or grille2(p,*,1) ne 0)
if w(0) ne -1 then oplot,grille2(p,w,0),grille2(p,w,1),psym=3
endif
endfor
l=findgen(720)
lambda=(l-360)*!dtor/4.
rl=sqrt(req2/(cos(lambda)^2+(sin(lambda)*e1)^2))
xx1=rl*cos(CML)*cos(lambda)
xx2=rl*sin(CML)*cos(lambda)
xx3=rl*sin(lambda)
x1=a11*xx1+a12*xx2+a13*xx3
x2=a21*xx1+a22*xx2+a23*xx3
x3=a31*xx1+a32*xx2+a33*xx3
zeta=atan(rp/(tan(bet*!dtor)*req))
x1_lim=abs(req*cos(bet*!dtor)*cos(zeta)-rp*sin(bet*!dtor)*sin(zeta))
if ((bet ge 0. and bet lt 45.) or (bet ge 180. and bet lt 270.)) then begin
vis=where((x3 ge 0 and x1 ge -x1_lim) or (x3 lt 0 and x1 ge x1_lim),count_vis)
endif else begin
vis=where((x3 ge 0 and x1 ge x1_lim) or (x3 lt 0 and x1 ge -x1_lim),count_vis)
endelse
if count_vis ne 0 then begin
feature(2,l(vis),0)=x2(vis)
feature(2,l(vis),1)=x3(vis)
endif
tan_cml=atan(feature(2,*,1),feature(2,*,0)) & rl_cml=sqrt(feature(2,*,0)^2+feature(2,*,1)^2)
for i=0l,n_elements(feature(1,*,0))-1l do begin
test_int=abs(tanan_int-tan_cml(i)) & test_ext=abs(tanan_ext-tan_cml(i))
if abs(min(test_int))*!radeg le 1. and abs(min(test_ext))*!radeg le 1. then begin
retest_int=where(test_int eq min(test_int)) & retest_ext=where(test_ext eq min(test_ext))
if retest_int(0) ne -1 and retest_ext(0) ne -1 then begin
if rl_cml(i) ge rl_int(retest_int(0)) and rl_cml(i) le rl_ext(retest_ext(0)) then begin
feature(2,i,0) = 0.
feature(2,i,1) = 0.
endif
endif
endif
endfor
if keyword_set(plot) and keyword_set(mer_cml) then begin
w=where(feature(2,*,0) ne 0 or feature(2,*,1) ne 0)
if w(0) ne -1 then oplot,feature(2,w,0),feature(2,w,1),psym=3,col=150
endif
l=findgen(720)
lambda=(l-360)*!dtor/4+180.*!dtor
rl=sqrt(req2/(cos(lambda)^2+(sin(lambda)*e1)^2))
xx1=rl*cos(CML+!pi)*cos(lambda)
xx2=rl*sin(CML+!pi)*cos(lambda)
xx3=rl*sin(lambda)
x1=a11*xx1+a12*xx2+a13*xx3
x2=a21*xx1+a22*xx2+a23*xx3
x3=a31*xx1+a32*xx2+a33*xx3
vis=where(xx1 lt 0. or x1 ge 0,count_vis)
if count_vis ne 0 then begin
feature(3,l(vis),0)=x2(vis)
feature(3,l(vis),1)=x3(vis)
endif
tan_180=atan(feature(3,*,1),feature(3,*,0)) & rl_180=sqrt(feature(3,*,0)^2+feature(3,*,1)^2)
for i=0l,n_elements(feature(1,*,0))-1l do begin
test_int=abs(tanan_int-tan_180(i)) & test_ext=abs(tanan_ext-tan_180(i))
if abs(min(test_int))*!radeg le 1. and abs(min(test_ext))*!radeg le 1. then begin
retest_int=where(test_int eq min(test_int)) & retest_ext=where(test_ext eq min(test_ext))
if retest_int(0) ne -1 and retest_ext(0) ne -1 then begin
if rl_180(i) ge rl_int(retest_int(0)) and rl_180(i) le rl_ext(retest_ext(0)) then begin
feature(3,i,0) = 0.
feature(3,i,1) = 0.
endif
endif
endif
endfor
if keyword_set(plot) and keyword_set(anti_cml) then begin
w=where(feature(3,*,0) ne 0 or feature(3,*,1) ne 0)
if w(0) ne -1 then oplot,feature(3,w,0),feature(3,w,1),psym=3,col=150
endif
return
end