Mettre un path dans une boucle

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 11:49

Zaf11000 a écrit:Je ne connais pas l'homothétie de Gaëtan

Tu n'as pas testé ce que je t'ai donné donc :

GMaths a écrit:Ajout d'un paramètre k par défaut à 1, pour pouvoir appliquer à l'enveloppe une homothétie de centre "le point moyen du nuage" et de rapport k :

Code: Tout sélectionner
import hull_pi;
size(150,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 unejolieenveloppe(pair[] c, real t=1, real k=1){
  guide g;
  for (int k=0; k < c.length; ++k)
    g=g.. tension t .. c[k];
  path p=g.. tension t .. cycle;
  pair omega=sum(c)/c.length;
  p=shift(omega)*scale(k)*shift(-omega)*p;
  return p;
}

draw(unejolieenveloppe(hull,t=2),1bp+.8green);
draw(unejolieenveloppe(hull,t=2,k=1.1),1bp+.8blue);
draw(unejolieenveloppe(hull,t=2,k=1.2),1bp+.8orange);

dot(pairs(x,y),3bp+black);

shipout(bbox(3mm,white));
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 11:55

OG a écrit:Une autre idée serait de translater chaque point de l'enveloppe convexe par un vecteur de longueur un paramètre
(au choix) de direction orthogonale au segment point précédent-point suivant.


C'est ce que je voulais dire là :

GMaths a écrit:A ce propos, plutôt que d'appliquer une homothétie, il faudrait que je bricole autre chose... pour obtenir une courbe décalée d'une distance fixe choisie.


Comme je l'ai écrit : j'y travaille. :-)
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 12:15

Je viens de tester la proposition de Gaëtan sur plusieurs exemples, c'est très beau !!! mais c'est vrai qu'il y des nuages où l'enveloppe convexe ne convient pas, c'est sûrement réalisable mais à quel prix ?
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 12:20

Zaf11000 a écrit:l'enveloppe convexe

Je le redis : moi je ne me suis pas soucié qu'elle soit convexe !

... mais OG l'avait relevé et t'a dit quoi modifier.

Regarde dans hull_pi, tu pourras y lire :

Code: Tout sélectionner
pair[] hull(pair[] c, real depthMin=infinity, real depthMax=0,
            real angleMin=360, real angleMax=0, int pivot=-1)


et le commentaire : With default parameter, return the convex hull.

Zaf11000 a écrit:... ne convient pas, c'est sûrement réalisable mais à quel prix ?


Qu'est ce qui ne convient pas ? Sois plus précis, stp.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 12:54

GMaths a écrit:Comme je l'ai écrit : j'y travaille. :-)


