我正在尝试用非均匀屏幕点的特定分布填充向量。这些点代表屏幕上的某个 x 和 y 位置。在某个时候,我将在屏幕上绘制所有这些点,它们应该不均匀地分布在中心。基本上,当您靠近中心时,点的频率应该增加,屏幕的一侧是另一侧的反射(可以“在屏幕中心进行镜像”)
我正在考虑使用某种公式(例如 -pi/2 和 pi/2 之间的y=cos(x)),其中得到的 y 将等于屏幕该区域中点的频率(其中 -pi/2将是屏幕的最左侧,反之亦然),但我被困在如何在创建点放在矢量上时应用这样的东西。注意:必须生成特定数量的点
如果上面的假设不能工作,也许实现这一点的一种欺骗方法是不断减少每个点之间的一些步长,但我不知道我如何能够确保具体的点数达到中央。
前任。
// 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,但在我看来它依赖于随机性,所以我不确定这是否是我想做的一个好的选择。