TeXgraph
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -17%
Casque de réalité virtuelle Meta Quest 2 ...
Voir le deal
249.99 €

graduer un segment

3 participants

Page 1 sur 2 1, 2  Suivant

Aller en bas

graduer un segment Empty graduer un segment

Message  Joffrey Dim 3 Aoû - 20:05

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Dim 3 Aoû - 23:15

Salut Jeoffrey,

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


graduer un segment 080803101542615716

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.
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Lun 4 Aoû - 20:12

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Lun 4 Aoû - 23:38

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?
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Lun 4 Aoû - 23:44

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mar 5 Aoû - 1:06

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

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: graduer un segment 080805120205648897

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.
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mar 5 Aoû - 1:32

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 :

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mar 5 Aoû - 1:49

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!
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mar 5 Aoû - 11:32

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mar 5 Aoû - 11:49

Salut joffrey,

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!
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mar 5 Aoû - 12:03

J'ai modifié la macro regle, pour obtenir la macro equerre :

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mar 5 Aoû - 13:06

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

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: graduer un segment 080805115946102056

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?
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mer 6 Aoû - 1:00

J'ai continué un peu mes investigations. Plutôt que de recopier les macros ici je poste le fichier: instruments.teg


graduer un segment 080805115351915118


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)
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mer 6 Aoû - 17:30

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mer 6 Aoû - 17:40

Bonjour Joffrey,

Il manque effectivement le compas (et le crayon!).
Je serai également absent la semaine prochaine.

A+
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mer 20 Aoû - 11:26

Bonjour,

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 :
graduer un segment Instruments

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mer 20 Aoû - 11:48

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).
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mer 20 Aoû - 14:39

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mer 20 Aoû - 14:54

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

Ce n'est pas un message de TeX ça! Mais de ghostscript!
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mer 20 Aoû - 15:58

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mer 20 Aoû - 19:16

Re,

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
à chaque debut d'instruments.

Les modifs ont été faites dans le code plus haut

Joffrey

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mer 20 Aoû - 19:47

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: graduer un segment 080820064222643059

J'ai ajouté une macro Help() (taper Help() dans la ligne de commande).
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mer 20 Aoû - 20:41

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 Question
Pour la suite je vais mettre tous ces instruments en "marche".

Bonne soirée

Joffrey

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  P.Fradin Mar 26 Aoû - 23:09

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:

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?
P.Fradin
P.Fradin
Admin

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

http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Joffrey Mer 27 Aoû - 15:34

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

Joffrey

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

http://mathex.servhome.org

Revenir en haut Aller en bas

graduer un segment Empty Re: graduer un segment

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser