0

私は電場の電場線を描くアルゴリズムを書いています。 2つ以上の電荷がある場合、線のほとんどが湾曲している。 StarlingにはdrawLine(x1,y1,x2,y2)種類の機能がありません。電場線の最適化描画アルゴリズム

私は、線の小さなイメージを使用して、曲線を得るために画面上で繰り返し描画しています。すべてのフィールドラインが描画されると、画面上に何千もの小さなラインセグメントが描画されることがあります。彼らは同じテクスチャを持っているので、これは問題ではないはずですが、それでも良いアイデアかどうかは不明です。

私が考えているもう1つのテクニックは、まずフラッシュスプライトを作成し、その中にすべての線を描画し、それをビットマップ内に描画し、そのビットマップからテクスチャを作成することです。それでも、私はそれはすべて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

私はあなたがスプライト描画を使用する必要があると思います。ビットマップデータを各フレームに再割り当てしないでください。可能であれば、テクスチャを再利用してください。スプライトで良いことの1つは、 'graphics.curveTo()'と 'graphics.cubicCurveTo()'を使って直線でなくスプラインを描くことができるということです。実際の描画はプロセッサ上で簡単に行えます。 – Vesper

+0

@Vesperユーザーは料金を移転し、リアルタイムでフィールドラインの変更を見たいので、同じテクスチャを使用できません。 –

+0

ポイントは、より多くのオブジェクトが作成されるほど、アプリケーションが遅くなることです。あなたがテクスチャを補充することができない場合は、そうしてください。 – Vesper

答えて

1

、あなたは、短辺のポリラインとして利用できる滑らかな曲線をプロットしていて、表現を圧縮するように湾曲プリミティブでポリラインを置き換えることによって、最適化したいです。

最初に、Douglas-Peuckerなどのポリライン簡略化アルゴリズムを使用して、線分の数を最小限に抑えることができます。

あなたはまた、再帰的にポリラインを分割し、1つのまたは2つの中間地点(円弧またはベジェ二次曲面、2 のためのベジェcubicsでdecompsitionに1つ)を選択することによって、この概念を一般化し、かどうかをチェックすることができます偏差基準が満たされているか否かを判定する。

必要なアークの数が急激に減少するのがわかります。

カーブに既知の角点がある場合は、円滑なカーブでは簡単にレンダリングできないため、カーブに強制的に分割してください。

関連する問題