XL 2010 Matrice de passage

Alex98

XLDnaute Nouveau
Bonjour, j'ai pour but de faire le produit matriciel entre une matrice inverse et une matrice X. Cependant, j'aimerais prendre en compte plusieurs coordonnées X et les sortir d'un seul coup. J'ai testé la technique du Offset pour pouvoir prendre toutes les coordonnées d'un coup, mais je suis pas sur que cela va aboutir. J'ai une erreur d'indice au niveau de X = Mat_X(Angle), pouvez vous m'aider svp ?

VB:
Function Mat_ProdPX(Angle As Double) As Variant
    'M1M2 = P
    'X2 = X'
    
    'Initialisation
        Dim Mat_X As Variant
        Dim MatriceX2(3, 1) As Double
        Dim MatIntX(3, 1) As Double
        Dim P As Variant
        Dim X As Variant
        Dim i, j As Integer
      


         'Détermination de la matrice X
        
            Set cell = Cells(5, 8)
            Do While cell <> ""
        
                MatIntX(0, 0) = cell
                MatIntX(1, 0) = cell.Offset(1, 0)
                MatIntX(2, 0) = cell.Offset(2, 0)
            
                Mat_X = MatIntX
      
         'Calcule de X'=Pinv*X
        
                P = Pinv(Angle)
                X = Mat_X(Angle)
              
                
                For i = 1 To 3
                
                        MatriceX2(i - 1, 0) = P(i, 1) * X(0, 0) + _
                              P(i, 2) * X(1, 0) + _
                              P(i, 3) * X(2, 0)
                    
                        Cells(13 + i, 7 + cell) = MatriceX2(i - 1, 0)
                        
                Next i
                
                Set cell = cell.Offset(0, 1)
        
            Loop

    End Function
 

Alex98

XLDnaute Nouveau
Je viens d'essayer ça, j'ai pas d'erreur mais ça n'affiche rien sur ma feuille de calcul excel

VB:
 Function Mat_X(Angle As Double) As Variant
        Dim MatIntX(3, 1) As Double
        
         counter = 0
        
         Do While cell <> ""
        
            counter = counter + 1
                    
     'Détermination de la matrice X
    
            MatIntX(0, 0) = Cells(5, 7 + counter)
            MatIntX(1, 0) = Cells(6, 7 + counter)
            MatIntX(2, 0) = Cells(7, 8 + counter)
        
            Mat_X = MatIntX
    
    End Function
    
    
    
    Function Mat_ProdPX(Angle As Double) As Variant
    'M1M2 = P
    'X2 = X'
    
    'Initialisation
        Dim MatriceX2(3, 1) As Double
        Dim P As Variant
        Dim X As Variant
        Dim i, j As Integer
        Dim counter As Integer
        
        counter = 0
        
        Do While cell <> ""
        
            counter = counter + 1
            
         'Calcule de X'=Pinv*X
        
                P = Pinv(Angle)
                X = Mat_X(Angle)
              
                
                For i = 1 To 3
                
                        MatriceX2(i - 1, 0) = P(i, 1) * X(0, 0) + _
                              P(i, 2) * X(1, 0) + _
                              P(i, 3) * X(2, 0)
                    
                        Cells(13 + i, counter) = MatriceX2(i - 1, 0)
                        
                Next i
        
            Loop

    End Function
 

Dranreb

XLDnaute Barbatruc
Les tableaux traités par Excel doivent être basés 1
Votre Function PInv, par exemple, renverra un Variant contenant un tableau basé 1.
Expliquez aussi ce que vous voulez. Votre classeur joint ne me permet pas, actuellement de le comprendre. J'ai aussi vaguement l'impression que le plus gros pourrait être réalisé à l'aide de formules.
 
Dernière édition:

Alex98

XLDnaute Nouveau
Les tableaux traités par Excel doivent être basés 1
Votre Function PInv, par exemple, renverra un Variant contenant un tableau basé 1.
Expliquez aussi ce que vous voulez. Votre classeur joint ne me permet pas, actuellement de le comprendre. J'ai aussi vaguement l'impression que le plus gros pourrait être réalisé à l'aide de formules.
J'ai des coordonnées d'entrée dans un repère MNO'. Le but est de grâce a des angles de rotations, trouver les coordonnée de sortie. J'ai réussi pour une seul coordonnée (x,y,z), j'aimerais que si l'utilisateur ai besoin de rentrer plusieurs coordonnées d'entrée, une boucle les prend en charge pour faire sortir les coordonnées de sorti
 

Dranreb

XLDnaute Barbatruc
Actuellement votre classeur joint ne sort rien quand on clique sur le bouton "Coordonnées de sortie", ça fait erreur 9 indice en dehors des limites sur X = Mat_X(Angle) dans la Function Mat_ProdPX(Angle As Double).
Vraiment, commencez par baser 1 tous vos tableaux.
 

Alex98

XLDnaute Nouveau
C'est de ma faute je vous ai envoyé celui sur lequel je testais mes fonctions;

Celui là est bon mais en appuyant sur le bouton vous allez voir que seul la première coordonnées s'affichent;
 

Pièces jointes

  • Entré Sortie Coordonnée.xlsm
    29.6 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
Remarque: En H14:H16 validé par Ctrl+Maj+Entrée :
Code:
=PRODUITMAT(INVERSEMAT($B$27:$D$29);H$5:H$7)
Devrait donner le même résultat. il ne resterait qu'à le propager sur le nombre de colonnes voulu
Êtes vous sûr de vos rotations ? Ne devraient-elles pas s'appliquer aux corrdonnées déja réorientées selon les rotations des axes précédents ? (pour l'axe Y notamment ?)
 
Dernière édition:

Alex98

XLDnaute Nouveau
Remarque: En H14:H16 validé par Ctrl+Maj+Entrée :
Code:
=PRODUITMAT(INVERSEMAT($B$27:$D$29);H$5:H$7)
Devrait donner le même résultat. il ne resterait qu'à le propager sur le nombre de colonnes voulu
Êtes vous sûr de vos rotations ? Ne devraient-elles pas s'appliquer aux corrdonnées déja réorientées selon les rotations des axes précédents ? (pour l'axe Y notamment ?)
Le dernier fichier que je vous ai joint avec en sorti x = -1.0817 y =0.9259 ... est bon car c'est les valeurs que je devais retrouvé.
 

Discussions similaires