优化电场线绘制算法

时间:2016-07-07 07:08:43

标签: actionscript-3 optimization geometry starling-framework

我写了一个算法,它可以绘制电荷的电场线。当有多个电荷时,大多数线都是弯曲的。由于Starling没有drawLine(x1,y1,x2,y2)类功能。

我正在使用一个小的线条图像并在屏幕上重复绘制它以获得一条曲线。当绘制所有场线时,我可能最终在屏幕上绘制数千个小线段。由于它们具有相同的纹理,这不应该是一个问题,但我仍然不确定它是否是一个好主意。

我想到的另一个技术是我首先制作一个flash精灵并绘制内部的所有线然后在位图内绘制它并从该位图创建一个纹理。我认为每次ENTER_FRAME事件都不是一个好主意。

var s:flash.display.Sprite = new flash.display.Sprite();
//drawing inside sprite goes here
var bmd:BitmapData = new BitmapData(w, h, true, 0xffffff);
bmd.draw(s);
var texture:Texture = Texture.fromBitmapData(bmd);

var img:Image = new Image(texture);
addChild(img)

1 个答案:

答案 0 :(得分:1)

如果我理解,您正在绘制可用作短边折线的平滑曲线,并且您希望通过用曲线基元替换折线来优化以压缩表示。

首先,您可以通过折线简化算法(例如Douglas-Peucker)来最小化线段数。

您还可以通过递归分割折线并选择一个或两个中间点(一个用于圆弧 Bezier quadrics 中的分解,两个用于< em> Bezier cubics ),并检查是否符合偏差标准。

您将看到所需弧线数量急剧下降。

如果你的曲线有已知的角点,请确保在那里强制分割,因为平滑曲线不能轻易渲染它们。