Obsolete (plus d'applets Java)

Calculs et coordonnées avec jsp5

Comme vu précédemment les AxisX et AxisY sont un peu buggés !
Mais avec jsp5, ils permettent de définir des échelles différentes en X et en Y grace à un CoordSysByAxes
Cet élément n'existe que avec jsp5.

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ésolé, votre navigateur n'est pas compatible Java.
Les points '1' sont dragables pour changer les échelles indépendamment
{ 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);

Functions et Calculate

En jsp4, les coordonnées d'un point étaient obtenue comme une paire (x,y), avec la syntaxe #P1 et #P2 dans un Calculate
En jsp5 chaque coordonnée peut être obtenue indépendamment par Abscissa et Ordinate et sont des paramètres simples (A-Z) dans un Calculate.

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.

Définition d'une fonction

Tout simplement par

{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

Tracé d'une fonction

C'est alors bien plus simple qu'avec jsp4 !! plus besoin de Locus et de complications. L'applet simplissime ici trace la fonction sin(x) :

Désolé, votre navigateur n'est pas compatible Java.

...
{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];
La courbe est tracée pour x de -4 à +4, sur 20 points, sous la forme y=f(x)
Attention : cela ne fonctionne qu'avec un CoordSysByAxes
un simple Origin&Unit ne fonctionne pas.
De toute façon ici le choix d'un CoordSysByAxes permet de modifier les échelles en x et y indépendamment.
On peut lui appliquer les styles de ligne (thick, dashed etc)
Ici avec 20 points seulement, le dashed est visible, mais sans le dashed, on verrait les angles ! Il faut alors mettre plus de points, mais avec 200 points, les dotted et dashed ne se verraient pas : ils s'appliqueraient indépendamment à chacun des 199 segments de droites générés !

Utilisation d'une fonction dans un Calculate/Function

Une fonction peut aussi être utilisée pour étendre la liste des fonctions prédéfinies.
Par exemple on peut définir la fonction sinh(x) = (ex - e-x)/2, sinus hyperbolique, comme :

{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

Désolé, votre navigateur n'est pas compatible Java.

{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)];
F(x) est en fait la longueur du segment MN entre les deux courbes.
Noter les @fA pour cosh et @fB pour sinh, 1er et 2ème paramètres du Calculate
On notera que bien que ox ait transmis l'échelle correcte au CoordSysByAxes,
lui même en tant que lieu du Point on object X garde son bug de ±200 pixels :
il a fallu mettre 0.3 pour avoir x = -1 et si on change d'échelle X ne bouge pas (sa valeur x si)

 

Accueil Arithmétiques Géométrique Divers Thèmes Scripts Jeux Exercices Sujet précédent Sujet suivant   Parent