next up previous contents
suivant: Discrétisation de l'allongement monter: Premier exemple : le lien précédent: Une numérisation paramétrée rétrospectivement   Table des matières

Fonctionnalisation de l'interface

Le programme obtenu est correct, mais malcommode. En effet, il devrait recevoir en argument la longueur et l'épaisseur du lien, alors que ces paramètres sont ravalés au statut de variables globales. Pour y remédier, on opère une translation du repère en (X2^2,Y2^2) ainsi que sa rotation en arc tangente de (Y25#25-Y2^2, X25#25-X22#22) avant de dessiner. De la sorte, X25#25 représente la longueur du lien, et les variables X22#22, Y22#22 et Y25#25 sont nulles. Les 4 premières fonctions deviennent alors :

A24#24(y)=(y-y22#22)E
A23#23(x)=(x-x22#22)E
S24#24(y)=(y-y25#25)E
S23#23(x)=(x-x25#25)E+X25#25

Par ailleurs, les variables en minuscules sont en fait des constantes issues de la numérisation, donc toutes les opérations les concernant peuvent être réalisées une fois pour toutes. En outre, les points (X26#26,Y26#26), (X27#27,Y27#27), (X29#29,Y29#29) et (X28#28,Y28#28), qui interviennent dans les fonctions B23#23, B24#24, H23#23 et H24#24, sont calculés par les 4 autres fonctions; inclure les définitions de celles-ci dans celles-là, plutôt que d'attendre l'exécution pour déterminer ces points, maximise le nombre de termes calculables à l'avance. Les définitions suivantes en découlent :

H24#24(y)=[(y26#26-y22#22)+(y27#27-y26#26+y22#22-y25#25)(y-y26#26)/(y27#27-y26#26)]E
H23#23(x)=[(x26#26-x22#22)+(x27#27-x26#26+x22#22-x25#25)(x-x26#26)/(x27#27-x26#26)]E+[(x-x26#26)/(x27#27-x26#26)]X25#25
B24#24(y)=[(y29#29-y22#22)+(y28#28-y29#29+y22#22-y25#25)(y-y29#29)/(y28#28-y29#29)]E
B23#23(x)=[(x29#29-x22#22)+(x28#28-x29#29+x22#22-x25#25)(x-x29#29)/(x28#28-x29#29)]E+[(x-x29#29)/(x28#28-x29#29)]X25#25

Ces 8 formules apparaissent maintenant comme le produit de E par une constante, éventuellement ajouté au produit de X25#25 par une autre. Pour éliminer ces deux dernières variables globales, la paramétrisation ne doit plus insérer un des 8 noms après chaque coordonnée figurant dans le résultat du numériseur, mais la remplacer par 1 à 3 instructions d'addition et de multiplication, opérant sur 2 constantes calculées immédiatement à partir d'elle. Les seules données qui ne seront connues qu'à l'exécution, la longueur et l'épaisseur, figureront au sommet de la pile, selon le protocole d'appel standard de PostScript. Les référencer par l'opérateur index fournit alors un programme totalement fonctionnel, et même une programmation sans variable à la FP [4]. L'utilisation explicite de la pile pour placer les résultats intermédiaires impose toutefois un réajustement perpétuel de l'argument d'index pas plus évolué qu'en langage d'assemblage, mais il est immédiat en awk, de par sa numérotation des lexèmes manipulés. Ainsi, les arguments de curveto ci-dessus sont-ils finalement remplacés par l'évaluation partielle de l'application sur eux des nouvelles définitions de H23#23, H24#24, H23#23, H24#24, S23#23 et S24#24 :

-5.15228 1 index mul 0.859462 3 index mul add 4.649 2 index mul
-5.97259 3 index mul 0.934463 5 index mul add 4.736 4 index mul
-6.6894 5 index mul 6 index add 4.736 6 index mul curveto

Ce qui donne le résultat illustré par la figure 1.20.

Figure 1.20: allongement sélectif d'un lien


next up previous contents
suivant: Discrétisation de l'allongement monter: Premier exemple : le lien précédent: Une numérisation paramétrée rétrospectivement   Table des matières
Nabil Bouzaiene 2000-07-12