void ModifyEdgeByScale(Point delta, GeomEdge edge) { //StraightLineEdges.CreateSimpleEdgeCurveWithUnderlyingPolyline(edge); var sn = edge.Source.UserData as Drawing.Node; var tn = edge.Target.UserData as Drawing.Node; //var gg = graph.UserData as Graph; //var vsn = Viewer.GetIViewerObject(sn); //var vtn = Viewer.GetIViewerObject(tn); Drawing.Node oN = null, tN = null; if (Viewer.GetIViewerObject(sn).MarkedForDragging) { tN = sn; oN = tn; } else { tN = tn; oN = sn; } Point o = oN.Pos, t = tN.Pos, t_ = t - delta; double scale = (t - o).Length / (t_ - o).Length; //double angle = Point.Angle(t, o, t_)*180/Math.PI; double angle = Point.Angle(t, o, t_); System.Windows.Media.Matrix mm = System.Windows.Media.Matrix.Identity; //mm.ScaleAt(scale, scale, o.X, o.Y); mm.RotateAt(angle, o.X, o.Y); //PlaneTransformation mt = new PlaneTransformation(mm.M11,mm.M12,mm.OffsetX,mm.M21,mm.M22,mm.OffsetY); var scaleMatrix = new PlaneTransformation(scale, 0, 0, 0, scale, 0); var translateToOrigin = new PlaneTransformation(1, 0, -o.X, 0, 1, -o.Y); var translateToNode = new PlaneTransformation(1, 0, o.X, 0, 1, o.Y); var rotateMatrix = PlaneTransformation.Rotation(-angle); var matrix = translateToNode * scaleMatrix * rotateMatrix * translateToOrigin; if (edge.UnderlyingPolyline != null) { var ul = edge.UnderlyingPolyline; if (tN == sn) { ul.HeadSite.Point = t; } else { ul.LastSite.Point = t; } for (Site s = ul.HeadSite.Next; s != ul.LastSite; s = s.Next) { s.Point = matrix * s.Point; } edge.Curve = ul.CreateCurve(); Arrowheads.TrimSplineAndCalculateArrowheads(edge, edge.Curve, true, false); } //edge.Curve = edge.Curve.Transform(matrix); //var angle= Point.Angle(graph.) }
public void PerformOperation(object sender, RoutedEventArgs e) { var li = sender as RadioButton; string syntaxString, resultType, operationString; switch (li?.Name) { // begin switch case "rb1": { // Multiplies a Matrix by a Matrix using the overloaded * operator // Returns a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var isInvertible = matrix1.HasInverse; // isInvertible is equal to True // Displaying Results syntaxString = "isInvertible = matrix1.HasInverse;"; resultType = "Boolean"; operationString = "Checking if matrix1 is invertible"; ShowResults(isInvertible.ToString(), syntaxString, resultType, operationString); break; } case "rb2": { // Translates a Matrix // Returns a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); const double offsetX = 15; const double offsetY = 25; matrix1.Translate(offsetX, offsetY); // matrix1 is not equal to //Displaying Results syntaxString = "matrix1.Translate(offsetX, offsetY);"; resultType = "Void"; operationString = "Translating a Matrix by a Point"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb3": { // Prepend a Tranlsation to a Matrix // Returns a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); const double offsetX = 15; const double offsetY = 25; matrix1.TranslatePrepend(offsetX, offsetY); // matrix1 is not equal to //Displaying Results syntaxString = " matrix1.TranslatePrepend(offsetX, offsetY);"; resultType = "Void"; operationString = "Prepending Translating a matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb4": { // Sets a Matrix to an identity matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.SetIdentity(); // matrix1 is now equal to (1,0,0,1,0,0) //Displaying Results syntaxString = "matrix1.SetIdentity();"; resultType = "Void"; operationString = "Setting a matrix to an identity matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb5": { // Checks if a Matrix is an identity matrix // Creates a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); // Sets matrix1 into an identity matrix matrix1.SetIdentity(); var isIdentityMatrix = matrix1.IsIdentity; // isIdentityMatrix is equal to True //Displaying Results syntaxString = "isIdentityMatrix = matrix1.IsIdentity;"; resultType = "Boolean"; operationString = "Determining if a Matrix is an identity matrix"; ShowResults(isIdentityMatrix.ToString(), syntaxString, resultType, operationString); break; } case "rb6": { // Changes a Matrix into an identity matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1 = System.Windows.Media.Matrix.Identity; // matrix1 is now equal to (1,0,0,1,0,0) //Displaying Results syntaxString = "matrix1 = Matrix.Identity;"; resultType = "Matrix"; operationString = "Gets an identity Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb7": { // Converts a string representation of a matrix into a Matrix structure var matrixResult = new System.Windows.Media.Matrix(); matrixResult = System.Windows.Media.Matrix.Parse("1,2,3,4,5,6"); // matrixResult is equal to (1,2,3,4,5,6) //Displaying Results syntaxString = "matrixResult = Matrix.Parse(\"1,2,3,4,5,6\");"; resultType = "Matrix"; operationString = "Convert a string into a Matrix structure"; ShowResults(matrixResult.ToString(), syntaxString, resultType, operationString); break; } case "rb8": { // Checks if two Matrixes are equal using the static Equals method // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = System.Windows.Media.Matrix.Equals(matrix1, matrix2); // areEqual is equal to False //Displaying Results syntaxString = "areEqual = Matrix.Equals(matrix1, matrix2);"; resultType = "Boolean"; operationString = "Checking if the matrices are equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb8b": { // Checks if an Object is equal to a Matrix using the static Equals method // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = matrix1.Equals(matrix2); // areEqual is equal to False //Displaying Results syntaxString = "areEqual = Matrix.Equals(matrix1, matrix2);"; resultType = "Boolean"; operationString = "Checking if the matrices are equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb9": { // Checks if two Matrixes are equal using the overloaded == operator // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = matrix1 == matrix2; // areEqual is equal to False //Displaying Results syntaxString = "areEqual = matrix1 == matrix2;"; resultType = "Boolean"; operationString = "Checking if the matrices are equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb10": { // Checks if two Matrixes are not equal using the overloaded != operator // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = matrix1 != matrix2; // areEqual is equal to False //Displaying Results syntaxString = "areEqual = matrix1 != matrix2;"; resultType = "Boolean"; operationString = "Checking if the matrices are not equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb11": { // Inverts a Matrix // Creating a Matrix structure var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); // Checking if matrix1 is invertible if (matrix1.HasInverse) { // Inverting matrix1 matrix1.Invert(); // matrix1 is equal to (-0.04, 0.2 , 0.3, -0.1, 1, -2) } //Displaying Results syntaxString = "matrix1.Invert();"; resultType = "Void"; operationString = "Inverting a matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb12": { // Prepends a Matrix to another Matrix. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); matrix1.Prepend(matrix2); // matrix1 is equal to (70,100,150,220,255,370) //Displaying Results syntaxString = "matrix1.Prepend(matrix2);"; resultType = "Void"; operationString = "Prepending a Matrix to another Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb13": { // Appends a Matrix to another Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); matrix1.Append(matrix2); // matrix1 is equal to (70,100,150,220,240,352) //Displaying Results syntaxString = "matrix1.Append(matrix2);"; resultType = "Void"; operationString = "Appending a Matrix to another Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb14": { // Rotates a Matrix by a specified angle var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double rotateAngle = 90; matrix1.Rotate(rotateAngle); // matrix1 is equal to (-10,5,-20,15,-30,25) //Displaying Results syntaxString = "matrix1.Rotate(rotateAngle);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb15": { // Rotates a Matrix by a specified angle at a specific point var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.RotateAt(90, 2, 4); // matrix1 is equal to (-10,5,-20,15,-24,27) //Displaying Results syntaxString = "matrix1.RotateAt(rotateAngle, rotateCenterX, rotateCenterY);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb16": { // Prepends a Rotation to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double rotateAngle = 90; matrix1.RotatePrepend(rotateAngle); // matrix1 is equal to (15,20,-5,-10,25,30) //Displaying Results syntaxString = "matrix1.RotatePrepend(rotateAngle);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb17": { // Prepends a Rotation at a specific point to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.RotateAtPrepend(90, 2, 4); // matrix1 is equal to (15,20,-5,-10,85,130) //Displaying Results syntaxString = "matrix1.RotateAtPrepend(rotateAngle, rotateCenterX, rotateCenterY);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb18": { // Scales a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double scaleX = (1); double scaleY = (2); matrix1.Scale(scaleX, scaleY); // matrix1 is equal to //Displaying Results syntaxString = "matrix1.Scale(scaleX, scaleY);"; resultType = "Void"; operationString = "Scaling a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb19": { // Multiplies a Matrix by another Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var matrixResult = new System.Windows.Media.Matrix(); matrixResult = System.Windows.Media.Matrix.Multiply(matrix2, matrix1); // matrixResult is equal to (70, 100, 150, 220, 255, 370) //Displaying Results syntaxString = "matrixResult = Matrix.Multiply(matrix2, matrix1);"; resultType = "Matrix"; operationString = "Multiplying matrix1 and matrix2"; ShowResults(matrixResult.ToString(), syntaxString, resultType, operationString); break; } case "rb20": { // Multiplies a Matrix by another Matrix using the overloaded * operator var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var matrixResult = new System.Windows.Media.Matrix(); matrixResult = matrix1*matrix2; // matrixResult is equal to (70, 100, 150, 220, 240, 352) //Displaying Results syntaxString = " matrixResult = matrix1 * matrix2;"; resultType = "Matrix"; operationString = "Multiplying matrix1 and matrix2"; ShowResults(matrixResult.ToString(), syntaxString, resultType, operationString); break; } case "rb21": { // Appends a skew to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double skewAngleX = 45; double skewAngleY = 180; matrix1.Skew(skewAngleX, skewAngleY); // matrix1 is equal to (15, 10, 35, 20, 55, 30) //Displaying Results syntaxString = "matrix1.Skew(skewAngleX, skewAngleY);"; resultType = "Void"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb22": { // Prepends a skew to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double skewAngleX = 45; double skewAngleY = 180; matrix1.SkewPrepend(skewAngleX, skewAngleY); // matrix1 is equal to (5, 10, 20, 30, 25, 30) //Displaying Results syntaxString = "matrix1.SkewPrepend(skewAngleX, skewAngleY);"; resultType = "Void"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb23": { // Appends a scale to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double scaleFactorX = 2; double scaleFactorY = 4; matrix1.Scale(scaleFactorX, scaleFactorY); // matrix1 is equal to (10, 40, 30, 80, 50, 120) //Displaying Results syntaxString = "matrix1.Scale(scaleFactorX, scaleFactorY);"; resultType = "Void"; operationString = "Appending a scale to a matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb24": { // Appends a scale at a specific point to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.ScaleAt(2, 4, 5, 10); // matrix1 is equal to (10, 40, 30, 80, 45, 90) //Displaying Results syntaxString = " matrix1.ScaleAt(scaleFactorX, scaleFactorY, scaleCenterX, scaleCenterY);"; resultType = "Void"; operationString = "Appends a scale at a specific point to matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb25": { // Prepends a scale to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double scaleFactorX = 2; double scaleFactorY = 4; matrix1.ScalePrepend(scaleFactorX, scaleFactorY); // matrix1 is equal to (10, 20, 60, 80, 25, 30) //Displaying Results syntaxString = "matrix1.ScalePrepend(scaleFactorX, scaleFactorY);"; resultType = "Void"; operationString = "Prepending a scale to matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb26": { // Prepends a scale at a specific point to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.ScaleAtPrepend(2, 4, 5, 10); // matrix1 is equal to (10, 20, 60, 80, -450, -620) //Displaying Results syntaxString = "matrix1.ScalePrependAt(scaleFactorX, scaleFactorY, centerPointX, centerPointY);"; resultType = "Void"; operationString = "Prepending a scale at a specific point to matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb29": { // Transform a point by a matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var point1 = new Point(15, 25); var pointResult = new Point(); pointResult = matrix1.Transform(point1); // pointResult is equal to (475, 680) //Displaying Results syntaxString = "pointResult = matrix1.Transform(point1)"; resultType = "Point"; operationString = "Transforming a point1 by matrix1"; ShowResults(pointResult.ToString(), syntaxString, resultType, operationString); break; } case "rb30": { // Transform a Vector by a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var vector1 = new Vector(15, 25); new Vector(); matrix1.Transform(vector1); // vectorResult is equal to (450, 650) //Displaying Results syntaxString = "vectorResult = matrix1.Transform(vector1);"; resultType = "Vector"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb31": { // Transform an array of Points by a Matrix // Creating a Matrix and an array of Pointers var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var pointArray = new Point[2]; // Setting the Point's X and Y values pointArray[0].X = 15; pointArray[0].Y = 25; pointArray[1].X = 30; pointArray[1].Y = 35; // Transforming the Points in pointArry by matrix1 matrix1.Transform(pointArray); // pointArray[0] is equal to (475, 680) // pointArray[1] is equal to (700, 1030) //Displaying Results syntaxString = "matrix1.Transform(pointArray);"; resultType = "void"; operationString = "Transforming an array of Points by matrix1"; ShowResults(pointArray[1].ToString(), syntaxString, resultType, operationString); break; } case "rb32": { // Transform an array of Vectors by a Matrix // Creating a Matrix and an array of Vectors var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var vectorArray = new Vector[2]; // Setting the Vector's X and Y values vectorArray[0].X = 15; vectorArray[0].Y = 25; vectorArray[1].X = 30; vectorArray[1].Y = 35; // Transforming the Vectors in vectorArray by matrix1 matrix1.Transform(vectorArray); // VectorArray[0] is equal to (450, 650) // VectorArray[1] is equal to (675, 1000) //Displaying Results syntaxString = " matrix1.Transform(vectorArray);"; resultType = "Void"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(vectorArray[0].ToString(), syntaxString, resultType, operationString); break; } } // end switch }
public void PerformOperation(object sender, RoutedEventArgs e) { var li = sender as RadioButton; string syntaxString, resultType, operationString; switch (li?.Name) { // begin switch case "rb1": { // Multiplies a Matrix by a Matrix using the overloaded * operator // Returns a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var isInvertible = matrix1.HasInverse; // isInvertible is equal to True // Displaying Results syntaxString = "isInvertible = matrix1.HasInverse;"; resultType = "Boolean"; operationString = "Checking if matrix1 is invertible"; ShowResults(isInvertible.ToString(), syntaxString, resultType, operationString); break; } case "rb2": { // Translates a Matrix // Returns a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); const double offsetX = 15; const double offsetY = 25; matrix1.Translate(offsetX, offsetY); // matrix1 is not equal to //Displaying Results syntaxString = "matrix1.Translate(offsetX, offsetY);"; resultType = "Void"; operationString = "Translating a Matrix by a Point"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb3": { // Prepend a Tranlsation to a Matrix // Returns a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); const double offsetX = 15; const double offsetY = 25; matrix1.TranslatePrepend(offsetX, offsetY); // matrix1 is not equal to //Displaying Results syntaxString = " matrix1.TranslatePrepend(offsetX, offsetY);"; resultType = "Void"; operationString = "Prepending Translating a matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb4": { // Sets a Matrix to an identity matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.SetIdentity(); // matrix1 is now equal to (1,0,0,1,0,0) //Displaying Results syntaxString = "matrix1.SetIdentity();"; resultType = "Void"; operationString = "Setting a matrix to an identity matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb5": { // Checks if a Matrix is an identity matrix // Creates a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); // Sets matrix1 into an identity matrix matrix1.SetIdentity(); var isIdentityMatrix = matrix1.IsIdentity; // isIdentityMatrix is equal to True //Displaying Results syntaxString = "isIdentityMatrix = matrix1.IsIdentity;"; resultType = "Boolean"; operationString = "Determining if a Matrix is an identity matrix"; ShowResults(isIdentityMatrix.ToString(), syntaxString, resultType, operationString); break; } case "rb6": { // Changes a Matrix into an identity matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1 = System.Windows.Media.Matrix.Identity; // matrix1 is now equal to (1,0,0,1,0,0) //Displaying Results syntaxString = "matrix1 = Matrix.Identity;"; resultType = "Matrix"; operationString = "Gets an identity Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb7": { // Converts a string representation of a matrix into a Matrix structure var matrixResult = new System.Windows.Media.Matrix(); matrixResult = System.Windows.Media.Matrix.Parse("1,2,3,4,5,6"); // matrixResult is equal to (1,2,3,4,5,6) //Displaying Results syntaxString = "matrixResult = Matrix.Parse(\"1,2,3,4,5,6\");"; resultType = "Matrix"; operationString = "Convert a string into a Matrix structure"; ShowResults(matrixResult.ToString(), syntaxString, resultType, operationString); break; } case "rb8": { // Checks if two Matrixes are equal using the static Equals method // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = System.Windows.Media.Matrix.Equals(matrix1, matrix2); // areEqual is equal to False //Displaying Results syntaxString = "areEqual = Matrix.Equals(matrix1, matrix2);"; resultType = "Boolean"; operationString = "Checking if the matrices are equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb8b": { // Checks if an Object is equal to a Matrix using the static Equals method // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = matrix1.Equals(matrix2); // areEqual is equal to False //Displaying Results syntaxString = "areEqual = Matrix.Equals(matrix1, matrix2);"; resultType = "Boolean"; operationString = "Checking if the matrices are equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb9": { // Checks if two Matrixes are equal using the overloaded == operator // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = matrix1 == matrix2; // areEqual is equal to False //Displaying Results syntaxString = "areEqual = matrix1 == matrix2;"; resultType = "Boolean"; operationString = "Checking if the matrices are equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb10": { // Checks if two Matrixes are not equal using the overloaded != operator // Returns a Boolean. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var areEqual = matrix1 != matrix2; // areEqual is equal to False //Displaying Results syntaxString = "areEqual = matrix1 != matrix2;"; resultType = "Boolean"; operationString = "Checking if the matrices are not equal"; ShowResults(areEqual.ToString(), syntaxString, resultType, operationString); break; } case "rb11": { // Inverts a Matrix // Creating a Matrix structure var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); // Checking if matrix1 is invertible if (matrix1.HasInverse) { // Inverting matrix1 matrix1.Invert(); // matrix1 is equal to (-0.04, 0.2 , 0.3, -0.1, 1, -2) } //Displaying Results syntaxString = "matrix1.Invert();"; resultType = "Void"; operationString = "Inverting a matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb12": { // Prepends a Matrix to another Matrix. var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); matrix1.Prepend(matrix2); // matrix1 is equal to (70,100,150,220,255,370) //Displaying Results syntaxString = "matrix1.Prepend(matrix2);"; resultType = "Void"; operationString = "Prepending a Matrix to another Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb13": { // Appends a Matrix to another Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); matrix1.Append(matrix2); // matrix1 is equal to (70,100,150,220,240,352) //Displaying Results syntaxString = "matrix1.Append(matrix2);"; resultType = "Void"; operationString = "Appending a Matrix to another Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb14": { // Rotates a Matrix by a specified angle var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double rotateAngle = 90; matrix1.Rotate(rotateAngle); // matrix1 is equal to (-10,5,-20,15,-30,25) //Displaying Results syntaxString = "matrix1.Rotate(rotateAngle);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb15": { // Rotates a Matrix by a specified angle at a specific point var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.RotateAt(90, 2, 4); // matrix1 is equal to (-10,5,-20,15,-24,27) //Displaying Results syntaxString = "matrix1.RotateAt(rotateAngle, rotateCenterX, rotateCenterY);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb16": { // Prepends a Rotation to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double rotateAngle = 90; matrix1.RotatePrepend(rotateAngle); // matrix1 is equal to (15,20,-5,-10,25,30) //Displaying Results syntaxString = "matrix1.RotatePrepend(rotateAngle);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb17": { // Prepends a Rotation at a specific point to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.RotateAtPrepend(90, 2, 4); // matrix1 is equal to (15,20,-5,-10,85,130) //Displaying Results syntaxString = "matrix1.RotateAtPrepend(rotateAngle, rotateCenterX, rotateCenterY);"; resultType = "Void"; operationString = "Rotating a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb18": { // Scales a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double scaleX = (1); double scaleY = (2); matrix1.Scale(scaleX, scaleY); // matrix1 is equal to //Displaying Results syntaxString = "matrix1.Scale(scaleX, scaleY);"; resultType = "Void"; operationString = "Scaling a Matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb19": { // Multiplies a Matrix by another Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var matrixResult = new System.Windows.Media.Matrix(); matrixResult = System.Windows.Media.Matrix.Multiply(matrix2, matrix1); // matrixResult is equal to (70, 100, 150, 220, 255, 370) //Displaying Results syntaxString = "matrixResult = Matrix.Multiply(matrix2, matrix1);"; resultType = "Matrix"; operationString = "Multiplying matrix1 and matrix2"; ShowResults(matrixResult.ToString(), syntaxString, resultType, operationString); break; } case "rb20": { // Multiplies a Matrix by another Matrix using the overloaded * operator var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var matrix2 = new System.Windows.Media.Matrix(2, 4, 6, 8, 10, 12); var matrixResult = new System.Windows.Media.Matrix(); matrixResult = matrix1 * matrix2; // matrixResult is equal to (70, 100, 150, 220, 240, 352) //Displaying Results syntaxString = " matrixResult = matrix1 * matrix2;"; resultType = "Matrix"; operationString = "Multiplying matrix1 and matrix2"; ShowResults(matrixResult.ToString(), syntaxString, resultType, operationString); break; } case "rb21": { // Appends a skew to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double skewAngleX = 45; double skewAngleY = 180; matrix1.Skew(skewAngleX, skewAngleY); // matrix1 is equal to (15, 10, 35, 20, 55, 30) //Displaying Results syntaxString = "matrix1.Skew(skewAngleX, skewAngleY);"; resultType = "Void"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb22": { // Prepends a skew to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double skewAngleX = 45; double skewAngleY = 180; matrix1.SkewPrepend(skewAngleX, skewAngleY); // matrix1 is equal to (5, 10, 20, 30, 25, 30) //Displaying Results syntaxString = "matrix1.SkewPrepend(skewAngleX, skewAngleY);"; resultType = "Void"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb23": { // Appends a scale to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double scaleFactorX = 2; double scaleFactorY = 4; matrix1.Scale(scaleFactorX, scaleFactorY); // matrix1 is equal to (10, 40, 30, 80, 50, 120) //Displaying Results syntaxString = "matrix1.Scale(scaleFactorX, scaleFactorY);"; resultType = "Void"; operationString = "Appending a scale to a matrix"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb24": { // Appends a scale at a specific point to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.ScaleAt(2, 4, 5, 10); // matrix1 is equal to (10, 40, 30, 80, 45, 90) //Displaying Results syntaxString = " matrix1.ScaleAt(scaleFactorX, scaleFactorY, scaleCenterX, scaleCenterY);"; resultType = "Void"; operationString = "Appends a scale at a specific point to matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb25": { // Prepends a scale to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); double scaleFactorX = 2; double scaleFactorY = 4; matrix1.ScalePrepend(scaleFactorX, scaleFactorY); // matrix1 is equal to (10, 20, 60, 80, 25, 30) //Displaying Results syntaxString = "matrix1.ScalePrepend(scaleFactorX, scaleFactorY);"; resultType = "Void"; operationString = "Prepending a scale to matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb26": { // Prepends a scale at a specific point to a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); matrix1.ScaleAtPrepend(2, 4, 5, 10); // matrix1 is equal to (10, 20, 60, 80, -450, -620) //Displaying Results syntaxString = "matrix1.ScalePrependAt(scaleFactorX, scaleFactorY, centerPointX, centerPointY);"; resultType = "Void"; operationString = "Prepending a scale at a specific point to matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb29": { // Transform a point by a matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var point1 = new Point(15, 25); var pointResult = new Point(); pointResult = matrix1.Transform(point1); // pointResult is equal to (475, 680) //Displaying Results syntaxString = "pointResult = matrix1.Transform(point1)"; resultType = "Point"; operationString = "Transforming a point1 by matrix1"; ShowResults(pointResult.ToString(), syntaxString, resultType, operationString); break; } case "rb30": { // Transform a Vector by a Matrix var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var vector1 = new Vector(15, 25); new Vector(); matrix1.Transform(vector1); // vectorResult is equal to (450, 650) //Displaying Results syntaxString = "vectorResult = matrix1.Transform(vector1);"; resultType = "Vector"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(matrix1.ToString(), syntaxString, resultType, operationString); break; } case "rb31": { // Transform an array of Points by a Matrix // Creating a Matrix and an array of Pointers var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var pointArray = new Point[2]; // Setting the Point's X and Y values pointArray[0].X = 15; pointArray[0].Y = 25; pointArray[1].X = 30; pointArray[1].Y = 35; // Transforming the Points in pointArry by matrix1 matrix1.Transform(pointArray); // pointArray[0] is equal to (475, 680) // pointArray[1] is equal to (700, 1030) //Displaying Results syntaxString = "matrix1.Transform(pointArray);"; resultType = "void"; operationString = "Transforming an array of Points by matrix1"; ShowResults(pointArray[1].ToString(), syntaxString, resultType, operationString); break; } case "rb32": { // Transform an array of Vectors by a Matrix // Creating a Matrix and an array of Vectors var matrix1 = new System.Windows.Media.Matrix(5, 10, 15, 20, 25, 30); var vectorArray = new Vector[2]; // Setting the Vector's X and Y values vectorArray[0].X = 15; vectorArray[0].Y = 25; vectorArray[1].X = 30; vectorArray[1].Y = 35; // Transforming the Vectors in vectorArray by matrix1 matrix1.Transform(vectorArray); // VectorArray[0] is equal to (450, 650) // VectorArray[1] is equal to (675, 1000) //Displaying Results syntaxString = " matrix1.Transform(vectorArray);"; resultType = "Void"; operationString = "Multiplying matrix2 and matrix1"; ShowResults(vectorArray[0].ToString(), syntaxString, resultType, operationString); break; } } // end switch }