Source PostScript (interpolfunct.pps)

Retour Texte non formaté
%% syntaxe : x array interpolfunct --> f(x) interpole a partir du %% tableau de points array /interpolfunct { 11 dict begin /table_f exch def /x exch def %% n = le + grand indice /n table_f length 2 idiv 1 sub def /x0 table_f 0 get def /xn table_f 2 n mul get def /xi+1 0 def xn x0 gt { %% table_f trie par x croissant /y_xmin table_f 1 get def /y_xmax table_f n 2 mul 1 add get def /i 0 def /increment 1 def /xi x0 def } { %% table_f trie par x decroissant /y_xmax table_f 1 get def /y_xmin table_f n 2 mul 1 add get def /i n def /increment -1 def /xi xn def } ifelse x x0 lt x xn lt and { %% x < x0 et x < xn y_xmin %% (x0) x0 %% (xn) xn %% (x) x blim } { x xn gt x x0 gt and { %% x > x0 et x > xn y_xmax } { %% x dans [xi ; xn] ou dans [xi ; x0] { /i i increment add store i 0 lt i n gt or { %% impossible en principe (PROBLEME DANS F) boum } if /xi+1 table_f 2 i mul get store x xi+1 le { %% alors xi < x < xi+1 /yi+1 table_f 2 i mul 1 add get def /yi table_f 2 i increment sub mul 1 add get def yi+1 yi sub xi+1 xi sub div x xi sub mul yi add %% (xi) xi %% (xi+1) xi+1 %% (yi) yi %% (yi+1) yi+1 exit } { %% alors x dans [xi+1 ; xn] (ou [xi+1 ; x0]) /xi xi+1 store % (i) i } ifelse } loop } ifelse } ifelse end } def