Flèches 3D

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.

Flèches 3D

Messagepar pluton » Mercredi 08 Août 2012, 02:02

Bonjour,

je m'intéresse à Asymptote notamment pour sa gestion de la 3D et plus particulièrement de tout ce qui relève des vues en perspective. Les schémas que j'aimerais dessiner sont relativement simples. Lors de mes enquêtes préliminaires, je me suis concentré sur la gestion des flèches en 3D. Suivant les options de compilation (et plus particulièrement settings.render=0; et settings.prc=false; qui sont mes options par défaut), j'ai l'impression qu'il n'est pas possible de dessiner une tête de flèche en 3D mais sans gradient avec un rendu purement vectoriel. A ma connaissance, les options ci-dessus conservent l'aspect vectoriel mais aplatissent les têtes de flèches. Si on commente ces options, le rendu des têtes de flèches est bien 3D mais pixelisé. Pour ma part, j'aimerais obtenir des cônes sans gradient et vectoriels : y a-t-il une solution ?

Voici le code en cours :

4d3d83e6c8147e791e03b1f3198a47d4.png

Code: Tout sélectionner
// compilation avec asy -f pdf fig6
if(!settings.multipleView) settings.batchView=false;
settings.tex="pdflatex";
import three;
settings.render=0;
settings.prc=false;
currentprojection=perspective(5,5,3,center=true);
size3(6cm);
// déclaration des points
triple O=(0,0,0);
triple A=(1,0,0), B=(0,1,0), C=(0,0,1);
triple a=(-.5,0,0), b=(0,-.5,0), c=(0,0,-.5);
// déclaration des chemins
path3 segaA=a--A;
path3 segbB=b--B;
path3 segcC=c--C;
// tracer des chemins
draw(segaA,red+linewidth(1pt),Arrow3(3mm));
draw(segbB,green+linewidth(1pt),Arrow3(3mm));
draw(segcC,black+linewidth(1pt),Arrow3(3mm));


Compilées telles quelles, les têtes sont aplaties. Sinon, j'imagine qu'il est possible de programmer ses propres styles de flèches avec des cônes mais pour l'instant, ça me dépasse. Ma question concerne plutôt les commandes de bases.

Merci
pluton
Déca-utilisateur
 
Messages: 29
Inscription: Mercredi 08 Août 2012, 01:46
Statut actuel: Actif et salarié | Maître de conférence

Publicité

Re: flèches 3D

Messagepar chellier » Mercredi 08 Août 2012, 08:48

pluton a écrit:Bonjour,

Bonjour,
pluton a écrit:... j'ai l'impression qu'il n'est pas possible de dessiner une tête de flèche en 3D mais sans gradient avec un rendu purement vectoriel. A ma connaissance, les options ci-dessus conservent l'aspect vectoriel mais aplatissent les têtes de flèches. Si on commente ces options, le rendu des têtes de flèches est bien 3D mais pixelisé. Pour ma part, j'aimerais obtenir des cônes sans gradient et vectoriels : y a-t-il une solution ?


settings.render=0 crée une projection vectorielle en 2D. Pour une solution vectorielle, je ne vois pas, mais on peut nettement améliorer la qualité en passant par exemple à :
Code: Tout sélectionner
settings.render=4;

(on peut augmenter la qualité en augmentant le nombre, mais le poids du fichier va considérablement augmenter...)

Après, il y a aussi la sortie OpenGL, via la compilation "asy -V" qui permet de bouger la figure sans passer par le format prc, tout dépend de ce que l'on veut faire.

Christophe
chellier
Modérateur
 
Messages: 355
Inscription: Samedi 25 Juillet 2009, 11:25
Localisation: Le Creusot
Statut actuel: Actif et salarié | Enseignant

Re: flèches 3D

Messagepar pluton » Mercredi 08 Août 2012, 14:19

merci pour votre réponse. En fait, j'aimerais éviter tout rendu pixelisé, aussi fin soit-il. D'après vos commentaires, j'entrevois deux solutions:

1 - programmer un nouveau style de flèche avec cône personnalisable comme tête
2 - faire une "feature request" sur sourceforge.

ces petits cônes aident le lecteur à comprendre l'angle de la vue 3D assez rapidement et ne me semblent pas superflus.
pluton
Déca-utilisateur
 
Messages: 29
Inscription: Mercredi 08 Août 2012, 01:46
Statut actuel: Actif et salarié | Maître de conférence

Re: flèches 3D

Messagepar pluton » Dimanche 12 Août 2012, 03:40

bon, j'ai regardé rapidement la commande pour créer des cônes qui serviraient de têtes de flèches. Il n'y a aucune automatisation mais puisque les schémas que j'ai en tête sont assez simples, c'est envisageable de continuer sur cette voie. Je vois aussi que TexGraph est une alternative probablement très pertinente puisqu'il propose aussi des têtes de flèches coniques. Alors voici ce que j'ai :

f420a01e19cd979b617efea0dd5d0b33.png

