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
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.