Matrix.Multiply 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
Multiply(Matrix) | |
Multiply(Matrix, MatrixOrder) |
将此 Matrix 乘以 |
Multiply(Matrix)
- Source:
- Matrix.cs
- Source:
- Matrix.cs
- Source:
- Matrix.cs
- Source:
- Matrix.cs
- Source:
- Matrix.cs
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)
参数
示例
有关示例,请参阅 Multiply。
适用于
Multiply(Matrix, MatrixOrder)
- Source:
- Matrix.cs
- Source:
- Matrix.cs
- Source:
- Matrix.cs
- Source:
- Matrix.cs
- Source:
- Matrix.cs
将此 Matrix 乘以 matrix
参数中指定的矩阵,按照 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)
参数
- order
- MatrixOrder
表示乘法顺序的 MatrixOrder。
示例
下面的代码示例旨在与 Windows 窗体一起使用,它需要 PaintEventArgse
Paint 事件对象。 该代码执行以下操作:
创建三个矩阵。
列出矩阵 1 到屏幕的内容。
将矩阵 1 乘以矩阵 2,并将结果存储在矩阵 1 中。
列出矩阵 1 到屏幕的内容。
将矩阵 1 中存储的结果乘以矩阵 3,并再次将结果存储在矩阵 1 中。
列出矩阵 1 到屏幕的内容。
在应用矩阵 1 转换(蓝色矩形)之前,将矩形绘制到屏幕。
将转换应用于矩形。
使用与上一个矩形相同的坐标将转换后的矩形绘制到屏幕(红色矩形)。
请注意,红色矩形已按水平方向的两个因子缩放,然后旋转 90 度,然后在 x 方向移动 250 磅,Y 方向移动 50 磅。
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
注解
如果指定的顺序为 Prepend,则此 Matrix 乘以前面顺序的指定矩阵。 如果指定的顺序为 Append,则此 Matrix 乘以追加顺序中的指定矩阵。