Léger changement de perspective entre render=4 et render=0

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 !
dohtreb
Messages : 8
Enregistré le : jeu. 3 mai 2012, 12:00

Léger changement de perspective entre render=4 et render=0

Message non lu par dohtreb » lun. 7 mai 2012, 07:50

Bonjour,

Question de débutant. Je cherche à réaliser un graphique 3D avec une surface z(x,y) tirée d'un fichier de données, des axes et des labels. Jusque là rien de spécial. Comme beaucoup d'autres, je voudrais que la surface soit pixellisée mais que les axes et les labels soient vectoriels (il n'y a pas de problèmes d'intersection dans mon cas). Mon approche est de fabriquer l'image en trois temps: (1) générer la surface avec render=4 et un "pen" invisible pour les axes etc; (2) générer les axes et les labels avec render=0 et un "pen" invisible pour la surface; (3) superposer les deux images avec latex. Cela fonctionne, sauf que la perpective change un petit peu en passant de render=4 à render=0, donc les deux images ne se superposent pas parfaitement. Le petit shell ci-dessous illustre le problème: le changement de perspective fait que les deux cubes ne se recouvrent pas.

Peut-on s'assurer que la projection soit exactement la même avec les deux méthodes de rendering?

Merci de votre aide.

[Asymptote 2.13 sur mac (10.7.3) avec texlive 2011]

Code : Tout sélectionner

#!/bin/bash
cat << EOF > test.tex
\documentclass{article}
\usepackage{asymptote}
\begin{document}
\begin{asy}
import graph3; size(8cm); draw(unitbox);
\end{asy}

\vspace{-7.61cm}

\hspace{1.9cm}%
\begin{asy}
import graph3; size(8cm); draw(unitbox,red);
\end{asy}
\end{document}
EOF

pdflatex test
asy -noV -noprc -f pdf test-1.asy
asy -noV -noprc -f pdf -render=0 test-2.asy
pdflatex test
[Mac OS 10.8.5; asymptote 2.23; TeXLive 2013]

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

Re: Léger changement de perspective entre render=4 et render=0

Message non lu par GM » lun. 7 mai 2012, 08:52

Bonjour,

dohtreb a écrit :Question de débutant.

je ne trouve pas... et je la trouve plutôt étonnante et pas facile.

J'ai tenté d'indiquer une projection dans chaque script : c'est un peu mieux et pas parfait.

Code : Tout sélectionner

\documentclass{article}
\usepackage{asymptote}
\begin{document}
\begin{asy}
settings.prc=false;
settings.outformat="pdf";
settings.render=4;
import graph3;
currentprojection=orthographic(camera=(5,4,1));
size(8cm); draw(unitbox);
\end{asy}

\vspace{-6.98cm}

\hspace{1.95cm}%
\begin{asy}
settings.prc=false;
settings.outformat="pdf";
settings.render=0;
import graph3;
currentprojection=orthographic(camera=(5,4,1));
size(8cm); draw(unitbox,red);
\end{asy}
\end{document}


Image


Pourquoi le décalage... dans l'instant, je ne sais pas.

J'espère qu'il n'y a pas des dizaines à faire ainsi... car sinon, bon courage pour les réglages des "hspace" et "vspace".
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: Léger changement de perspective entre render=4 et render=0

Message non lu par GM » lun. 7 mai 2012, 08:57

GM a écrit :J'ai tenté d'indiquer une projection dans chaque script : c'est un peu mieux et pas parfait.

Mais je réalise que j'ai choisi orthographic et qu'il faut peut-être perspective, avec lequel le résultat ne sera peut-être pas satisfaisant.
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: Léger changement de perspective entre render=4 et render=0

Message non lu par GM » lun. 7 mai 2012, 09:00

GM a écrit :
GM a écrit :J'ai tenté d'indiquer une projection dans chaque script : c'est un peu mieux et pas parfait.

