В качестве аргументов методу bezierSplit передается четыре пары координат x и y, описывающих одну сущность - кривую Безье третьего порядка.
Чтобы описать эту сущность, создаем класс, в котором описываем базовые свойства кривой:

Код AS3:
package com.itechnica.svg {
import flash.geom.Point;
public class CubicBezierSVG {
private var startPoint : Point;
private var startControlPoint : Point;
private var endControlPoint : Point;
private var endPoint : Point;
public function CubicBezierSVG(start:Point, startControl:Point, endControl:Point, end:Point) {
initInstance(start, startControl, endControl, end);
}
private function initInstance(start : Point, startControl : Point, endControl : Point, end : Point) : void {
startPoint = start;
startControlPoint = startControl;
endControlPoint = endControl;
endPoint = end;
}
public function get start() : Point {
return startPoint;
}
public function set start(value : Point):void {
startPoint = value;
}
public function get startControl() : Point {
return startControlPoint;
}
public function set startControl(value : Point):void {
startControlPoint = value;
}
public function get endControl() : Point {
return endControlPoint;
}
public function set endControl(value : Point):void {
endControlPoint = value;
}
public function get end() : Point {
return endPoint;
}
public function set end(value : Point):void {
endPoint = value;
}
}
}
И без специальных приборов видно, что если аргументы и возвращаемые значения метода bezierSplit класса Math2 заменить на объект CubicBezierSVG, то он будет завистлив к данным этого класса. В этот раз мы не будем шаг за шагом рефакторить метод, а с шашкой наголо создадим аналогичный метод в классе CubicBezierSVG.
Для этого просто скопируем метод в класс, продублируем и закомментируем верхний - на память.
Переименовываем метод в split, и делаем его публичным и не статическим. Удаляем аргументы. Редактор расцвел массой ошибок. Исправим их, заменив создание объектов Point из координат на соответствующие объекты Point текущего класса.
Для этого подглядываем в аргументы закомментированного класса: там точки идут по парам представляя контрольные точки кривой Безье.
Точки заменяем в том порядке, в котором они идут в аргументах закомментированного метода bezierSplit.
В итоге избавляемся от всех ошибок и видим, что можем удалить объявление точек p1 и p2 и заменить их непосредственно на startPoint и endPoint.
Для этого копируем startPoint в буфер обмена, удаляем строку инициализации p1, и там, где подсветилась ошибка вставляем из буфера обмена startPoint. Затем делаем то-же самое с p2.
Заменяем вложенные массивы на создание объектов CubicBezierSVG. После чего можем удалить закомментированный метод.
Затем мы можем заменить все new Point(...) на ранее полученные точки.
Полученный результат должен быть таким:

Код AS3:
public function split():Array {
var p01:Point = new LineSVG(startPoint, startControlPoint).midpoint();
var p12:Point = new LineSVG(startControlPoint, endControlPoint).midpoint();
var p23:Point = new LineSVG(endControlPoint, endPoint).midpoint();
var p02:Point = new LineSVG(p01, p12).midpoint();
var p13:Point = new LineSVG(p12, p23).midpoint();
var p03:Point = new LineSVG(p02, p13).midpoint();
return [
new CubicBezierSVG(startPoint, p01, p02, p03),
new CubicBezierSVG(p03, p13, p23, endPoint)
];
}
Но на этом не остановимся и зададим читабельные имена и приведем объявления объектов в соответствие с их поведением:

Код AS3:
public function split():Array {
const startMidpoint:Point = new LineSVG(startPoint, startControlPoint).midpoint();
const middleMidpoint:Point = new LineSVG(startControlPoint, endControlPoint).midpoint();
const endMidpoint:Point = new LineSVG(endControlPoint, endPoint).midpoint();
const startMiddleMidpoint:Point = new LineSVG(startMidpoint, middleMidpoint).midpoint();
const middleEndMidpoint:Point = new LineSVG(middleMidpoint, endMidpoint).midpoint();
const centerMidpoint:Point = new LineSVG(startMiddleMidpoint, middleEndMidpoint).midpoint();
return [
new CubicBezierSVG(startPoint, startMidpoint, startMiddleMidpoint, centerMidpoint),
new CubicBezierSVG(centerMidpoint, middleEndMidpoint, endMidpoint, endPoint)
];
}
Перейдем к замене использования метода Math2.bezierSplit на новый метод split класса CubicBezierSVG.