Questions sur le module geometry_dev
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
J'ai de nouvelles questions :
1) Il ne me semble pas avoir vu de structure représentant une demi-droite. J'ai raté quelque chose ou pas ?
2) Est-il possible de récupérer la longueur d'un segment ?
3) Est-il possible de tracer un cercle en donnant son diamètre (sous forme de segment) ?
1) Il ne me semble pas avoir vu de structure représentant une demi-droite. J'ai raté quelque chose ou pas ?
2) Est-il possible de récupérer la longueur d'un segment ?
3) Est-il possible de tracer un cercle en donnant son diamètre (sous forme de segment) ?
-
- Utilisateur éprouvé
- Messages : 228
- Inscription : samedi 18 août 2007, 21:57
- Localisation : Caen
Re: [Asymptote] Questions sur le module geometry_dev
Bonjour
donne la demi-droite $[AB)$.
Il ne me semble pas avoir vu de structure représentant une demi-droite. J'ai raté quelque chose ou pas ?
Code : Tout sélectionner
line demidroite=line(a,false,b);
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
Merci alekhine ! :D
Re: [Asymptote] Questions sur le module geometry_dev
Si je ne dis pas de bétise :MB a écrit : 2) Est-il possible de récupérer la longueur d'un segment ?
Code : Tout sélectionner
point A = (1,-3);
point B = (-2,5);
real longueur=abs(A-B);
Au pire tu peux toujours créer une routine en utilisant midpoint(A,B) pour récupérer le centre...MB a écrit : 3) Est-il possible de tracer un cercle en donnant son diamètre (sous forme de segment) ?
Alekhine --> Alexander : le champion du monde, gagné ?
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
Ok je vais tester ça dès que possible.
Pour résumer, si on veut tracer le cercle de diamètre [AB] on fait :
J'ai pas testé mais (A+B)/2 doit bien remplacer midpoint.
Pour résumer, si on veut tracer le cercle de diamètre [AB] on fait :
Code : Tout sélectionner
circle((A+B)/2,abs(A-B)/2);
-
- Utilisateur éprouvé
- Messages : 228
- Inscription : samedi 18 août 2007, 21:57
- Localisation : Caen
Re: [Asymptote] Questions sur le module geometry_dev
Gagné.Alekhine --> Alexander : le champion du monde, gagné ?
Re: [Asymptote] Questions sur le module geometry_dev
Si tu veux mais un simple circle(A,B); fait l'affaire (voir ici).MB a écrit :Ok je vais tester ça dès que possible.
Pour résumer, si on veut tracer le cercle de diamètre [AB] on fait :Code : Tout sélectionner
circle((A+B)/2,abs(A-B)/2);
Pour répondre à tes autres questions:
je vais ajouter les routines length(segment) et circle(segment).
Le code suivant est quand même assez lisible:
Code : Tout sélectionner
import geometry_dev;
size(10cm);
segment s=segment((0,0),(1,1));
draw(s);
draw(circle(s.A,s.B));
write(abs(s.A-s.B));
Re: [Asymptote] Questions sur le module geometry_dev
midpoint(un_segment) existe déjà, ainsi que point(un_segment,0.5).kib2 a écrit :Au pire tu peux toujours créer une routine en utilisant midpoint(A,B) pour récupérer le centre...
On peut aussi faire (un_point+un_autre_point)/2.
Il est bien possible qu'il manque des routines fondamentales; ne pas hésiter à m'en faire part.
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
En effet, je n'avais pas vu ça !Ph. Ivaldi a écrit :Si tu veux mais un simple circle(A,B); fait l'affaire (voir ici).
C'est bien plus simple.
Super.Ph. Ivaldi a écrit :je vais ajouter les routines length(segment) et circle(segment).
De rien c'est avec plaisir.Ph. Ivaldi a écrit :Merci beaucoup de tester geometry_dev avant sa sortie !
Merci à toi pour tout ton travail concernant Asymptote.
Re: [Asymptote] Questions sur le module geometry_dev
Tiens, c'est marrant ça...
je n'avais jamais fais attention au fait qu'Asymptote n'utilise pas les primitives usuelles de C/C++ pour afficher à l'écran avec "write()".
"cout" ne fonctionne pas apparement: bizarre.
Alekhine : c'était pas très dur en tant que joueur d'échecs :)
je n'avais jamais fais attention au fait qu'Asymptote n'utilise pas les primitives usuelles de C/C++ pour afficher à l'écran avec "write()".
"cout" ne fonctionne pas apparement: bizarre.
Alekhine : c'était pas très dur en tant que joueur d'échecs :)
Re: [Asymptote] Questions sur le module geometry_dev
Ça y est, c'est fait.MB a écrit :Super.Ph. Ivaldi a écrit :je vais ajouter les routines length(segment) et circle(segment).
En revanche pour markangle je laisse la routine avec les "pair".
Autrement dit un markangle((1,1),(0,0),(-1,-1)) ne tient pas compte du repère courant.
Je pense qu'en général on marque un angle formé par des points nommés.
Bien sur le code suivant ne pose pas de problème grace au «casting point to pair»:
Code : Tout sélectionner
import geo_dev;
size(10cm);
currentcoordsys=cartesiansystem((1,1),(1,1),(-1,1));
show(currentcoordsys);
point A=(1,1), B=(-1,1);
draw(origin()--A^^origin()--B);
markangle(A,origin(),B);
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
Merci. Il faut que je télécharge la dernière version alors maintenant.Ph. Ivaldi a écrit :Ça y est, c'est fait.
Au fait, il est prévu que John Bowman intègre ce module à la version officielle d'Asymptote ? en remplacement de geometry.asy ?
Ok, pas de problème.Ph. Ivaldi a écrit :En revanche pour markangle je laisse la routine avec les "pair".
Autrement dit un markangle((1,1),(0,0),(-1,-1)) ne tient pas compte du repère courant.
Je pense qu'en général on marque un angle formé par des points nommés.
Il est vrai qu'en général je nomme toujours les points. :D
Re: [Asymptote] Questions sur le module geometry_dev
A priori oui, c'était prévu ainsi au départ mais comme John ne m'a jamais donné son avis sur ce module, je ne peux rien affirmer.MB a écrit :Au fait, il est prévu que John Bowman intègre ce module à la version officielle d'Asymptote ? en remplacement de geometry.asy ?
Je pense qu'il attend la documentation...
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
C'est très pratique le linemargin négatif (voir cet exemple). Ca évite parfois d'utiliser la commande box qui doit se configurer un peu à la main et qui est pénible je trouve lorsqu'on veut augmenter un peu la taille de la figure pour prolonger les droites.
Au départ je n'avais pas pensé à essayé. Donc je le signale.
Au départ je n'avais pas pensé à essayé. Donc je le signale.
Re: [Asymptote] Questions sur le module geometry_dev
Héhééé, j'ai aussi prévu la chose... :-)MB a écrit :Ca évite parfois d'utiliser la commande box qui doit se configurer un peu à la main et qui est pénible je trouve lorsqu'on veut augmenter un peu la taille de la figure pour prolonger les droites.
Essaye la commande finalbounds();
Elle va te sortir la taille finale de la bounding box. Il te suffit alors de coller le résultat dans un draw(..., invisible) et de modifier à ta convenance les valeurs.
Re: [Asymptote] Questions sur le module geometry_dev
Je profite de cet exemple pour montrer comment l'on peut procéder avec la structure "triangle", le code est plus court, les labels du triangle automatiquement placés.MB a écrit :C'est très pratique le linemargin négatif (voir cet exemple).
Code : Tout sélectionner
unitsize(1.5cm);
import geometry_dev;
linemargin = -5mm;
triangle T=triangle((3,3),origin,(4,0));
drawline(T);
label(T,alignFactor=5);
point pD = point(T.AB,0.75);
point pE = point(T.BC,0.6);
point pI = intersectionpoint(T.AC,line(pD,pE));
dot(Label("$D$",align=2N),pD);
dot(Label("$E$",align=2S),pE);
dot(Label("$I$",align=NE),pI);
draw(line(pD,pE),dashed);
shipout(bbox(xmargin=1mm,invisible));
- Pièces jointes
-
- triangle.png (14.27 Kio) Consulté 1780 fois
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
Ah oui, je viens de faire des tests là. C'est vrai que c'est pratique pour pouvoir connaitre les dimensions de la figure. :D
J'avais cherché une fonction de ce genre là avant de penser à tenter un linemargin négatif (même si l'usage du linemargin négatif est plus limité car il ne permet pas d'allonger l'image que d'un seul côté par exemple).
Par contre, je ne comprends pas pourquoi la fonction affiche les coordonnées à l'écran alors qu'elle pourrait les retourner sous forme de tableau non ? (peut être qu'il y a déjà une fonction Asymptote qui fait ça, mais j'avais cherché et je n'ai rien trouvé)
En fait, l'idéal (pour moi) serait une fonction du genre addmargin(top,bottom,left,right) qui permette d'augmenter chacune des dimensions de l'image comme on le souhaite.
J'avais cherché une fonction de ce genre là avant de penser à tenter un linemargin négatif (même si l'usage du linemargin négatif est plus limité car il ne permet pas d'allonger l'image que d'un seul côté par exemple).
Par contre, je ne comprends pas pourquoi la fonction affiche les coordonnées à l'écran alors qu'elle pourrait les retourner sous forme de tableau non ? (peut être qu'il y a déjà une fonction Asymptote qui fait ça, mais j'avais cherché et je n'ai rien trouvé)
En fait, l'idéal (pour moi) serait une fonction du genre addmargin(top,bottom,left,right) qui permette d'augmenter chacune des dimensions de l'image comme on le souhaite.
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
Oui merci. J'ai pas encore bien testé les structures de type "triangle". :DPh. Ivaldi a écrit :Je profite de cet exemple pour montrer comment l'on peut procéder avec la structure "triangle", le code est plus court, les labels du triangle automatiquement placés.
Dans cet exemple je voulais surtout utiliser la structure line pour tracer des segments ou des demi-droites. Les figures obtenues sont un peu différentes.
En tout cas c'est bien pratique les labels placés automatiquement.
Re: [Asymptote] Questions sur le module geometry_dev
À la façon Asymptote pur et dur c'est tout simplement :oMB a écrit :J'avais cherché une fonction de ce genre là avant de penser à tenter un linemargin négatif
Code : Tout sélectionner
currentpicture.addBox(point(SW),point(NE),-(lmargin,bmargin),(rmargin,tmargin));
Ben non ce n'est pas possible. Le but de cette routine est de donner la taille finale.MB a écrit :Par contre, je ne comprends pas pourquoi la fonction affiche les coordonnées à l'écran alors qu'elle pourrait les retourner sous forme de tableau non ?
Elle utilise donc un processus qui défère le calcul juste avant le "shipout"; impossible alors de récupérer des valeurs.
Suffit de demander...MB a écrit :En fait, l'idéal (pour moi) serait une fonction du genre addmargin(top,bottom,left,right) qui permette d'augmenter chacune des dimensions de l'image comme on le souhaite.
J'ai ajouté la routine suivante:
Code : Tout sélectionner
void addMargins(picture pic=currentpicture,
real lmargin=0, real bmargin=0,
real rmargin=lmargin, real tmargin=bmargin)
{/*Add margins to 'pic' with respect to the current bounding box of 'pic'.*/
pic.addBox(point(pic,SW),point(pic,NE),-(lmargin,bmargin),(rmargin,tmargin));
}
Du coup, j'ai envie de supprimer finalbounds...
-
- Administrateur
- Messages : 8058
- Inscription : samedi 28 mai 2005, 14:23
- Statut actuel : Enseignant
- Contact :
Re: [Asymptote] Questions sur le module geometry_dev
Merci c'est super ça.
Je viens de tester et ça fonctionne bien comme je le souhaitais.
Par contre, juste une chose que je ne comprends pas.
Il semblerait que les Labels ne soient pas pris en compte dans la taille de la figure. Car par exemple, si un point est situé sur la gauche de la figure et qu'un label est encore placé à gauche de ce point (qui est disons le point le plus à gauche de la figure) alors la présence de ce Label va augmenter la dimension de la figure pour pouvoir être affiché. Mais, d'après mes tests il semblerait qu'un addMargins visant à augmenter encore la taille de la figure sur la gauche ne soit pas pris en compte à partir du Label mais plutôt à partir du point. Il faut donc augmenter la valeur dans le addMargins afin que la dimension de la figure soit véritablement augmentée.
Je ne sais pas si je suis bien clair !
Je viens de tester et ça fonctionne bien comme je le souhaitais.
Par contre, juste une chose que je ne comprends pas.
Il semblerait que les Labels ne soient pas pris en compte dans la taille de la figure. Car par exemple, si un point est situé sur la gauche de la figure et qu'un label est encore placé à gauche de ce point (qui est disons le point le plus à gauche de la figure) alors la présence de ce Label va augmenter la dimension de la figure pour pouvoir être affiché. Mais, d'après mes tests il semblerait qu'un addMargins visant à augmenter encore la taille de la figure sur la gauche ne soit pas pris en compte à partir du Label mais plutôt à partir du point. Il faut donc augmenter la valeur dans le addMargins afin que la dimension de la figure soit véritablement augmentée.
Je ne sais pas si je suis bien clair !
Bah ça je ne sais pas. Ca peut toujours être utile à certains. :DPh. Ivaldi a écrit :Du coup, j'ai envie de supprimer finalbounds...
-
- Sujets similaires
- Réponses
- Vues
- Dernier message