Condividi tramite


Matrix.Multiply Metodo

Definizione

Moltiplica questo Matrix per il Matrix specificato anteponendo il Matrixspecificato.

Overload

Multiply(Matrix)

Moltiplica questo Matrix per la matrice specificata nel parametro matrix, anteponendo il Matrixspecificato.

Multiply(Matrix, MatrixOrder)

Moltiplica questo Matrix per la matrice specificata nel parametro matrix e nell'ordine specificato nel parametro order.

Multiply(Matrix)

Origine:
Matrix.cs
Origine:
Matrix.cs
Origine:
Matrix.cs
Origine:
Matrix.cs
Origine:
Matrix.cs

Moltiplica questo Matrix per la matrice specificata nel parametro matrix, anteponendo il Matrixspecificato.

public:
 void Multiply(System::Drawing::Drawing2D::Matrix ^ matrix);
public void Multiply (System.Drawing.Drawing2D.Matrix matrix);
member this.Multiply : System.Drawing.Drawing2D.Matrix -> unit
Public Sub Multiply (matrix As Matrix)

Parametri

matrix
Matrix

Il Matrix in base al quale deve essere moltiplicato questo Matrix.

Esempio

Per un esempio, vedere Multiply.

Si applica a

Multiply(Matrix, MatrixOrder)

Origine:
Matrix.cs
Origine:
Matrix.cs
Origine:
Matrix.cs
Origine:
Matrix.cs
Origine:
Matrix.cs

Moltiplica questo Matrix per la matrice specificata nel parametro matrix e nell'ordine specificato nel parametro order.

public:
 void Multiply(System::Drawing::Drawing2D::Matrix ^ matrix, System::Drawing::Drawing2D::MatrixOrder order);
public void Multiply (System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.MatrixOrder order);
member this.Multiply : System.Drawing.Drawing2D.Matrix * System.Drawing.Drawing2D.MatrixOrder -> unit
Public Sub Multiply (matrix As Matrix, order As MatrixOrder)

Parametri

matrix
Matrix

Il Matrix in base al quale deve essere moltiplicato questo Matrix.

order
MatrixOrder

Oggetto MatrixOrder che rappresenta l'ordine della moltiplicazione.

Esempio

L'esempio di codice seguente è progettato per l'uso con Windows Form e richiede PaintEventArgse, un oggetto evento Paint. Il codice esegue le azioni seguenti:

  • Crea tre matrici.

  • Elenca il contenuto della matrice 1 sullo schermo.

  • Moltiplica la matrice 1 per matrice 2 e archivia il risultato nella matrice 1.

  • Elenca il contenuto della matrice 1 sullo schermo.

  • Moltiplica il risultato archiviato nella matrice 1 per matrice 3 e archivia di nuovo il risultato nella matrice 1.

  • Elenca il contenuto della matrice 1 sullo schermo.

  • Disegna un rettangolo sullo schermo prima di applicare la trasformazione matrice 1 (il rettangolo blu).

  • Applica la trasformazione al rettangolo.

  • Disegna il rettangolo trasformato sullo schermo (rettangolo rosso), usando le stesse coordinate del rettangolo precedente.

Si noti che il rettangolo rosso è stato ridimensionato da un fattore di due nella direzione orizzontale, quindi ruotato di 90 gradi e quindi spostato (convertito) 250 punti nella direzione x e 50 punti nella direzione y.