Mais je réalise que j'ai choisi orthographic et qu'il faut peut-être perspective, avec lequel le résultat ne sera peut-être pas satisfaisant.

Et effectivement, je viens de tester : avec perspective, on a le problème.
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: Léger changement de perspective entre render=4 et render=0

Message non lu par GM » lun. 7 mai 2012, 09:16

... mais j'y pense : elle est positionnée comment la surface vis à vis des axes ? Il ne va pas y avoir un problème de position relative ?

Peut-on avoir un aperçu (voire le script pour tester) de ce qui ne va pas quand surface et axes sont dans le même script ?
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 !

dohtreb
Messages : 8
Enregistré le : jeu. 3 mai 2012, 12:00

Re: Léger changement de perspective entre render=4 et render=0

Message non lu par dohtreb » lun. 7 mai 2012, 09:34

En effet, le problème n'existe pas en projection orthographique.

Voici comment se présente l'image:

Code : Tout sélectionner

\documentclass{article}
\usepackage{asymptote}
\begin{document}

\begin{asy}
settings.prc=false;
settings.outformat="pdf";
settings.render=4;
usepackage("mathdesign",options="charter");
usepackage("amsmath");
import graph3;

real Xrange=6; real Yrange=5;
int Nx=121; int Ny=101;

pen pa=currentpen;pen ps=lightblue;pen pl=1bp+lightmagenta;
//pen pa=invisible;pen ps=lightblue;pen pl=1bp+red;
//pen pa=currentpen;pen ps=invisible;pen pl=invisible;

//real[][] f=input("data/S1.dat").line().dimension(0,0);
triple f(pair t) {
//   int i=round(t.x); int j=round(t.y);
//   return (i*Xrange/(Nx-1),j*Yrange/(Ny-1),f[i][j]);
   return (t.x,t.y,1/(1+t.x^2+t.y^2));
}
limits((0,0,0),(Xrange,Yrange,1));
surface s=surface(f,(0,0),(Xrange,Yrange),Nx,Ny,Spline);

size3(6cm,8cm,5cm,IgnoreAspect);
currentprojection=perspective(camera=(18,-10,4),up=(0,0,1),target=(Xrange/2,Yrange/2,0.5));
xaxis3(Label(XZ()*"$x$",position=MidPoint),0,6,pa,OutTicks(XZ()*Label,endlabel=false,Step=1));
yaxis3(Label(YZ()*"$y$",position=MidPoint,align=SE),XEquals(6),0,5,pa,OutTicks(YZ()*Label,Step=1));
zaxis3(Label("$\mathscr{S}_1(x,y)$",align=N),0,1,pa,InTicks(Step=0.5,0.1));
draw(s,ps);
\end{asy}


\begin{asy}
settings.prc=false;
settings.outformat="pdf";
settings.render=4;
usepackage("mathdesign",options="charter");
usepackage("amsmath");
import graph3;

real Xrange=6; real Yrange=5;
int Nx=121; int Ny=101;

//pen pa=currentpen;pen ps=lightblue;pen pl=1bp+lightmagenta;
pen pa=invisible;pen ps=lightblue;pen pl=1bp+red;
//pen pa=currentpen;pen ps=invisible;pen pl=invisible;

//real[][] f=input("data/S1.dat").line().dimension(0,0);
triple f(pair t) {
//   int i=round(t.x); int j=round(t.y);
//   return (i*Xrange/(Nx-1),j*Yrange/(Ny-1),f[i][j]);
   return (t.x,t.y,1/(1+t.x^2+t.y^2));
}
limits((0,0,0),(Xrange,Yrange,1));
surface s=surface(f,(0,0),(Xrange,Yrange),Nx,Ny,Spline);

