Gestion des pointillés

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Gestion des pointillés

Message par Fabrice Couvreur »

Bonjour à tous,
Dans le code ci-dessous :

Code : Tout sélectionner

import three;
import solids;
settings.outformat="pdf";
settings.pdfviewer="acroread";
settings.render=-1;
size(6cm,0);
usepackage("fourier");
pen p1=fontsize(6pt);
pen p2=1bp+black;
triple D=(0,0,0);
triple A=(1,0,0);
triple B=(1,1,0);
triple C=(0,1,0);
triple P=(0.5,0.5,3);
triple O=midpoint(A--C);
transform3 r=rotate(90,O,P);
triple I=point(A--B,0.3);
triple J=r*I;
triple K=r*J;
triple L=r*K;
draw(L--A--B--C--K);
draw(I--J--K--P--cycle^^P--J);
draw(L--D--K--cycle^^L--I^^P--L,dashed);
label("D",D,N,p1);
label("A",A,S,p1);
label("B",B,S,p1);
label("C",C,E,p1);
label("S",P,N,p1);
label("I",I,S,p1);
label("J",J,S+E,p1);
label("K",K,N+E,p1);
label("L",L,W+N,p1);
label("O",O,N,p1);
dot(O,p2);
une partie du segment[AD] doit être en pointillés. Je sais que je peux gérer cela à l'aide du menu d'OpenGl afin de bouger la figure à ma convenance et récupérer les données du positionnement.
Mais :

Code : Tout sélectionner

asy -V -wait "pyramide"
X Error of failed request:  GLXBadRenderRequest
  Major opcode of failed request:  153 (GLX)
  Minor opcode of failed request:  1 (X_GLXRender)
  Serial number of failed request:  1005562
  Current serial number in output stream:  1005565
C'est lié aux drivers graphiques, mais je ne vois pas la solution.
Merci.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: Gestion des pointillés.

Message par GMaths »

Bonjour,

Pas de telle erreur chez moi.
Une idée différente (de ce que tu cherches à faire) pour obtenir le point voulu :
{"png": {"width": 301, "height": 294}}
Je fais coup double : en plus de t'aider, c'est un exemple d'utilisation du couple project/invert pour Maurice. ;-)

Rappel : quel que soit l'exemple, il y a toujours une ligne de trop quand tu écris ceci :

Code : Tout sélectionner

import three;
import solids;

maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: Gestion des pointillés.

Message par maurice »

Bonsoir,
GMaths a écrit : Je fais coup double : en plus de t'aider, c'est un exemple d'utilisation du couple project/invert pour Maurice. ;-)
bel exemple :

Code : Tout sélectionner

pair pt2d=extension(project(P),project(I),project(A),project(D));
triple pt3d=invert(pt2d,Z,O);
d'autant plus que je ne connaissais pas la routine extension

maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: Gestion des pointillés.

Message par GMaths »

maurice a écrit :d'autant plus que je ne connaissais pas la routine extension
Cela a été mon premier exemple dans la rubrique "Intersections". ;-)

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: Gestion des pointillés.

Message par Fabrice Couvreur »

Bonsoir,
Tout d'abord, merci pour ton aide.
J'ai quelque peu délaissé Asymptote ces derniers temps, et je dois m'y remettre sérieusement !
Ta solution est très élégante mais j'ai besoin de quelques explications si tu le veux bien.

Code : Tout sélectionner

size(8cm,8cm,IgnoreAspect);
Cela veut dire que l'image va tenir dans un carré de côté 8cm sans respecter le ratio ?

Code : Tout sélectionner

pair pt2d=extension(project(P),project(I),project(A),project(D));
project(P) retourne le projeté du point P sur le plan de l'écran ?
Les droites (AD) et (PI) ne sont pas coplanaires et donc non sécantes, mais Asymptote les considère sécantes en le point pt2d dans le plan de l'écran ?

Code : Tout sélectionner

triple pt3d=invert(pt2d,Z,O);]
"Conversion" d'un point du plan en un point de l'espace qui portant n'existe pas en réalité ??

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: Gestion des pointillés.

Message par GMaths »

Fabrice Couvreur a écrit :

Code : Tout sélectionner

size(8cm,8cm,IgnoreAspect);
Cela veut dire que l'image va tenir dans un carré de côté 8cm sans respecter le ratio ?
Exactement ! C'était pour avoir une taille raisonnable sur ce forum, car il y a une limitation de la taille de l'image acceptée.
C'est un booléen égal à false. Un exemple ici : http://marris.org/asymptote/Size/index. ... 00208_size (avec d'autres exemples qui tentent d'expliquer quelques subtilités sur unitsize et size - j'en ai évoqué d'autres au stage LaTeX de Dunkerque qu'il faudra que je mette en ligne un de ces jours.).
Fabrice Couvreur a écrit :

Code : Tout sélectionner

pair pt2d=extension(project(P),project(I),project(A),project(D));
project(P) retourne le projeté du point P sur le plan de l'écran ?
Les droites (AD) et (PI) ne sont pas coplanaires et donc non sécantes, mais Asymptote les considère sécantes en le point pt2d dans le plan de l'écran ?
Tu as tout compris !
Fabrice Couvreur a écrit :

