Image d'un polygone par une symétrie/ rotation/ translation
3 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
Image d'un polygone par une symétrie/ rotation/ translation
Bonsoir,
Deux macros que je viens d'intégrer à TeXmacs et qui peuvent être bien utiles pour les profs de collège :
LabelsPoly permet de placer automatiquement les étiquettes des points d'un polygone pour éviter un placement fastidieux à la main dès que l'on faif bouger la figure :
et ImagePoly permet le placement automatique des étiquettes des points d'un polygone et des étiquettes des images ainsi que les traits de constructions pour la symétrie centrale, la symétrie axiale, la rotation et la translation. Je n'ai pas intégré la construction des lignes polygonales mais ça ne poserait aucun problème.
De la même façon on trouverait les trois figures suivantes :
Deux macros que je viens d'intégrer à TeXmacs et qui peuvent être bien utiles pour les profs de collège :
LabelsPoly permet de placer automatiquement les étiquettes des points d'un polygone pour éviter un placement fastidieux à la main dès que l'on faif bouger la figure :
- Code:
[ $L:=%1, $G:=isobar(L),
for $k from 1 to Nops(L) do
Label(L[k]+%2*(L[k]-G)/abs(L[k]-G), Args(k+2)) od, ]
- Code:
LabelsPoly(<liste des points>, <distance au point>, <étiquettes des différents points séparées par des virgules>)
- Code:
[ L:=[-2-i,-0.5-0.5*i,-1+2*i,-3], Ligne(L,1),
LabelsPoly(L,0.3,"$A$","$B$","$C$","$D$") ]
et ImagePoly permet le placement automatique des étiquettes des points d'un polygone et des étiquettes des images ainsi que les traits de constructions pour la symétrie centrale, la symétrie axiale, la rotation et la translation. Je n'ai pas intégré la construction des lignes polygonales mais ça ne poserait aucun problème.
- Code:
[
LineStyle:=%2[1], Width:=%2[2], Color:=%2[3],
Ligne(%1,{fermee=}1,{rayon=}0),
LabelsPoly(%1,0.3,%8,%10,%12,%14,%16,%18,%20),
LineStyle:=%4[1], Width:=%4[2], Color:=%4[3],
Ligne(%3,{fermee=}1,{rayon=}0), LabelsPoly(%3,0.3,%9,%11,%13,%15,%17,%19,%21),
LineStyle:=%6[1], Width:=%6[2], Color:=%6[3],
if %5=1 then
for $k from 1 to Nops(%1) do Seg(%1[k],%3[k])
od
elif %5=2 then
for $k from 1 to Nops(%1) do
Seg(%1[k],%3[k]), LineStyle:=solid,
angleD(%3[k],(%1[k]+%3[k])/2, rot(%3[k],(%1[k]+%3[k])/2,90*deg),0.3),
LineStyle:=%6[1]
od
elif %5=3 then
for $k from 1 to Nops(%1) do Arrows:=1,
Arc(%1[k],%7[2],%3[k],Abs(%7[2]-%1[k]),+1), Arrows:=0
od
elif %5=4 then
for $k from 1 to Nops(%1) do Arrows:=1, Seg(%1[k],%3[k])
od
fi,
$rec:=rectangle([rectangle(%1),rectangle(%3),if %5=3 then %7[1] fi]),
Marges(0.5,0,5,0.5,0.5), Fenetre(Copy(rec,1,1)-0.5*(1-i),Copy(rec,2,1)+0.5*(1-i),1+i) ]
- Code:
[
L:=[-2-i,-0.5-0.5*i,-1+2*i,-3],
DotStyle:=cross, Width:=thicklines, {Point(L),}
S:=i, LabelDot(S,"$S$","E",{mark=}1,0.25),
L':=rot(L,S,180*deg), {Point(L'),}
ImagePoly(
L, {styles_L=}[solid,6,black],
L' , {styles_L'=}[solid,6,blue],
{traits_construction=0,1,2,3,4}1,
{styles_construc=}[dashed,4,gray],
{liste_elem_caract}[O,alpha],
"$A$","$A'$","$B$","$B'$","$C$","$C'$","$D$","$D'$","$E$","$E'$"),
{%3:_0=pas_de_construction,1=sym_centrale,2=sym_axiale,3=rot,4=translation} ]
De la même façon on trouverait les trois figures suivantes :
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonsoir Emmanuël,
Très bonne idée! Je vois que tu as bien intégré le langage de TeXgraph! J'ai néanmoins quelques remarques techniques :
1) pour que la distance des labels au point soit une distance réelle en cm indépendamment des échelles graphiques, utilise Abs au lieu de abs:
Pour le même prix on peut faire une macro AutoLabelsPoly qui nomme les points à partir d'une lettre donnée en troisième argument et avec un indice:
par exemple le code:
donnera:
Pour la macro ImagePoly:
En fait je m'attendais à ce que ce soit cette macro qui calcule et dessine l'image, mais je pense que tu souhaitais qu'elle fasse uniquement les traits de construction, c'est ça?
Très bonne idée! Je vois que tu as bien intégré le langage de TeXgraph! J'ai néanmoins quelques remarques techniques :
1) pour que la distance des labels au point soit une distance réelle en cm indépendamment des échelles graphiques, utilise Abs au lieu de abs:
- Code:
[ $L:=%1, $G:=isobar(L),
for $k from 1 to Nops(L) do
Label(L[k]+%2*(L[k]-G)/Abs(L[k]-G), Args(k+2)) od ]
Pour le même prix on peut faire une macro AutoLabelsPoly qui nomme les points à partir d'une lettre donnée en troisième argument et avec un indice:
- Code:
{ AutoLabelsPoly( liste, distance, "lettre") }
[ $L:=%1, $G:=isobar(L),
for $k from 1 to Nops(L) do
Label(L[k]+%2*(L[k]-G)/Abs(L[k]-G), [%3,k]) od]
par exemple le code:
- Code:
[S:=polyreg(0,4,12), Ligne(S,1),AutoLabelsPoly(S,0.35,"A")]
donnera:
Pour la macro ImagePoly:
- Code:
[
LineStyle:=%2[1], Width:=%2[2], Color:=%2[3],
Ligne(%1,{fermee=}1,{rayon=}0),
LabelsPoly(%1,0.3,%8,%10,%12,%14,%16,%18,%20),
LineStyle:=%4[1], Width:=%4[2], Color:=%4[3],
Ligne(%3,{fermee=}1,{rayon=}0), LabelsPoly(%3,0.3,%9,%11,%13,%15,%17,%19,%21),
LineStyle:=%6[1], Width:=%6[2], Color:=%6[3],
if %5=1 then Ligne(for $k from 1 to Nops(%1) do %1[k], %3[k], jump od,0)
elif %5=2 then
for $k from 1 to Nops(%1) do
Seg(%1[k],%3[k]), LineStyle:=solid,
angleD(%3[k],(%1[k]+%3[k])/2, rot(%3[k],(%1[k]+%3[k])/2,90*deg),0.3),
LineStyle:=%6[1]
od
elif %5=3 then
Arrows:=1,
for $k from 1 to Nops(%1) do
Arc(%1[k],%7[2],%3[k],Abs(%7[2]-%1[k]),+1),
od,
Arrows:=0
elif %5=4 then
Arrows:=1,
Ligne(for $k from 1 to Nops(%1) do %1[k], %3[k], jump od,0),
Arrows:=0
fi,
$rec:=rectangle([rectangle(%1),rectangle(%3),if %5=3 then %7[1] fi]),
Marges(0.5,0.5,0.5,0.5),
Fenetre(rec[1]-0.5*(1-i),rec[2]+0.5*(1-i),1+i)
]
En fait je m'attendais à ce que ce soit cette macro qui calcule et dessine l'image, mais je pense que tu souhaitais qu'elle fasse uniquement les traits de construction, c'est ça?
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonsoir,
Dans TeXmacs, le menu donnera accès à :
- Image d'une figure par une symétrie centrale
- Image d'une figure par une symétrie axiale
- Image d'une figure par une rotation...
Dans chaque cas, ils suffira de décommenter le type de figure voulu, la macro fera le reste. Ou bien je ferai un sous-menu pour chaque type de figure. Si tu vois plus simple, je suis preneur et je veux bien m'y mettre.
J'ai aussi écrit une macro PolygoneRegulier :
ou bien :
Avec affichage ou non du codage, des angles, de la longueur du côté et rotation éventuelle de la figure.
Compris, je vais changer ça.1) pour que la distance des labels au point soit une distance réelle en cm indépendamment des échelles graphiques, utilise Abs au lieu de abs:
J'avais effectivement vu cette macro dans la documentation mais je pensais surtout à mes pauvres petits collégiens et à la multitude d'exercices nécessitant des corrections adaptées.Pour le même prix on peut faire une macro AutoLabelsPoly qui nomme les points à partir d'une lettre donnée en troisième argument et avec un indice:
Tout à fait. À partir de cette macro, je voulais pouvoir envisager tous les cas de figures et pouvoir remplacer le tracé d'une ligne polygonale par une droite un cercle ou tout autre type de figure assez facilement. Mais ce n'est peut-être pas très lisible vu de l'extérieur..En fait je m'attendais à ce que ce soit cette macro qui calcule et dessine l'image, mais je pense que tu souhaitais qu'elle fasse uniquement les traits de construction, c'est ça?
Dans TeXmacs, le menu donnera accès à :
- Image d'une figure par une symétrie centrale
- Image d'une figure par une symétrie axiale
- Image d'une figure par une rotation...
Dans chaque cas, ils suffira de décommenter le type de figure voulu, la macro fera le reste. Ou bien je ferai un sous-menu pour chaque type de figure. Si tu vois plus simple, je suis preneur et je veux bien m'y mettre.
J'ai aussi écrit une macro PolygoneRegulier :
- Code:
NewMac("PolygoneRegulier", "[
for $k from 0 to %1-1 do
Append($L,%2*exp(i*(%3+2*k*pi/%1))/(2*cos((%1-2)*pi/(2*%1)))) od,
Ligne(L,{fermee=}1,{rayon=}0),
LabelsPoly(L,0.3,%7,%8,%9,%10,%11,%12,%13,%14,%15,%16),
if %4=1 then
markseg(L[1],L[%1],{nb=}2,{esp=}0.1,{long=}0.4),
for $k from 1 to %1 do
markseg(L[k],L[k+1],{nb=}2,{esp=}0.1,{long=}0.4),
od
fi,
if %5=1 then
if %1=4 then
angleD(L[2],L[1],L[%1],{rayon=}min([0.1*%2,0.7]),{sens=}+1)
else
Arc(L[2],L[1],L[%1],{rayon=}min([0.15*%2,0.7]),{sens=}+1),
Arc(L[1],L[%1],L[%1-1],{rayon=}min([0.15*%2,0.7]),{sens=}+1),
for $k from 1 to %1-2 do
Arc(L[k+2],L[k+1],L[k],{rayon=}min([0.15*%2,0.7]),{sens=}+1),
od
fi
fi,
$M:= isobar([L[1],L[2]]), Label(M+0.6*M/abs(M), %6),
$rec:=rectangle(L), Marges(1,1,1,1), Fenetre(Copy(rec,1,1),Copy(rec,2,1),1+i)
]"),
- Code:
PolygoneRegulier({nb_cotes=}3, {longueur_cotes=}3, {angle_horizon=}0*deg, {codage_cotes=1ou}0, {codage_angles=1ou}0, {label_cote=vide_ou}"4 cm", "$A$","$B$","$C$","$D$","$E$","$F$","$G$","$H$","$I$","$J$"),
ou bien :
Avec affichage ou non du codage, des angles, de la longueur du côté et rotation éventuelle de la figure.
Re: Image d'un polygone par une symétrie/ rotation/ translation
J'ai retravaillé la macro Image Polygone pour pouvoir construire directement les images d'un point, d'un segment, d'un polygone (ou d'un nuage de points) ainsi que les traits de constructions :
J'ai ajouté deux macros ImageDroite et ImageCercle qui permettent de construire l'image d'une droite et d'un cercle par une symétrie centrale, une symétrie axiale, une rotation ou une translation.
Par exemple :
Toutes les macros sont dans le fichier : texgraph_macros_texmacs.teg
Pour voir un échantillon de figures possibles : texgraph_macros_texmacs.pdf
Pour chacune des macros, le 4ème paramètre {transformation=1,2,3,4} représente la transformation choisie :
1 Symétrie centrale
2 Symétrie axiale
3 Rotation
4 Translation
Le 5ème paramètre est la liste des éléments caractéristiques de chaque transformation : [S], [A,B], [O,alpha], [v]
Pour l'image d'un nuage de points, il suffit de choisir le style noline au 2ème et 3ème paramètre.
Pour l'image d'un point, on se contente d'une liste à un élément.
J'ai ajouté toutes ces constructions au plugin TeXgraph pour TeXmacs.
- Code:
[
{Tracé de la ligne polygonale L}
LineStyle:=%2[1], Width:=%2[2], Color:=%2[3],
Ligne(%1,1,0),
if %2[4]=0 then $tmp:=Nil else DotStyle:=%2[4], Point(%1) fi,
if Nops(%1)>1 then LabelsPolygone(%1,0.35,%7,%9,%11,%13,%15,%17,%19) fi,
{Calcul de la ligne polygonale L', image de L}
if %4=1 then $L':=rot(%1,%5[1],180*deg) fi,
if %4=2 then $tmp:=%5[1], $L':=sym(%1,%5[1],%5[2]) fi,
if %4=3 then $L':=rot(%1,%5[1],%5[2]) fi,
if %4=4 then $L':=ftransform(%1,z+%5[1]) fi,
if Nops(%1)=1 then LabelsPolygone([%1[1],L'[1]],0.35,%7) fi,
{Tracé de la ligne polygonale L'}
LineStyle:=%3[1], Width:=%3[2], Color:=%3[3],
Ligne(L',1,0),
if %3[4]=0 then $tmp:=Nil else DotStyle:=%3[4], Point(L') fi,
if Nops(%1)>1 then LabelsPolygone(L',0.3,%8,%10,%12,%14,%16,%18,%20) fi,
if Nops(%1)=1 then LabelsPolygone([%1[1],L'[1]],0.3,"",%8) fi,
{Tracé des traits de construction}
LineStyle:=%6[1], Width:=%6[2], Color:=%6[3],
if %4=1 then
for $k from 1 to Nops(%1) do Seg(%1[k],L'[k])
od
elif %4=2 then
for $k from 1 to Nops(%1) do
Seg(%1[k],L'[k]), LineStyle:=solid,
angleD(L'[k],(%1[k]+L'[k])/2, rot(L'[k],(%1[k]+L'[k])/2,90*deg),0.3),
LineStyle:=%6[1]
od
elif %4=3 then
for $k from 1 to Nops(%1) do Arrows:=1,
Arc(%1[k],%5[1],L'[k],Abs(%5[1]-%1[k]),+1), Arrows:=0
od
elif %4=4 then
for $k from 1 to Nops(%1) do Arrows:=1, Seg(%1[k],L'[k])
od
fi,
{Calcul de la fenêtre}
$rec:=rectangle([rectangle(%1),rectangle(L'),if %4=3 then %5[1] fi]),
Marges(0.5,0.5,0.5,0.5), Fenetre(Copy(rec,1,1)-0.5*(1-i),Copy(rec,2,1)+0.5*(1-i),1+i)
]
- Code:
L:=[-2-i,-0.5-0.5*i,-1+2*i,-3],
S:=i, DotStyle:=cross, LabelDot(S,"$S$","E",{mark=}1,0.25),
ImagePolygone(L,
{styles_L=}[solid,6,black,{sommets=0ouDotStyle}0],
{styles_L'=\>[solid,6,blue,{sommets=0ouDotStyle}0],
{transformation=1,2,3,4}1, {liste_elem_caract}[S],
{styles_construc=}[dashed,4,gray],
"$A$","$A'$","$B$","$B'$","$C$","$C'$","$D$","$D'$","$E$","$E'$"),
J'ai ajouté deux macros ImageDroite et ImageCercle qui permettent de construire l'image d'une droite et d'un cercle par une symétrie centrale, une symétrie axiale, une rotation ou une translation.
Par exemple :
- Code:
{centre_du_cercle_A} A:=-1, {rayon_r} r:=1,
{centre_de_la_rotation_0} O:=1+i, {angle_alpha} alpha:=60*deg,
DotStyle:=cross, LabelDot(O,"$O$","E",{mark=}1,0.25),
ImageCercle([A,r],
{styles_C=}[solid,6,black,{sommets=0ouDotStyle}cross],
{styles_C'=}[solid,6,blue,{sommets=0ouDotStyle}cross],
{transformation=1,2,3,4}3,{<liste_elem_caract}[O,alpha],
{styles_construc=}[dashed,4,gray],
"$A$","$A'$"),
Toutes les macros sont dans le fichier : texgraph_macros_texmacs.teg
Pour voir un échantillon de figures possibles : texgraph_macros_texmacs.pdf
Pour chacune des macros, le 4ème paramètre {transformation=1,2,3,4} représente la transformation choisie :
1 Symétrie centrale
2 Symétrie axiale
3 Rotation
4 Translation
Le 5ème paramètre est la liste des éléments caractéristiques de chaque transformation : [S], [A,B], [O,alpha], [v]
Pour l'image d'un nuage de points, il suffit de choisir le style noline au 2ème et 3ème paramètre.
Pour l'image d'un point, on se contente d'une liste à un élément.
J'ai ajouté toutes ces constructions au plugin TeXgraph pour TeXmacs.
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonjour Emmanuël,
Merci pour ces macros! Pour la version 1.94 de TeXgraph on peut utiliser une syntaxe plus lisible. J'ai renommé le fichier texgraph_macros_texmacs.mac. Quant au contenu des macros j'ai seulement utiliser une variable pour éviter trop d'appels à: Nops(%1), et transformer une suite de if en un seul if.
Pour que le fichier source soit parfaitement compréhensible par quelqu'un qui voudrait le modifier, il faudrait mettre en commentaire au début de chaque macro sa syntaxe, et pour éviter les chiffres 1,2,3,4 pour les transformations j'ai mis 4 variables (symC=1, symA=2, rotat=3, transl=4).
EDIT: j'en profite pour rappeler qu'avec la dernière version test (1.94-beta-huit) on a plein de nouveaux styles de points et de lignes:
Merci pour ces macros! Pour la version 1.94 de TeXgraph on peut utiliser une syntaxe plus lisible. J'ai renommé le fichier texgraph_macros_texmacs.mac. Quant au contenu des macros j'ai seulement utiliser une variable pour éviter trop d'appels à: Nops(%1), et transformer une suite de if en un seul if.
Pour que le fichier source soit parfaitement compréhensible par quelqu'un qui voudrait le modifier, il faudrait mettre en commentaire au début de chaque macro sa syntaxe, et pour éviter les chiffres 1,2,3,4 pour les transformations j'ai mis 4 variables (symC=1, symA=2, rotat=3, transl=4).
EDIT: j'en profite pour rappeler qu'avec la dernière version test (1.94-beta-huit) on a plein de nouveaux styles de points et de lignes:
- Code:
[
L:=[-2-i,-0.5-0.5*i,-1+2*i,-3],
A:=0, B:=i, Width:=8, LineStyle:=solid, Droite(A,B),
DotScale:=2, DashPattern:=[3,2,1,2],
ImagePolygone(L,
[solid,8,black,times],
[solid,8,blue,times],
symA, [A,B],
[userdash,6,gray],
"$A$","$A’$","$B$","$B’$","$C$","$C’$","$D$","$D’$","$E$","$E’$")
]
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonjour,
EDIT : Je suis ouvert à toute remarque sur la syntaxe des macros pour pouvoir coller le plus possible au TeXgraph-Spirit.
C'est effectivement beaucoup plus lisible. Il faudra sûrement que je reprenne ces macros. A force de modifications, j'ai oublié de privilégier la rigueur. La base est là mais je rajouterai assez rapidement la possibilité de coder les longueurs égales sur les traits de construction.Merci pour ces macros! Pour la version 1.94 de TeXgraph on peut utiliser une syntaxe plus lisible. J'ai renommé le fichier texgraph_macros_texmacs.mac. Quant au contenu des macros j'ai seulement utiliser une variable pour éviter trop d'appels à: Nops(%1), et transformer une suite de if en un seul if.
Bien sûr. J'étais un peu trop dans TeXmacs dans lequel les menus donnent ces indications. Je vais faire cela assez rapidement en me référant aux macros déjà écrites.Pour que le fichier source soit parfaitement compréhensible par quelqu'un qui voudrait le modifier, il faudrait mettre en commentaire au début de chaque macro sa syntaxe, et pour éviter les chiffres 1,2,3,4 pour les transformations j'ai mis 4 variables (symC=1, symA=2, rotat=3, transl=4).
J'ai vu ça. J'ai déjà fait quelques essais et ça fait vraiment une grande différence pour les sorties en noir et blanc.EDIT: j'en profite pour rappeler qu'avec la dernière version test (1.94-beta-huit) on a plein de nouveaux styles de points et de lignes
EDIT : Je suis ouvert à toute remarque sur la syntaxe des macros pour pouvoir coller le plus possible au TeXgraph-Spirit.
Re: Image d'un polygone par une symétrie/ rotation/ translation
Concernant le TeXgraph-Spirit, il est provient en grande partie des suggestions d'utilisateurs, même si j'ai donné l'impulsion initiale.
Concernant l'écriture de macros je pense que tu as bien cerné la syntaxe de TeXgraph! Le seul conseil que je pourrais te donner c'est peut-être d'essayer des macros à options (genre pstricks), cela pourrait par exemple donner quelque chose comme:
Je trouve que c'est commode à l'usage, et cela facilite la maintenance, on peut facilement ajouter des options... Je vais essayer de te donner un exemple sur ce même fichier dès que j'ai un petit moment.
Concernant l'écriture de macros je pense que tu as bien cerné la syntaxe de TeXgraph! Le seul conseil que je pourrais te donner c'est peut-être d'essayer des macros à options (genre pstricks), cela pourrait par exemple donner quelque chose comme:
Image( données, [type:=..., style1:=..., style2:=..., transfo:=..., ...], labels)
Je trouve que c'est commode à l'usage, et cela facilite la maintenance, on peut facilement ajouter des options... Je vais essayer de te donner un exemple sur ce même fichier dès que j'ai un petit moment.
Re: Image d'un polygone par une symétrie/ rotation/ translation
Je viens de jeter un coup d'oeil aux macros de instrumentsDessin.mac. Ça devrait me suffire pour adapter les macros.Le seul conseil que je pourrais te donner c'est peut-être d'essayer des macros à options (genre pstricks), cela pourrait par exemple donner quelque chose comme:Je trouve que c'est commode à l'usage, et cela facilite la maintenance, on peut facilement ajouter des options... Je vais essayer de te donner un exemple sur ce même fichier dès que j'ai un petit moment.
- Code:
Image( données, [type:=..., style1:=..., style2:=..., transfo:=..., ...], labels)
Merci pour les conseils. Je préfère vraiment partir sur des bases solides.
Dernière édition par E. Corcelle le Jeu 5 Mar - 2:49, édité 1 fois
Re: Image d'un polygone par une symétrie/ rotation/ translation
Voilà,
J'ai fait la modification pour la première macro Imagepolygone. Depuis le fichier InstrumentsDessin l'expérience m'a montré qu'il valait mieux déclarer les options en variables globales, ce qui évite des surprises:
Le même dessin que dans mon précédent message s'obtient alors avec le code:
PS: je pense que tu as déjà des bases solides! Le système des options n'est pas obligatoire!
J'ai fait la modification pour la première macro Imagepolygone. Depuis le fichier InstrumentsDessin l'expérience m'a montré qu'il valait mieux déclarer les options en variables globales, ce qui évite des surprises:
- Code:
200#
{texgraph_macros_texmacs.mac}
Var
symC = 1;
symA = 2;
rotat = 3;
transl = 4;
{les options}
transfType = 1;
transfElem = 0;
style1 = [solid, 6, black];
style2 = [solid, 6, blue];
style3 = [dashed, 4, gray];
Mac
LabelsPolygone = [ $L:=%1, $G:=isobar(L),
for $k from 1 to Nops(L) do
Label(L[k]+%2*(L[k]-G)/Abs(L[k]-G), Args(k+2)) od ];
ImagePolygone = { ImagePolygone( liste, [options], label1, label2, ...)
options:
transfType:= symC, symA, rotat ou transl
transfElem:= [ .. ] éléments caractéristiques de la transformation
style1:= [linestyle, width, color, Nil ou dotstyle] style des données
style2:= [linestyle, width, color, Nil ou dotstyle] style des images
style3:= [linestyle, width, color] traits de contruction
}
[transfType:=1, transfElem:=0, style1:=[solid,6,black], style2:=[solid,6,blue], style3:=[dashed, 4, gray],
SaveAttr(), $tmp:=%2, {évaluation des options}
{Tracé de la ligne polygonale L}
LineStyle:=style1[1], Width:=style1[2], Color:=style1[3],
Ligne(%1,1,0), $Nbr:=Nops(%1),
if style1[4]<>Nil then DotStyle:=style1[4], Point(%1) fi,
if Nbr>1 then LabelsPolygone(%1,0.35,%3,%5,%7,%9,%11,%13,%15) fi,
{Calcul de la ligne polygonale L', image de L}
if transfType=symC then $center:=2*transfElem[1], $L':=ftransform(%1,center-z)
elif transfType=symA then $L':=sym(%1,transfElem[1,2])
elif transfType=rotat then $L':=rot(%1,transfElem[1],transfElem[2])
elif transfType=transl then $u:=transfElem[1], $L':=ftransform(%1,z+u) fi,
if Nbr=1 then LabelsPolygone([%1[1],L'[1]],0.35,%3) fi,
{Tracé de la ligne polygonale L'}
LineStyle:=style2[1], Width:=style2[2], Color:=style2[3],
Ligne(L',1,0),
if style2[4]<>Nil then DotStyle:=style2[4], Point(L') fi,
if Nbr>1 then LabelsPolygone(L',0.3,%4,%6,%8,%10,%12,%14,%16)
elif Nbr=1 then LabelsPolygone([%1[1],L'[1]],0.3,"",%4) fi,
{Tracé des traits de construction}
LineStyle:=style3[1], Width:=style3[2], Color:=style3[3],
if transfType=symC then
Ligne( for $k from 1 to Nbr do %1[k],L'[k],jump od,0)
elif transfType=symA then
for $k from 1 to Nbr do
Seg(%1[k],L'[k]), LineStyle:=solid,
angleD(L'[k],(%1[k]+L'[k])/2, rot(L'[k],(%1[k]+L'[k])/2,90*deg),0.3),
LineStyle:=style3[1]
od
elif transfType=rotat then
Arrows:=1, $k:=1, $center:=transfElem[1],
for $z in %1 do
Arc(k,$center,L'[k],Abs($center-z),1), Inc(k,1)
od
elif transfType=transl then
Arrows:=1,
Ligne(for $k from 1 to Nbr do %1[k],L'[k],jump od,0)
fi,
{Calcul de la fenêtre}
$rec:=rectangle([rectangle(%1),rectangle(L'),if transfType=rotat then transfElem[1] fi]),
Marges(0.5,0.5,0.5,0.5), Fenetre(Copy(rec,1,1)-0.5*(1-i),Copy(rec,2,1)+0.5*(1-i),1+i),
RestoreAttr()
];
Le même dessin que dans mon précédent message s'obtient alors avec le code:
- Code:
[
L:=[-2-i,-0.5-0.5*i,-1+2*i,-3],
A:=0, B:=i, Width:=8, LineStyle:=solid, Droite(A,B),
DotScale:=2, DashPattern:=[3,2,1,2],
ImagePolygone(L, [transfType:=symA, transfElem:=[A,B],
style1:=[solid,8,black,times],
style2:=[solid,8,blue,times],
style3:=[userdash,6,gray]
],
"$A$","$A’$","$B$","$B’$","$C$","$C’$","$D$","$D’$","$E$","$E’$")
]
PS: je pense que tu as déjà des bases solides! Le système des options n'est pas obligatoire!
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonjour et merci à vous deux pour cette macro qui va me faire gagner pas mal de temps.
J'ai cherché dans les macros, mais j'ai fais chou blanc, où puis-je trouver ces nouveaux styles?P.Fradin a écrit :
EDIT: j'en profite pour rappeler qu'avec la dernière version test (1.94-beta-huit) on a plein de nouveaux styles de points et de lignes
Re: Image d'un polygone par une symétrie/ rotation/ translation
Honte à moi
Il suffisait que j'ouvre la fenêtre Attibuts, désolé pour ce message inutile.
Il suffisait que j'ouvre la fenêtre Attibuts, désolé pour ce message inutile.
Re: Image d'un polygone par une symétrie/ rotation/ translation
Une dernière petite question :
- Code:
Var
symC = 1;
symA = 2;
rotat = 3;
transl = 4;
{les options}
transfType = 1;
transfElem = 0;
style1 = [solid, 6, black];
style2 = [solid, 6, blue];
style3 = [dashed, 4, gray];
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonjour Emmanuël,
Ben j'ai repris les 4 valeurs que tu avais choisies pour les transformations et je leur ai donné un nom!
Ben j'ai repris les 4 valeurs que tu avais choisies pour les transformations et je leur ai donné un nom!
Re: Image d'un polygone par une symétrie/ rotation/ translation
Les valeures 1, 2, 3, 4 ne sont donc plus nécessaires et je pourrais alors écrire :
- Code:
Var
symC;
symA;
rotat;
transl;
Re: Image d'un polygone par une symétrie/ rotation/ translation
E. Corcelle a écrit:Les valeures 1, 2, 3, 4 ne sont donc plus nécessaires et je pourrais alors écrire :
- Code:
Var
symC;
symA;
rotat;
transl;
Non, cela ne marchera pas, la syntaxe est nom = valeur ;, et c'est voulu, toute variable doit être initialisée, sinon les calculs (ici les comparaisons) n'ont aucun sens! TeXgraph ne travaille pas avec des noms symboliques mais uniquement des listes de complexes.
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bien. Merci beaucoup.
Tout est clair maintenant.
Tout est clair maintenant.
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonsoir,
J'ai repris les macros LabelsPolygone, ImagePolygone, ImageDroite et ImageCercle en utilisant une syntaxe à options.
Elles sont téléchargeables ici : texgraph_macros_texmacs.mac.
J'ai dû remplacer
Les exemples détaillés : texgraph_macros_texmacs.pdf.
Dès que j'aurai un peu avancé, je proposerai un fichier détaillant la syntaxe.
Emmanuël
J'ai repris les macros LabelsPolygone, ImagePolygone, ImageDroite et ImageCercle en utilisant une syntaxe à options.
Elles sont téléchargeables ici : texgraph_macros_texmacs.mac.
J'ai dû remplacer
- Code:
$tmp:=%2,
- Code:
$tmp:=Eval(String(%2)),
Les exemples détaillés : texgraph_macros_texmacs.pdf.
Dès que j'aurai un peu avancé, je proposerai un fichier détaillant la syntaxe.
Emmanuël
Re: Image d'un polygone par une symétrie/ rotation/ translation
E. Corcelle a écrit:J'ai dû remplacerpar
- Code:
$tmp:=%2,
pour pouvoir charger les options.
- Code:
$tmp:=Eval(String(%2)),
Bonjour Emmanuël,
Le Eval(String(...)) est inutile lorsque les options sont déclarées en globales, ce qui est le cas dans le fichier. Par contre dans la macro LabelsPolygone tu as mis $dollar:= ... et cette variable dollar est ici considérée comme une variable locale à la macro (et donc différentte de l'option globale dollar), enlève le caractère $ et il n'y aura plus de problème.
PS: la version avec Eval(String(...)) est lourde même si ce n'est pas sensible à l'exécution.
Re: Image d'un polygone par une symétrie/ rotation/ translation
Re,
Je viens de réagir qu'avec l'instruction Load(" ...") il peut y avoir des problèmes lorsque le fichier que l'on charge contient des variables globales, dans un document LaTeX on utilise plutôt la syntaxe suivante:
Je viens de réagir qu'avec l'instruction Load(" ...") il peut y avoir des problèmes lorsque le fichier que l'on charge contient des variables globales, dans un document LaTeX on utilise plutôt la syntaxe suivante:
- Code:
\begin{texgraph}[export=pst, call, preload="texgraph_macros_texmacs.mac"]
L:=[-2], S:=i, DotStyle:=times, LabelDot(S, "$S$", "E",1, 0.25),
DotScale:=2, DashPattern:=[3,2,1,2],
ImagePolygone(L,[
transfType:=symC, transfElem:=S, style3:=[userdash,4,gray]
], "$A$", "$A'$", "$B$", "$B'$", "$C$", "$C'$", "$D$", "$D'$", "$E$", "$E'$")
\end{texgraph}
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonsoir,
Deux possibilités s'offrent à moi :
1. Laisser les Eval(String(%2)
2. Utiliser l'argument
Une solution pourrait être de proposer deux versions des macros : pour les utilisateurs habituels de TeXgraphs et pour les utilisateurs de TeXgraph via TeXmacs.
Emmanuël
J'ai corrigé le $dist qui me permet de remplacer $tmp:=Eval(String(%2) par $tmp:=%2 dans la macro LabelsPolygone mais ça ne change pas les poblèmes que je peux avoir avec les autres macros.Le Eval(String(...)) est inutile lorsque les options sont déclarées en globales, ce qui est le cas dans le fichier. Par contre dans la macro LabelsPolygone tu as mis $dollar:= ... et cette variable dollar est ici considérée comme une variable locale à la macro (et donc différentte de l'option globale dollar), enlève le caractère $ et il n'y aura plus de problème.
Deux possibilités s'offrent à moi :
1. Laisser les Eval(String(%2)
2. Utiliser l'argument
- Code:
preload="texgraph_macros_texmacs.mac"
Une solution pourrait être de proposer deux versions des macros : pour les utilisateurs habituels de TeXgraphs et pour les utilisateurs de TeXgraph via TeXmacs.
Emmanuël
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonsoir,
Est-ce que tu pourrais faire comme avec l'export, c'est à dire si la commande contient {preload=" ... "} alors on ajoute dans le fichier source, avant l'élément graphique, la ligne:
et surtout pas d'espace en fin de ligne.
Qu'en penses-tu?
Est-ce que tu pourrais faire comme avec l'export, c'est à dire si la commande contient {preload=" ... "} alors on ajoute dans le fichier source, avant l'élément graphique, la ligne:
- Code:
18##InputMac(" ...")##
et surtout pas d'espace en fin de ligne.
Qu'en penses-tu?
Re: Image d'un polygone par une symétrie/ rotation/ translation
Oui, je devrais pouvoir le faire.
Je vais m'y mettre.
Emmanuël
Beaucoup de bien. Ça semble évident après coup.Qu'en penses-tu?
Je vais m'y mettre.
Emmanuël
Re: Image d'un polygone par une symétrie/ rotation/ translation
J'en profite pour être tout à fait complet:
Dans un document LaTeX il y a deux façons d'utiliser un environnement TeXgraph:
- par défaut: il y a création d'un fichier "image".teg dans lequel le code entré par l'utilisateur définit un élément graphique Utilisateur, comme si dans l'interface graphique on avait fait Ctrl+U avant d'entrer le code.
- avec l'option file, le code entré par l'utilisateur n'est plus inséré dans un élément graphique Utilisateur, mais considéré comme un fichier source complet (avec la nouvelle syntaxe comme dans ton fichier texgraph_macros_texmacs.mac), le fichier sty ajoute simplement en première ligne: 200#, qui est un code permettant à TeXgraph de savoir si ce qui suit est écrit avec la nouvelle syntaxe ou non.
Par exemple
Dans le fichier teg on aura exactement:
Le mot clé Include annonce un fichier à charger (avant de passer à la suite), le nom doit être suivi d'un point-virgule, on peut charger plusieurs fichiers (séparé d'un point-virgule).
Le mot clé Graph annonce un élément graphique utlisateur il doit être suivi d'un nom, du signe égal, d'une commande (qui définit l'élément) et d'un point virgule. il peut y avoir plusieurs éléments graphiques.
Il y a d'autres mots clés:
Var pour les variables globales ( variable = valeur ; )
Mac pour les macros ( nom = commande ; )
Cmd pour les commandes à exécuter (de suite) ( commande ; ).
Dans un document LaTeX il y a deux façons d'utiliser un environnement TeXgraph:
- par défaut: il y a création d'un fichier "image".teg dans lequel le code entré par l'utilisateur définit un élément graphique Utilisateur, comme si dans l'interface graphique on avait fait Ctrl+U avant d'entrer le code.
- avec l'option file, le code entré par l'utilisateur n'est plus inséré dans un élément graphique Utilisateur, mais considéré comme un fichier source complet (avec la nouvelle syntaxe comme dans ton fichier texgraph_macros_texmacs.mac), le fichier sty ajoute simplement en première ligne: 200#, qui est un code permettant à TeXgraph de savoir si ce qui suit est écrit avec la nouvelle syntaxe ou non.
Par exemple
- Code:
\begin{texgraph}[file]
Include "texgraph_macros_texmacs.mac";
Graph image = [
L:=[-2], S:=i, DotStyle:=times, LabelDot(S,"$S$","E",{mark=}1,0.25),
DotScale:=2, DashPattern:=[3,2,1,2],
ImagePolygone(L,
[style1:=[solid,6, black, times],
style2:=[solid,6, blue, times],
transfType:=symC, transfElem:=[S],
style3:=[userdash,4,gray]],
"$A$","$A’$","$B$","$B’$","$C$","$C’$","$D$","$D’$","$E$","$E’$")
];
\end{texgraph}
Dans le fichier teg on aura exactement:
- Code:
200#
Include "texgraph_macros_texmacs.mac";
Graph image = [
L:=[-2], S:=i, DotStyle:=times, LabelDot(S,"$S$","E",{mark=}1,0.25),
DotScale:=2, DashPattern:=[3,2,1,2],
ImagePolygone(L,
[style1:=[solid,6, black, times],
style2:=[solid,6, blue, times],
transfType:=symC, transfElem:=[S],
style3:=[userdash,4,gray]],
"$A$","$A’$","$B$","$B’$","$C$","$C’$","$D$","$D’$","$E$","$E’$")
];
Le mot clé Include annonce un fichier à charger (avant de passer à la suite), le nom doit être suivi d'un point-virgule, on peut charger plusieurs fichiers (séparé d'un point-virgule).
Le mot clé Graph annonce un élément graphique utlisateur il doit être suivi d'un nom, du signe égal, d'une commande (qui définit l'élément) et d'un point virgule. il peut y avoir plusieurs éléments graphiques.
Il y a d'autres mots clés:
Var pour les variables globales ( variable = valeur ; )
Mac pour les macros ( nom = commande ; )
Cmd pour les commandes à exécuter (de suite) ( commande ; ).
Re: Image d'un polygone par une symétrie/ rotation/ translation
Bonsoir,
Il suffit maintenant de taper la commande :
J'ai l'impression qu'il n'est pas possible de précharger plusieurs fichiers. Me trompe-je ?
Le plugin a été mis à jour.
Emmanuël
C'est fait.Est-ce que tu pourrais faire comme avec l'export, c'est à dire si la
commande contient {preload=" ... "} alors on ajoute dans le fichier source,
avant l'élément graphique, la ligne:et
- Code:
18##InputMac(" ...")##
surtout pas d'espace en fin de ligne.
Il suffit maintenant de taper la commande :
- Code:
{preload=fichier.mac}
J'ai l'impression qu'il n'est pas possible de précharger plusieurs fichiers. Me trompe-je ?
Le plugin a été mis à jour.
Emmanuël
Re: Image d'un polygone par une symétrie/ rotation/ translation
E. Corcelle a écrit:
J'ai l'impression qu'il n'est pas possible de précharger plusieurs fichiers. Me trompe-je ?
Bonjour Emmanuël,
Effectivement, c'est une lacune de la commande InputMac, je vais y remédier
Page 1 sur 2 • 1, 2
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum