![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
В качестве аргументов методу bezierSplit передается четыре пары координат x и y, описывающих одну сущность - кривую Безье третьего порядка.
Чтобы описать эту сущность, создаем класс, в котором описываем базовые свойства кривой: 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; } } } Для этого просто скопируем метод в класс, продублируем и закомментируем верхний - на память. Переименовываем метод в split, и делаем его публичным и не статическим. Удаляем аргументы. Редактор расцвел массой ошибок. Исправим их, заменив создание объектов Point из координат на соответствующие объекты Point текущего класса. Для этого подглядываем в аргументы закомментированного класса: там точки идут по парам представляя контрольные точки кривой Безье. Точки заменяем в том порядке, в котором они идут в аргументах закомментированного метода bezierSplit. В итоге избавляемся от всех ошибок и видим, что можем удалить объявление точек p1 и p2 и заменить их непосредственно на startPoint и endPoint. Для этого копируем startPoint в буфер обмена, удаляем строку инициализации p1, и там, где подсветилась ошибка вставляем из буфера обмена startPoint. Затем делаем то-же самое с p2. Заменяем вложенные массивы на создание объектов CubicBezierSVG. После чего можем удалить закомментированный метод. Затем мы можем заменить все new Point(...) на ранее полученные точки. Полученный результат должен быть таким: 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) ]; } 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) ]; }
__________________
http://realaxy.com Последний раз редактировалось iNils; 20.12.2010 в 13:24. |
![]() |
Часовой пояс GMT +4, время: 18:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|