Linux C ++, libnoise, getvalue () возвращаемое значение & gt; 1? (сообщается как ошибка)

Я только начал делать некоторые тесты с libnoise, из документации о getvalue (), этот метод должен возвращать значение от -1 до 1, но следующий код (не так далеко от этого урока) вернуть некоторые значения более 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;
}

тогда я пытаюсь скопировать + вставить руководство и изменить одну вещь, точку, где я хочу получить значение. Очевидно, я использую точку, в которой мой код возвращает значение больше 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 …
так что теперь я вижу, что никто не жалуется на это в Google & сотрудничество. так что не знаю, буду я с чем-то связываться или нет, но так как я использовал учебник и, поскольку дело не в этом, я думаю, что это не моя вина …

(Я все еще могу получить максимум и мин и нормализовать)

Я теперь также открыл билет ошибки для этого.

1

Решение

В функции GradientNoise3D (noisegen.cpp) есть ошибка. Конечное произведение точек умножается на 2,12, предположительно, чтобы значения находились в диапазоне [-1,1]. Однако правильное значение должно быть 0,57735 … (1 / sqrt (3))

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]