3

不均一なスクリーン ポイントの特定の分布でベクトルを埋めようとしています。これらの点は、画面上の x と y の位置を表します。ある時点で、これらの点をすべて画面上に描画します。これらの点は、中央に不均一に分布している必要があります。基本的に、ポイントの頻度は、画面の片側がもう一方の側の反射である中心に近づくにつれて増加するはずです (「画面の中心をミラーリング」できます)。

結果のyが画面のその領域内のポイントの周波数に等しくなるような何らかの式( -pi/2とpi/2の間のy = cos(x)など)を使用することを考えていましたは画面の一番左側になりますが、その逆も同様です)、ベクトルに配置するポイントを作成するときに、このようなものを適用する方法に行き詰まりました。注: 生成する必要がある特定の数のポイントがあります。

上記の仮説がうまくいかない場合、これを達成するためのずるい方法は、各ポイント間のステップサイズを絶えず減らすことかもしれませんが、特定のポイント数が確実に到達するようにする方法はわかりません中心。

元。

// this is a member function inside a class PointList
// where we fill a member variable list(vector) with nonuniform data
void PointList::FillListNonUniform(const int numPoints, const int numPerPoint)
{
    double step = 2;
    double decelerator = 0.01;

    // Do half the screen then duplicate and reverse the sign
    // so both sides of the screen mirror eachother
    for (int i = 0; i < numPoints / 2; i++)
    {
        Eigen::Vector2d newData(step, 0);
        for (int j = 0; j < numPerPoint; j++)
        {
            list.push_back(newData);
        }
        decelerator += 0.01f;
        step -= 0.05f + decelerator;
    }

    // Do whatever I need to, to mirror the points ...
}

文字通りどんな助けでも大歓迎です。std::normal_distribution を簡単に調べましたが、ランダム性に依存しているように見えるので、これが私がやろうとしていることにとって良い選択肢になるかどうかはわかりません。

4

2 に答える 2