graduer un segment
3 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
graduer un segment
Bonjour,
j'essaie de créer une macro qui me permettrait de graduer un segment (et non pas une droite comme cela existe deja avec GradDroite )
Te serait-il possible de me faire passer ta macro GradDroite pour que je puisse m'en inspirer et l'adapter a ce que je veux faire sur un segment?
Merci
Joffrey
j'essaie de créer une macro qui me permettrait de graduer un segment (et non pas une droite comme cela existe deja avec GradDroite )
Te serait-il possible de me faire passer ta macro GradDroite pour que je puisse m'en inspirer et l'adapter a ce que je veux faire sur un segment?
Merci
Joffrey
Re: graduer un segment
Salut Jeoffrey,
La macro GradDroite fait des droites par défaut, mais aussi des segments si on en précise les bornes, par exemple:
Le premier paramètre: [-2-i, 0+i, 0+3*i], signifie que l'origine est au point d'affixe -2-i, que l'abscisse de l'origine est 0 et que le label à l'origine est normal (non décalé), puis que l'étendue représentée va de l'abscisse 0 à l'abscisse 3.
Le deuxième paramètre 2 est l'affixe du vecteur graduation, il représente (par défaut) une unité.
Le troisième paramètre xyticks est la hauteur des graduations.
Le quatrième paramètre 2: indique une subdivision en 2 morceaux par unité.
Le cinquième paramètre bottom: indique que les labels seront sous l'axe
Le sixième paramètre top: indique le LabelStyle
Le septième paramètre 1: indique que chaque abscisse est multipliée par 1.
Le huitième paramètre "a"est le texte qui accompagnera chaque label.
PS1: les paramètres 5 à 8 sont facultatifs. Il y aura d'autre paramètres dans la prochaine version. On a plutôt interêt à faire une macro qui appelle GradDroite pour réaliser ce que l'on veut, c'est ainsi que les macros axes, axeX et axeY appellent GradDroite.
PS2: tu as toutes ces macros dans le fichier TeXgraph.mac (attention à faire une copie de sauvegarde de ce fichier avant de le modifier!) Ce fichier est dans le répertoire .../TeXgraph1.93/TeXgraph/macros.
La macro GradDroite fait des droites par défaut, mais aussi des segments si on en précise les bornes, par exemple:
- Code:
GradDroite([-2-i, 0+i, 0+3*i], 2, xyticks, 2, bottom, top, 1, "a")
Le premier paramètre: [-2-i, 0+i, 0+3*i], signifie que l'origine est au point d'affixe -2-i, que l'abscisse de l'origine est 0 et que le label à l'origine est normal (non décalé), puis que l'étendue représentée va de l'abscisse 0 à l'abscisse 3.
Le deuxième paramètre 2 est l'affixe du vecteur graduation, il représente (par défaut) une unité.
Le troisième paramètre xyticks est la hauteur des graduations.
Le quatrième paramètre 2: indique une subdivision en 2 morceaux par unité.
Le cinquième paramètre bottom: indique que les labels seront sous l'axe
Le sixième paramètre top: indique le LabelStyle
Le septième paramètre 1: indique que chaque abscisse est multipliée par 1.
Le huitième paramètre "a"est le texte qui accompagnera chaque label.
PS1: les paramètres 5 à 8 sont facultatifs. Il y aura d'autre paramètres dans la prochaine version. On a plutôt interêt à faire une macro qui appelle GradDroite pour réaliser ce que l'on veut, c'est ainsi que les macros axes, axeX et axeY appellent GradDroite.
PS2: tu as toutes ces macros dans le fichier TeXgraph.mac (attention à faire une copie de sauvegarde de ce fichier avant de le modifier!) Ce fichier est dans le répertoire .../TeXgraph1.93/TeXgraph/macros.
Re: graduer un segment
Salut,
j'ai suivi tes conseils, j'ai explorer le fichiers TeXgraph.mac, mais la taille du paragraphe à modifier m'a fait peur, de plus ce que je cherche a faire doit être "simple" mais je bloque sur les "marques".
Pour faire simple dans mon explication, j'aimerais dessiner comme une règle graduée;
aucun problème pour graduer mon segment lorsqu'il est sur l'axe des abscisses par contre dès qu'il n'est plus sur l'axe des abscisses, j'ai tout et n'importe quoi à l'affichage.
Voila pourquoi j'ai essayé de d'adapter GradDroite.
J'y travaille ardemment ....
A plus
Joffrey
j'ai suivi tes conseils, j'ai explorer le fichiers TeXgraph.mac, mais la taille du paragraphe à modifier m'a fait peur, de plus ce que je cherche a faire doit être "simple" mais je bloque sur les "marques".
Pour faire simple dans mon explication, j'aimerais dessiner comme une règle graduée;
aucun problème pour graduer mon segment lorsqu'il est sur l'axe des abscisses par contre dès qu'il n'est plus sur l'axe des abscisses, j'ai tout et n'importe quoi à l'affichage.
Voila pourquoi j'ai essayé de d'adapter GradDroite.
J'y travaille ardemment ....
A plus
Joffrey
Re: graduer un segment
Joffrey a écrit:
j'ai suivi tes conseils, j'ai explorer le fichiers TeXgraph.mac, mais la taille du paragraphe à modifier m'a fait peur,
Oui je comprends, surtout que le code n'est pas commenté...
de plus ce que je cherche a faire doit être "simple" mais je bloque sur les "marques".
Pour faire simple dans mon explication, j'aimerais dessiner comme une règle graduée;
aucun problème pour graduer mon segment lorsqu'il est sur l'axe des abscisses par contre dès qu'il n'est plus sur l'axe des abscisses, j'ai tout et n'importe quoi à l'affichage.
Voila pourquoi j'ai essayé de d'adapter GradDroite.
Si je comprends bien, le seul soucis est que les graduations doivent rester "sous l'axe" comme sur une règle, c'est bien ça?
Re: graduer un segment
P.Fradin a écrit:
Si je comprends bien, le seul soucis est que les graduations doivent rester "sous l'axe" comme sur une règle, c'est bien ça?
C'est bien cela, de plus j'essaie d'obtenir des graduations unités soit plus hautes que les autres, tout comme une regle en cm
Voila ou j'en suis pour l'instant :
- Code:
A:=-4, B:=3, {points test}
Seg(A,B),
l:=length([A,B]),
Label(i, [" ",l," "]),
for $k from 0 to l step 1 do
if k-Ent(k)=0 then
Color:=red,
Point( Get(Seg(A,B)) InterL Get(Cercle(A,k))) fi, od,
Joffrey
Re: graduer un segment
Re,
Je te propose cette macro: regle( position origine, longueur en cm , [options]), avec pour l'instant une seule option: angle:= angle en degrés (0 par défaut).
Dans un élément Utilisateur, la commande
donnera:
Ps: sous linux, l'affichage à l'écran dans TeXgraph des labels penchés est quelque peu folklorique, c'est un problème du à lazarus et gtk1. Bien entendu ce problème n'a pas lieu dans les exports.
Je te propose cette macro: regle( position origine, longueur en cm , [options]), avec pour l'instant une seule option: angle:= angle en degrés (0 par défaut).
- Code:
{ regle(position, longueur cm, <options>)
options:
angle:= nb en degrés (0 par defaut)
}
[$angle:=0, SaveAttr(), $x:=Eval(String(%3)),
ComposeMatrix( matrix(%1+z*exp(i*angle*deg))),
$cm:=1/Xscale, $L:=%2, $B:=L*cm, $I:=i/Yscale,
LabelAngle:=angle, LabelStyle:=top, $nbgrad:=Ent(L*10),
{dessin de la règle}
Path([-0.25*cm, B+0.25*cm, line,
B+0.5*cm-I/3, B-2*I/3, B+0.25*cm-I, bezier,
-0.25*cm-I, line], 1),
{graduations et labels}
Ligne( for $compt from 0 to nbgrad do
$k:=compt*0.1*cm,
k, k-I*( if mod(compt,10)=0 then {graduation principale}
2*xyticks,
Label( k-I*(2*xyticks+xylabelsep), div(compt,10))
elif mod(compt,10)=5 then {graduation 0.5}
xyticks
else xyticks/2 {graduation 0.1}
fi), jump,
Inc(k,0.1*cm), Inc(compt,1)
od,
0),
RestoreAttr()]
Dans un élément Utilisateur, la commande
- Code:
regle(0, 4.5, [angle:=60])
donnera:
Ps: sous linux, l'affichage à l'écran dans TeXgraph des labels penchés est quelque peu folklorique, c'est un problème du à lazarus et gtk1. Bien entendu ce problème n'a pas lieu dans les exports.
Re: graduer un segment
Bon, encore une démonstration... je ne m'en lasse pas...
C'est effectivement ce à quoi je pensais; je vais étudier le code pour tenter de l'adapter à l'équerre.
Comme tu auras compris mon idée est de créer une macro par instrument de géométrie,
j'ai réfléchit au rapporteur :
ce qui me donne quelque chose de convenable, mais je n'ai pas encore ajouter une option de rotation...
Merci
Joffrey
C'est effectivement ce à quoi je pensais; je vais étudier le code pour tenter de l'adapter à l'équerre.
Comme tu auras compris mon idée est de créer une macro par instrument de géométrie,
j'ai réfléchit au rapporteur :
- Code:
[
{rapporteur(centre, rayon)}
Cercle(%1, %2),
Seg(%1, %1+%2-0.6),
{Centre}
Seg(%1-0.15,%1+0.15),
Seg(%1-0.15*i,%1+0.15*i),
{Arc de cercle}
Arrows:=1,
Arc(%1+%2, %1, %2*exp(i*pi/4)+%1, (2*%2)/7),
Arc(%1+%2, %1, %2*exp(i*pi/4)+%1, (3*%2)/7),
Arc(%1+%2, %1, %2*exp(i*pi/4)+%1, (4*%2)/7),
{Angle}
Arrows:=0,
for alpha from 0 to 35 step 1 do
Seg(%2*exp(i*alpha*pi/18)+%1, (%2-0.3)*exp(i*alpha*pi/18)+%1),
LabelAngle:=alpha*10,
Label((%2-0.5)*exp(i*alpha*pi/18)+%1,[" ",10*alpha," "]) od,
for alpha from 0 to 360 step 1 do
Seg(%2*exp(i*alpha*pi/180)+%1, (%2-0.2)*exp(i*alpha*pi/180)+%1) od,
]
ce qui me donne quelque chose de convenable, mais je n'ai pas encore ajouter une option de rotation...
Merci
Joffrey
Re: graduer un segment
C'est pas mal le rapporteur!
Je viens de me rendre compte d'une chose, c'est que la forme et les angles de rotation des instruments de mesure, doivent être indépendants des échelles et plus généralement de la matrice de transformation en cours. Qu'en penses-tu? Cela complique un peu la tâche!
J'ai modifié la macro regle en conséquence, je continuerai ça demain.
Bonne nuit!
Je viens de me rendre compte d'une chose, c'est que la forme et les angles de rotation des instruments de mesure, doivent être indépendants des échelles et plus généralement de la matrice de transformation en cours. Qu'en penses-tu? Cela complique un peu la tâche!
J'ai modifié la macro regle en conséquence, je continuerai ça demain.
Bonne nuit!
Re: graduer un segment
Salut,
effectivement,cela parait mieux que la taille de l'instrument ne dépende pas de l'échelle de la figure.
je regarde ton code
merci en tout cas
joffrey
effectivement,cela parait mieux que la taille de l'instrument ne dépende pas de l'échelle de la figure.
je regarde ton code
merci en tout cas
joffrey
Re: graduer un segment
Salut joffrey,
Voilà la macro regle revisitée (et un peu commentée) pour être independante des échelles en cours:
J'ai ajouté l'option unite:=nombre de cm, (1cm par défaut) dès fois qu'on veuille une règle qui ne soit pas graduée en cm!
Voilà la macro regle revisitée (et un peu commentée) pour être independante des échelles en cours:
- Code:
{ regle(position, longueur, <options>)
options:
angle:= nb en degrés (0 par defaut)
unite:= nombre (unite en cm, 1 par défaut)
}
[$angle:=0, $unite:=1, {valeurs par defaut des options}
SaveAttr(), {sauvegarde des paramètres graphiques}
$x:=Eval(String(%3)), {on évalue les options (3ieme argument)}
$A:=%1, {point de depart}
$L:=%2, {longueur en cm}
$cm:=ScrCoordV(unite*exp(i*angle*deg)), {vecteur unité sur la règle}
$I:=ScrCoordV(i*exp(i*angle*deg)),{vecteur orthogonal au vecteur unite}
$B:=A+L*cm, {point d'arrivée}
LabelAngle:=angle, LabelStyle:=top, $nbgrad:=Ent(L*10),
FillColor:=lightgray, FillStyle:=full,FillOpacity:=0.5,
{dessin de la règle avec origine=0 et angle=0}
Path([A-0.25*cm, B+0.25*cm, line,
B+0.5*cm-I/3, B-2*I/3, B+0.25*cm-I, bezier,
A-0.25*cm-I, line], 1),
{graduations et labels}
Ligne( for $compt from 0 to nbgrad do
$k:=A+compt*0.1*cm,
k, k-I*( if mod(compt,10)=0 then {graduation principale}
2*xyticks,
Label( k-I*(2*xyticks+xylabelsep), div(compt,10))
elif mod(compt,10)=5 then {graduation 0.5}
xyticks
else xyticks/2 {graduation 0.1}
fi), jump,
od,
0),
RestoreAttr() {restauration des paramètres graphiques}
]
J'ai ajouté l'option unite:=nombre de cm, (1cm par défaut) dès fois qu'on veuille une règle qui ne soit pas graduée en cm!
Re: graduer un segment
J'ai modifié la macro regle, pour obtenir la macro equerre :
- j'ai rajouté une option permettant d'afficher ou non les labels
- je n'ai pas toucher au problème de l'échelle
Joffrey
- Code:
{ equerre(position, longueur cm, <options>, label)
options:
angle:= nb en degrés (0 par defaut),
label:= 1/autre valeur affichage des labels (1 par défaut)
}
[$angle:=0, SaveAttr(), $x:=Eval(String(%3)),
ComposeMatrix( matrix(%1+z*exp(i*angle*deg))),
$cm:=1/Xscale, $L:=%2, $B:=L*cm, $I:=i/Yscale,
LabelAngle:=angle, LabelStyle:=top, $nbgrad:=Ent(L*10),
{dessin de la règle}
Path([-0.25*cm, B+0.25*cm, line,
{B+0.25*cm-I,}
-0.25*cm-L*I, line], 1),
{intérieur de l'équerre}
Ligne([0.6*(L-0.5)/5*cm-(L-0.5)/5*I*cm,
3.5*(L-0.5)/5*cm-(L-0.5)/5*I*cm,
0.6*(L-0.5)/5*cm-3.5*(L-0.5)/5*I*cm ],1,0.1),
{graduations et labels}
Ligne( for $compt from 0 to nbgrad-1 do
$k:=compt*0.1*cm,
k, k-I*( if mod(compt,10)=0 then {graduation principale}
1.5*xyticks,
if %4=0 then Color:=ghostwhite,
Label( k-I*(1.5*xyticks+xylabelsep), div(compt,10))
else Color:=black,
Label( k-I*(1.5*xyticks+xylabelsep), div(compt,10)) fi,
elif mod(compt,10)=5 then {graduation 0.5}
xyticks
else xyticks/2 {graduation 0.1}
fi), jump,
Inc(k,0.1*cm), Inc(compt,1)
od,
0),
RestoreAttr()]
- j'ai rajouté une option permettant d'afficher ou non les labels
- je n'ai pas toucher au problème de l'échelle
Joffrey
Re: graduer un segment
Voici une proposition pour la macro rapporteur( centre, rayon en cm, <options>), avec comme option: dir:= vecteur directeur de l'axe de la graduation 0 (1 par défaut).
Exemple avec la commande:
on obtient:
Dans cet exemple on a modifié la matrice de transformation (translation de l'origine en 1 et changement d'échelle sur les axes), on trace deux droites D1 et D2, et on mesure l'angle (D1,D2) en posant le rapporteur au point d'intersection avec l'origine sur D1.
Remarque: peut-être que pour la règle l'option dir serait également plus approriée que l'option angle?
- Code:
{rapporteur(centre, rayon, [options])
options:
dir:= vecteur direction de la graduation 0 ( par defaut)
}
[
$dir:=1, {direction horizontale par defaut}
SaveAttr(), {sauvegarde des paramètres graphiques}
$x:=Eval(String(%3)), {on évalue les options (3ieme argument)}
$angle:=RealArg(dir)*rad, {angle en degres}
FillStyle:=full, FillColor:=lightgray, FillOpacity:=0.5,
Rcercle(%1, %2), {cercle réel, c'est à dire rond quoiqu'il advienne}
$v1:=ScrCoordV(exp(i*angle*deg)), {v1, v2: vecteurs de base}
$v2:=ScrCoordV(i*exp(i*angle*deg)),
Ligne([%1, %1+(%2-3.5*xyticks)*v1],0), {axe de la graduation 0}
{Centre}
Ligne([%1-0.15*v1,%1+0.15*v1,jump,%1-0.15*v2,%1+0.15*v2],0),
{graduations et labels}
LabelStyle:=right, LabelSize:=scriptsize,
Ligne(for alpha from 0 to 359 do
$v3:=ScrCoordV(exp(i*(angle+alpha)*deg)),
%1+%2*v3, %1+ v3*( if mod(alpha,10)=0 then {graduation principale}
%2-xyticks*1.5,
LabelAngle:=(angle+alpha),
Label(%1+v3*(%2-1.5*xyticks),[" ",alpha," "])
elif mod(alpha,10)=5 then {graduation 0.5}
%2-xyticks,
else %2-xyticks/2
fi), jump
od,
0),
RestoreAttr()
]
Exemple avec la commande:
- Code:
[
SetMatrix([1,1.25,0.75*i]),
axes(0,1+i), Droite(0,1+i),
Droite(1,2,0),
rapporteur(0,3, [dir:=1+i])
]
on obtient:
Dans cet exemple on a modifié la matrice de transformation (translation de l'origine en 1 et changement d'échelle sur les axes), on trace deux droites D1 et D2, et on mesure l'angle (D1,D2) en posant le rapporteur au point d'intersection avec l'origine sur D1.
Remarque: peut-être que pour la règle l'option dir serait également plus approriée que l'option angle?
Re: graduer un segment
J'ai continué un peu mes investigations. Plutôt que de recopier les macros ici je poste le fichier: instruments.teg
Ils sont maintenant indépendants des échelles et matrices courantes, je donne juste les syntaxes avec les options:
-> regle(position origine, [options])
options:
long:= nb en cm (longueur, 5 cm par defaut)
dir:= vecteur directeur de la règle (1 par defaut)
unit:= nombre (unité en cm, 1 par défaut)
Exemple: regle( 0, [dir:=1+i, long:=4])
-> rapporteur(position centre, [options])
options:
rayon:= nb en cm (3 cm par defaut)
dir:= vecteur direction de la graduation 0 ( par défaut)
orientedlabels:= 0/1 (labels orientés ou non, 1 par défaut)
-> equerre(position du coin droit, [options])
options:
[b]long:= longueur (5 cm par defaut)
dir:= vecteur directeur du cote non gradué de l'équerre (1 par defaut),
labels:= 0/1 (affichage ou non des labels, 1 par défaut)
unit:= unit en cm (1 par defaut)
Ils sont maintenant indépendants des échelles et matrices courantes, je donne juste les syntaxes avec les options:
-> regle(position origine, [options])
options:
long:= nb en cm (longueur, 5 cm par defaut)
dir:= vecteur directeur de la règle (1 par defaut)
unit:= nombre (unité en cm, 1 par défaut)
Exemple: regle( 0, [dir:=1+i, long:=4])
-> rapporteur(position centre, [options])
options:
rayon:= nb en cm (3 cm par defaut)
dir:= vecteur direction de la graduation 0 ( par défaut)
orientedlabels:= 0/1 (labels orientés ou non, 1 par défaut)
-> equerre(position du coin droit, [options])
options:
[b]long:= longueur (5 cm par defaut)
dir:= vecteur directeur du cote non gradué de l'équerre (1 par defaut),
labels:= 0/1 (affichage ou non des labels, 1 par défaut)
unit:= unit en cm (1 par defaut)
Re: graduer un segment
Et bien bravo, tout est nickel.
Je n'ai plus qu'a me pencher très sérieusement sur le code.
Je m'occupe du compas, pour avoir le panel complet.
Pour l'heure je part quelque jours.
Encore merci...
A bientot
Joffrey
Je n'ai plus qu'a me pencher très sérieusement sur le code.
Je m'occupe du compas, pour avoir le panel complet.
Pour l'heure je part quelque jours.
Encore merci...
A bientot
Joffrey
Re: graduer un segment
Bonjour Joffrey,
Il manque effectivement le compas (et le crayon!).
Je serai également absent la semaine prochaine.
A+
Il manque effectivement le compas (et le crayon!).
Je serai également absent la semaine prochaine.
A+
Re: graduer un segment
Bonjour,
J'ai pendant ces quelques jours essayé terminé la macro instruments :
Voici les macros
Ce qui donne :
J'ai rajouté pour regle, equerre, rapporteur une option fond qui permet de changer la couleur.
Dans les macros compas et crayon:
long:= nb en cm (longueur, 5 cm par defaut)
dir:= vecteur directeur de la règle (1 par defaut)
unit:= nombre (unite en cm, 1 par défaut)
mine:= couleur de la mine, noir par defaut
Voila, bon je posterai sous peu des animations.
Il me reste néanmoins un problème, les exports en .pgf pour l'inclusion dans mes documents LaTeX provoquent des problèmes et rien ne s'affiche dans le .pdf.
(même problème lorsque je passe par un .eps)
Sais-tu d'où cela pourrait venir?
Bonne journée
J'ai pendant ces quelques jours essayé terminé la macro instruments :
Voici les macros
- Code:
200#
{intruments.mac : macro pour dessiner les instruments de geometrie
compas, crayon, equerre, rapporteur, regle}
Mac
compas = {compas(position, <options>)
options:
long:= nb en cm (longueur, 5 cm par defaut)
dir:= vecteur directeur de la règle (1 par defaut)
unit:= nombre (unite en cm, 1 par défaut)
mine:= couleur de la mine, noir par defaut }
[$dir:=1, $unit:=1, $long:=5, $mine:=black, {valeurs par defaut des options}
SaveAttr(), {sauvegarde des paramètres graphiques}
$x:=Eval(String(%2)), {on évalue les options (3ieme argument)}
$angle:=RealArg(dir)*rad, {angle en degres}
$A:=%1, {point de depart}
$L:=long, {longueur en cm}
$cm:=ScrCoordV(unit*exp(i*angle*deg)), {vecteur unité sur la règle}
$I:=ScrCoordV(i*exp(i*angle*deg)),{vecteur orthogonal au vecteur unit}
$B:=A+L*cm, {point d'arrivée}
$C:=A+L/2*cm+(4^2-(L/4)^2)^(1/2)*I,
Color:=black,
{Pointe-sèche}
FillColor:=silver, FillStyle:=full, Width:=8,
Path([A+0.05*cm,A+0.05*cm+unit*I/2, A-0.05*cm+unit*I/2, line],1),
{Première branche}
FillColor:=gray, FillOpacity:=1,
Path([A-0.1*cm+unit*I/2, A+0.1*cm+unit*I/2, C+0.1*cm, C-0.1*cm, line],1),
{Deuxième branche}
Path([C-0.1*cm, C+0.1*cm, B+0.1*cm+unit*I, B-0.1*cm+unit*I, line],1),
{Pétouillon}
FillColor:=crimson,
Path([C-0.075*cm, C-0.075*cm+2*I/3, C+0.075*cm+2*I/3, C+0.075*cm, line ],1),
Cercle(C,0.4*cm),
Color:=lightgray,
Path([C-0.05*cm,C+0.05*cm, line],0),
Path([C+0.05*I, C-0.05*I, line],0),
{Stylo}
FillColor:=seagreen, Color:=black,
Path([B-0.08*cm+unit/2*I, B+0.13*cm+unit/2*I, line,
B+0.13*cm+2*unit*I, B-0.08*cm+2*unit*I, line ],1),
FillColor:=orange, FillOpacity:=0.5,
Path([B+0.025*cm, B-0.08*cm+unit/2*I,B+0.13*cm+unit/2*I, line ],1),
Path([B-0.01*cm+unit/2*I, B-0.01*cm+2*unit*I, line]),
Path([B+0.06*cm+unit/2*I, B+0.06*cm+2*unit*I, line]),
{Porte stylo}
FillColor:=silver, FillOpacity:=1,
Path([B-0.1*cm+unit*I, B+0.15*cm+unit*I,
B+0.15*cm+1.5*unit*I, B-0.1*cm+1.5*unit*I, line],1),
{Dessin de la mine}
FillColor:=white, Width:=2, FillColor:=mine,
Path([B-0.0275*cm+unit/4*I,B+0.025*cm, B+0.0775*cm+unit/4*I, line,
B+0.025*cm+.35*unit*I, B-0.0275*cm+unit/4*I, bezier],1),
RestoreAttr() {restauration des paramètres graphiques}
];
crayon = {crayon(position, <options>)
options:
long:= nb en cm (longueur, 5 cm par defaut)
dir:= vecteur directeur de la règle (1 par defaut)
unit:= nombre (unite en cm, 1 par défaut)
mine:= couleur de la mine (noir par défaut) }
[$dir:=0, $unit:=1, $long:=5,{valeurs par defaut des options}
SaveAttr(), {sauvegarde des paramètres graphiques}
$x:=Eval(String(%2)), {on évalue les options (3ieme argument)}
$angle:=RealArg(dir)*rad, {angle en degres}
$A:=%1, {point de depart}
$L:=long, {longueur en cm}
$cm:=ScrCoordV(unit*exp(i*angle*deg)), {vecteur unité sur la règle}
$I:=ScrCoordV(i*exp(i*angle*deg)),{vecteur orthogonal au vecteur unit}
$B:=A+L*cm, {point d'arrivée}
Color:=black,
{Dessin pointe stylo}
FillColor:=orange, FillStyle:=full, FillOpacity:=0.5, Width:=8,
Path([A+3/4*unit*cm-I/6,A,A+3/4*unit*cm+I/6, line],1),
{Dessin du crayon}
FillColor:=lightgray,
Path([A+3/4*unit*cm-I/6, B-I/6, B+I/6, A+3/4*unit*cm+I/6, line ],1),
{Dessin du corps du crayon et de la gomme}
Color:=black, FillColor:=deeppink,
Path([B-I/6, B+0.4*cm-I/6, B+0.4*cm+I/6, B+I/6, line],1),
Color:=white, FillColor:=white, FillOpacity:=1,
Path([B-I/6,B-I/6+0.15*cm,B+I/6+0.15*cm,B+I/6, line,],1),
Color:=black, FillColor:=lightgray, FillOpacity:=0.5,
Path([B-I/6,B-I/6+0.15*cm,B+I/6+0.15*cm,B+I/6, line,],1),
Path([B-I/6+0.05*cm,B+I/6+0.05*cm, line],1),
Path([B-I/6+0.15*cm,B+I/6+0.15*cm,line],1),
Path([B-I/6+0.1*cm,B+I/6+0.1*cm,line],1),
{Dessin de la mine}
FillColor:=mine, FillOpacity:=1, Width:=2,
Path([A+3/4*unit/3*cm-I/16,A,A+3/4*unit/3*cm+I/16,line,
A+.4*unit*cm,A+3/4*unit/3*cm-I/16,bezier],1),
Color:=black, Width:=8,
Seg(A+3/4*unit*cm,B),
Seg(A+3/4*unit*cm-I/8,B-I/8),
Seg(A+3/4*unit*cm+I/8,B+I/8),
RestoreAttr() {restauration des paramètres graphiques}
];
equerre = {equerre(position du coin droit, <options>)
options:
long:= longueur (5 cm par defaut)
dir:= direction de la partie non graduée de l'équerre (1 par defaut),
labels:= 0/1 (affichage ou non des labels, 1 par defaut)
unit:= unit en cm (1 par defaut)
fond:=couleur de l'equerre, lightgray par défaut }
[$dir:=1, $labels:=1,$unit:=1, $long:=5, $fond:=lightgray,
SaveAttr(),
$x:=Eval(String(%2)),
$angle:=RealArg(dir)*rad+90, {angle en degres}
$L:=long, {longueur en unit cm}
$v1:=ScrCoordV(unit*exp(i*angle*deg)), {vecteur unité sur la règle}
$v2:=ScrCoordV(i*exp(i*angle*deg)),{vecteur orthogonal au vecteur unit}
$A:=%1+0.25*v1, {point de depart}
$B:=A+L*v1, {point d'arrivée}
$nbgrad:=Ent(L*10),
Color:=black,
{dessin de l'équerre}
FillColor:=fond, FillStyle:=full, FillOpacity:=0.5, Eofill:=1, Width:=8,
$U:=A-0.25*v1, $V:= B+0.25*v1, $W:= A-0.25*v1-L*unit*v2,
$G:=bissec(U,V,W,1) Inter bissec(V,W,U,1),
$liste:=hom([U,V,W],G,0.45),
$U':=liste[1], $V':=liste[2], $W':=liste[3],
Path([U,V,W,U,line,
(U'+W')/2,move,
W',V',U',(U'+W')/2,0.1*unit,linearc],0),
{graduations et labels}
Width:=2, LabelStyle:=top, LabelSize:=scriptsize, LabelAngle:=angle,
FillStyle:=none, FillOpacity:=1, Eofill:=0,
Ligne( for $compt from 0 to nbgrad-1 do
$k:=A+compt*0.1*v1,
k, k-v2*( if mod(compt,10)=0 then {graduation principale}
1.5*xyticks,
if labels then
Label( k-v2*(1.5*xyticks+xylabelsep), div(compt,10))
fi,
elif mod(compt,10)=5 then {graduation 0.5}
xyticks
else xyticks/2 {graduation 0.1}
fi), jump
od,
0),
{ecriture}
Color:=black,LabelSize:=tiny, LabelStyle:=left, LabelAngle:=angle-90,
Label(W+0.25*v1+1.5*v2, ["\TeX graph"]),
RestoreAttr()
];
rapporteur = {rapporteur(centre, [options])
options:
rayon:= nb en cm (3 cm par defaut)
dir:= vecteur direction de la graduation 0 ( par defaut)
orientedlabels:= 0/1 (labels orientés ou non)
fond:=couleur du rapporteur, lightgray par défaut }
[$dir:=1, {direction horizontale par defaut}
$orientedlabels:=1, $rayon:=3,$fond:=lightgray,
SaveAttr(), {sauvegarde des paramètres graphiques}
$x:=Eval(String(%2)), {on évalue les options (2ieme argument)}
{maintenant on se "débarrasse" de la matrice de transformation courante et des échelles}
$A:=RealCoord(%1), {position "réelle" du centre}
$angle:=RealArg(dir)*rad, {angle "réel" en degres du vecteur directeur}
IdMatrix(), {on revient à la matrice identité}
SetMatrix([0,1/Xscale,i/Yscale]), {et on revient à une échelle 1x1}
{on définit alors la matrice qui va placer correctement le rapporteur}
ComposeMatrix(matrix(A+z*exp(i*angle*deg))),
{maintenant on dessine le rapporteur à l'orgine et horizontale, la matrice définie ci-dessus le mettra toute seule à sa place}
Color:=black, FillStyle:=full, FillColor:=fond, FillOpacity:=0.5, Eofill:=1, Width:=8, $r:=rayon-1,
Path([rayon,0,rayon,rayon,arc, {grand cercle}
r*exp(i*10*deg),move,
{ 0,r*exp(i*170*deg),r,1,arc, {arc intérieur}}
r*exp(i*10*deg),line,
r*exp(-i*10*deg),move,
{ 0,r*exp(-i*170*deg),r,-1,arc, {arc intérieur}}
r*exp(-i*10*deg),line],0),
Path([0, r*exp(i*deg), line],1),
Arrows:=1, FillOpacity:=0, Eofill:=1,
Arc( r*exp(i*deg) , 0, r*exp(i*45*deg), 2*rayon/7),
Arc( r*exp(i*deg) , 0, r*exp(i*45*deg), 3*rayon/7),
Arc( r*exp(i*deg) , 0, r*exp(i*45*deg), 4*rayon/7),
{Centre}
Arrows:=0, FillStyle:=none,
Ligne([-0.15,+0.15,jump,-0.15*i,+0.15*i],0),
{graduations et labels}
Width:=2,
if orientedlabels then LabelStyle:=right
else LabelStyle:=0
fi, LabelSize:=tiny,
Ligne(for alpha from 0 to 359 do
$v3:=exp(i*alpha*deg),
rayon*v3, v3*( if mod(alpha,10)=0 then {graduation principale}
rayon-xyticks*1.5,
if orientedlabels then
LabelAngle:=angle+alpha,
Label(v3*(rayon-1.5*xyticks- xylabelsep),alpha)
else
Label(v3*(rayon-1.5*xyticks-2.25*xylabelsep),alpha)
fi
elif mod(alpha,10)=5 then {graduation 0.5}
rayon-xyticks,
else rayon-xyticks/2
fi), jump
od,
0),
{ecriture}
Color:=black,LabelSize:=tiny, LabelStyle:=right,LabelStyle:=top, LabelAngle:=angle,
Label(2*r*exp(190*i*deg)/3, ["\TeX graph"]),
RestoreAttr()
];
regle = {regle(position, <options>)
options:
long:= nb en cm (longueur, 5 cm par defaut)
dir:= vecteur directeur de la règle (1 par defaut)
labels:= 0/1 (affichage ou non des labels, 1 par defaut)
unit:= nombre (unite en cm, 1 par défaut)
fond:= couleur de la regle, lightgray par défaut }
[$dir:=0, $unit:=1, $labels:=1, $long:=5, $fond:=lightgray,{valeurs par defaut des options}
SaveAttr(), {sauvegarde des paramètres graphiques}
$x:=Eval(String(%2)), {on évalue les options (3ieme argument)}
$angle:=RealArg(dir)*rad, {angle en degres}
$A:=%1, {point de depart}
$L:=long, {longueur en cm}
$cm:=ScrCoordV(unit*exp(i*angle*deg)), {vecteur unité sur la règle}
$I:=ScrCoordV(i*exp(i*angle*deg)),{vecteur orthogonal au vecteur unit}
$B:=A+L*cm, {point d'arrivée}
$nbgrad:=Ent(L*10),
Color:=black,
{dessin de la règle avec origine=0 et angle=0}
FillColor:=fond, FillStyle:=full, FillOpacity:=0.5, Width:=8,
Path([A-0.25*cm, B+0.25*cm, line,
B+0.5*cm-I/3, B-2*I/3, B+0.25*cm-I, bezier,
A-0.25*cm-I, line], 1),
{graduations et labels}
Width:=2, LabelAngle:=angle, LabelStyle:=top, LabelSize:=scriptsize,
Ligne( for $compt from 0 to nbgrad do
$k:=A+compt*0.1*cm,
k, k-I*( if mod(compt,10)=0 then {graduation principale}
1.5*xyticks,
if labels then
Label( k-I*(1.5*xyticks+xylabelsep), div(compt,10))
fi,
elif mod(compt,10)=5 then {graduation 0.5}
xyticks
else xyticks/2 {graduation 0.1}
fi), jump,
od,
0),
{ecriture}
LabelSize:=tiny, LabelStyle:=left,
Label(A-0.05*cm-0.85*I, ["\TeX graph"]),
RestoreAttr() {restauration des paramètres graphiques}
];
Ce qui donne :
J'ai rajouté pour regle, equerre, rapporteur une option fond qui permet de changer la couleur.
Dans les macros compas et crayon:
long:= nb en cm (longueur, 5 cm par defaut)
dir:= vecteur directeur de la règle (1 par defaut)
unit:= nombre (unite en cm, 1 par défaut)
mine:= couleur de la mine, noir par defaut
Voila, bon je posterai sous peu des animations.
Il me reste néanmoins un problème, les exports en .pgf pour l'inclusion dans mes documents LaTeX provoquent des problèmes et rien ne s'affiche dans le .pdf.
(même problème lorsque je passe par un .eps)
Sais-tu d'où cela pourrait venir?
Bonne journée
Dernière édition par Joffrey le Mer 20 Aoû - 19:13, édité 1 fois
Re: graduer un segment
Salut joffrey,
Super travail, c'est très réussi! Je jette un oeil à ton code dans la journée.
Pour l'export pgf il se peut que ce soit un problème de version du package pgf, est-il à jour?
Quant à l'export eps cela m'étonne, il est indépendant de TeX, sauf si c'est un eps compilé (celui-ci appelle pstrick-add qui doit donc être à jour).
Super travail, c'est très réussi! Je jette un oeil à ton code dans la journée.
Pour l'export pgf il se peut que ce soit un problème de version du package pgf, est-il à jour?
Quant à l'export eps cela m'étonne, il est indépendant de TeX, sauf si c'est un eps compilé (celui-ci appelle pstrick-add qui doit donc être à jour).
Re: graduer un segment
Re,
Il doit y avoir un souci, je n'arrive pas a prendre de mise a jour avec MiKTeX (je continue mon investigation).
En attendant je te fais passer mon fichier de compilation, si tu y vois quelque chose :
Joffrey
Il doit y avoir un souci, je n'arrive pas a prendre de mise a jour avec MiKTeX (je continue mon investigation).
En attendant je te fais passer mon fichier de compilation, si tu y vois quelque chose :
- Code:
Error: /rangecheck in --fill--
Operand stack:
--nostringval--
Execution stack:
%interexit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionnary stack:
--dict:1049/1123(ro(G)-- --dict:1/20(G)-- --dict:91/200(L)-- --dict:182/300(L)-- --dict:77/200(L)--
Current allocation mode is local
Current file position is 140818
Joffrey
Re: graduer un segment
Joffrey a écrit:Re,
Il doit y avoir un souci, je n'arrive pas a prendre de mise a jour avec MiKTeX (je continue mon investigation).
En attendant je te fais passer mon fichier de compilation, si tu y vois quelque chose :Joffrey
- Code:
Error: /rangecheck in --fill--
Operand stack:
--nostringval--
Execution stack:
%interexit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionnary stack:
--dict:1049/1123(ro(G)-- --dict:1/20(G)-- --dict:91/200(L)-- --dict:182/300(L)-- --dict:77/200(L)--
Current allocation mode is local
Current file position is 140818
Ce n'est pas un message de TeX ça! Mais de ghostscript!
Re: graduer un segment
P.Fradin a écrit :
Ce n'est pas un message de TeX ça! Mais de ghostscript!
J'ai pris la dernière version de ghostscript (8.61) et tout marche
Merci
Re: graduer un segment
Re,
J'ai rajoute pour la macro regle l'option labels, la même que celle pour l'équerre.
j'ai aussi rajouté
Les modifs ont été faites dans le code plus haut
Joffrey
J'ai rajoute pour la macro regle l'option labels, la même que celle pour l'équerre.
j'ai aussi rajouté
- Code:
Color:=black
Les modifs ont été faites dans le code plus haut
Joffrey
Re: graduer un segment
Voilà j'ai épluché le code et je te propose quelques modifications car il y avait quelques détails qui clochaient pour le compas (la pointe n'était pas exactement au centre du cercle ni le crayon sur le bord), ainsi qu'un peu de nettoyage à faire dans certaines macros. J'ai bien sûr tenu compte de ta dernière modfication.
Le fichier instrumentsDessin.teg.
Rmq: le fichier ne contient que les macros, pas de dessin.
Le compas:
J'ai ajouté une macro Help() (taper Help() dans la ligne de commande).
Le fichier instrumentsDessin.teg.
Rmq: le fichier ne contient que les macros, pas de dessin.
Le compas:
J'ai ajouté une macro Help() (taper Help() dans la ligne de commande).
Re: graduer un segment
Re,
Super l'idée de Help() les modifs faites sur le crayon et le compas rendent bien aussi.
A-t-on fait le tour
Pour la suite je vais mettre tous ces instruments en "marche".
Bonne soirée
Joffrey
Super l'idée de Help() les modifs faites sur le crayon et le compas rendent bien aussi.
A-t-on fait le tour
Pour la suite je vais mettre tous ces instruments en "marche".
Bonne soirée
Joffrey
Re: graduer un segment
Pour tester, j'ai repris une des animations d'Alphonse sur la construction du pentagone régulier en ajoutant les instruments de dessin (il y a peu de modifications à faire), ce qui donne:
Et le fichier source: pentagone.teg
J'ai 2 suggestions:
pour le compas: je trouve les options "dir" et "long" pour placer la mine fort peu commodes, sans parler du problème d'échelle qu'il peut y avoir (et c'est le cas ici). Je propose la syntaxe suivante:
pour le crayon: remplacer l'option "dir" par une option "angle" qui représenterait l'angle que fait le crayon avec l'axe (Oy).
Qu'en penses-tu Jeoffrey?
Et le fichier source: pentagone.teg
J'ai 2 suggestions:
pour le compas: je trouve les options "dir" et "long" pour placer la mine fort peu commodes, sans parler du problème d'échelle qu'il peut y avoir (et c'est le cas ici). Je propose la syntaxe suivante:
compas( <affixe pointe>, <affixe mine>, [<options>])
pour le crayon: remplacer l'option "dir" par une option "angle" qui représenterait l'angle que fait le crayon avec l'axe (Oy).
Qu'en penses-tu Jeoffrey?
Re: graduer un segment
Salut Patrick,
Bien ton animation, j'ai essayé pour ma part de reprendre les miennes en incluant les instruments, voila ce que j'obtiens :
Tu as raison, les modifs sur le compas nous faciliteraient surement la vie, plutot que les options dir et long, affixe pointe et affixe mine seraient mieux.
En ce qui concerne le crayon, angle (en degré) par rapport à (Oy) peut être pratique.
PS: perso je m'eclate avec les couleurs, d'ailleurs peut-etre ai-je fais ca pour rien, mais j'ai lister l'ensemble des couleurs reconnues (et qui ont un nom) par TeXgraph (à l'aide color.mac)
Voir le Fichier : Couleurs_TeXgraph.pdf
J'en avais besoin peut-être qu'il sera utile a d'autres...
Bonne journée
Joffrey
Bien ton animation, j'ai essayé pour ma part de reprendre les miennes en incluant les instruments, voila ce que j'obtiens :
Tu as raison, les modifs sur le compas nous faciliteraient surement la vie, plutot que les options dir et long, affixe pointe et affixe mine seraient mieux.
En ce qui concerne le crayon, angle (en degré) par rapport à (Oy) peut être pratique.
PS: perso je m'eclate avec les couleurs, d'ailleurs peut-etre ai-je fais ca pour rien, mais j'ai lister l'ensemble des couleurs reconnues (et qui ont un nom) par TeXgraph (à l'aide color.mac)
Voir le Fichier : Couleurs_TeXgraph.pdf
J'en avais besoin peut-être qu'il sera utile a d'autres...
Bonne journée
Joffrey
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
|
|