我正在尝试构建简单的粒子系统,我是初学者 C++ 编码器。我可能有随机数生成器的问题,但我不确定我是否没有在我的代码中犯一些逻辑错误。我尝试制作简单的爆炸效果。所有粒子都从同一点开始,然后从该点向各个方向出去。所有粒子的位置都与像素对齐(我的意思是整数)和速度,即浮点数。下面我提供一些相关代码:
std::mt19937 generator(std::time(0));//creating random number gen with seed
std::uniform_real_distribution<float> distributionx(0,6);
std::uniform_real_distribution<float> distributionkat(0,360);//distr for random number degrese
float radiany=(distributionkat(generator)*3.1415)/180;//calculating radians to provide to sin/cos function
sf::Vector2f unitvector;
tworzona.pozycja.x=this->pozycjaemitera.x;//assigning starting position, same for all particles
tworzona.pozycja.y=this->pozycjaemitera.y;
//below i calculate starting speed, as far as i know trigonometry this sure ensure that particles will fly in all directions
tworzona.speed.x=distributionx(generator)*cos(radiany);
tworzona.speed.y=distributionx(generator)*sin(radiany);
//below code should calculate unit vector in chosen direction and then i multiply it by random speed
unitvector.x=tworzona.speed.x/sqrt(pow(tworzona.speed.x,2)+pow(tworzona.speed.y,2));
unitvector.y=tworzona.speed.y/sqrt(pow(tworzona.speed.x,2)+pow(tworzona.speed.y,2));
unitvector.x=unitvector.x*distributionx(generator);
unitvector.y=unitvector.y*distributionx(generator);
tworzona.speed.x=unitvector.x;
tworzona.speed.y=unitvector.y;
问题是存在与 x 和 y 轴对齐的可见线,例如在发射器位置与中心交叉。大部分粒子都在这些线附近,当粒子数量增加时问题变得更加明显,大约 9000 条粒子线几乎是实心的,爆炸的形状也不是真正的圆形,更像是站在角落的正方形。也许我选择了错误的随机数生成,也许还有其他问题,我非常感谢任何帮助。