size3(6cm,8cm,5cm,IgnoreAspect);
currentprojection=perspective(camera=(18,-10,4),up=(0,0,1),target=(Xrange/2,Yrange/2,0.5));
xaxis3(Label(XZ()*"$x$",position=MidPoint),0,6,pa,OutTicks(XZ()*Label,endlabel=false,Step=1));
yaxis3(Label(YZ()*"$y$",position=MidPoint,align=SE),XEquals(6),0,5,pa,OutTicks(YZ()*Label,Step=1));
zaxis3(Label("$\mathscr{S}_1(x,y)$",align=N),0,1,pa,InTicks(Step=0.5,0.1));
draw(s,ps);
\end{asy}

\vspace{-6.9cm}

\hspace{1.6cm}\begin{asy}
settings.prc=false;
settings.outformat="pdf";
settings.render=0;
usepackage("mathdesign",options="charter");
usepackage("amsmath");
import graph3;

real Xrange=6; real Yrange=5;
int Nx=121; int Ny=101;

//pen pa=currentpen;pen ps=lightblue;pen pl=1bp+lightmagenta;
//pen pa=invisible;pen ps=lightblue;pen pl=1bp+red;
pen pa=currentpen;pen ps=invisible;pen pl=invisible;

//real[][] f=input("data/S1.dat").line().dimension(0,0);
triple f(pair t) {
//   int i=round(t.x); int j=round(t.y);
//   return (i*Xrange/(Nx-1),j*Yrange/(Ny-1),f[i][j]);
   return (t.x,t.y,1/(1+t.x^2+t.y^2));
}
limits((0,0,0),(Xrange,Yrange,1));
surface s=surface(f,(0,0),(Xrange,Yrange),Nx,Ny,Spline);

size3(6cm,8cm,5cm,IgnoreAspect);
currentprojection=perspective(camera=(18,-10,4),up=(0,0,1),target=(Xrange/2,Yrange/2,0.5));
xaxis3(Label(XZ()*"$x$",position=MidPoint),0,6,pa,OutTicks(XZ()*Label,endlabel=false,Step=1));
yaxis3(Label(YZ()*"$y$",position=MidPoint,align=SE),XEquals(6),0,5,pa,OutTicks(YZ()*Label,Step=1));
zaxis3(Label("$\mathscr{S}_1(x,y)$",align=N),0,1,pa,InTicks(Step=0.5,0.1));
draw(s,ps);
\end{asy}

\end{document}
[Mac OS 10.8.5; asymptote 2.23; TeXLive 2013]

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

Re: Léger changement de perspective entre render=4 et render=0

Message non lu par GM » lun. 7 mai 2012, 09:49

L'objectif est d'obtenir le meilleur rendu possible à l'écran ? Je pose la question, car j'ai imprimé le pdf obtenu avec le source précédent... et la différence de qualité des deux figures n'est pas flagrante.
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 !

dohtreb
Messages : 8
Enregistré le : jeu. 3 mai 2012, 12:00

Re: Léger changement de perspective entre render=4 et render=0

Message non lu par dohtreb » lun. 7 mai 2012, 10:19

En effet, pour une impression cela ne fait guère de différence. L'image est destinée à être incluse dans un article distribué en format PDF. L'intérêt d'avoir des fontes vectorielles dans les figures est qu'elles sont correctement lissées lorsqu'on visualise le document PDF à l'écran, ce qui n'est pas le cas des fontes bitmap.
[Mac OS 10.8.5; asymptote 2.23; TeXLive 2013]

etienne25
Messages : 26
Enregistré le : mar. 29 mai 2012, 00:40

Re: Léger changement de perspective entre render=4 et render=0

Message non lu par etienne25 » mer. 1 août 2012, 15:18

Cette discussion remonte à il y a 3 mois, mais je me retrouve actuellement dans la même situation. En fait:
dohtreb a écrit :Comme beaucoup d'autres, je voudrais que la surface soit pixellisée mais que les axes et les labels soient vectoriels...