Code: Tout sélectionner
// asy -f pdf fig6
if(!settings.multipleView) settings.batchView=false;
settings.tex="pdflatex";
import three;
import solids;
settings.render=0;
settings.prc=false;
currentlight=nolight;
currentprojection=perspective(5,5,-3,center=true);
size3(6cm);
// déclaration des points
triple O=(0,0,0);
triple A=(1,0,0), B=(0,1,0), C=(0,0,1);
triple Af=(0.95,0,0), Bf=(0,0.95,0), Cf=(0,0,0.95);
// déclaration des chemins
path3 segaA=O--A;
path3 segbB=O--B;
path3 segcC=O--C;
// tracer des chemins
draw(segaA,black+linewidth(1pt));
draw(segbB,black+linewidth(1pt));
draw(segcC,black+linewidth(1pt));
// tracer des cônes
revolution ConeA=cone(A,0.02,0.05,axis=X,n=1);
surface ConeSurfA=surface(ConeA);
draw(ConeSurfA,white);
draw(ConeA.silhouette(64),0.5bp+black);

revolution ConeB=cone(B,0.02,0.05,axis=Y,n=1);
surface ConeSurfB=surface(ConeB);
draw(ConeSurfB,white);
draw(ConeB.silhouette(64),0.5bp+black);

revolution ConeC=cone(C,0.02,0.05,axis=Z,n=1);
surface ConeSurfC=surface(ConeC);
draw(ConeSurfC,white);
draw(ConeC.silhouette(64),0.5bp+black);


Du fait du point de vue et de l'organisation du code, il y a un problème avec la flèche du haut : le cône qui joue le rôle de la tête est tracé après le trait de la flèche.
Je suis assez étonné par ce résultat. Je pensais qu'Asymptote serait capable de calculer ce qui est "devant" et ce qui est "derrière" quel que soit l'ordre des lignes de code.
Je vais continuer.
pluton
Déca-utilisateur
 
Messages: 29
Inscription: Mercredi 08 Août 2012, 01:46
Statut actuel: Actif et salarié | Maître de conférence

Re: flèches 3D

Messagepar chellier » Dimanche 12 Août 2012, 07:22

pluton a écrit:Je suis assez étonné par ce résultat. Je pensais qu'Asymptote serait capable de calculer ce qui est "devant" et ce qui est "derrière" quel que soit l'ordre des lignes de code.

Pas avec settings.render=0;. Les éléments sont rajoutés les uns sur les autres.
On peut toujours se débrouiller en changeant l'ordre du code, mais ce ne sera que du bidouillage.

154602268957a6b2a0c553968b73cfb8.png

Code: Tout sélectionner
// asy -f pdf fig6
if(!settings.multipleView) settings.batchView=false;
settings.tex="pdflatex";
import three;
import solids;
settings.render=0;
settings.prc=false;
currentlight=nolight;
currentprojection=perspective(5,5,-3,center=true);
size3(6cm);
// déclaration des points
triple O=(0,0,0);
triple A=(1,0,0), B=(0,1,0), C=(0,0,1);
triple Af=(0.95,0,0), Bf=(0,0.95,0), Cf=(0,0,0.95);
// déclaration des chemins
path3 segaA=O--A;
path3 segbB=O--B;
path3 segcC=O--C;
// tracer des chemins
draw(segaA,black+linewidth(1pt));
draw(segbB,black+linewidth(1pt));

revolution ConeC=cone(C,0.02,0.05,axis=Z,n=1);
surface ConeSurfC=surface(ConeC);
draw(ConeSurfC,white);
draw(ConeC.silhouette(64),0.5bp+black);

draw(segcC,black+linewidth(1pt));
// tracer des cônes
revolution ConeA=cone(A,0.02,0.05,axis=X,n=1);
surface ConeSurfA=surface(ConeA);
draw(ConeSurfA,white);
draw(ConeA.silhouette(64),0.5bp+black);

revolution ConeB=cone(B,0.02,0.05,axis=Y,n=1);
surface ConeSurfB=surface(ConeB);
draw(ConeSurfB,white);
draw(ConeB.silhouette(64),0.5bp+black);

pluton a écrit:Je vais continuer.

Bon courage :wink:

Christophe
chellier
Modérateur
 
Messages: 355
Inscription: Samedi 25 Juillet 2009, 11:25
Localisation: Le Creusot
Statut actuel: Actif et salarié | Enseignant

Re: flèches 3D

Messagepar pluton » Lundi 13 Août 2012, 20:56

oui merci. Une amélioration d'Asymptote sur cette question est-elle au programme ?
pluton
Déca-utilisateur
 
Messages: 29
Inscription: Mercredi 08 Août 2012, 01:46
Statut actuel: Actif et salarié | Maître de conférence

Re: flèches 3D

Messagepar OG » Lundi 13 Août 2012, 21:32

pluton a écrit:oui merci. Une amélioration d'Asymptote sur cette question est-elle au programme ?


Je ne sais pas, mais si quelqu'un a du temps il n'y a qu'à. Je pense qu'à partir de ce qui
traîne ici ou ailleurs il est possible de faire une extension qui s'occupe de 3D
simple vectorisée.

O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité