首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在空气3.9下弯曲Degrafa的bezier样条

在空气3.9下弯曲Degrafa的bezier样条
EN

Stack Overflow用户
提问于 2014-01-31 15:56:15
回答 1查看 122关注 0票数 0

我在iOS上运行了一个移动Flex项目,该项目一直在使用Degrafa的库,以便使用它的BezierSpline类。其目的是能够直接在屏幕上绘制,然后使用这个库将用户手势给出的点集合转换成bezier曲线。

然而,当我的应用程序显示至少一条曲线的页面时,它就开始崩溃了。我没有任何错误,堆栈跟踪或任何东西,应用程序只是简单地被杀死,我被带回到iOS桌面。显然,错误发生在BezierSpline类的BezierSpline()函数中的某个地方。

另外,我注意到这只发生在应用程序的发行版上,或者是通过AppStore (看起来他们没有注意到),或者是通过部署在iPad上的发布包。在模拟器中,或者在设备上直接使用调试包,一切都很好。因为我已经有一段时间没有做任何发布包了,所以我不确定是哪种修改导致了这种情况。我唯一知道的是,我最近将Flash更新为4.7,AIR更新为3.9 (这是这个项目的其他特性所必需的)。

所以我基本上有三个问题:

  • 在这种情况下,应用程序只能在发布模式下崩溃,而不能在调试模式下崩溃?代码保持不变。
  • 有人在使用Degrafa及其BezierSpline类时遇到过这种问题吗?
  • 这可能是因为AIR升级到最新的3.9版本吗?

编辑:我刚刚在安卓设备下测试了完全相同的代码,曲线显示正确,所以只有在iOS设备上部署时才会出现这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-01 07:17:00

最后,我实现了这个由Lee 这里编写的非常有用的示例。这是我在一个电话中所需要的全部:

代码语言:javascript
复制
static public function getPoint(t:Number, points:Array):Point
    {
        var x:Number = 0;
        var y:Number = 0;
        var n:uint = points.length-1;
        var factn:Number = factoral(n);

        for (var i:uint=0;i<=n;i++)
        {
            //calc binominal coefficent
            var b:Number = factn/(factoral(i)*factoral(n-i));
            //calc powers
            var k:Number = Math.pow(1-t, n-i)*Math.pow(t, i);
            //add weighted points to totals
            x += b*k*points[i].x;
            y += b*k*points[i].y;
        }

        return new Point(x, y);
    }

    static private function factoral(value:uint):Number
    {
        if (value==0) return 1;

        var total:Number = value;
        while (--value>1)
            total *= value;

        return total;
    }

使用该类的示例代码也可在上面的链接中获得。

这个解决方案的唯一缺点是,我必须手动处理曲线的平滑度,方法是定义曲线的长度(通过改变"t“增量)。但是,我也可以根据控制点的数量或它们之间的距离动态地定义这种增量。

无论如何,这对我的问题来说已经足够了,希望这能帮到别人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21484326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档