示例#1
0
    //------------------------------------------------------------------------
    virtual void on_idle() 
    {
        bool redraw = false;
        if(m_rotate_polygon.status())
        {
            m_polygon_angle.value(m_polygon_angle.value() + 0.5);
            if(m_polygon_angle.value() >= 180.0) 
            {
                m_polygon_angle.value(m_polygon_angle.value() - 360.0);
            }
            redraw = true;
        }

        if(m_rotate_pattern.status())
        {
            m_pattern_angle.value(m_pattern_angle.value() - 0.5);
            if(m_pattern_angle.value() <= -180.0) 
            {
                m_pattern_angle.value(m_pattern_angle.value() + 360.0);
            }
            generate_pattern();
            redraw = true;
        }

        if(redraw) force_redraw();

    }
    // Run: Logic Sampling (a.k.a. Rejection Sampling)
    return_type operator()(
        std::vector<std::pair<vertex_type, int>> const& condition,
        int const generate_sample_num = 10000
        )
    {
        // パターン作る(generate_pattern)
        auto const generated_patterns = generate_pattern(generate_sample_num, condition);

        // 数え上げを行う
        rejection_sampling::return_type result;
        for(auto const node : graph_.vertex_list())
        {
            bn::matrix_type mat(1, node->selectable_num, 0.0);
            for(auto const& pattern : generated_patterns)
            {
                mat[0][pattern.at(node)] += 1.0;
            }

            // 全要素をパターン数で割る
            for(std::size_t i = 0; i < node->selectable_num; ++i)
            {
                mat[0][i] /= generated_patterns.size();
            }

            result[node] = std::move(mat);
        }

        return result;
    }
示例#3
0
    //------------------------------------------------------------------------
    virtual void on_ctrl_change() 
    {
        if(m_rotate_polygon.status() || m_rotate_pattern.status())
        {
            wait_mode(false);
        }
        else
        {
            wait_mode(true);
        }

        generate_pattern();
        force_redraw();
    }
示例#4
0
 //------------------------------------------------------------------------
 virtual void on_init()
 {
     m_polygon_cx = initial_width() / 2.0;
     m_polygon_cy = initial_height() / 2.0;
     generate_pattern();
 }