# Standard Mathematical Classes Review

When working with the component we often need to use math. To facilitate the work, the component includes a set of supporting classes. Let’s review some of them:

## Vector2D

Vector2D is one of the main classes that represents a point on the plane. It includes implicit methods intended for converting between Vector2D and Point and Size classes in Silverlight. The main operations (+, -, *, /) here are overloaded and there are many useful manipulations with vectors. The main ones include:
• Angle – vectorial angle
• Length – vector length
• DotProduct(Vector2D, Vector2D)
• CrossProduct(Vector2D, Vector2D)
• GetProjection(start, end) – gets the projection on a line
• FromPolar(length, angle) – builds a vector by polar coordinates
• GetNormalized() – gets a unit vector with the same vectorial angle
• Rotate(angle)
• RotateAt(pivot, angle)
• Parse(string, IFormatProvider)
• ToString()

## Rectangle2D

Rectangle2D – one of the main classes that represents a rectangle on the plane with the sides parallel to axis of coordinates. There are implicit methods intended for converting between the Rectangle2D and the Rect class in Silverlight. The &, |, *, / (transverse and integrating, multiplication and division) operations are redefined. Among other properties and methods one can point out the following:
• Location, Size – properties to set a rectangle
• Top, Bottom, Left, Right, CenterX, CenterY – get rectangle borders
• TopLeft, BottomLeft, TopRight, BottomRight, TopCenter, BottomCenter, LeftCenter, RightCenter, Center – main points of a rectangle
• Square – rectangle square
• Contains( Vector2D), Contains(Rectangle2D) – check if the objects belong to the rectangle area
• UnionAll(IEnumerable) – unites a set of rectangles
• BuildByPoints(Vector2D[]) – builds a rectangle with minimum square to cover all defined points.

## MathUtilities

MathUtilities – is a small class that represents a set of static mathematical methods. It allows calculating determinants, get the Max() and Min() functions from 3 and 4 X arguments, get the Clamp function which corrects a number putting it into the defined interval (Clamp(x, a, b) = Max(a, Min(b, x))).

## GeometryUtilities

GeometryUtilities – is a class that represents various static methods to work with geometric objects including conversion between degrees and radians, calculation of specific angles, operations with right lines (distance from a point to a right line, checking of lines for parallelism, point display by axis of symmetry, etc), methods to work with Bezier curves and ellipses.

## AffineTransform

AffineTransform – is a very useful class that represents affine transformation. Its main destinations are:
• To enable transformation for a shape (Move, Rotate, Scale, etc), it should implement the ApplyAffineTransform() method. Inside that method, a shape decides how to be transformed if the corresponding action is taken to it. Thanks to such approach it is possible to apply virtually any geometric operations with an object.
• The IDrawingContext has the PushAffineTransform method. It allows override further drawing of geometric primitives applying the corresponding transformation. It is often used for transformations of coordinate system.
• The CreateByPoints(p1, p2, p3, q1, q2, q3) and the CreateInverse methods are the most useful for local geometrical design. The first one builds the AffineTransform by 3 starting points and by 3 shapes into which they should be transformed. And the CreateInverse allows building reverse affine transformation.