Gouvernement du Canada
Symbole du gouvernement du Canada

Liens de la barre de menu commune

É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 :


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