Shift et labels

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.

Shift et labels

Messagepar MB » Lundi 14 Avril 2008, 21:52

Bonjour,

je voudrais comprendre pourquoi dans le code suivant je dois utiliser shift(20,0) pour décaler légèrement le label "10 cm". La valeur de 20 ne correspond pas à un décalage de 20 unités. Bref, si vous avez une explication. :wink:

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

real a = 35;
currentcoordsys = cartesiansystem((0,0), i = (1,0), j = rotate(a,(0,0))*(1,0));

point pA = (0 ,0);
point pB = (14,0);
point pC = (14,5);
point pD = (0 ,5);

point pE = shift(0,5)*pA;
point pF = shift(0,5)*pB;
point pG = shift(0,5)*pC;
point pH = shift(0,5)*pD;

point pI = shift(0,6)*pA;
point pJ = shift(0,6)*pB;
point pK = shift(0,6)*pC;
point pL = shift(0,6)*pD;

draw(pA--pB--pC);
draw(pC--pD--pA,dashed);
draw(pE--pF--pG--pH--cycle);
dot(pI^^pJ^^pK^^pL);
draw(pA--pI^^pB--pJ^^pC--pK^^pH--pL);
draw(pD--pH,dashed);

distance("$14~\mathrm{m}$",pA,pB,3mm);
distance("$5~\mathrm{m}$",pB,pC,3mm);
distance(rotate(-90)*"$x$",pA,pI,-3mm);
distance(rotate(-90)*shift(20,0)*"$10~\mathrm{cm}$",pG,pK,3mm);

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


Figure :

shift_label.png
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6890
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: [Asymptote] Shift et labels

Messagepar Ph. Ivaldi » Lundi 14 Avril 2008, 23:37

Salut MB,

MB a écrit:je voudrais comprendre pourquoi dans le code suivant je dois utiliser shift(20,0) pour décaler légèrement le label "10 cm". La valeur de 20 ne correspond pas à un décalage de 20 unités.


Parce que l'affichage des labels est déféré dans un environnement où le positionnement relatif à son ancre se fait indépendamment de l'unité choisie donc en bp.

Ta question m'a fait voir une faiblesse de la commande distance qui ne prend pas en compte un éventuel changement du paramètre align.
Essaye donc la nouvelle version de geometry_dev et remplace ta commande par :

Code: Tout sélectionner
distance(Label("$10~\mathrm{cm}$",align=E),pG,pK,rotated=false,3mm);


(note le rotated=false pour éviter la rotation du label ;-) )
Ph. Ivaldi
Méga-utilisateur
 
Messages: 267
Inscription: Vendredi 12 Janvier 2007, 23:27
Statut actuel: Actif et salarié

Re: [Asymptote] Shift et labels

Messagepar MB » Lundi 14 Avril 2008, 23:54

Ph. Ivaldi a écrit:Parce que l'affichage des labels est déféré dans un environnement où le positionnement relatif à son ancre se fait indépendamment de l'unité choisie donc en bp.


Ok, je comprends. Merci pour l'éclaircissement. :wink:

Ph. Ivaldi a écrit:Ta question m'a fait voir une faiblesse de la commande distance qui ne prend pas en compte un éventuel changement du paramètre align.


Ca n'aura pas été inutile alors cette petite question ! :D

En tout cas merci. J'avais pas vu qu'on pouvait désactiver la rotation du label (pratique).
De plus, le align=E sera plus propre que mon shift. Parfait. :wink:
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6890
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels

Messagepar GMaths » Dimanche 20 Avril 2008, 17:00

Bonjour,
je passais par là... et quand je vois asymptote, je lis toujours. :D

Et je me suis demandé comment j'aurais fait cette figure.
Spontanément, je crois que j'aurais essayé d'exploiter les capacités 3d d'Asymptote.

et je me suis dit que la motivation pour le choix de le faire en 2d était peut-être de pouvoir utiliser la fonction distance de geometry_dev.

J'ai cherché et pas trouvé de fonction distance3 ... mais on peut s'en sortir en mélangeant 3d et 2d.

Donc voilà une deuxième version :D

Code: Tout sélectionner
import three;
import geometry_dev;
unitsize(1cm);
currentprojection=obliqueX(45);
real a=5, b=14, c=5;
triple pA=(a,0,0), pB=(a,b,0), pC=(0,b,0), pD=(0,0,0);
transform3 t=shift(0,0,c);
triple pE=t*pA, pF=t*pB, pG=t*pC, pH=t*pD;
transform3 t2=shift(0,0,c+1);
triple pI=t2*pA, pJ=t2*pB, pK=t2*pC, pL=t2*pD;
path3 facedevant=pA--pB--pF--pE--cycle,
    facedroite=pB--pC--pG--pF--cycle,
    facedessus=pH--pE--pF--pG--cycle;
