;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ; NAME: projsegment ; ; PURPOSE: projecte lineairement un segment un vecteur dont les bornes ; sont [a,b] sur un vecteur dont les bornes sont [c,d] ; ; CATEGORY: caculs a 2 francs ; ; CALLING SEQUENCE: res=projsegment(vecteur, bornes) ; ; INPUTS: vecteur: un vecteur dont le premier element doit etre le ; plus petit element et le dernier doit etre le plus grand. ; bornes: les nouvelles bornes du vecteur. ; ; KEYWORD PARAMETERS: ; ; /MP: activer ce motcle pour que la fonction retourne un ; vecteur de 2 elements qui sont les coefficient m et p de la ; projection lineaire y=mx+p utilisee pour passer du segment ; [a,b] au segment [c,d] ; ; OUTPUTS:un vecteurs dont les nouvelles bornes sont specifiees par ; bornes ; ; COMMON BLOCKS: ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; IDL> a=indgen(9) ; IDL> print, a ; 0 1 2 3 4 5 6 7 8 ; IDL> print, projsegment(a,[0,80]) ; 0 10 20 30 40 50 60 70 80 ; IDL> print, projsegment(a,[0,-80]) ; 0 -10 -20 -30 -40 -50 -60 -70 -80 ; IDL> print, projsegment(a,[-80,0]) ; -80 -70 -60 -50 -40 -30 -20 -10 0 ; ; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr) ; 24/6/1999 ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ FUNCTION projsegment, vecteur, bornes, MP = mp ;-------------------------------------------------------------- a1 = float(vecteur[0]) b1 = float(vecteur[n_elements(vecteur)-1]) a2 = float(bornes[0]) b2 =float( bornes[1]) if a1 EQ b1 then return, -1 m = (b2-a2)/(b1-a1) p = a2-m*a1 ;-------------------------------------------------------------- if keyword_set(mp) then return, [m, p] ELSE return, m*vecteur+p ;-------------------------------------------------------------- end