Moi je voudrais que TOUT soit vectoriel! À quoi bon utiliser Asymptote, «a powerful descriptive vector graphics language» et TeX, qui fait tous ses calculs de dimension avec le scaled point (sp) qui est 100 fois inférieur à la longueur d'onde de la lumière visible, si c'est pour obtenir une image et une police grossièrement pixelisée comme si on travaillait avec Paint??

Bon, le but de mon post n'est pas tant de faire une montée de lait avec ce sujet (bien que ça m'ait soulagé de le faire :D ) que de remarquer la chose ultra-curieuse suivante: si l'on fait un dessin 3D avec Asymptote qui est manipulable (donc lorsqu'Asymptote produit un prc), lorsqu'on clique dessus dans Reader pour "activer le contenu", tout devient vectoriel!!!! La police, le dessin, tout!!! Enfin, c'est ce que j'ai obtenu comme résultat avec tous les prc produits avec Asymptote que j'ai rencontrés jusqu'ici...

Mais alors pourquoi-pourquoi-pourquoi la perfection du vectoriel est-elle massacrée par une lamentable pixelisation lorsqu'on désactive le contenu? Elle est là, l'image vectorielle, qu'est-ce qui justifie qu'on la remplace ainsi par du bitmap?

C'est une question sans réponse, probablement... J'ai divorcé d'avec PSTricks parce que ses capacités 3D ne m'étaient plus suffisantes, mais je dois reconnaître qu'il ne m'a jamais fait le coup bas de la pixelisation :|

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

Re: Léger changement de perspective entre render=4 et render=0

Message non lu par GM » mer. 1 août 2012, 16:10

etienne25 a écrit :Elle est là, l'image vectorielle, qu'est-ce qui justifie qu'on la remplace ainsi par du bitmap?

As-tu lu la documentation qui évoque "four choices for viewing 3D Asymptote output" ?

Tu ne veux que l'image prc dans ton pdf ? Tu compiles ainsi :

Code : Tout sélectionner

asy -f pdf nomdefichier.asy


La documentation dit, à propos du troisième choix :
A stationary preview image with a resolution of n pixels per bp can be embedded with the setting render=n; this allows the file to be viewed with other PDF viewers. Alternatively, the file externalprc.tex illustrates how the resulting PRC and rendered image files can be extracted and processed in a separate LaTeX file.


Le choix qui a été fait est celui de la prc... mais pour les "viewers" qui ne la supportent pas... ils doivent se contenter d'un aperçu fixe avec une résolution que l'on précise avec render. Mais est-il si étonnant que cet aperçu ne soit en quelque sorte qu'une photo du prc dans une position donnée ?

J'ai bien compris que tu penses facile de passer d'une figure 3D vectorielle (d'une vraie, que l'on peut tourner) en une figure 2D vectorielle que l'on pourrait ajouter au dessus de la figure prc (pour les lecteurs pdf autres qu'adobe)...donc n'hésite pas à proposer une solution aux auteurs d'Asymptote. ;-)

Quant à ta comparaison avec pstricks, j'espère que tu réalises que pstricks fait des projections 2D de vue 3D mais il ne fait pas de 3D : tu ne peux pas manipuler d'objets 3D.
Asymptote pratiquait la 3D comme pstricks dans ses premières versions (de simples projections fixes sur lesquelles tu pouvais zoomer sans perte), mais pour pouvoir offrir la possibilité de faire tourner les figures... la 3D d'Asymptote passe maintenant par le format prc et ce n'est plus comparable.

Tu aimerais le beurre et l'argent du beurre... mais pour l'instant, il y a des difficultés techniques qui nous échappent... et qui ne nous permettent pas d'avoir tout ce que l'on voudrait.

------

Tout ce que j'ai écrit est à relativiser : c'est ce que j'ai cru comprendre avec mon anglais approximatif... mais il faudrait que je connaisse bien mieux les subtilités du format prc d'Adobe et les rouages internes d'Asymptote pour avoir des certitudes en la matière.
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 !

Répondre