autoscale

Utilisation de Xcas

Modérateur : xcasadmin

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

autoscale

Message par alb » dim. mars 24, 2013 3:27 pm

O:=point(0,0);A:=point(1,0);B:=point(0,1);
Ce:=cercle(O,1);
D:=point(3,0);C:=point(-1,0);
l'autoscale refuse de montrer le point D.

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: autoscale

Message par parisse » dim. mars 24, 2013 5:49 pm

L'algorithme utilisé pour l'autoscale consiste à créer la liste des abscisses (ou ordonnées) des points (pour les cercles plusieurs points régulièrement répartis sur le cercle sont pris en compte). Puis on calcule le 1er et le 9ème décile de la liste et on fait un léger zoom out par rapport à ces valeurs. Ceci afin d'éviter qu'un point très éloigné mais très isolé ne modifie trop les échelles.
Evidemment ce n'est pas toujours très bien adapté... mais je ne vois pas d'algorithme parfait pour faire ça de toutes façons!

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: autoscale

Message par alb » dim. mars 24, 2013 8:59 pm

Très intéressant et parfaitement compréhensible par les élèves de seconde qui connaissent les notions de quartiles.
A quel endroit du source peut-on trouver les lignes de code qui correspondent à la recherche de ces déciles ?

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: autoscale

Message par parisse » lun. mars 25, 2013 8:09 am

C'est dans tex.cc, mais je ne sais pas si c'est tres pedagogique comme code...

Code : Tout sélectionner

  void autoscaleminmax(vector<double> & v,double & m,double & M){
    int s=v.size();
    if (s>1){    
      sort(v.begin(),v.end());
      m=v[s/10];
      M=v[9*s/10];
      if (2*(M-m)>(v[s-1]-v[0])){
	M=v[s-1];
	m=v[0];
	zoom(m,M,1.1);
      }
      else
	zoom(m,M,1/0.8);
    }
  }

La fonction zoom sert a faire un zoomin/out en fonction de la valeur du 3eme parametre:

Code : Tout sélectionner

  static void zoom(double &m,double & M,double d){
    double x_center=(M+m)/2;
    double dx=(M-m);
    if (dx==0)
      dx=1;
    dx *= d/2;
    m = x_center - dx;
    M = x_center + dx;
  }

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: autoscale

Message par alb » mer. mars 27, 2013 4:12 pm

Vraiment très intéressant à expliquer aux élèves ! Pour comprendre ce qui se passe quand on clique sur le bouton auto.
1/ écrire en langage Xcas les deux fonctions autoscaleminmax et zoom.
2/ commenter en utilisant le vocabulaire de cette classe: définition des déciles, écart inter-décile, étendue d'une série, milieu et longueur d'un segment.
3/ Illustrer avec seq(point(k,k),k,0,1,0.1);A:=point(2,0);B:=point(-2,0);

Répondre