J'ai pondu cela en 5mn... mais j'ai perdu un temps certain à trouver une erreur (j'avais une réaffectation de variable k utilisée pour deux choses)
... et depuis à chercher certains incohérences au niveau des longueurs : je dois avoir une seconde erreur.

Code: Tout sélectionner
import hull_pi;
size(150,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 unejolieenveloppe(pair[] c, real t=1, real k=1, real m=0){
  guide g,gr;
  path p;
  for (int i=0; i < c.length; ++i) g=g.. tension t .. c[i];
  p=g.. tension t .. cycle;
  dot(p,2bp+blue);  // à supprimer après débogage
  if(m!=0){
    for (int i=0; i < c.length; ++i){
      c[i]=rotate(90,c[i])*shift(-m*dir(p,i))*c[i];
      gr = gr .. tension t .. c[i];
    }
    p = gr .. tension t .. cycle;
    dot(p,2bp+red); // à supprimer après débogage
  }
  pair omega=sum(c)/c.length;
  p=shift(omega)*scale(k)*shift(-omega)*p;
  return p;
}

draw(unejolieenveloppe(hull),1bp+.8green);
draw(unejolieenveloppe(hull,m=.2),1bp+.8blue);
draw(unejolieenveloppe(hull,m=.4),1bp+.8orange);

dot(pairs(x,y),3bp+black);

shipout(bbox(3mm,white));


Je reverrai le problème plus tard.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 13:11

GMaths a écrit:Je reverrai le problème plus tard.

En faisant autre chose... j'ai un peu réfléchi : le problème venait de c qui était redéfini.

Avec ceci, cela va mieux :
Code: Tout sélectionner
import hull_pi;
size(120,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 unejolieenveloppe(pair[] c, real t=1, real k=1, real m=0){
  guide g,gr;
  path p;
  pair[] c2=new pair[c.length];
  for (int i=0; i < c.length; ++i) g=g.. tension t .. c[i];
  p=g.. tension t .. cycle;
  if(m!=0){
    for (int i=0; i < c.length; ++i){
      c2[i]=rotate(90,c[i])*shift(-m*dir(p,i))*c[i];
      gr = gr .. tension t .. c2[i];
    }
    p = gr .. tension t .. cycle;
  }
  pair omega=sum(c)/c.length;
  p=shift(omega)*scale(k)*shift(-omega)*p;
  return p;
}

draw(unejolieenveloppe(hull),1bp+.8green);
draw(unejolieenveloppe(hull,m=.1),1bp+.8blue);
draw(unejolieenveloppe(hull,m=.5),1bp+.8orange);
draw(unejolieenveloppe(hull,m=1),1bp+.8white);

dot(pairs(x,y),3bp+black);

shipout(bbox(3mm,white));


2010-03-06_131122.png
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 14:03

Pou cet exemple le résultat n'est pas terrible !!
real[] x={1,2,3,4,5,6,7,8,9};
real[] y={1,2,3,3.5,4,4.25,4.27,4.29,4.30};
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 14:25

Zaf11000 a écrit:Pou cet exemple le résultat n'est pas terrible !!
real[] x={1,2,3,4,5,6,7,8,9};
real[] y={1,2,3,3.5,4,4.25,4.27,4.29,4.30};


Pour de telles configurations, pourquoi ne pas te contenter de tracerdes ellipses avec les points extrêmes, comme foyers.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 14:30

Je te donnerais bien un exemple concret mais je ne sais pas comment afficher une image pdf dans le forum, je viens de poster un message à ce sujet, je n'ai pas encore de réponse, peux-tu me le dire s'il te plait ?
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 14:39

Une ellipse, avec comme foyers les points extrêmes, ne couvre pas forcément tout le nuage.
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 14:43

Zaf11000 a écrit:Je te donnerais bien un exemple concret

Mais tu m'en as donné un : je l'ai testé et effectivement j'ai vu.

Zaf11000 a écrit:mais je ne sais pas comment afficher une image pdf dans le forum

Je vais laisser un administrateur/modérateur te répondre...

... mais en attendant, tu peux te servir de ce site : http://imageshack.us/ pour mettre ton pdf en ligne et obtenir un lien à coller dans ton message.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 14:49

Zaf11000 a écrit:Une ellipse, avec comme foyers les points extrêmes, ne couvre pas forcément tout le nuage.

Tu as tant d'exemples que cela à faire ? et qui sont imprévisibles ?
Car pour l'exemple que tu donnais, l'ellipse est facile à trouver.
Ma question est pour savoir si cela vaut le coup de développer une routine qui sache traiter tous les cas les plus imprévisibles ?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar OG » Samedi 06 Mars 2010, 14:54

Difficile de faire un truc automatique qui convient dans tous les cas.
Il y a déjà pas mal d'idées avec le travail de Gaëtan.
Après il faut ajuster à la main.

O.G.
OG
Modérateur
 
Messages: 2262
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 21:49

Voici ce qu j'obtiens avec une ellipse :
Fichiers joints
AvecUneEllipse2.png
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 22:02

Zaf11000 a écrit:Voici ce qu j'obtiens avec une ellipse :

Oui, cela donne bien ce que j'avais imaginé.
Là, c'est convexe... sur la précédente, l'enveloppe ne l'est pas.

La question est : as-tu des dizaines de figures à faire ainsi, de formes variables, qui justifient de faire une routine qui serait capable de prendre en compte toutes les formes de nuages de points ?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 22:11

Certainement non ! mais je suis fasciné par la beauté du mélange mathématiques-informatique, ce que l'on peut réaliser à l'aide de l'outil informatique, bon c'est sûr qu'il y a des logiciels avec des interfaces utilisateur qui font de belles chose mais on dispose pas de la même liberté, et puis rien quel plaisir de voir sortir de beaux résultats après un compilation.. : : :)
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 22:25

GMaths a écrit:sur la précédente, l'enveloppe ne l'est pas.

Apparemment, je parle d'une figure et d'un message qui n'existe plus.

Ne pouvait-on simplement réduire la taille de la figure au lieu de la supprimer ? :?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 22:30

Avec certains logiciels je peux avoir un résultat correct comm :

AvecWord.png

Mais évidemment j'ai décidé de passer à LaTex et Asymptote. :mrgreen:
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar GMaths » Samedi 06 Mars 2010, 22:35

Zaf11000 a écrit:Avec certains logiciels je peux avoir un résultat correct

oui mais apparemment, tu as créé l'ensemble "manuellement", non automatiquement... donc si c'est pour faire comme cela, je ne vois pas le problème pour le faire : il suffit de choisir les points correctement.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Mettre un path dans une boucle

Messagepar Zaf11000 » Samedi 06 Mars 2010, 22:51

Bon, à l'origine j'ai une série double, comme je souhait par la suite tracer mon nuage de points avec Asymptote, du coup j'aimerais avoir la possibilité d'entourer mon nuage avec asymptote, bien sûr ce n'est pas d'une grande importance, mais ce serait tellement pratique et plaisant de le faire par programme.
Zaf11000
Kilo-utilisateur
 
Messages: 126
Inscription: Jeudi 18 Février 2010, 22:52
Statut actuel: Actif et salarié | Enseignant

PrécédenteSuivante

Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités