Problème de la chèvre

21/02/23

***Pour revenir à la page d’accueil** ICI








L’équation à résoudre pour calculer l’angle beta n’est pas un polynôme classique.

D’autre part, cet angle n’étant pas petit, on ne peut se contenter de développer le sinus et le cosinus en série disons au second ordre.

Ne reste qu’une approche par approximation à réaliser par le petit programme suivant.

En tant qu'angle au centre beta est le double de l'angle theta. Un graphique succinct permet d'estimer theta à environ 55°.

On prend donc 109° pour valeur initiale de beta.

Exécuté sur un Arduino Nano à 16 MHz, pour une précision de 0.01m², le temps de calcul est de l’ordre de 7s.

Dans la pratique, on retiendra que la longueur de la corde/chaine doit être d'environ 16% supérieure au rayon du champ.


//Chevre_200223

//Champ de rayon R, aire PI*R**2 .Une chèvre attachée à un piquet sur la périphérie

//doit brouter la moitié du champ. Quelle longueur de corde utiliser?

//Avec R=100m, Corde= 115.872871m  obtenu après qq milliers d'itérations

//Exemple: avec cor = 0.000001, cnts = 200, après 3600 itérations, en 7s environ

//la différence n'est que de 0.01m²

//************Ajustable***************

float cor = 0.000001; //le pas d'itération pour  affiner le résultat ex 0.00001

int cnts = 200; //Nombre d'itérations par séquence pour cet affinement, ex 100

float R = 100; //Rayon du champs en m

//***********************************

float PIs2 = PI / 2.;

float beta = 109;//angle initial autour de 109 degrés

float beta_rad = beta * PI / 180;

float res = 0;//res = sin(beta_rad) - beta_rad * cos(beta_rad);ZY

float Corde = 0; //Longueur en m de la corde

int nit = 0;//nb de séquences d'itérations

void setup() {

  Serial.begin(9600);

  Serial.print("Rayon du champ en m =  ");

  Serial.println(R);

  Serial.print("Aire de la moitié du champ en m² =  ");

  Serial.println(PI * R * R / 2);

  Serial.print("correctif pour affiner le résultat =   ");

  Serial.println(cor, 7);

  Serial.print("Nombre d'itérations   =   ");

  Serial.println(cnts);

  Serial.println();

  Serial.println();

  Serial.print("Corde en m initial =  ");

  Serial.println(Corde, 4);

  Serial.println("***********************************");

  delay(5000);

  Serial.println();  Serial.println();  Serial.println();

void loop() {

  int cnt = 0;  //Compteur d'itérations dans une  séquence de cnts

  while ( cnt < cnts) //Séquence pour affiner la précision du resultat

  {

    if ((res - PIs2) > 0)beta_rad = beta_rad - cor;// un coup plus court

    else  beta_rad = beta_rad + cor;      //un coup plus long

    res = sin(beta_rad) - beta_rad * cos(beta_rad);

    cnt++;

  }

  nit++;  //Compteur de séquences

  Serial.print("                                 Total  itérations   ");

  Serial.println(cnts * nit);

  Serial.print("On vise 0 pour  res - PI/2  =  ");

  Serial.println(res - PIs2  , 6);

  Serial.println();

  Serial.print("Corde en m =  ");

  Corde = 2 * R * cos(beta_rad / 2.);

  Serial.println(Corde, 6);

  Serial.print("Donc multiplier le rayon du champs par  ");

  Serial.println(Corde / R, 3);

  Serial.println();

  Serial.print("Aire de la moitié du champ en m² =  ");

  Serial.println(PI * R * R / 2);

  Serial.print("Aire mangée par la chèvre  en m² =  ");

  Serial.println(R * R * (PI - res));

  Serial.print("Soit une différence en m² de                       ");

  Serial.println(PI * R * R / 2 - R * R * (PI - res));

  delay(100);

}

*********************************RESULTATS obtenu sur le moniteur du PC ********************************
Rayon du champ en m =  100.00
Aire de la moitié du champ en m² =  15707.96
correctif pour affiner le résultat =   0.0000010
Nombre d'itérations   =   200


***********************************
.
.
.
.
. ( ici défilent les itérations)
.
.
.


                                 Total  iterations   3400
On vise 0 pour  res - PI/2  =  -0.000080

Corde en m =  115.876457
Donc multiplier le rayon du champs par  1.159

Aire de la moitié du champ en m² =  15707.96
Aire mangée par la chèvre  en m² =  15708.76
Soit une différence en m² de                       -0.80
                                 Total  iterations   3600
On vise 0 pour  res - PI/2  =  -0.000001

Corde en m =  115.872886
Donc multiplier le rayon du champs par  1.159

Aire de la moitié du champ en m² =  15707.96
Aire mangée par la chèvre  en m² =  15707.97
Soit une différence en m² de                       -0.01
                         


AUTRES ENIGMES