I know this has already been answered, but I believe the following code may be helpful to readers looking for an implementation of the solution.
// This function is a bit tricky. Given a path ABC, it returns the
// coordinates of the outset point facing B on the left at a distance
// of 64.0.
// M
// - - - - - - X
// ^ / '
// | 64.0 / '
// X---->-----X ==> X--v-------X '
// A B \ A B \ .>'
// \ \<' 64.0
// \ \ .
// \ \ .
// C X C X
//
FTPoint FTContour::ComputeOutsetPoint(FTPoint A, FTPoint B, FTPoint C)
{
/* Build the rotation matrix from 'ba' vector */
FTPoint ba = (A - B).Normalise();
FTPoint bc = C - B;
/* Rotate bc to the left */
FTPoint tmp(bc.X() * -ba.X() + bc.Y() * -ba.Y(),
bc.X() * ba.Y() + bc.Y() * -ba.X());
/* Compute the vector bisecting 'abc' */
FTGL_DOUBLE norm = sqrt(tmp.X() * tmp.X() + tmp.Y() * tmp.Y());
FTGL_DOUBLE dist = 64.0 * sqrt((norm - tmp.X()) / (norm + tmp.X()));
tmp.X(tmp.Y() < 0.0 ? dist : -dist);
tmp.Y(64.0);
/* Rotate the new bc to the right */
return FTPoint(tmp.X() * -ba.X() + tmp.Y() * ba.Y(),
tmp.X() * -ba.Y() + tmp.Y() * -ba.X());
}