我的Flash应用程序从外部应用程序接收B样条数据,但Flash绘图API仅允许使用Graphics#curveTo()方法的二次贝塞尔曲线。
是否可以将B样条转换为一系列curveTo()调用?
答案 0 :(得分: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