public:
   void MultiplyExample( PaintEventArgs^ e )
   {
      Pen^ myPen = gcnew Pen( Color::Blue,1.0f );
      Pen^ myPen2 = gcnew Pen( Color::Red,1.0f );

      // Set up the matrices.
      Matrix^ myMatrix1 = gcnew Matrix( 2.0f,0.0f,0.0f,1.0f,0.0f,0.0f );
      Matrix^ myMatrix2 = gcnew Matrix( 0.0f,1.0f,-1.0f,0.0f,0.0f,0.0f );
      Matrix^ myMatrix3 = gcnew Matrix( 1.0f,0.0f,0.0f,1.0f,250.0f,50.0f );

      // Display the elements of the starting matrix.
      ListMatrixElements( e, myMatrix1, "Beginning Matrix", 6, 40 );

      // Multiply Matrix1 by Matrix 2.
      myMatrix1->Multiply( myMatrix2, MatrixOrder::Append );

      // Display the result of the multiplication of Matrix1 and
      // Matrix2.
      ListMatrixElements( e, myMatrix1, "Matrix After 1st Multiplication", 6, 60 );

      // Multiply the result from the previous multiplication by
      // Matrix3.
      myMatrix1->Multiply( myMatrix3, MatrixOrder::Append );

      // Display the result of the previous multiplication
      // multiplied by Matrix3.
      ListMatrixElements1( e, myMatrix1, "Matrix After 2nd Multiplication", 6, 80 );

      // Draw the rectangle prior to transformation.
      e->Graphics->DrawRectangle( myPen, 0, 0, 100, 100 );

      // Make the transformation.
      e->Graphics->Transform = myMatrix1;

      // Draw the rectangle after transformation.
      e->Graphics->DrawRectangle( myPen2, 0, 0, 100, 100 );
   }

   //-------------------------------------------------------
   // The following function is a helper function to
   // list the contents of a matrix.
   //-------------------------------------------------------
   void ListMatrixElements1( PaintEventArgs^ e, Matrix^ matrix, String^ matrixName, int numElements, int y )
   {
      // Set up variables for drawing the array
      // of points to the screen.
      int i;
      float x = 20,X = 200;
      System::Drawing::Font^ myFont = gcnew System::Drawing::Font( "Arial",8 );
      SolidBrush^ myBrush = gcnew SolidBrush( Color::Black );

      // Draw the matrix name to the screen.
      e->Graphics->DrawString( String::Concat( matrixName, ":  " ), myFont, myBrush, (float)x, (float)y );

      // Draw the set of path points and types to the screen.
      for ( i = 0; i < numElements; i++ )
      {
         e->Graphics->DrawString( String::Concat( matrix->Elements[ i ], ", " ), myFont, myBrush, (float)X, (float)y );
         X += 30;
      }
   }
public void MultiplyExample(PaintEventArgs e)
{
    Pen myPen = new Pen(Color.Blue, 1);
    Pen myPen2 = new Pen(Color.Red, 1);
             
    // Set up the matrices.
    Matrix myMatrix1 = new Matrix(
        2.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);  
    
    Matrix myMatrix2 = new Matrix(
        0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f); 
  
    Matrix myMatrix3 = new Matrix(
        1.0f, 0.0f, 0.0f, 1.0f, 250.0f, 50.0f);  

    // Display the elements of the starting matrix.
    ListMatrixElements(e, myMatrix1, "Beginning Matrix", 6, 40);
             
    // Multiply Matrix1 by Matrix 2.
    myMatrix1.Multiply(myMatrix2, MatrixOrder.Append);
             
    // Display the result of the multiplication of Matrix1 and
             
    // Matrix2.
    ListMatrixElements(e,
        myMatrix1,
        "Matrix After 1st Multiplication",
        6,
        60);
             
    // Multiply the result from the pervious multiplication by
    // Matrix3.
    myMatrix1.Multiply(myMatrix3, MatrixOrder.Append);
             
    // Display the result of the previous multiplication
    // multiplied by Matrix3.
    ListMatrixElements1(e,
        myMatrix1,
        "Matrix After 2nd Multiplication",
        6,
        80);
             
    // Draw the rectangle prior to transformation.
    e.Graphics.DrawRectangle(myPen, 0, 0, 100, 100);
             
    // Make the transformation.
    e.Graphics.Transform = myMatrix1;
             
    // Draw the rectangle after transformation.
    e.Graphics.DrawRectangle(myPen2, 0, 0, 100, 100);
}
             
