### Map Your Apps: Listing 2.

Drawing an arc using a Bezier curve.

```private void DrawCurve(Location start, Location finish)
{
MapPolyline curve = new MapPolyline();
curve.Stroke = new SolidColorBrush(Colors.Magenta);
curve.StrokeThickness = 3.0;
curve.StrokeDashArray = new DoubleCollection(new double[] { 5, 2 });
curve.Opacity = 1.0;

LocationCollection coll = new LocationCollection();

// Compute control point
Point p1 = myMap.LocationToViewportPoint(start);
Point p2 = myMap.LocationToViewportPoint(finish);

double boundingBoxHalfWidth = (p2.X - p1.X) / 2.0;
double boundingBoxHalfHeight = (p1.Y - p2.Y) / 2.0;

double centerX = (p1.X + p2.X) / 2.0;
double centerY = (p1.Y + p2.Y) / 2.0;

double xScale = 1.0;
double yScale = 1.0;

double controlX = centerX - (xScale * boundingBoxHalfWidth);
double controlY = centerY - (yScale * boundingBoxHalfHeight);

Point controlPt = new Point(controlX, controlY);
Location controlLoc = myMap.ViewportPointToLocation(controlPt);

// Compute intermediate Locations using the control point
int numSegments = 31;
doublet Delta = 1.0 / numSegments;
for (double t = 0.0; t <= 1.0; t += tDelta) // Danger!
{
// x coordinate (longitudes)
double a = (1.0 - t) * (1.0 - t) * start.Longitude;
double b = 2.0 * (1.0 - t) * t * controlLoc.Longitude;
double c = t * t * finish.Longitude;
double Blon = a + b + c;

// y coordinate (latitudes)
a = (1.0 - t) * (1.0 - t) * start.Latitude;
b = 2.0 * (1.0 - t) * t * controlLoc.Latitude;
c = t * t * finish.Latitude;
double Blat = a + b + c;

coll.Add(new Location(Blat, Blon));
}

curve.Locations = coll;
myMap.Children.Add(curve);
}```

Dr. James McCaffrey works for Microsoft Research in Redmond, WA. James has worked on several key Microsoft products such as Internet Explorer and Bing. James can be reached at jamccaff@microsoft.com.