尝试实现boids算法的规则2时的严酷运动

时间:2016-04-27 09:34:44

标签: c++ game-physics boids

boids pseudocode规则2 的实现恰好产生了所需行为的对话(boids被推开,好像每个都有一个力场):

  

他们将稍微偏离彼此,并且在下一次如果他们仍然彼此靠近时,他们将被推得更远。因此,所产生的排斥采取平滑加速的形式。保持确保平稳运动的原则是个好主意。如果两个boid彼此非常接近,那可能是因为他们之间的飞行非常快,因为他们之前的动作也受到了这个规则的限制。突然将它们彼此拉开,使它们各自的运动反转,看起来不自然,仿佛它们从彼此的无形力场反弹回来。 [规则2下的文字]

据我所知,我的代码应该与伪代码完全相同

sf::Vector2f App::rule2(Boid* b)
{
    sf::Vector2f c;

    for(auto& boid : boidslist)
    {
        if(boid != b)
        {
            sf::Vector2f delta = boid->position - b->position;
            if(std::sqrt(delta.x * delta.x + delta.y * delta.y) < 100)
            {
                c = c - (boid->position - b->position);
            }
        }
    }
    return c;
}

这是我的更新功能,以证明我在这里做正确的事情:

void App::update(float dt)
{
    sf::Vector2f v1, v2, v3;

    for(auto& boid : boidslist)
    {
        v1 = rule1(boid);
        v2 = rule2(boid);
        boid->velocity = boid->velocity + v1 + v2 + v3;
        boid->position = boid->position + (boid->velocity * dt * 0.1f);
    }
}

PS:如果您愿意,可以检查整个代码(6个文件)here

0 个答案:

没有答案