//-------------------------------------------------------
// The following function is a helper function to
// list the contents of a matrix.
//-------------------------------------------------------
public void ListMatrixElements1(
    PaintEventArgs e,
    Matrix matrix,
    string matrixName,
    int numElements,
    int y)
{
             
    // Set up variables for drawing the array
    // of points to the screen.
    int i;
    float x = 20, X = 200;
    Font myFont = new Font("Arial", 8);
    SolidBrush myBrush = new SolidBrush(Color.Black);
             
    // Draw the matrix name to the screen.
    e.Graphics.DrawString(
        matrixName + ":  ",
        myFont,
        myBrush,
        x,
        y);
             
    // Draw the set of path points and types to the screen.
    for(i=0; i<numElements; i++)
    {
        e.Graphics.DrawString(
            matrix.Elements[i].ToString() + ", ",
            myFont,
            myBrush,
            X,
            y);
        X += 30;
    }
}
Public Sub MultiplyExample(ByVal e As PaintEventArgs)
    Dim myPen As New Pen(Color.Blue, 1)
    Dim myPen2 As New Pen(Color.Red, 1)

    ' Set up the matrices.
    Dim myMatrix1 As New Matrix(2.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F)

    ' Scale.
    Dim myMatrix2 As New Matrix(0.0F, 1.0F, -1.0F, 0.0F, 0.0F, 0.0F)

    ' Rotate 90.
    Dim myMatrix3 As New Matrix(1.0F, 0.0F, 0.0F, 1.0F, 250.0F, 50.0F)

    ' Display the elements of the starting matrix.
    ListMatrixElementsHelper(e, myMatrix1, "Beginning Matrix", 6, 40)

    ' Multiply Matrix1 by Matrix 2.
    myMatrix1.Multiply(myMatrix2, MatrixOrder.Append)

    ' Display the result of the multiplication of Matrix1 and
    ' Matrix2.
    ListMatrixElementsHelper(e, myMatrix1, _
    "Matrix After 1st Multiplication", 6, 60)

    ' Multiply the result from the pervious multiplication by
    ' Matrix3.
    myMatrix1.Multiply(myMatrix3, MatrixOrder.Append)

    ' Display the result of the previous multiplication
    ' multiplied by Matrix3.
    ListMatrixElementsHelper1(e, myMatrix1, _
    "Matrix After 2nd Multiplication", 6, 80)

    ' Draw the rectangle prior to transformation.
    e.Graphics.DrawRectangle(myPen, 0, 0, 100, 100)
    e.Graphics.Transform = myMatrix1

    ' Draw the rectangle after transformation.
    e.Graphics.DrawRectangle(myPen2, 0, 0, 100, 100)
End Sub

' A helper function to list the contents of a matrix.
Public Sub ListMatrixElementsHelper1(ByVal e As PaintEventArgs, _
ByVal matrix As Matrix, ByVal matrixName As String, ByVal numElements As Integer, _
ByVal y As Integer)

    ' Set up variables for drawing the array

    ' of points to the screen.
    Dim i As Integer
    Dim x As Single = 20
    Dim j As Single = 200
    Dim myFont As New Font("Arial", 8)
    Dim myBrush As New SolidBrush(Color.Black)

    ' Draw the matrix name to the screen.
    e.Graphics.DrawString(matrixName + ":  ", myFont, myBrush, x, y)

    ' Draw the set of path points and types to the screen.
    For i = 0 To numElements - 1
        e.Graphics.DrawString(matrix.Elements(i).ToString() + ", ", _
        myFont, myBrush, j, y)
        j += 30
    Next i
End Sub

Commenti

Se l'ordine specificato è Prepend, questo Matrix viene moltiplicato per la matrice specificata in un ordine anteporto. Se l'ordine specificato è Append, questo Matrix viene moltiplicato per la matrice specificata in un ordine accodato.

Si applica a