Nouvelles flèches

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.
Ph. Ivaldi
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 267
Inscription : vendredi 12 janvier 2007, 23:27

Nouvelles flèches

Message par Ph. Ivaldi »

Bonjour et bonne année 2478,

Comme vous avez pu le constater les flèches par défaut de 'Asymptote' ne sont pas très "sexy" :?
J'ai récemment proposé un patch à John (qui l'a amélioré) qui implémente deux nouveaux types de flèche accessibles via un nouveau type de tête de flèche: arrowheadT.
Les nouvelles têtes se nomment SimpleHead et HookHead mais, une fois n'est pas coutume, elles ne sont pas (encore) documentées.
HookHead admet deux paramètres:
* real barb qui est la longueur de l'ardillon; sa valeur par défaut est arrowbarb=3.
* real dir qui est l'angle en degrés de la pointe; sa valeur par défaut est arrowdir=5.

Des exemples d'utilisations se trouvent ICI (figure 0030 et +).
Pour ceux qui n'utilisent pas la version SVN mais veulent toutefois profiter de cette -- exceptionnelle ;-) -- fonctionnalité, il suffit de remplacer le fichier plain_arrows.asy par celui-là.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [asymptote] Nouvelles flèches

Message par pg »

Ph. Ivaldi a écrit :Comme vous avez pu le constater les flèches par défaut de 'Asymptote' ne sont pas très "sexy"
C'est d'ailleurs quelque chose qui m'a toujours choqué : alors que la flèche est l'un des objets graphiques les plus utilisés, comment se fait-il que la plupart des "logiciels" de dessin aient par défaut des flèches aussi moches ?

Je pense qu'il serait bon pour asymptote de suivre le modèle de TikZ et de mettre par défaut des flèches ressemblant à celles de TeX : $\to$. Non seulement c'est plus élégant (elles ne sont pas trop grasses tout en gardant une bonne lisibilité), mais cela permet aussi d'assurer une cohérence parfaite avec le reste du document (indispensable notamment si on s'en sert pour faire des diagrammes commutatifs, ce que je ne sais pas si asymptote fait).

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] Nouvelles flèches

Message par OG »

Merci Philippe pour ces magnifiques flèches !
L'inspiration vient elle d'une extension Metapost ?

A+
O.G.

Ph. Ivaldi
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 267
Inscription : vendredi 12 janvier 2007, 23:27

Re: [Asymptote] Nouvelles flèches

Message par Ph. Ivaldi »

Bonjour Olivier,
OG a écrit :L'inspiration vient elle d'une extension Metapost ?
Non, l'extension cmarrows.mp récupère directement des données dans des fichiers de fontes; cela va bien au delà de mes compétences.
Je suis d'accord avec 'PG', la flèche est un élément graphique important et il faudrait qu'Asymptote fournisse les mêmes flèches que TeX; malheureusement je ne sais pas comment l'implémenter.
Si quelqu'un a une idée...

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [Asymptote] Nouvelles flèches

Message par MB »

Merci pour cette nouvelle fonctionnalité Philippe. :D
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Asymptote] Nouvelles flèches

Message par pg »

Ph. Ivaldi a écrit :la flèche est un élément graphique important et il faudrait qu'Asymptote fournisse les mêmes flèches que TeX; malheureusement je ne sais pas comment l'implémenter.
Si quelqu'un a une idée...
N'est-il pas possible d'adapter la façon de faire de Tikz ? (qui revient à traiter la pointe comme un simple trait)

Il y a une description relativement détaillée de comment les flèches sont gérées dans le manuel de TikZ (page 316 et suivantes) et on trouve dans le fichier pgfcorearrows.code.tex les instructions utilisées pour la flèche "to" :

Code : Tout sélectionner

\pgfarrowsdeclare{to}{to}
{
  \pgfutil@tempdima=-0.84pt%
  \advance\pgfutil@tempdima by-1.3\pgflinewidth%
  \pgfutil@tempdimb=0.21pt%
  \advance\pgfutil@tempdimb by.625\pgflinewidth%
  \pgfarrowsleftextend{+\pgfutil@tempdima}
  \pgfarrowsrightextend{+\pgfutil@tempdimb}
}
{
  \pgfutil@tempdima=0.28pt%
  \advance\pgfutil@tempdima by.3\pgflinewidth%
  \pgfsetlinewidth{0.8\pgflinewidth}
  \pgfsetdash{}{+0pt}
  \pgfsetroundcap
  \pgfsetroundjoin
  \pgfpathmoveto{\pgfqpoint{-3\pgfutil@tempdima}{4\pgfutil@tempdima}}
  \pgfpathcurveto
  {\pgfqpoint{-2.75\pgfutil@tempdima}{2.5\pgfutil@tempdima}}
  {\pgfqpoint{0pt}{0.25\pgfutil@tempdima}}
  {\pgfqpoint{0.75\pgfutil@tempdima}{0pt}}
  \pgfpathcurveto
  {\pgfqpoint{0pt}{-0.25\pgfutil@tempdima}}
  {\pgfqpoint{-2.75\pgfutil@tempdima}{-2.5\pgfutil@tempdima}}
  {\pgfqpoint{-3\pgfutil@tempdima}{-4\pgfutil@tempdima}}
  \pgfusepathqstroke
}
C'est un peu incompréhensible, mais on peut traduire (approximativement) en terme de courbes de béziers :

