gpt4 book ai didi

c++ - 如何实现中点位移

转载 作者:太空狗 更新时间:2023-10-29 23:05:00 26 4
gpt4 key购买 nike

我正在尝试在我的游戏中实现程序生成。我想真正掌握和理解所有必要的算法,而不是简单地复制/粘贴现有​​代码。为了做到这一点,我尝试自己实现一维中点位移。我用过资料here编写和指导我的代码。下面是我完成的代码,它没有抛出错误,但结果似乎不正确。

srand(time(NULL));

const int lineLength = 65;
float range = 1.0;
float displacedLine[lineLength];

for (int i = 0; i < lineLength; i++)
{
displacedLine[i] = 0.0;
}

for (int p = 0; p < 100; p++)
{
int segments = 1;
for (int i = 0; i < (lineLength / pow(2, 2)); i++)
{
int segs = segments;
for (int j = 0; j < segs; j++)
{
int x = floor(lineLength / segs);
int start = (j * x) + 1;
int end = start + x;
if (i == 0)
{
end--;
}
float lo = -range;
float hi = +range;
float change = lo + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (hi - lo)));

int center = ((end - start) / 2) + start;
displacedLine[center - 1] += change;
segments++;
}
range /= 2;
}
}

我究竟在哪里犯了错误,我该如何改正?

我得到这样的结果:

My Results

但我期待这样的结果:

Expected Results

最佳答案

答案非常简单,顺便说一下,您设法调试了代码中所有潜在的差一错误,这给我留下了深刻的印象。下面一行是错误的:

displacedLine[center - 1] += change;

您正确地计算了中心索引和变化量,但您错过了应将变化应用到高度中点。即:

displacedLine[center - 1] = (displacedLine[start] + displacedLine[end]) / 2;
displacedLine[center - 1] += change;

我相信你明白了。

关于c++ - 如何实现中点位移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20896349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com