Code : Tout sélectionner

triple pt3d=invert(pt2d,Z,O);]
"Conversion" d'un point du plan en un point de l'espace qui portant n'existe pas en réalité ??
pt3D est le point dans le plan passant par O et de vecteur normal Z (autrement dit le plan portant la base de ta pyramide)... qui se projette sur l'écran en pt2D.
Dernière modification par GMaths le mardi 25 octobre 2011, 23:52, modifié 1 fois.

maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: Gestion des pointillés.

Message par maurice »

Fabrice Couvreur a écrit :

Code : Tout sélectionner

size(8cm,8cm,IgnoreAspect);
Cela veut dire que l'image va tenir dans un carré de côté 8cm sans respecter le ratio ?
exact
Fabrice Couvreur a écrit :

Code : Tout sélectionner

pair pt2d=extension(project(P),project(I),project(A),project(D));
project(P) retourne le projeté du point P sur le plan de l'écran ?
Les droites (AD) et (PI) ne sont pas coplanaires et donc non sécantes, mais Asymptote les considère sécantes en le point pt2d dans le plan de l'écran ?

Code : Tout sélectionner

triple pt3d=invert(pt2d,Z,O);]
"Conversion" d'un point du plan en un point de l'espace qui portant n'existe pas en réalité ??
J'ai eu du mal au départ avec invert et project : voir ici ou les exemples de la doc 3D (p32). Voici en gros ce qui y est dit
les commandes invert et project sont là pour faire le lien, entre les coordonnées triples d’un point dans l’espace et les
coordonnées doubles de la représentation de ce même point sur une feuille ou sur l’écran de votre ordinateur.
Elles permettent de faire un aller-retour entre des coordonnées différentes d’un seul et unique point, respectivement dans
un repère 3D et un repère 2D plaqué (sur la projection qui représente la situation 3D).
.

Le code de Gaétan est une belle application de ces deux routines.

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: Gestion des pointillés.

Message par GMaths »

Fabrice Couvreur a écrit :J'ai quelque peu délaissé Asymptote ces derniers temps, et je dois m'y remettre sérieusement !
C'est ce que je me dis aussi.

Ta question m'a donné l'envie de rajouter des exemples dans la galerie "Solides" : des pyramides.
Je viens d'ajouter des exemples simples... avant d'ajouter plus tard un exemple pour mettre en application le trio de fonctions : extension/project/invert.

Et en faisant cela, j'ai réalisé avec cet exemple que je devais faire attention à l'ordre des faces pour que l'éclairage soit correct quand on a render>0 (sous réserve de ne pas vouloir faire tourner la figure).... alors que les positions relatives des faces sont bien gérées même si on change l'ordre de la définition des faces. Il y a une contradiction pour moi et quelque chose qui sera encore à améliorer dans Asymptote, selon moi.

J'apprends encore... et j'oublie vite si je ne pratique pas. Réviser Asymptote... ou approfondir tikz : quel dilemme ! :-)

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: Gestion des pointillés.

Message par Fabrice Couvreur »

Re,
GMaths a écrit :j'en ai évoqué d'autres au stage LaTeX de Dunkerque
Habitant Lille, j'aurais dû venir car cela m'aurait beaucoup plu !
GMaths a écrit :C'était pour avoir une taille raisonnable sur ce forum, car il y a une limitation de la taille de l'image acceptée.
Justement, pour voir la figure sur le forum, j'avais essayé d'insérer le code entre les balises
, mais sans succès.
GMaths a écrit :pt3D est le point dans le plan passant par O et de vecteur normal Z (autrement dit le plan portant la base de ta pyramide)... qui se projette sur l'écran en pt2D.
C'est quand même très subtil et assez déroutant au premier abord !

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: Gestion des pointillés.

Message par GMaths »

Fabrice Couvreur a écrit :
GMaths a écrit :pt3D est le point dans le plan passant par O et de vecteur normal Z (autrement dit le plan portant la base de ta pyramide)... qui se projette sur l'écran en pt2D.
C'est quand même très subtil et assez déroutant au premier abord !
Je te l'accorde.

Asymptote a encore pas mal de manques... notamment la possibilité de mettre automatiquement les traits cachés d'une scène 3D en pointillés.
Le choix qui a été fait d'utiliser des transparences pour montrer les parties cachées (peut-être du fait de la compatibilité avec des formats de sorties (opengl, prc)) n'est pas toujours le mieux pour nous.

Pour les pointillés, il faut parfois ruser... et heureusement que l'on peut créer facilement des fonctions qui nous facilitent les choses. C'est là l'occasion d'en créer une !

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: Gestion des pointillés.

Message par GMaths »

GMaths a écrit :Ta question m'a donné l'envie de rajouter des exemples dans la galerie "Solides" : des pyramides.
Je viens d'ajouter des exemples simples... avant d'ajouter plus tard un exemple pour mettre en application le trio de fonctions : extension/project/invert.
Je n'ai pas encore ajouté l'exemple supplémentaire évoqué...

... mais j'en ai mis un autre qui me semble pas inintéressant... même s'il peut paraitre aussi déroutant à ceux qui aspirent à une solution simple pour obtenir la partie cachée du cercle.