1

その金曜日、そして現地時間では時計は午後3時22分なので、私の脳は私に解決策を与えないので、私は尋ねます:

Actionscript 3.0で関数/アルゴリズムを書き込もうとしています。これにより、y個の使用可能な位置のパスに沿ったx個の位置の最も平均的な位置が得られます。

もちろん、Yは常にXよりも大きくなります。

背景は、たとえば、オブジェクトの50の可能な配置(パスに沿った)を含むマップを取得したことです。しかし、私はこのパスに沿って配置するオブジェクトを32個しか持っていませんが、それらの配置をできるだけ平均的/そのパスに沿って均等に配置したいと思います。たとえば、最後に大きなギャップにならないようにします。私の利用可能な位置は、現時点ではポイント値の配列に格納されています。

totalPos / wantedPosを実行してフロア化すると、最後に「醜い」ギャップになります。何かアイデアはありますか?

編集:

他の誰かがそれを望む場合に備えて、私は関数を追加したかった:

function place (x : uint, y : uint ) : Array
{
    var a : Array = new Array();
    var s : Number = y / x;
    var c : Number = 0;

    for (var i : Number = 0; i<x; i++) {
        c++;
        var pos : Number = Math.round(i * s);
        a.push(posArray[pos]);
    }
    return a;
}

可能な位置がすでにある配列posArrayがあると仮定します...

4

2 に答える 2

2

totalPos / wantedPosを実行すると、intに含まれていない可能性が高い数値が得られます。

たとえば、32/7 = 4.57 .. ..

あなたがそれを床に置いて4を選ぶならば、あなたは最後に大きなギャップを得るでしょう。ただし、4.57とそのフロアを累積すると、ギャップが狭くなります。

ここでも、たとえば32/7 = 4.57 ...最初に4を選択します。次の数値では、2 * 4.57 ... = 9.14 ...になるため、9を選択します。次に3 * 4.57 ... = 13.71 13などを選択します。

床ではなく丸みを帯びた方がいいでしょう。

幸運を :)

于 2009-05-08T13:55:15.653 に答える
0

私が正しく理解していれば、この種の基本的なアルゴリズムがあると思います (しかし、学校からは長すぎます!)。基本的に、これは再帰呼び出しであるため、終点を渡すと、中間点にオブジェクトが配置されます。次に、開始から中間を最初のエンドポイントとして、中間から終了を 2 番目のエンドポイントとして再帰します。したがって、ギャップを半分に分割し続けます。

これを入力すると、分散するオブジェクトの数が正方形の場合にのみ機能することがわかりました。ただし、他の誰かにもっと良いアイデアを与える場合に備えて、答えを残します。

于 2009-05-08T14:57:59.280 に答える