Page 2 sur 3

MessagePosté: Lundi 15 Janvier 2007, 22:52
par Ph. Ivaldi
MB a écrit:Merci pour la modification de la fonction.


Avec plaisir.

MB a écrit:Par ailleurs, ce que j'ai utilisé pour les marques d'égalité de longueurs est correct ou il y avait plus simple ? (ou plus propre)


Je n'ai pas trouvé plus simple. Il faut que j'en parle au principal développeur d'Asymptote pour voir s'il peut ajouter cette fonctionnalité, éventuellement utiliser mon code.

MB a écrit:
Ph. Ivaldi a écrit:Une question: comment faites vous pour obtenir de la transparence dans le .png ?
asy -V -f png fichier.asy ne rend pas la transparence.


En fait, je compile toujours en PDF avec Asymptote et j'effectue ensuite la conversion en PNG via la fonction convert d'ImageMagick.


C'est noté, merci.

MessagePosté: Lundi 15 Janvier 2007, 22:54
par MB
Ph. Ivaldi a écrit:Il faut peut-être essayer la commande filldraw, quand c'est possible.


Il faudra essayer.
Mais je pense plutôt que c'est l'ordre qu'il faut changer.
Il faudrait à mon avis tracer les contours du cylindre après avec remplis la section.

MessagePosté: Lundi 15 Janvier 2007, 23:08
par MB
Ph. Ivaldi a écrit:(la suppression de l'anti-aliasing --option +antialias -- réduit le poids me semble-t-il).


J'ai essayé et j'ai pas trop l'impression.

Sinon, voici le code qui permet d'avoir les contours bien noirs.

Code: Tout sélectionner
nitsize(1cm);
import solids;
import math;

currentprojection=orthographic(-50,100,30);

//Draw right angle (MA,MB) in 3D
void drawrightangle(picture pic=currentpicture,
                    triple M, triple A, triple B,
                    real radius,
                    pen p=currentpen,
                    pen fillpen=nullpen,
                    projection P=currentprojection)
{
  p=linejoin(0)+linecap(0)+p;
  transform3 T=shift(-M);
  triple OA=radius/sqrt(2)*unit(T*A),
    OB=radius/sqrt(2)*unit(T*B),
    OC=OA+OB;
  path3 _p=shift(M)*(O--OA--OC--OB--cycle3);
  if (fillpen==nullpen)
    draw(pic, _p, p=p);
  else filldraw(pic, _p, fillpen=fillpen, drawpen=p);
}

real r=4, h=2.5;
real gle=60;
real gleA=20;
transform3 tR=rotate(gle,Z);
transform3 tT=shift((0,0,-h));

triple p0=(0,0,h),
  pA=rotate(gleA,Z)*(0,r,h),
  pF=tR*pA,
  pB=tR*pF,
  pD=tT*pA,
  pC=tT*pB,
  pE=intersectionpoint(p0--pF,pA--pB);

revolution r=cylinder(O,r,h,Z);

fill(pA--pD--pC--pB--cycle3,lightgray+opacity(0.5));

drawrightangle(pE,p0,pB,0.6,fillpen=gray);

dot(Label("$A$",align=NW),pA);
dot(Label("$B$",align=NE),pB);
dot(Label("$C$",align=S),pC);
dot(Label("$D$",align=NW),pD);
dot(Label("$E$",align=S),pE);
dot(Label("$F$",align=S),pF);
dot(Label("$O$",align=N),p0);
dot(Label("$O'$",align=NE),O);

r.draw();

draw(O--p0, dashed);
draw(p0--pB--pF--pA--cycle3^^p0--pF^^pA--pB^^pA--pD);
draw(O--pD--pC--cycle3^^O--p0^^pB--pC, dashed);

typedef void dotmark(picture, pair);
dotmark DotMark(pen p=currentpen)
{
  return new void(picture pic, pair pt)
    {
      dot(pic,pt,p);
    };
}

dotmark NoDotMark(pen p=currentpen)
{
  return new void(picture pic, pair pt){};
}

dotmark DotMark=DotMark();
dotmark NoDotMark=NoDotMark();

markroutine dirmarkroutine(int n, dotmark dotmark=NoDotMark) {
  return new void(picture pic=currentpicture, path g, frame f) {
    if(n == 0) return;
    else
      {
        real width=1/n;
        for(int i=0; i < n; ++i){
          add(pic,
              rotate(degrees(dir(g,arctime(g,(i+.5)*width*arclength(g)))))*f,
              relpoint(g,(i+.5)*width));
          dotmark(pic,relpoint(g,i*width));
        }
        dotmark(pic,relpoint(g,1));
      }
  };
}

picture picturemarkmaker(path g, real n=1,
                         real size=0, real space=0,
                         real angle=0, real hoffset=0, pen p=currentpen)
{
  picture opic;
  int pos=0;
  for(int i=1; i<=n; ++i)
    {
      draw (opic,shift((space*(pos-.5*((n+1)%2)),hoffset))*
            rotate(angle)*
            scale(size/2)*g,p);
      pos=pos+i*(-1)^(i+1);
    }
  return opic;
}

real minstickmarkspace=dotsize(currentpen);
real minstickmarksize=3*dotsize(currentpen);
frame stickpicture(real n=1, real size=0, real space=0,
                   real angle=0, real hoffset=0, pen p=currentpen)
{
  if(size == 0) size=minstickmarksize+2*linewidth(p);
  if(space == 0) space=minstickmarkspace+linewidth(p);
  return picturemarkmaker(N--S,n,size,space,angle,hoffset,p).fit();
}

marker StickMarker(int n=1, int div=1,
                   real size=0, real space=0,
                   real angle=0, real hoffset=0,
                   dotmark dotmark=NoDotMark(), pen p=currentpen)
  {
    return marker(stickpicture(n,size,space,angle,hoffset,p),dirmarkroutine(div,dotmark));
  }

draw(p0--pF,StickMarker(1,2,size=6,angle=-45,DotMark,red)); 

shipout(bbox(xmargin=2mm,invisible));

MessagePosté: Lundi 15 Janvier 2007, 23:39
par MB
Ph. Ivaldi a écrit:
MB a écrit:Par ailleurs, ce que j'ai utilisé pour les marques d'égalité de longueurs est correct ou il y avait plus simple ? (ou plus propre)


Je n'ai pas trouvé plus simple. Il faut que j'en parle au principal développeur d'Asymptote pour voir s'il peut ajouter cette fonctionnalité, éventuellement utiliser mon code.


Oui, c'est surprenant que ça ne soit pas compris dans le module géométrie ça quand même. C'est du même ordre que l'angle droit.

MessagePosté: Lundi 15 Janvier 2007, 23:59
par Ph. Ivaldi
MB a écrit:
Ph. Ivaldi a écrit:
MB a écrit:Par ailleurs, ce que j'ai utilisé pour les marques d'égalité de longueurs est correct ou il y avait plus simple ? (ou plus propre)


Je n'ai pas trouvé plus simple.


Oui, c'est surprenant que ça ne soit pas compris dans le module géométrie ça quand même. C'est du même ordre que l'angle droit.


Je crois que les anglo-saxons n'utilisent pas ces marques mais je dis peut-être une bêtise.
Quand au paquet geometry.asy, il se réduit à sa plus simple expression; il faut quand même voir que Asymptote est un logiciel encore très jeune.
J'ai dû y ajouter pas mal de chose pour pouvoir réellement faire des figures de géométrie.

Pour la 3D, il a été question dernièrement sur le forum de fournir une sortie "u3d" (pour ceux qui ne connaissent pas:http://www.pdf3d.co.uk/); j'attends ça avec impatience...

Ph. Ivaldi a écrit:Il faut que j'en parle au principal développeur d'Asymptote pour voir s'il peut ajouter cette fonctionnalité, éventuellement utiliser mon code.


Réflexion faite, si ça ne conserne que les "frogs", je n'en parlerais pas; mes macros me suffisent et sont relativement bien faites 8) .

MessagePosté: Mardi 16 Janvier 2007, 00:18
par MB
Ph. Ivaldi a écrit:Quand au paquet geometry.asy, il se réduit à sa plus simple expression; il faut quand même voir que Asymptote est un logiciel encore très jeune.
J'ai dû y ajouter pas mal de chose pour pouvoir réellement faire des figures de géométrie.


Oui c'est vrai qu'il est assez court. J'ai vu ton package geometry_pi qui ajoute pas mal de choses en effet.

Ph. Ivaldi a écrit:Pour la 3D, il a été question dernièrement sur le forum de fournir une sortie "u3d" (pour ceux qui ne connaissent pas:http://www.pdf3d.co.uk/); j'attends ça avec impatience...


Ah oui, je ne connaissais pas. Ca semble puissant en effet. :D

Ph. Ivaldi a écrit:
Ph. Ivaldi a écrit:Il faut que j'en parle au principal développeur d'Asymptote pour voir s'il peut ajouter cette fonctionnalité, éventuellement utiliser mon code.


Réflexion faite, si ça ne conserne que les "frogs", je n'en parlerais pas; mes macros me suffisent et sont relativement bien faites 8) .


Bah, ça ne lui couterait pas grand chose de compléter son package geometry ... même si ça ne sert pas à tout le monde. :P

MessagePosté: Mardi 16 Janvier 2007, 00:49
par Ph. Ivaldi
MB a écrit:Sinon, voici le code qui permet d'avoir les contours bien noirs.

Code: Tout sélectionner
...
fill(pA--pD--pC--pB--cycle3,lightgray+opacity(0.5));
...
dot(Label("$O'$",align=NE),O);
...


Il faut placer le label O' de O avant le remplissage, sinon ça choque...
Chez moi il y a bogue, tous les labels sont grisés et je ne sais pas d'où vient le problème; pas d'Asymptote visiblement.

Que donne $ gs --version chez vous ?
Chez moi 7.07.1.

MessagePosté: Mercredi 17 Janvier 2007, 16:54
par MB
Ph. Ivaldi a écrit:Que donne $ gs --version chez vous ?
Chez moi 7.07.1.


C'est quoi ? (la version de Ghostscript ?)
Si c'est ça, j'ai la 8.54.

MessagePosté: Mercredi 17 Janvier 2007, 17:48
par Ph. Ivaldi
MB a écrit:
Ph. Ivaldi a écrit:Que donne $ gs --version chez vous ?
Chez moi 7.07.1.


C'est quoi ? (la version de Ghostscript ?)
Si c'est ça, j'ai la 8.54.


C'est bien la version de Ghostscript.
En plus chez moi j'avais la version gs-eps et non la gs-gpl standard.
En installant la version 8.54 tout rentre dans l'ordre:
https://sourceforge.net/forum/forum.php?thread_id=1652043&forum_id=409349

En revanche je suis déçu: que l'on ne puisse pas faire de labels transparent, je comprends, mais que la transparence n'affecte pas les labels c'est vraiment dommage...

MessagePosté: Mercredi 17 Janvier 2007, 18:13
par MB
Ph. Ivaldi a écrit:En revanche je suis déçu: que l'on ne puisse pas faire de labels transparent, je comprends, mais que la transparence n'affecte pas les labels c'est vraiment dommage...


Oui, j'ai vu dans la doc que c'était fait exprès.
On ne peut pas définir de transparence pour les labels ...

MessagePosté: Mercredi 17 Janvier 2007, 20:20
par Ph. Ivaldi
MB a écrit:
Ph. Ivaldi a écrit:En revanche je suis déçu: que l'on ne puisse pas faire de labels transparent, je comprends, mais que la transparence n'affecte pas les labels c'est vraiment dommage...


Oui, j'ai vu dans la doc que c'était fait exprès.
On ne peut pas définir de transparence pour les labels ...


Je crois qu'on ne se comprend pas... :?
Dans le documentation je vois:

Labels are always drawn with an opacity of 1.


Cela ne signifie pas que la couleur du label ne soit pas affectée par un objet opaque(0.5).
Une surface opaque modifie la couleur des objets se trouvant dans cette surface, elle ne modifie pas leur opacité.
Aurais-je loupé quelque chose ?

MessagePosté: Mercredi 17 Janvier 2007, 20:46
par MB
Ph. Ivaldi a écrit:Je crois qu'on ne se comprend pas... :?
Dans le documentation je vois:

Labels are always drawn with an opacity of 1.


Oui, c'est ce que j'avais vu aussi.

Ph. Ivaldi a écrit:Cela ne signifie pas que la couleur du label ne soit pas affectée par un objet opaque(0.5).
Une surface opaque modifie la couleur des objets se trouvant dans cette surface, elle ne modifie pas leur opacité.
Aurais-je loupé quelque chose ?


Pour moi, cela signifie qu'il n'est pas possible de définir l'opacité d'un label (on ne peut pas le rendre transparent). Par contre, je pense que ça dépend de l'ordre dans lequel se trouve les instructions. Si le label était déjà imprimé lorsqu'on rempli une surface transparente par dessus-ce label, alors sa couleur sera sans doute modifiée. Par contre, si on le place après, la couleur ne sera pas modifiée et on ne pourra pas rendre le label transparent. Après, je ne suis pas certain qu'on se comprenne très bien en effet. Il faudrait faire des tests et donner des exemples de rendu.

MessagePosté: Mercredi 17 Janvier 2007, 21:13
par MB
MB a écrit:Si le label était déjà imprimé lorsqu'on rempli une surface transparente par dessus-ce label, alors sa couleur sera sans doute modifiée.


Après des tests, ça n'est pas le cas.

Code de la figure1 :

Code: Tout sélectionner
unitsize(1cm);

filldraw(circle((0,0),2),blue+opacity(0.6));
dot(Label("$O$",align=N),(0,0));

shipout(bbox(xmargin=1mm,invisible));


Code de la figure2 :

Code: Tout sélectionner
unitsize(1cm);

dot(Label("$O$",align=N),(0,0));
filldraw(circle((0,0),2),blue+opacity(0.6));

shipout(bbox(xmargin=1mm,invisible));

MessagePosté: Mercredi 17 Janvier 2007, 22:14
par Ph. Ivaldi
MB a écrit:
MB a écrit:Si le label était déjà imprimé lorsqu'on rempli une surface transparente par dessus-ce label, alors sa couleur sera sans doute modifiée.


Après des tests, ça n'est pas le cas.


Voilà, c'est bien ce que je voulais te dire...
C'est un peu décevant hein ?.. surtout dans l'espace.

MessagePosté: Mercredi 17 Janvier 2007, 22:23
par MB
Ph. Ivaldi a écrit:Voilà, c'est bien ce que je voulais te dire...
C'est un peu décevant hein ?.. surtout dans l'espace.


Oui en effet.
Je ne m'attendais pas à ce genre de comportement. Bizarre. :?
A signaler peut-être.

MessagePosté: Mercredi 17 Janvier 2007, 22:28
par Ph. Ivaldi
MB a écrit:A signaler peut-être.


J'y vais de ce pas...

MessagePosté: Mercredi 17 Janvier 2007, 23:03
par P.Fradin
Bonsoir,

Je viens de faire un test avec pstricks, j'avais une figure (ci-dessous) pour illustrer un théorème vu sur un autre forum (théorème des belges je crois), je repris le fichier pstricks pondu par texgraph pour ajouter à la main la transparence (et un peu de gradient), j'ai mis le label $F_1$ avant l'ellipse transparente, et le label $F_2$ après, on voit effectivement la différence (je n'ai pas essayé avec pgf).

MessagePosté: Jeudi 18 Janvier 2007, 00:00
par rebouxo
Heu, je suis sur le c. Y a pas à dire TeXgraph c'est bien.

Depuis que j'utilise TeXgraph, les cours sont mieux. TeXgraph parce que tu le vaux bien. :D :D :D :D

Je vais me reconvertir en publicitaire.

Olivier

MessagePosté: Jeudi 18 Janvier 2007, 00:08
par MB
En effet, le résultat sous pstricks est plus logique.
Peut être que ce point sera bientôt réglé sous Asymptote. De plus, le développeur aurait aussi pu laisser la possibilité de définir l'opacité sur les labels, même si à priori ça n'est pas très utile.

MessagePosté: Jeudi 18 Janvier 2007, 00:19
par MB
Ph. Ivaldi a écrit:
MB a écrit:A signaler peut-être.


J'y vais de ce pas...


C'est bizarre ce que tu as demandé.
Ca ne correspond pas à ce que j'obtenais (vu que j'utilisais déjà la version 2.54 de GS).
Mais ça paraissait plutôt normal que le label soit grisé non ? (puisqu'il se trouve sous une surface grisée (si j'ai bien compris ton code))