Section_H: Polygone, axes principaux

Description

Bonjour,

Ce nouveau code correspond à "Section_G: Polygone, produit d'inertie Ixy", augmenté du calcul et affichage des axes principaux et de l'opération de tourner le polygone sur ses axes principaux.
(et de deux opérations supplémentaires).

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
  double Aap;   // Angle axes principaux: tan(2·Θₚ)=2·Ixy/(Iy-Ix)
                // ==> Aap=Θₚ=arctan(2·Ixy/(Iy-Ix))/2
  // ...
  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->nxt;
        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; Aap=atan2(2*Ixy,(Iy-Ix))/2;}
  }
  void Write(char z[1024]) {
    sprintf_s(z,1024,"A  =%15.3frnSx =%15.3frnSy =%15.3frnXg =%15.3frn"
      "Yg =%15.3frnIx =%15.3frnIy =%15.3frnIp =%15.3frnIxy =%15.3frn"
      "Aap =%15.3f°rn",A,Sx,Sy,Xg,Yg,Ix,Iy,Ix+Iy,Ixy,57.295779513*Aap);
  }
  // ...
};

 

Tests

Prenons comme premier test l'exemple IX-4) Section en L du premier lien ci-dessous:
_LB 100
_LH 150
_Lb 10
_Lh 10
‥ Copier ces 4 cotes dans PolyEdit.
‥ Activer ces paramètres: ► Activer params.
‥ Construire le profil L: ► {Construction} ► Profilé L [LB,LH,Lb,Lh].
‥ Déplacer sur le centre de gravité: ► {Opération} ► Centrer sur (Xg,Yg).
‥ Refaire la mise en page: ► Voir tout.
‥ Calculer les caractéristiques: ► Calculer pour afficher PolyEdit:
A  =       2400.000
Sx =          0.000
Sy =          0.000
Xg =          0.000
Yg =          0.000
Ix =    5576250.000
Iy =    2026250.000
Ip =    7602500.000
Ixy =   -1968750.000
Aap =        -66.019°
‥ Rotation sur axes principaux: ► {Opération} ► Rotation sur axes principaux.
‥ Refaire la mise en page: ► Voir tout.
‥ Calculer les caractéristiques: ► Calculer pour afficher PolyEdit:
A  =       2400.000
Sx =          0.000
Sy =          0.000
Xg =          0.000
Yg =          0.000
Ix =    1150476.233
Iy =    6452023.767
Ip =    7602500.000
Ixy =          0.000
Aap =          0.000°


Le second test correspond à l'exemple 5 du deuxième lien ci-dessous:
_ZB0 3
_ZB1 3
_ZH 4
_Zb 0.5
_Zh0 0.5
_Zh1 0.5
‥ Copier ces 6 cotes dans PolyEdit.
‥ Activer ces paramètres: ► Activer params.
‥ Construire le profil L: ► {Construction} ► Profilé L [LB,LH,Lb,Lh].
‥ Déplacer sur le centre de gravité: ► {Opération} ► Centrer sur (Xg,Yg).
‥ Refaire la mise en page: ► Voir tout.
‥ Calculer les caractéristiques: ► Calculer pour afficher PolyEdit:
A  =          4.500
Sx =          0.000
Sy =          0.000
Xg =          0.000
Yg =          0.000
Ix =         10.375
Iy =          6.969
Ip =         17.344
Ixy =         -6.563
Aap =        -52.274°
‥ Rotation sur axes principaux: ► {Opération} ► Rotation sur axes principaux.
‥ Refaire la mise en page: ► Voir tout.
‥ Calculer les caractéristiques: ► Calculer pour afficher PolyEdit:
A  =          4.500
Sx =         -0.000
Sy =          0.000
Xg =          0.000
Yg =         -0.000
Ix =          1.892
Iy =         15.452
Ip =         17.344
Ixy =          0.000
Aap =          0.000°


Remarques:
a) Rotation sur axes principaux tourne le polygone pour que:
   ‥ Ix = ∫y²·dA   soit minimal
   ‥ Iy = ∫x²·dA   soit maximal
b) En général, on translate le polygone sur son centre de gravité
   avant de calculer l'angle des axes principaux.
 
 
J'ai aussi ajouté les deux opérations qui me semblent utiles:
     Translation minX -> axe X
     Translation minY -> axe Y
 
 
Edition et compilation des fichiers sources:
Avec la version gratuite de MS Visual Studio Express, 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 à la solution.
Ils sont importés par les #include dans Polygone.cpp.
Mais pour pouvoir les "travailler", on peut simplement les glisser dans la fenêtre principale de MS VSExpress.
Tous les fichier doivent figurer dans un même dossier.
 
 
Bonne lecture ...
 

Liens

Caractéristiques géométriques des surfaces planes
Exemple de détermination des axes principaux et moments principaux d’un profilé en Z
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
Section_G: Polygone, produit d'inertie Ixy
 

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.