draw(facedevant^^facedroite^^facedessus,1bp+blue);
draw(pD--pA^^pD--pC^^pD--pH,dashed+1bp+blue);
draw(pE--pI^^pF--pJ^^pG--pK^^pH--pL,.8bp+.8blue);
dot(pE--pI^^pF--pJ^^pG--pK^^pH--pL);

distance("$14~\mathrm{m}$",project(pA),project(pB));
distance("$5~\mathrm{m}$",project(pB),project(pC),rotated=false,10mm,joinpen=dashed);
distance("$x$",project(pA),project(pI),rotated=false,-10mm,joinpen=dashed);
distance(Label("$10~\mathrm{cm}$",align=E),project(pG),project(pK),rotated=false);


Image
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels

Messagepar GMaths » Dimanche 20 Avril 2008, 18:29

Je n'avais pas encore mis de pavé droit : http://www.marris.org/asymptote/Solides/index.html

Merci de m'en avoir donné l'idée. :D
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels - PAVE et CUBE

Messagepar GMaths » Dimanche 20 Avril 2008, 20:13

Je suis un peu hors-sujet ("shift et labels") mais comme on a évoqué deux façons de dessiner un pavé droit...
... je m'autorise à revenir sur ce thème ici.

Je voudrais ajouter des exemples dans ma galerie en utilisant box et unitcube dont la définition est : path3[] unitcube=box((0,0,0),(1,1,1));

Le problème de unitcube est qu'il met toutes les arêtes en trait forts.
N'y a t'il pas une commande native qui trace cube et/ou pavé avec des faces opaques et la possibilité d'ajouter les pointillés ?

J'ai testé :

Code: Tout sélectionner
path3[] c=unitcube;
draw(c,dashed);
draw(c[0],1bp+blue);


puis remplacement de c[0] par c[1], par c[2], par c[3].
On obtient des choses que je ne m'explique.

J'avais dans l'idée de tracer le cube en pointillés, puis les 3 faces visibles en trait fort ... mais les c[i] ne sont pas ce que je pensais.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels - PAVE et CUBE

Messagepar Ph. Ivaldi » Lundi 21 Avril 2008, 14:03

Bonjour Gaétan,

GMaths a écrit:Le problème de unitcube est qu'il met toutes les arêtes en trait forts.
N'y a t'il pas une commande native qui trace cube et/ou pavé avec des faces opaques et la possibilité d'ajouter les pointillés ?


Pas à ma connaissance.

GMaths a écrit:J'ai testé :

Code: Tout sélectionner
path3[] c=unitcube;
draw(c,dashed);
draw(c[0],1bp+blue);


puis remplacement de c[0] par c[1], par c[2], par c[3].
On obtient des choses que je ne m'explique.


unitcube est défini de telle sorte que draw(unitcube) ne trace chaque arrête qu'une seule fois; donc les Ci ne sont pas les faces du cube.

GMaths a écrit:J'avais dans l'idée de tracer le cube en pointillés, puis les 3 faces visibles en trait fort...... mais les c[i] ne sont pas ce que je pensais.


Tant que des routines spécifiques ne sont pas développées je procéderais ainsi:

Code: Tout sélectionner
import three;
import animate; animation A;
size(8cm);

path3 xy=plane((1,0,0),(0,1,0));

for (int gle=0; gle < 360; gle += 5) {
  currentprojection=perspective(rotate(gle,Z)*(4,2,2));
  save();
  face[] facescube;
  path3 xy=plane((1,0,0),(0,1,0));
  filldraw(facescube.push(xy),xy,white);
  xy=rotate(90,X)*xy;
  filldraw(facescube.push(xy),xy,white);
  xy=rotate(90,Z)*xy;
  filldraw(facescube.push(xy),xy,white);
  xy=rotate(90,Y,Y+Z)*xy;
  filldraw(facescube.push(xy),xy,white);
  xy=rotate(90,X+Y,X+Y+Z)*xy;
  filldraw(facescube.push(xy),xy,white);
  xy=rotate(-90,X+Y+Z,X+Z)*xy;
  filldraw(facescube.push(xy),xy,white);
  add(facescube);
  draw(unitcube,dashed);
  A.add();
  restore();
}

A.movie();


cube.gif
cube.gif (112.73 Kio) Vu 996 fois


