Section_G: Polygone, produit d'inertie Ixy

Description

Bonjour,

Le code présenté ici correspond à "Section_F: Polygone, profils usuels I L T U Z", augmenté du calcul et affichage du produit d'inertie Ixy (en: product of Inertia).

Adaptation de l'objet Polygone:
struct Polygone { // Basé sur des cycles de segments
  Segment *last=0;
  double A;     // Aire: A=∫dA
  double Sx,Sy; // Moments statiques: Sx=∫y·dA, Sy=∫x·dA
  double Xg,Yg; // Centre de gravité: Xg=Sy/A, Yg=Sx/A
  double Ix,Iy; // Moments d'inertie axiaux: Ix=∫y²·dA, Iy=∫x²·dA
                // Moment d'inertie polaire: Ip=Ix+Iy
  double Ixy;   // Produit d'inertie: Ixy=∫x·y·dA

  // ...
  void CalculSeg(double xx,double yy,double x,double y) {
    double sx=x+xx,sy=y+yy,pv=xx*y-yy*x;
    A+=pv;  Sx+=pv*sy; Sy+=pv*sx; // 2*A, 6*Sx, 6*Sy
    Ix+=pv*(yy*yy+sy*y); Iy+=pv*(xx*xx+sx*x); // 12*Ix, 12*Iy
    Ixy+=pv*(pv/2+xx*yy+x*sy); // 12*Ixy
  }
  void Calcul() {
    A=Sx=Sy=Ix=Iy=Ixy=0;
    Segment *s=last;
    if (s) {
      double xx=s->X,yy=s->Y,x,y;
      do {s=s->next;
        x=s->X; y=s->Y; CalculSeg(xx,yy,x,y); xx=x; yy=y;
      } while (s!=last);
    }
    if (A) {A/=2; Sx/=6; Sy/=6; Xg=Sy/A; Yg=Sx/A; Ix/=12; Iy/=12; Ixy/=12;}
  }
  void Write(char z[512]) {
    sprintf_s(z,512,"A  =%15.3frnSx =%15.3frnSy =%15.3frnXg =%15.3frn"
      "Yg =%15.3frnIx =%15.3frnIy =%15.3frnIp =%15.3frnIxy =%15.3frn"
      ,A,Sx,Sy,Xg,Yg,Ix,Iy,Ix+Iy,Ixy);
  }
  // ...
};

 

Tests

Rectangle 60×120
Ixy = RB²·RH²/4 = 60²·120²/4 = 12960000
Ixy = 0     Rectangle RB×RH centré

Demi-Parabole (voir Ixy.jpg
Pour contrôler notre calcul, construisons la demi-parabole avec _DPb=210, _DPh=150 et _DPn=1000:

On a y = (h/b²)·x² ou x = (b/√h)·√y, et posons b = 210, h = 150:
Ixy=∫x·y·dA=(1/6)·h²·b²=165375000 (calcul: 165374958.656)
Ixy'=∫x·y·dA=(1/60)·h²·b²=16537500 (calcul: 16537491.731), après avoir centré le polygone.
Ici aussi, les calculs sont concluants !
 
 
Edition et compilation des fichiers sources:
J'utilise la version gratuite de MS Visual Studio Express, car il suffit d'y suivre les étapes suivantes:
► New Projet
► Visual C++ ► General ► Empty Projet
a) Donner le nom du projet.
b) Ajouter le fichier existant Polygone.cpp dans Sources Files (clic droit).

Les fichiers d'entête *.h et les autres fichiers tels que Menu.cpp etc ..., n'ont pas besoin d'être ajoutés dans la solution.
Mais pour pouvoir les "travailler", on peut simplement les glisser dans la fenêtre principale de MS VSExpress.
 
 
Bonne lecture ...
 

Liens

Product of Inertia
CodeS-SourceS:
Section_A: Polygone (caractéristiques géométriques)
Section_B: Polygone en cycle de segments
Section_C: Polygone avec symétries
Section_D: Polygone, opérations paramétrées
Section_E: Polygone, constructions paramétrées
Section_F: Polygone, profils usuels I L T U Z
 

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.