Zaf11000 a écrit :par ailleurs mes recherches ne m'ont pas permis de mettre la main sur l'algorithme de Philippe Ivaldi.
Si tu as un lien ça m'intéresse beaucoup.
Un lien vers des exemples d'utilisation d'hull_pi.
J'imagine que tu as déjà mis tous les packages de Philippe (un lien déjà donné) dans ton dossier .asy
mais je précise que pour hull_pi, tu devras remplacer la ligne 126 par :
Un exemple :
Code : Tout sélectionner
import hull_pi;
size(200,0);
real[] x={1,2,3,4,5,6,7,8,9};
real[] y={1,4,3,4.5,5,3.5,5.2,2.3,7};
pair[] hull=hull(pairs(x,y),depthMin=0,depthMax=3,angleMin=0,angleMax=360);
path unejoliecourbe(pair[] c){
guide g;
for (int k=0; k < c.length; ++k)
g=g.. tension 3 .. c[k];
return g..cycle;
}
draw(unejoliecourbe(hull),3bp+.8green);
draw(polygon(hull),1bp+blue);
dot(pairs(x,y),2bp+red);
shipout(bbox(3mm,white));
- 2010-03-06_090809.png (6.94 Kio) Consulté 1093 fois
Dans la fonction unejoliecourbe que j'ai dû définir pour obtenir ce que tu veux,
(Dans hull_pi, Philippe a écrit l'algorithme pour déterminer les points utiles mais il s'est limité à la fonction path polygon(pair[] c), qui trace ce qu'elle dit, pour les relier : probablement à cause du genre de problème qui se passe dans l'exemple.)
j'ai été contraint de modifier la tension (par défaut à 1) à 3, sinon l'un des points ne se trouvait pas à l'intérieur.
Probablement faudra t-il modifier la fonction pour pouvoir passer la tension en paramètre... et donner ainsi plus de souplesse, suivant les exemples.