On définit ici deux systèmes de coordonnées différents (deux Origin&Unit) avec l'un l'échelle en X
et l'autre l'échelle en Y
On génére le AxisX de l'un et le AxisY de l'autre et c'est fait : un CoordSysByAxes
fournit un système de coordonnées avec deux échelles indépendantes !
{ définit l'échelle en X } {O} Point (115,215)[blue]; {u} UnitPoint (O,100)[blue,label('1')]; {gridX} Origin&Unit (O,u)[hidden]; { idem en Y } {v!} Translation (O, 0, 100)[hidden]; {Ov} Ray (v!,O)[hidden]; {v} Point on object (Ov, 1)[blue,label('1')]; {uY} Rotation/MarkedAngle (v,O,v!,O,u)[hidden]; {gridY} Origin&Unit (O,uY)[hidden]; { définit les coordonées définitives } {ox} AxisX (gridX)[blue]; {oy} AxisY (gridY)[blue]; {grid} CoordSysByAxes (ox,oy)[color(255,204,0),layer(2)]; {P} PlotFixedXY (grid, 1, 1)[red,label('(1,1)')]; |
Dans l'applet tout est dupliqué pour afficher un deuxième CoordSysByAxes d'échelle 1/5 du système principal.
Le système principal est mis en couche 2 (layer(2)) pour se superposer au système à 1/5 mis en couche 1.
Il n'est pas possible d'appliquer des transformations (Dilation par exemple) à des Axis ou des CoordSys.
De nouveux points de base sont à définir par Dilation avant de créer dessus les CoordSys à l'échelle 1/5
Noter que le CoordSysByAxes prend comme paramètres exclusivement des 'Axis'
et refuse toute autre forme de droite.
Les Axis ainsi utilisés transmettent au CoordSysByAxes l'échelle héritée de leur système d'origine
(au lieu de ±200 pixel du bug)
Dans ce système de coordonnées les Plot et autres Coordinates fonctionnent correctement comme en jsp4
De plus en jsp5 on dispose d'un PlotFixedXY évitant de définir des paramètres pour les coordonnées d'un point fixe.
Le point (1,1) est ainsi défini directement par PlotFixedXY (grid, 1, 1)
plutôt que par
{un} Parameter (1, 0,0)[hidden]; {P} PlotXY (un, grid, un); |
Jsp5 offre de plus la notion de Function
On n'est plus obligé de tracer un point courant et de demander le Locus de ce point.
{id} Function (X, Y, 'str', 'expr')(objets,...);
X, Y et str sont "peu utiles". Ils servent à afficher juste le texte 'str' au point X,Y, bof...
autant utiliser un FixedText..
expr est une expression en notation Polonaise inverse semblable à celle d'un Calculate, avec les paramètres
provenant de la valeur des objets de la liste, nommés A-Z dans expr.
Mais en plus dans cette expression figure l'usage de la variable muette 'x'
Contrairement à un Calculate, la liste des objets peut être vide.
La fonction F = x+1 est définie par :
{F} Function (0,0,'','1 x +')()[hidden];
Nota : x doit être séparé de toute valeur numérique par un espace (bof)
Rien n'empêche de définir une fonction constante, sans mention de x donc :
{pi} Function (0,0,'','1@atan4*')()[hidden];
évitant ainsi de définir une mesure bidon pour un Calculate :
{pi} Calculate (0,0,'','1@atan4*')(XX)[hidden];
où XX est un objet mesure/paramètre/calculate existant, mais inutilisé dans l'expression de ce Calculate-ci,
juste là pour faire plaisir à la syntaxe. C'est inutile avec un Function. Mais par contre
pour utiliser cette fonction en tant que valeur, il faut lui donner à manger une valeur de la variable !!
{arad} Calculate (0,0,'','1@fAB*180/')(pi,a)[hidden];
on calcule ici en fait f(1) pour f = constante = π !
On peut alors utiliser cette fonction dans un autre Function ou Calculate, ou la tracer directement par un FunctionPlot
... {grid} CoordSysByAxes (ox,oy)[color(255,204,0),layer(2)]; {sin} Function (0,0,'','x @sin_')()[hidden]; {plot} FunctionPlot (sin,grid, 20, -4, +4, 0)[red,thick,dashed]; |
{e} Parameter (2.718...,0,0,'')[hidden]; {sinh} Function (0,0,'','Ax^Ax!^-2/')(e)[hidden]; |
Puis l'utiliser à volonté dans autant de Calculate que l'on veut, voire dans la définition d'une autre fonction :
{cosh} Function (0,0,'','x@fA2^1+@sqrt/')(sinh)[hidden]; comme cosh(x) = √1 + sinh²(x)
la syntaxe @fA indique la fonction décrite par le 1er paramètre du Calculate/Function
{e} Parameter (2.7182818284590452354,0,0,'')[hidden]; {sinh} Function (0,0,'','Ax^Ax!^-2/')(e)[hidden]; {cosh} Function (0,0,'','x@fA2^1+@sqrt')(sinh)[hidden]; {plot4} FunctionPlot (sinh,grid, 200, -4, +4, 0)[green,layer(4)]; {plot5} FunctionPlot (cosh,grid, 200, -4, +4, 0)[magenta,layer(4)]; {X} Point on object (ox,0.3)[red]; {x} Abscissa (X,grid, 5, 15,'x = '); {Fx} Calculate (5,30,'F(x) = ','C@fAC@fB-')(cosh,sinh,x); {yM} Calculate (0,0,'','B@fA')(cosh,x)[hidden]; {yN} Calculate (0,0,'','B@fA')(sinh,x)[hidden]; {M} PlotXY (yM,grid,x)[dot,magenta]; {N} PlotXY (yN,grid,x)[dot,green]; {MN} Segment (M,N)[magenta,layer(4)]; {zone} Locus (MN,X,ox, 400)[color(255,204,204),layer(1)]; |