ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WPF 2D Transformations Matrix Transforms
    .NET/WPF 2D 2013. 6. 27. 22:37
    반응형





    <Grid>     <StackPanel Orientation="Horizontal"> <StackPanel Width="300"> <TextBlock Margin="10,10,5,5" Text="Original Matrix:"/> <TextBlock x:Name="tbOriginal" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5"                          Text="Inverted Matrix:"/> <TextBlock x:Name="tbInvert" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5"                          Text="Original Matrices:"/> <TextBlock x:Name="tbM1M2" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5" Text="M1 x M2:"/> <TextBlock x:Name="tbM12" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5" Text="M2 x M1:"/> <TextBlock x:Name="tbM21" Margin="20,0,5,5"/> </StackPanel>         <StackPanel Width="320">         <TextBlock Margin="10,10,5,5" Text="Original Matrix:"/>         <TextBlock Name="tbOriginal1" Margin="20,0,5,5"/>         <TextBlock Margin="10,0,5,5" Text="Scale:"/> <TextBlock Name="tbScale" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5" Text="Scale - Prepend:"/> <TextBlock Name="tbScalePrepend" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5" Text="Translation:"/> <TextBlock Name="tbTranslate" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5" Text="Translation – Prepend:"/> <TextBlock Name="tbTranslatePrepend"                     Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5" Text="Rotation:"/> <TextBlock Name="tbRotate" Margin="20,0,5,5"                     TextWrapping="Wrap"/> <TextBlock Margin="10,0,5,5"                      Text="Rotation – Prepend:"/> <TextBlock Name="tbRotatePrepend"                      Margin="20,0,5,5" TextWrapping="Wrap"/> <TextBlock Margin="10,0,5,5" Text="RotationAt:"/> <TextBlock x:Name="tbRotateAt" Margin="20,0,5,5"                     TextWrapping="Wrap"/> <TextBlock Margin="10,0,5,5"                      Text="RotationAt – Prepend:"/> <TextBlock x:Name="tbRotateAtPrepend"                     Margin="20,0,5,5" TextWrapping="Wrap"/> <TextBlock Margin="10,0,5,5" Text="Skew:"/> <TextBlock Name="tbSkew" Margin="20,0,5,5"/> <TextBlock Margin="10,0,5,5" Text="Skew - Prepend:"/> <TextBlock Name="tbSkewPrepend" Margin="20,0,5,5"/> </StackPanel>     </StackPanel> </Grid>




    // Invert matrix:  Matrix matrix = new Matrix(123400); tbOriginal.Text = "(" + matrix.ToString() + ")"; matrix.Invert(); tbInvert.Text = "(" + matrix.ToString() + ")"; // Matrix multiplication:  Matrix m1 = new Matrix(123401); Matrix m2 = new Matrix(012101); Matrix m12 = Matrix.Multiply(m1m2); Matrix m21 = Matrix.Multiply(m2m1); tbM1M2.Text = "M1 = (" + m1.ToString() + "), " +" M2 = (" + m2.ToString() + ")"; tbM12.Text = "(" + m12.ToString() + ")"; tbM21.Text = "(" + m21.ToString() + ")"; //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// // Original matrix:  Matrix m = new Matrix(123401); tbOriginal1.Text = "(" + m.ToString() + ")"; //Scale:  m.Scale(10.5); tbScale.Text = "(" + m.ToString() + ")"; // Scale - Prepend:  m = new Matrix(123401); m.ScalePrepend(10.5); tbScalePrepend.Text = "(" + m.ToString() + ")"; //Translation:  m = new Matrix(123401); m.Translate(10.5); tbTranslate.Text = "(" + m.ToString() + ")"; // Translation - Prepend:  m = new Matrix(123401); m.TranslatePrepend(10.5); tbTranslatePrepend.Text ="(" + m.ToString() + ")"; //Rotation:  m = new Matrix(123401); m.Rotate(45); tbRotate.Text = "(" + MatrixRound(m).ToString()+ ")"; // Rotation - Prepend:  m = new Matrix(123401); m.RotatePrepend(45); tbRotatePrepend.Text = "(" +MatrixRound(m).ToString() + ")"; //Rotation at (x = 1, y = 2):  m = new Matrix(123401); m.RotateAt(4512); tbRotateAt.Text = "(" +MatrixRound(m).ToString() + ")"; // Rotation at (x = 1, y = 2) - Prepend:  m = new Matrix(123401); m.RotateAtPrepend(4512); tbRotateAtPrepend.Text = "(" +MatrixRound(m).ToString() + ")"; // Skew:  m = new Matrix(123401); m.Skew(4530); tbSkew.Text = "(" + MatrixRound(m).ToString() + ")"; // Skew - Prepend:  m = new Matrix(123401); m.SkewPrepend(4530); tbSkewPrepend.Text ="(" + MatrixRound(m).ToString() + ")"; private Matrix MatrixRound(Matrix m) {     m.M11 = Math.Round(m.M113);     m.M12 = Math.Round(m.M123);     m.M21 = Math.Round(m.M213);     m.M22 = Math.Round(m.M223);     m.OffsetX = Math.Round(m.OffsetX3);     m.OffsetY = Math.Round(m.OffsetY3);     return m; }





    reference : Practical WPF Graphics Programming



































    반응형

    댓글

Designed by Tistory.