2011-08-27 83 views
2

我的Flash应用程序接收来自外部应用程序的B样条数据,但Flash绘图API只允许使用Graphics#curveTo()方法的二次贝塞尔曲线。如何使用贝塞尔曲线绘制B样条?

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

回答

1

有多种类型的B样条。不过,我想你会把B样条分解成Bezier。你可以迭代曲线,对于每一个你可以通过一定的细节来遍历点,从而能够从线中绘制曲线。

这里有一个快速片段:

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 a cubic curve blog entry和引用那里。

HTH

+0

+1。很好的资源。感兴趣的是,在Flash Player 11的Drawing API中(最终)支持三次贝塞尔曲线。 – TheDarkIn1978