explicit PartiallySortedData(std::size_t n, std::size_t shuffles, T min = 0) : base_type("sorted data " + range_str(min, min+n), n) , m_rd() , m_gen(m_rd()) , m_min(min) , m_max(min+n) , m_shuffles(shuffles) { resize_and_shuffle(); D() << "created PartiallySortedData" << base_type::m_data; }
explicit RandomData(std::size_t n, T min = std::numeric_limits<T>::lowest(), T max = std::numeric_limits<T>::max()) : base_type("uniform random " + range_str(min, max), n) , m_seed(utils::not_so_random_device()()) , m_gen(m_seed) , m_min(min) , m_max(max) { base_type::m_data.resize(base_type::get_n()); generate(m_min, m_max); #ifdef DEBUG_RANDOM auto h = utils::simple_histogram<T>(base_type::m_data, 50, min, max); utils::draw_histogram(h); #endif }
//------------------------------------------------------------------------------ //! RCP<DFNodeAttrList> DFNoiseImageEditor::attributes() const { RCP<DFNodeAttrList> atts = new DFNodeAttrList(); RCP<Table> enums = new Table(); enums->pushBack( "Cell" ); enums->pushBack( "Perlin" ); enums->pushBack( "Perlin filtered" ); enums->pushBack( "Voronoi" ); enums->pushBack( "Fractional Brownian motion"); atts->add( DFNodeAttr( "ENUM", ID_TYPE, "Type" ).enums( enums.ptr() ) ); RCP<DFNodeAttrList> list; RCP<Table> xtra; ConstString range_str( "range" ); // Perlin Filtered. list = new DFNodeAttrList(); xtra = new Table(); xtra->set( range_str, Vec2f(0.2f, 0.75f) ); list->add( DFNodeAttr( "FLOAT", ID_PERFIL_WIDTH, "Width" ).extras( xtra.ptr() ) ); atts->add( DFNodeAttr( ID_PERFIL, "", list.ptr() ) ); // Voronoi. list = new DFNodeAttrList(); xtra = new Table(); xtra->set( range_str, Vec2f(-2.0f, 2.0f) ); list->add( DFNodeAttr( "FLOAT", ID_JITTER, "Jitter" ).extras( xtra.ptr() ) ); atts->add( DFNodeAttr( ID_VORONOI, "", list.ptr() ) ); // FBM. list = new DFNodeAttrList(); xtra = new Table(); xtra->set( range_str, Vec2f(0.0f, 1.0f) ); list->add( DFNodeAttr( "FLOAT", ID_FBM_WIDTH, "Width" ).extras( xtra.ptr() ) ); xtra = new Table(); xtra->set( range_str, Vec2f(1.0f, 8.0) ); list->add( DFNodeAttr( "INT" , ID_OCTAVE, "Octaves" ).extras( xtra.ptr() ) ); list->add( DFNodeAttr( "FLOAT", ID_LACUNARITY, "Lacunarity" ) ); list->add( DFNodeAttr( "FLOAT", ID_GAIN, "Gain" ) ); atts->add( DFNodeAttr( ID_FBM, "", list.ptr() ) ); return atts; }