Note qu'il y a un bogue connu dans l'algorithme d'élimination des faces cachées lorsque l'on remplace perspective par orthographic.
J'espère que ce sera corrigé rapidement mais en ce moment John est absent.
Ph. Ivaldi
Méga-utilisateur
 
Messages: 267
Inscription: Vendredi 12 Janvier 2007, 23:27
Statut actuel: Actif et salarié

Re: [Asymptote] Shift et labels - PAVE et CUBE

Messagepar GMaths » Lundi 21 Avril 2008, 14:41

Ph. Ivaldi a écrit:
GMaths a écrit:On obtient des choses que je ne m'explique.

unitcube est défini de telle sorte que draw(unitcube) ne trace chaque arrête qu'une seule fois; donc les Ci ne sont pas les faces du cube.


En fait, je n'ai pas eu le temps de repasser par ici dire que j'avais compris. ;-)
c[0] est le chemin le plus long possible constitué de 9 arêtes (celle de 2 faces opposées et d'une arête les reliant) ;
c[1], [c2], c[3] sont les trois autres arêtes qui relient les deux faces en question.

Ph. Ivaldi a écrit:Tant que des routines spécifiques ne sont pas développées je procéderais ainsi...


Merci pour le script : je vais regarder cela de près.

L'animation : wouahh la frime. :-)
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels

Messagepar MB » Lundi 21 Avril 2008, 15:05

GMaths a écrit:Et je me suis demandé comment j'aurais fait cette figure.
Spontanément, je crois que j'aurais essayé d'exploiter les capacités 3d d'Asymptote.


Oui, je m'étais aussi posé la question c'est vrai.
Mais l'intérêt principal aurait été de gérer automatiquement les pointillés (mais ça ne se fait pas automatiquement).
En tout cas, merci pour ton exemple qui me permet de découvrir un moyen de mélanger 2d et 3d. :wink:
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6890
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels

Messagepar GMaths » Lundi 21 Avril 2008, 15:12

MB a écrit:En tout cas, merci pour ton exemple qui me permet de découvrir un moyen de mélanger 2d et 3d. :wink:

C'est la première fois aussi que j'utilisais "project" dans ce genre de situation aussi.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels

Messagepar MB » Lundi 21 Avril 2008, 15:36

GMaths a écrit:
MB a écrit:En tout cas, merci pour ton exemple qui me permet de découvrir un moyen de mélanger 2d et 3d. :wink:


C'est la première fois aussi que j'utilisais "project" dans ce genre de situation aussi.


Oui, moi je n'avais jamais utilisé cette fonction en fait.
En tout cas, ça peut être bien pratique dans ce genre de situations. :D
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6890
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels - PAVE et CUBE

Messagepar GMaths » Lundi 28 Avril 2008, 13:05

Ph. Ivaldi a écrit:Note qu'il y a un bogue connu dans l'algorithme d'élimination des faces cachées lorsque l'on remplace perspective par orthographic.
J'espère que ce sera corrigé rapidement mais en ce moment John est absent.


Philippe, si tu passes par là...

1. j'ai voulu tester ma page animation en mettant en ligne celle du cube que tu avais proposée : http://www.marris.org/asymptote/animations
... mais je ne m'explique pas le bogue des hachures pour le swf.
J'imagine que tu as déjà constaté le problème...

2. sur le thème de la fonction "project" évoquée précédemment
j'ai voulu tester : http://piprim.tuxfamily.org/asymptote/three/fig0015.asy
Mais... cela ne va pas ! :-- et une recherche dans les sources me demande comment cela peut passer chez toi, vu que nulle part, je n'ai trouvé de : project ( string, .... comme me l'indique le messge d'erreur.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Shift et labels - PAVE et CUBE

Messagepar Ph. Ivaldi » Lundi 28 Avril 2008, 18:36

GMaths a écrit:je ne m'explique pas le bogue des hachures pour le swf.
J'imagine que tu as déjà constaté le problème...

Non, je n'ai jamais fait attention mais ce problème est référencé et résolu sur Melusine

GMaths a écrit:nulle part, je n'ai trouvé de : project ( string, .... comme me l'indique le messge d'erreur.

L'explication est très simple :-) :

Code: Tout sélectionner
$ asy --version
Asymptote version 1.43svn ...


Si tu ne veux pas passer à la version SVN, je pense qu'il te suffit d'installer la nouvelle version de three.asy.
C'est sans garantie car il faut peut-être mettre aussi d'autres extensions à jour.
Ph. Ivaldi
Méga-utilisateur
 
Messages: 267
Inscription: Vendredi 12 Janvier 2007, 23:27
Statut actuel: Actif et salarié


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Baidu [Spider] et 1 invité