Du texte sur une surface... Comment faire, et comprendre ?

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Du texte sur une surface... Comment faire, et comprendre ?

Message non lu par DK » mar. 29 juin 2010, 18:24

Bonjour,

J'ai essayé de m'inspirer d'un code source qui a été utilisé pour montrer l'action (et l'effet) des "begingroup3"... J'ai compris comment fonctionne le begingroup3, mais ce qui m'avait interpellé c'est l'exemple lui-même où du texte 3D était placé sur la surface paramétrique même et en épousait la forme !
Absolument génial, mais comprendre comment cela a été fait : difficile, puisque je tourne en rond pour tenter d'écrire du texte sur une sphère ! L'exemple dont je parle est ici, et qui marche très bien : http://asy.gmaths.net/forum/accueil-news-sav-f4/nouvelle-version-d-asymptote-t70.html#p780.
La génération de la surface, c'est clair. Mais ce code là, je n'ai pas compris comment il fonctionne :

Code : Tout sélectionner

draw(surface(xscale(0.26)*yscale(0.1)*rotate(90)*hi,s,4.9,1.4,h,bottom=false),"[pi,2pi]");
. L'action invoquée entre le "s" et le "bottom" (qui fait parti de la structure de la commande "surface") : je ne comprend pas ce que c'est et comment paramétrer. Ou encore dit autrement, comment placer le texte là où l'on veut sur la surface de la sphère (par exemple) à la taille que l'on veut...

Si quelqu'un a des explications... Merci d'avance.
DK.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par GM » mar. 29 juin 2010, 19:21

DK a écrit :Si quelqu'un a des explications... Merci d'avance.
DK.


Par manque de temps (car copies de bac à corriger !!!), juste la syntaxe et le code de la fonction, dans three_surface.asy, qui permet cela :

Code : Tout sélectionner

// Embed a Label onto a surface.
surface surface(Label L, surface s, real uoffset, real voffset,
                real height=0, bool bottom=true, bool top=true)
{
  int nu=s.index.length;
  int nv;
  if(nu == 0) nu=nv=1;
  else {
    nv=s.index[0].length;
    if(nv == 0) nv=1;
  }

  path[] g=texpath(L);
  pair m=min(g);
  pair M=max(g);
  pair lambda=inverse(L.T*scale(nu-epsilon,nv-epsilon))*(M-m);
  lambda=(abs(lambda.x),abs(lambda.y));
  path[] G=bezulate(g);

  path3 transpath(path p, real height) {
    return path3(unstraighten(p),new triple(pair z) {
        real u=uoffset+(z.x-m.x)/lambda.x;
        real v=voffset+(z.y-m.y)/lambda.y;
        if(((u < 0 || u >= nu) && !s.ucyclic()) ||
           ((v < 0 || v >= nv) && !s.vcyclic())) {
          warning("cannotfit","cannot fit string to surface");
          u=v=0;
        }
        return s.point(u,v)+height*unit(s.normal(u,v));
      });
  }

  surface s;
  for(path p : G) {
    for(path g : regularize(p)) {
      path3 b;
      bool extrude=height > 0;
      if(bottom || extrude)
        b=transpath(g,0);
      if(bottom) s.s.push(patch(b));
      if(top || extrude) {
        path3 h=transpath(g,height);
        if(top) s.s.push(patch(h));
        if(extrude) s.append(extrude(b,h));
      }
    }
  }
  return s;
}
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par GM » mar. 29 juin 2010, 19:47

Un exemple pour comprendre les paramètres :

Figure asymptote 414712c710bd07bac163e039c09caece
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph3;
  2.  
  3. size(200);
  4.  
  5. currentprojection=orthographic(
  6. camera=(-0.46115537749058,1.17130959910743,5.2359684929413),
  7. up=(-0.00651970599365431,0.00966944070439416,-0.00273731877240859),
  8. target=(-2.93764578634947e-16,1.78134416939368e-16,1.14578485588268e-15),
  9. zoom=0.676839362028687);
  10.  
  11. real f(pair z) {return z.y^2-z.x^2;}
  12.  
  13. surface s=surface(f,(-1,-1),(1,1),nx=20,ny=4,Spline);
  14.  
  15. draw(s,lightblue+opacity(0.8),blue);
  16. draw(surface(scale(.5)*"GM",s,uoffset=10,voffset=1,height=0.03),red);


Extrait du code :

Code : Tout sélectionner

surface s=surface(f,(-1,-1),(1,1),nx=20,ny=4,Spline);
draw(surface(scale(.5)*"GM",s,uoffset=10,voffset=1,height=0.03),red);


Compte les lignes du "quadrillage" de la surface : tu vas comprendre la signification des nombres 20, 4, 10 et 1.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

projetmbc
Messages : 34
Enregistré le : mer. 17 mars 2010, 08:31

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par projetmbc » mar. 29 juin 2010, 20:35

C'est pour quoi faire tout ceci concrètement. Question un peu provocatrice.

PS : GM j'ai eu peur pendant un moment que tu prennes le plan tangent. Me voilà rassuré.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par GM » mar. 29 juin 2010, 20:42

projetmbc a écrit :PS : GM j'ai eu peur pendant un moment que tu prennes le plan tangent. Me voilà rassuré.

Est-ce normal que je ne comprenne rien à cette phrase ?
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par chellier » mar. 29 juin 2010, 21:04

projetmbc a écrit :C'est pour quoi faire tout ceci concrètement.

Il faut vraiment qu'il y ait une utilité ?
toto.png
toto.png (95.38 Kio) Vu 9026 fois

Christophe

projetmbc
Messages : 34
Enregistré le : mer. 17 mars 2010, 08:31

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par projetmbc » mar. 29 juin 2010, 21:28

chellier a écrit :Il faut vraiment qu'il y ait une utilité ?

Une question doit-elle forcément être intéressante ? Je parle de la mienne bien entendu.

Ceci étant dit, j'ai ajouté que ma question était volontairement provocatrice car je suis moi-même coutumier des fonctionnalités anecdotiques comme la mise en forme d'une multiplication par jalousie.

Avec le texte sur une surface, on peut faire des logos. Pour un dessin purement scientifique, on peut rendre plus "lisible" une équation d'une surface en la mettant sur cette dernière.

GM a écrit :
projetmbc a écrit :PS : GM j'ai eu peur pendant un moment que tu prennes le plan tangent. Me voilà rassuré.

Est-ce normal que je ne comprenne rien à cette phrase ?

J'ai toujours confondu plan tangent et tangente. Je te rassure, je vais aller suivre mon traitement. :mrgreen:

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par chellier » mar. 29 juin 2010, 21:57

projetmbc a écrit :Ceci étant dit, j'ai ajouté que ma question était volontairement provocatrice

Ma réponse l'était tout autant ;) .
Sinon :
equateur2.png
equateur2.png (56.27 Kio) Vu 9018 fois

est quand même mieux que :
Equateur1.png
Equateur1.png (48.38 Kio) Vu 9018 fois


Christophe

PS : code de la première figure

Code : Tout sélectionner

size(6*cm,0);
usepackage("fourier");
import solids;
settings.render=2; // à commenter si besoin
//settings.prc=false; // à commenter si besoin
pen pSphere=blue+opacity(.4); // +opacity(.4)
triple pO=(0,0,0), pN=(0,0,1), pS=(0,0,-1);

revolution Terre=sphere(O,1,n=4*nslice);
surface s=surface(Terre);
draw(s, pSphere);

// Équateur
skeleton e;
Terre.transverse(e,reltime(Terre.g,.5));
draw(e.transverse.front,.7*linewidth(bp)+red);
draw(e.transverse.back,.7*bp+dashed+red);

// ------------- Tracés en pointillés ----------------
draw(pN--pS,dashed);

// ------------- Labels -------------
draw(surface(scale(.08)*"\'Equateur",s,uoffset=4.5,voffset=24,height=0.01),red);

DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par DK » mer. 30 juin 2010, 10:25

Merci pour les explications du code. Pour le principe du texte sur la sphère (par exemple) c'est effectivement ce que je veux faire : mettre du texte (court) sur la surface et non mettre du texte comme label.
Effectivement cela méritait quelques explications centrées. (je n'ai rien vu de tel sur la doc officielle...)

DK.

projetmbc
Messages : 34
Enregistré le : mer. 17 mars 2010, 08:31

Re: Du texte sur une surface... Comment faire, et comprendre

Message non lu par projetmbc » mer. 30 juin 2010, 12:18

En ces temps de chaleur, un exemple avec l'équateur risque de surchauffer les esprits. ;)

Répondre