Code : Tout sélectionner

\begin{tikzpicture}[scale=0.5]
\draw (-0.8,0)--(0,0);
\draw[cap=round,rounded corners=0.1pt,xshift=-0.75pt]
                 (-3pt,4pt) .. controls (-2.75pt,2.5pt) and (0pt,0.25pt) .. 
                 (0.75pt,0pt) .. controls (0pt,-0.25pt) and (-2.75pt,-2.5pt) .. 
                 (-3pt,-4pt);
\end{tikzpicture}
Voici un pdf comparant cette méthode à la flèche "to" de TeX et à celle de TikZ. Avec peut-être quelques ajustements, ce genre de définition doit être transposable facilement à Asymptote, non ?

Ph. Ivaldi
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 267
Inscription : vendredi 12 janvier 2007, 23:27

Re: [Asymptote] Nouvelles flèches

Message par Ph. Ivaldi »

pg a écrit :Voici un pdf comparant cette méthode à la flèche "to" de TeX et à celle de TikZ. Avec peut-être quelques ajustements, ce genre de définition doit être transposable facilement à Asymptote, non ?
Merci pour toutes ces précisions que j'étudie avec soins.
J'essaye encore un peu de récupérer le chemin exact de la tête de flèche de \rightarrow avec cette méthode.

Ph. Ivaldi
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 267
Inscription : vendredi 12 janvier 2007, 23:27

Re: [Asymptote] Nouvelles flèches

Message par Ph. Ivaldi »

J'ai enfin réussi...
Du coup j'ai sorti un petit comparatif (Tkiz, Pstricks, Asy) de flèche brut de décoffrage (le titre de la figure est donné par \rightarrow).
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Asymptote] Nouvelles flèches

Message par pg »

Eh bien, bravo !

Il ne reste maintenant plus qu'à convaincre celui qui s'occupe d'Asymptote de faire en sorte qu'Asymptote utilise cette flèche par défaut.

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [Asymptote] Nouvelles flèches

Message par MB »

En effet, la flèche Asymptote est maintenant très proche de celle de LaTeX. :wink:
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

kib2
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 25 novembre 2006, 22:44

Re: [Asymptote] Nouvelles flèches

Message par kib2 »

Beau boulot Philippe, c'est moi ou on dirait que ta flèche n'est pas alignée avec les autres (plus haute on dirait) ?

Ph. Ivaldi
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 267
Inscription : vendredi 12 janvier 2007, 23:27

Re: [Asymptote] Nouvelles flèches

Message par Ph. Ivaldi »

kib2 a écrit :Beau boulot Philippe
Merci, ça parait rien mais ces histoires de flèches ne sont pas si simples.
Par exemple la flèche que je viens de faire n'est strictement la même que \rightarrow seulement si elle est remplie (Fill) alors que le paramètre par défaut pour les flèches est FillDraw. Je ne sais pas encore comment on va faire...
kib2 a écrit :c'est moi ou on dirait que ta flèche n'est pas alignée avec les autres (plus haute on dirait) ?
Bonne remarque !
Il semble y avoir un problème de "bounding box" quand Asymptote crée une image ne contenant pas à la fois une vraie composante verticale et une vraie composante horizontale (un label ou une tête de flèche ne sont pas des composantes comme les autres).
Si tu compiles le bête code draw((0,0)--(10,0)); la ligne n'est pas centrée chez moi.
Je le signale si tu confirmes.

Ph. Ivaldi
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 267
Inscription : vendredi 12 janvier 2007, 23:27

Re: [Asymptote] Nouvelles flèches

Message par Ph. Ivaldi »

MB a écrit :En effet, la flèche Asymptote est maintenant très proche de celle de LaTeX.
Non seulement elle est très proche mais en plus elle est mieux.
Si tu grossis 1600 le caractère \rightarrow tu pourras constater que la pointe de la flèche est mal faite.
Avec Acrobat on peut grossir 16 fois le caractère déjà grossi 100 fois:

Code : Tout sélectionner

label(scale(100)*"$\rightarrow$");
shipout(format="pdf");
La nouvelle version de plain_arrows.asy fournit un reproduction exacte de rightarrow le défaut en moins.
pg a écrit :Il ne reste maintenant plus qu'à convaincre celui qui s'occupe d'Asymptote de faire en sorte qu'Asymptote utilise cette flèche par défaut.
Ce n'est pas possible dans l'immédiat car la tête fournit par TeXHead ne s'adapte pas au chemin:

Code : Tout sélectionner

size(5cm);
draw(unitcircle,linewidth(2mm),Arrow(TeXHead,Relative(0.5)));
donne un résultat très moche.
Il faut entièrement revoir la façon dont Asymptote dessine les flèches mais là je pars deux jours en vacances; on en reparlera surement...