Взглянув на код, определяем какие методы нам проще всего изменить. Внешним признаком будет служить нам то, что в качестве аргументов и возвращаемого значения не применяется тип Object.
Единственный подходящий метод - curveApproxLen.
Добавим в методе создание новой точки, назовем ее middle:

Код AS3:
var middle:Point = new Point(mp.x, mp.y);
и далее заменим обращения к mp на middle.
Тут же видим: вызываемый метод pointOnCurve подходит для следующего шага, поскольку у него только возвращаемое значение имеет тип Object.
Заменяем объект и возвращаемый тип на Point:

Код AS3:
public static function pointOnCurve(p1x:Number, p1y:Number, cx:Number, cy:Number, p2x:Number, p2y:Number, t:Number):Point {
return new Point(p1x + t*(2*(1-t)*(cx-p1x) + t*(p2x - p1x)), p1y + t*(2*(1-t)*(cy-p1y) + t*(p2y - p1y)));
}
и... ничего не произошло. Никаких новых ошибок не появилось. Причина в том, что использующие его объекты получали значение типа Object, а наш новый возвращаемый тип - Point является наследником Object.
Для того, чтобы найти места в коде, где используется метод pointOnCurve применим хитрость: переименуем pointOnCurve в pointOnCurve1, сохраним классс и по списку ошибок увидим где это.
Результат - два вызова в этом же классе.
Проще всего исправить curveApproxLen. Мы просто ставим вызов метода pointOnCurve вместо new Point(...) и удаляем строку объявления объекта mp.
Также можем удалить "Math2." в вызове.
В итоге должны получить вот такой метод:

Код AS3:
public static function curveApproxLen(p1x:Number, p1y:Number, cx:Number, cy:Number, p2x:Number, p2y:Number):Number {
var middle:Point = pointOnCurve(p1x, p1y, cx, cy, p2x, p2y, 0.5);
var len1:Number = Math.sqrt((middle.x - p1x) * (middle.x - p1x) + (middle.y - p1y) * (middle.y - p1y));
var len2:Number = Math.sqrt((middle.x - p2x) * (middle.x - p2x) + (middle.y - p2y) * (middle.y - p2y));
return len1+len2;
}
Возвращаем методу pointOnCurve1 его первоначальное имя и делаем метод приватным: нигде коме этого класса он не используется.
Теперь можно разобраться со вторым методом, использующим pointOnCurve, это метод pointsOnCurve.
Сейчас он возвращает массив точек и... драма! Неприятная неожиданность: мы обнаруживаем, что это не могут быть объекты класса Point, поскольку в этом методе задается точке загадочная переменная r.
Ну, что-ж, это не критично. Cоздадим подкласс объекта Point.
Пока мы не знаем как его называть, поскольку сущность переменной r нам неизвестна. Мы только видим, что это угол, но угол чего именно на этом этапе мы выяснять не имеем права.
Второй вопрос - нам следует выяснить будут ли использованы эти точки вне класса Math2, чтобы определиться делать ли новый класс публичным или достаточно будет internal.
Для этого переименуем pointsOnCurve в pointsOnCurve1, сохраним документ и пройдемся по полученым ошибкам - местам вызова этого метода.
К моему удивлению - ни одной ошибки. Включаем занудство и используя поиск по файлам ищем вхождение строки "pointsOnCurve". Опять ничего кроме его самого.
Делаем вывод: мы нашли неиспользуемый метод. Тревога отменяется, закомментируем этот метод полностью и идем дальше.
Среди оставшихся четырех методов содержащих ошибки только bezierSplit в качестве параметров не требует Object, поэтому заглянем в него. Этот метод использует другой метод из этого же класса: midPt.
Переходим на него и видим, что возвращаемый тип можно заменить на Point, что и делаем. По прежней схеме с переименованием проверим, а не используется ли он где-то еще. Но в этот раз заодно зададим имя без сокращений: midpoint. А поскольку снаружи текущего класса этот метод нигде не используется, то сделаем его приватным. В итоге, он должен выглядеть так:

Код AS3:
private static function midpoint(p1x : Number, p1y: Number, p2x: Number, p2y: Number):Point {
return new Point((p1x + p2x)/2, (p1y + p2y)/2);
}
После того, как в методе bezierSplit мы применим новое имя, на всякий случай протестируем проект.
Ошибок нет, можно продолжить доработку метода bezierSplit.
Заменим вызовы метода midpoint через локальную переменную m на обычный вызов и удалим строку объявления этой переменной. Это требуется для того, чтобы убедиться в правильности передаваемых аргументов.
Далее, всем объектам, которым присваивается возвращаемое методом midpoint значение зададим тип Point.
Но стоит ли на этом останавливаться? Если мы оставим тип Object переменным p1 и p2, то в возвращаемом объекте будет каша. Да, мы не знаем и пока не хотим знать логику приложения, но здравый смысл подсказывает, что p1 и p2 должны иметь такой-же как и у остальных тип - Point. Прислушаемся к голосу разума, исправим, и получим вот такой метод:

Код AS3:
public static function bezierSplit(p1x:Number, p1y:Number, c1x:Number, c1y:Number, c2x:Number, c2y:Number, p2x:Number, p2y:Number):Object {
var p1:Point = new Point(p1x, p1y);
var p2:Point = new Point(p2x, p2y);
var p01:Point = midpoint (p1x, p1y, c1x, c1y);
var p12:Point = midpoint (c1x, c1y, c2x, c2y);
var p23:Point = midpoint (c2x, c2y, p2x, p2y);
var p02:Point = midpoint (p01.x, p01.y, p12.x, p12.y);
var p13:Point = midpoint (p12.x, p12.y, p23.x, p23.y);
var p03:Point = midpoint (p02.x, p02.y, p13.x, p13.y);
return { b0:{p1:p1, c1:p01, c2:p02, p2:p03}, b1:{p1:p03, c1:p13, c2:p23, p2:p2} };
}
И, раз уж мы произвели изменение от балды, тестируем проект.
Ошибок нет, идем дальше.
Я взялся за ratioTo, но переименовав его обнаружил, что он также нигде не используется. Проверил поиском - подтвердилось.
Закомментируем и идем дальше.