Как нарисовать B-сплайн, используя кривые Безье? - PullRequest
2 голосов
/ 28 августа 2011

Приложение My Flash получает данные B-сплайна из внешнего приложения, но API-интерфейс рисования Flash позволяет использовать только кривые Безье с использованием метода Graphics # curveTo ().

Можно ли преобразовать B-сплайн всерию вызовов CurveTo ()?

1 Ответ

1 голос
/ 28 августа 2011

Существует несколько типов B-сплайнов. Тем не менее, я думаю, что вы будете разбивать B-сплайн на Безье. Вы бы итерировали по кривой, и для каждой из них вы бы проходили точки с определенной детализацией, чтобы можно было нарисовать кривую из линий.

Вот быстрый фрагмент:

private function curve(control1:Point,anchor1:Point,control2:Point,anchor2:Point,t:Number):Point{
            var result:Point = new Point();
            var tSquared:Number = t*t;
            var tCubed:Number = t*t*t;
            result.x = tCubed*(anchor2.x+3*(control1.x-control2.x)-anchor1.x)
                                        +3*tSquared*(anchor1.x-2*control1.x+control2.x)
                                        +3*y*(control1.x-anchor1.x)+anchor1.x;
            result.y = tCubed*(anchor2.y+3*(control1.y-control2.y)-anchor1.y)
                                        +3*tSquared*(anchor1.y-2*control1.y+control2.y)
                                        +3*y*(control1.y-anchor1.y)+anchor1.y;
            return result;
        }

Взгляните на Paul Tondeur's Drawing в блоге с кубической кривой и ссылки там же.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...