Équation du centre de gravité en langage Fortran
La version en langage Fortran de l'équation du centre de gravité se divise en trois parties :
- le programme principal qui appelle la routine de calcul de centre de gravité;
- la sous-routine de calcul des coordonnées X et Y du centre de gravité d'une surface plane;
- la sous-routine de calcul des pentes et ordonnées à l'origine d'une surface plane.
Exemple de progamme principal
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C PROGRAMME : QUELCONQUE
C
C Description : Programme permettant de...
C
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C Variables : SIZE : Nombre de coordonnées de la surface
C XY : Coordonnées X et Y de la surface
C CTR : Coordonnées X et Y du centre de gravité
C
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PROGRAM QUELCONQUE
IMPLICIT NONE
INTEGER*2 SIZE
REAL*4 XY(2,18000), CTR(2)
SIZE = 4
XY(1,1) = 543564
XY(2,1) = 5678654
XY(1,2) = 543735
XY(2,2) = 5678943
XY(1,3) = 543423
XY(2,3) = 5678679
XY(1,4) = 543564
XY(2,4) = 5678654
CALL CENTROIDE(SIZE, XY, CTR)
PRINT *,CTR(1) ! Affichage de la coordonnée X du centre de gravité
PRINT *,CTR(2) ! Affichage de la coordonnée Y du centre de gravité
STOP
END
Routine de calcul du centre de gravité
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C ROUTINE : CENTROIDE
C
C Description : Cette routine retourne le centroïde d'une surface fermée
C à partir de vecteurs de pente (PENTE), d'ordonnées à
C l'origine, de débuts et de fins de coordonnées X (X1, X2).
C
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C Variables d'entrée : SIZE : Nombre de coordonnées de la surface
C XY : Coordonnées X et Y de la surface
C
C Variables de sortie : CTR : Coordonnées X et Y du centroïde
C
C Arguments : PENTE : Vecteur de pentes
C ORD : Vecteur d'ordonnées à l'origine
C X1 : X de début d'un segment
C X2 : X de fin d'un segment
C
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE CENTROIDE (SIZE, XY, CTR)
IMPLICIT NONE
INTEGER*2 SIZE, I
REAL*4 XY(2,18000), CTR(2)
REAL*8 X1(18000), X2(18000)
REAL*8 PENTE(18000), ORD(18000)
REAL*8 M1, M2, M3, MX, MY, A, SUMA, SUMMX, SUMMY
C Début du traitement
SUMA = 0.0D0
SUMMX = 0.0D0
SUMMY = 0.0D0
CALL PENTE_ORD ( SIZE, XY, PENTE, ORD, X1, X2)
DO I = 1,SIZE-1
M3 = (X2(I)**3)-(X1(I)**3)
M2 = (X2(I)**2)-(X1(I)**2)
M1 = X2(I)-X1(I)
MX = ((PENTE(I)**2)*M3/6) + (((ORD(I)*PENTE(I))*M2)/2) + (((ORD(I)**2)*M1)/2)
MY = ((PENTE(I)*M3)/3)+((ORD(I)*M2)/2)
A = ((PENTE(I)/2)*M2)+(ORD(I)*M1)
SUMA = SUMA + A
SUMMX = SUMMX + MX
SUMMY = SUMMY + MY
END DO
C Calcul du centroïde
CTR(1) = SUMMY/SUMA ! Coordonnée X du centroïde
CTR(2) = SUMMX/SUMA ! Coordonnée Y du centroïde
RETURN
END
Subroutine that calculates the slopes and y-intercepts of a plane region
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C ROUTINE: PENTE_ORD
C
C Description: Routine permettant de calculer un vecteur de pentes et
C d'ordonnées à l'origine de segments constituant une surface
C fermée.
C
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C Variables d'entrée : SIZE : Nombre de coordonnees de la surface
C XY : Coordonnées X et Y de la surface
C
C Variables de sortie : PENTE : Vecteur de pentes
C ORD : Vecteur d'ordonnées à l'origine
C X1 : X de début d'un segment
C X2 : X de fin d'un segment
C
C Arguments : I : Variable de travail
C Y1 : Y de début d'un segment
C Y2 : Y de fin d'un segment
C
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE PENTE_ORD ( SIZE, XY, PENTE, ORD, X1, X2 )
IMPLICIT NONE
INTEGER*2 SIZE, I
REAL*4 XY(2,18000)
REAL*8 X1(18000), X2(18000), Y1(18000), Y2(18000), PENTE(18000), ORD(18000)
C Transfert des coordonnées de la surface
DO I = 1, SIZE-2
X1(I) = XY(1,I)
Y1(I) = XY(2,I)
X2(I) = XY(1,I+1)
Y2(I) = XY(2,I+1)
END DO
X1(SIZE-1) = XY(1,SIZE-1)
Y1(SIZE-1) = XY(2,SIZE-1)
X2(SIZE-1) = XY(1,1)
Y2(SIZE-1) = XY(2,1)
C Calcul des pentes et des ordonnées à l'origine
DO I = 1, SIZE-1
IF (X1(I) .EQ. X2(I)) THEN
PENTE(I) = 0.
ORD(I) = 0.
ELSE
PENTE(I) = (Y2(I) - Y1(I)) / (X2(I) - X1(I))
ORD(I) = ((X1(I) * Y2(I)) - (X2(I) * Y1(I))) / (X1(I) - X2(I))
END IF
END DO
RETURN
END