微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何减慢可视化算法

如何解决如何减慢可视化算法

我正在使用 C++ 在 SFML 中创建一个排序可视化应用程序。 我遇到了排序循环延迟的问题。 我制作了两个“按钮”,一个用于排序,另一个用于在向量中混洗数据,一切正常,我只是无法延迟工作,我试图将 sf::Time 与 sf::Clock 和sf::sleep,两者都失败了。

更新循环(这里添加了计时器,所以用户不能每秒点击 100 次,这真的不是一个很酷的应用程序,它只是为了简单的可视化)

void App::update() {


this->pollEvents();
this->updateMousePos();
this->shuffleButton->update(this->mousePosView);
if (shuffleButton->ispressed()) {
    this->time = this->clock.getelapsedtime();
    if (time.asSeconds() >= 0.5) {
        this->shuffle();
        clock.restart();
    }
}
this->bubbleSortButton->update(this->mousePosView);
if (bubbleSortButton->ispressed()) {
    this->time = this->clock.getelapsedtime();
    if (time.asSeconds() >= 0.5) {
        this->bubbleSort();
        clock.restart();
    }
  }
}

和排序算法(条形以正确的方式排序,可视化效果很好,显然它太快了)

void App::bubbleSort(){
int size = this->bars.size();
do {
    for (size_t i = 0; i < size - 1; i++) {
        if (this->bars[i].getGlobalBounds().height > this->bars[i + 1].getGlobalBounds().height) {
                int x = this->bars[i].getPosition().x;
                int xS = this->bars[i + 1].getPosition().x;
                this->bars[i].setPosition(xS,700);
                this->bars[i + 1].setPosition(x,700);
                std::swap(this->bars[i],this->bars[i + 1]);
        }
    }
    --size;
  } while (size > 1);
}

我以前从未在 SFML 中要求过解决方案,因此如果没有提供足够的代码,我深表歉意,我期待添加您需要的任何内容

解决方法

您忘记在按下按钮后将时间重置为零。

if (shuffleButton->isPressed()) {
    this->time = this->clock.getElapsedTime();

    if (time.asSeconds() >= 0.5) {
        this->shuffle();
        clock.restart();
        time = 0; 
    }
}

另外,正如另一位用户所指出的,理想情况下,您应该逐步解决,并让算法在每个循环中暂停,如下所示:

sf::Time time = sf::milliseconds(sleepForInMiliseconds);
sf::sleep(time);

其中 sleepForInMiliseconds 是您首选的步进延迟的整数。有趣的是,我正在从事完全相同的项目,因此我也可以帮助解决任何其他问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。