linux C ++,libnoise,getvalue()返回值> 1? (报告为bug)

时间:2013-06-11 06:50:09

标签: c++ linux perlin-noise

我刚刚开始使用libnoisefrom the documentation about getvalue()进行一些测试,此方法应返回-1到1之间的值,但下一个代码(not so far of this tutorial)会返回一些值1:

// g++ test.cc -lnoise#include<iostream>
#include<noise/noise.h>

int main(){
  noise::module::Perlin Ken; // Ken Perlin dat's the guy who developed the noise
                             // I do some noise some time too... more heavy \m/
  int i; // dat's the guys who dev... just kidding...
  int j;
  double dragon; 

  for(j=0;j<100;j++) for(i=0;i<100;i++){
    dragon = Ken.GetValue(double(i)/100.,double(j)/100.,0.5);
    if(dragon>1)std::cout<<"("<<double(i)/100.<<";"<<double(j)/100.<<")= "<<dragon<<std::endl;
  }
return 0;
}

然后我尝试复制+粘贴tutorial并更改一件事,我希望获得该值。显然,我使用了一个点,我的代码返回一个超过1的值,比如:(0.8,0.19,0.5)谁给了1.00101。所以,

#include <iostream>
#include <noise/noise.h>

using namespace noise;

int main (int argc, char** argv)
{
  module::Perlin myModule;
  double value = myModule.GetValue (0.8, 0.19, 0.50);
  std::cout << value << std::endl;
  return 0;
}

并且仍然返回1.00101仍然超过1 ... 所以现在,我看到没有人抱怨谷歌&amp;合。所以不知道我是否搞砸了一些东西,但是因为我使用了教程,因为这一点并不特别,我觉得这不是我的错...

(我仍然可以获得最大值和最小值并标准化)

我现在也为此开了一张错误票。

1 个答案:

答案 0 :(得分:2)

GradientNoise3D函数(noisegen.cpp)中存在错误。最终的点积乘以2.12,据说可以使值在[-1,1]范围内。但是,正确的值应为0.57735 ...(1 / sqrt(3))