/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Copyright 2015 Danny Robson */ #ifdef __UTIL_NOISE_FRACTAL_BASE_IPP #error #endif #define __UTIL_NOISE_FRACTAL_BASE_IPP #include namespace util { namespace noise { namespace fractal { /////////////////////////////////////////////////////////////////////////// template base::base (seed_t _seed, unsigned _octaves, T _H, T _frequency, T _lacunarity, T _amplitude, T _gain): // literals m_octaves (_octaves), m_H (_H), m_frequency (_frequency), m_lacunarity (_lacunarity), m_amplitude (_amplitude), m_gain (_gain), // compound m_basis (_seed), // calculated m_invAH (std::pow (_amplitude, -_H)), m_invGH (std::pow (_gain, _H)) { CHECK_NEQ (m_octaves, 0); CHECK_NEQ (m_frequency, 0); CHECK_NEQ (m_amplitude, 0); } /////////////////////////////////////////////////////////////////////////// template unsigned base::octaves (unsigned _octaves) { return m_octaves = _octaves; } //------------------------------------------------------------------------- template constexpr unsigned base::octaves (void) const { return m_octaves; } //------------------------------------------------------------------------- template T base::H (T _h) { m_H = _h; m_invAH = std::pow (m_amplitude, -m_H); m_invGH = std::pow (m_gain, m_H); return m_H; } //------------------------------------------------------------------------- template constexpr T base::H (void) const { return m_H; } //------------------------------------------------------------------------- template T base::frequency (T _frequency) { return m_frequency = _frequency; } //------------------------------------------------------------------------- template constexpr T base::frequency (void) const { return m_frequency; } //------------------------------------------------------------------------- template T base::lacunarity (T _lacunarity) { return m_lacunarity = _lacunarity; } //------------------------------------------------------------------------- template constexpr T base::lacunarity (void) const { return m_lacunarity; } //------------------------------------------------------------------------- template constexpr T base::amplitude (void) const { return m_amplitude; } //------------------------------------------------------------------------- template T base::amplitude (T _amplitude) { m_amplitude = _amplitude; m_invAH = std::pow (m_amplitude, -m_H); return m_amplitude; } //------------------------------------------------------------------------- template constexpr T base::gain (void) const { return m_gain; } //------------------------------------------------------------------------- template T base::gain (T _gain) { m_gain = _gain; m_invGH = std::pow (_gain, m_H); return m_gain; } //------------------------------------------------------------------------- template typename base::seed_t base::seed (seed_t _seed) { return m_basis.seed (_seed); } //------------------------------------------------------------------------- template typename base::seed_t base::seed (void) const { return m_basis.seed (); } //------------------------------------------------------------------------- template const B& base::basis (void) const { return m_basis; } //------------------------------------------------------------------------- template B& base::basis (void) { return m_basis; } } } }