Flash 如何使用贝塞尔曲线绘制B样条曲线?

Flash 如何使用贝塞尔曲线绘制B样条曲线?,flash,actionscript-3,geometry,Flash,Actionscript 3,Geometry,我的Flash应用程序从外部应用程序接收B样条数据,但Flash绘图API仅允许使用Graphics#curveTo()方法绘制二次bezier曲线 是否可以将B样条曲线转换为一系列curveTo()调用?有多种类型的B样条曲线。不过,我想你会把B样条曲线分解成贝塞尔曲线。您将迭代通过曲线,对于每一条曲线,您将使用特定的细节遍历点,以便能够从直线绘制曲线 下面是一个简短的片段: private function curve(control1:Point,anchor1:Point,control

我的Flash应用程序从外部应用程序接收B样条数据,但Flash绘图API仅允许使用Graphics#curveTo()方法绘制二次bezier曲线


是否可以将B样条曲线转换为一系列curveTo()调用?

有多种类型的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;
        }
看一看,参考文献也有


HTH

+1。不错的资源。有趣的是,Flash Player 11中的绘图API(最终)支持立方贝塞尔曲线。