Image d'un polygone par une symétrie/ rotation/ translation

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Jeu 26 Fév - 23:47

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 :
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, ]
Elle est appelée par :
Code:
LabelsPoly(<liste des points>, <distance au point>, <étiquettes des différents points séparées par des virgules>)
Par exemple :
Code:
[  L:=[-2-i,-0.5-0.5*i,-1+2*i,-3], Ligne(L,1),
 LabelsPoly(L,0.3,"$A$","$B$","$C$","$D$") ] 
donnera :



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) ]
Elle est appelée par exemple par :
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} ]
et donnera :

De la même façon on trouverait les trois figures suivantes :





E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Ven 27 Fév - 0:52

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 Smile:

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?

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Ven 27 Fév - 1:35

Bonsoir,
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:
Compris, je vais changer ça.
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:
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.
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?
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..
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)
 ]"),
que l'on appelle avec :
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$"),
et qui donne :

ou bien :

Avec affichage ou non du codage, des angles, de la longueur du côté et rotation éventuelle de la figure.

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Mer 4 Mar - 16:27

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 :
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)
]
Par exemple, pour l'image d'un polygone, il suffira de taper :
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'$"),
Ce qui donnera :


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'$"),
Donnera :


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.

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Mer 4 Mar - 18:35

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:

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’$")



_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Mer 4 Mar - 20:15

Bonjour,
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.
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.
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).
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.
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
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 : Je suis ouvert à toute remarque sur la syntaxe des macros pour pouvoir coller le plus possible au TeXgraph-Spirit.

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Mer 4 Mar - 21:04

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:

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.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Jeu 5 Mar - 0:40

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:
Code:
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.
Je viens de jeter un coup d'oeil aux macros de instrumentsDessin.mac. Ça devrait me suffire pour adapter les macros.

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

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Jeu 5 Mar - 1:05

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:

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!

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  Joffrey le Jeu 5 Mar - 15:42

Bonjour et merci à vous deux pour cette macro qui va me faire gagner pas mal de temps.
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
J'ai cherché dans les macros, mais j'ai fais chou blanc, où puis-je trouver ces nouveaux styles?

Joffrey

Nombre de messages : 179
Age : 35
Localisation : Vichy(03) / Clermont-Ferrand(63)
Date d'inscription : 13/06/2008

Voir le profil de l'utilisateur http://mathex.servhome.org

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  Joffrey le Jeu 5 Mar - 16:06

Honte à moi Embarassed Embarassed Embarassed
Il suffisait que j'ouvre la fenêtre Attibuts, désolé pour ce message inutile.

Joffrey

Nombre de messages : 179
Age : 35
Localisation : Vichy(03) / Clermont-Ferrand(63)
Date d'inscription : 13/06/2008

Voir le profil de l'utilisateur http://mathex.servhome.org

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Jeu 5 Mar - 16:18

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];
Je ne comprends pas pourquoir on a symC = 1, symA = 2...

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Jeu 5 Mar - 16:21

Bonjour Emmanuël,

Ben j'ai repris les 4 valeurs que tu avais choisies pour les transformations et je leur ai donné un nom!

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Jeu 5 Mar - 16:28

Les valeures 1, 2, 3, 4 ne sont donc plus nécessaires et je pourrais alors écrire :
Code:
Var
    symC;
    symA;
    rotat;
    transl;

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Jeu 5 Mar - 16:39

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.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Jeu 5 Mar - 16:45

Bien. Merci beaucoup.
Tout est clair maintenant.

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Lun 9 Mar - 2:56

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
Code:
$tmp:=%2,
par
Code:
$tmp:=Eval(String(%2)),
pour pouvoir charger les options.

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

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Lun 9 Mar - 13:04

E. Corcelle a écrit:J'ai dû remplacer
Code:
$tmp:=%2,
par
Code:
$tmp:=Eval(String(%2)),
pour pouvoir charger les options.

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.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Lun 9 Mar - 17:54

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:

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}

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Lun 9 Mar - 21:20

Bonsoir,
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.
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.

Deux possibilités s'offrent à moi :
1. Laisser les Eval(String(%2)
2. Utiliser l'argument
Code:
preload="texgraph_macros_texmacs.mac"
mais je risque d'avoir des difficultés à la faire par l'intermédiaire du script pour une utilisation via TeXmacs étant donné que j'utilise directement CmdTexgraph (mais je peux toujours essayer).

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

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Lun 9 Mar - 22:36

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:

Code:

18##InputMac(" ...")##

et surtout pas d'espace en fin de ligne.

Qu'en penses-tu?

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Lun 9 Mar - 23:11

Oui, je devrais pouvoir le faire.
Qu'en penses-tu?
Beaucoup de bien. Ça semble évident après coup.

Je vais m'y mettre.

Emmanuël

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Lun 9 Mar - 23:30

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

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 ; ).

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  E. Corcelle le Mer 18 Mar - 2:41

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:
Code:
18##InputMac(" ...")##
et
surtout pas d'espace en fin de ligne.
C'est fait.

Il suffit maintenant de taper la commande :
Code:
{preload=fichier.mac}
sans "".
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

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  P.Fradin le Mer 18 Mar - 13:22

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 Wink

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Image d'un polygone par une symétrie/ rotation/ translation

Message  Contenu sponsorisé Aujourd'hui à 5:58


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum