Overall algorithm – bunny

关闭influence计算                                                             打开influence计算

Timer 插入位置:

FFAnalyzer::SeqPrint()

{

………

for (int l = 0; l < layer_size; l++)
{
    /*
    * Nl: number of dual verts in current layer
    * h : head for printing queue of the layer
    * t : tail for printing queue of the layer
    */
    layer_search.Reset();
    layer_search.Start();

int Nl = layers_[l].size();
    int h = print_queue_.size();
    int t;
    if (l == 0)
    {
        t = Nl;
    }
    else
    {
        t = h + Nl;
    }

if (h == t)
    {
        continue;
    }

/* max_z_ and min_z_ in current layer */
    min_z_ = 1e20;
    max_z_ = -min_z_;
    for (int i = 0; i < Nl; i++)
    {
        WF_edge *e = layers_[l][i];
        point u = e->pvert_->Position();
        point v = e->ppair_->pvert_->Position();
        min_z_ = min(min_z_, (double)min(u.z(), v.z()));
        max_z_ = max(max_z_, (double)max(u.z(), v.z()));
    }

if (!GenerateSeq(l, h, t))
    {
        fprintf(stderr,
            "All possible start edge at layer %d has been tried but no feasible sequence is obtained.\n",
            l + 1
            );
        bSuccess = false;
        break;
    }

layer_search.Stop();
   
    string str = std::to_string(l) + ":";
    const char *msg = str.c_str();
    char* cstr = new char[str.length() + 1];
    strcpy(cstr, msg);

layer_search.Print(cstr);
    printf("layer size: %d\n", Nl);
    printf("layer %d finished\n", l);
    printf("--------------\n");
}

……..

}

bool FFAnalyzer::GenerateSeq(int l, int h, int t)
{
    Timer ind_search;

ind_search.Reset();
    ind_search.Start();

/* last edge */
    assert(h != 0);                        // there must be pillars
    WF_edge *ei = print_queue_[h - 1];

if (debug_)
    {
        fprintf(stderr, "-----------------------------------\n");
        fprintf(stderr, "Searching edge #%d in layer %d, head %d, tail %d\n",
            ei->ID() / 2, l + 1, h, t);
    }

/* exit */
    if (h == t)
    {
        return true;
    }

/* next choice */
    multimap<double, WF_edge*> choice;
    multimap<double, WF_edge*>::iterator it;

/* next edge in current layer */
    int Nl = layers_[l].size();

for (int j = 0; j < Nl; j++)
    {
        WF_edge *ej = layers_[l][j];
        /* cost weight */
        double cost = GenerateCost(ei, ej);
        if (cost != -1)
        {
            choice.insert(pair<double, WF_edge*>(cost, ej));
        }
    }

ind_search.Stop();
    ind_search.Print("Single strut: ");

/* ranked by weight */
    for (it = choice.begin(); it != choice.end(); it++)
    {
        WF_edge *ej = it->second;
        print_queue_.push_back(ej);

/* update printed subgraph */
        UpdateStructure(ej);

/* update collision */
        vector<vector<lld>> tmp_angle(3);
        UpdateStateMap(ej, tmp_angle);

if (debug_)
        {
            fprintf(stderr, "Choose edge #%d in with cost %lf\n\n", ej->ID() / 2, it->first);
        }

if (GenerateSeq(l, h + 1, t))
        {
            return true;
        }

RecoverStateMap(ej, tmp_angle);
        RecoverStructure(ej);
        print_queue_.pop_back();
    }

return false;
}

[Notes] Timer Comparision when turn influence computing on/off的更多相关文章

  1. GPU Command Buffer

    For Developers‎ > ‎Design Documents‎ > ‎ GPU Command Buffer This are mostly just notes on the ...

  2. 【原】使用SQLite打开本地*.db文件

    1.下载安装文件:官网下载地址:http://www.sqlite.org/download.html32位安装包:http://www.sqlite.org/2016/sqlite-tools-wi ...

  3. 【Android】Sqlite3命令详解

    Sqlite3常用命令 Sqlite3命令有"."符合作为前缀. 基本操作 1.创建或者打开数据库 sqlite3 xxx.db 如果xxx.db存在则打开如果没有则新建此时执行创 ...

  4. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

  5. React 轮播图实现

    接到项目, 用react和material-ui实现轮播图. 搜索了一些方法参考, 不论语言/框架的使用,大体上分为两种思路 超宽列表实现法 在原生JS或者JQuery中,轮播图的实现一般是这样子的 ...

  6. css3 翻转

    参考资料: WEB骇客  :  http://www.webhek.com/css-flip/ Demo : Demo(谷歌浏览器观看,没做兼容) Demo截图: 代码: <!DOCTYPE h ...

  7. [数据库]Sqlite使用入门

    官网的文档结构十分恶劣,大概翻了一下,提供入门指引. 0. sqlite的安装 根据自身情况,在官网下载32位/64位的dll文件以及sqlite-tools-win32-x86-3240000.zi ...

  8. 如何使用 sqlite3 访问 Android 手机的数据库

    如何设置Android手机的sqlite3命令环境 http://www.cnblogs.com/linjiqin/archive/2011/11/28/2266619.html SQLite3 为a ...

  9. sqlite3.exe 使用

    1 下载sqlite3.exe 2 命令行cmd,进入到sqlite3.exe目录 3 >sqlite3.exe database.db   来打开sqlite数据库. 4 基本语法: > ...

随机推荐

  1. web开发以及分布式开发C/S B/S系统结构

    分布式开发,由客户端发送请求给服务端,经服务端进行请求处理后返回处理结果(远程方法调用),在客户端发送请求,获取httpclient/okclient对象,传入参数(URL以及其余参数等),发送请求  ...

  2. VideoToolbox硬件编解码H.264视频流错误码

    如果你不能找到在VTD中的错误代码我决定只包括他们在这里. (同样,所有这些错误,并更可以在里面VideoToolbox在Project Navigator中找到.本身).  您将获得无论是在VTD中 ...

  3. Python-lambda函数,map函数,filter函数

    lambda函数主要理解: lambda 参数:操作(参数). lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值.lambda语句构建的其实是一个函数对象 map函数: ma ...

  4. xml对象的序列化和反序列化

    对象序列化: /// <summary>        /// 将一个对象序列化为XML字符串        /// </summary>        /// <par ...

  5. MFC对话框中使用CHtmlEditCtrl

    MFC对话框中使用CHtmlEditCtrl 感谢原帖作者: http://blog.csdn.net/tingya/article/details/2028172 我在VS2008校正了一些代码. ...

  6. sass揭秘之@mixin,%,@function

    因为文章内含有很多sass代码,如需自己动手查看编译结果,推荐使用sassmeister这款在线编译工具,方便你阅读学习. 在阅读本文章之前,请先确认你已经阅读了上篇文章sass揭秘之变量,不然会给你 ...

  7. webpack配置备份

    package.json: { "name": "webpackTest", "version": "1.0.0", & ...

  8. html信息提示框

    1.span <span title="提示信息" data-container="body" data-toggle="inf" d ...

  9. python学习心得第四章

     python 学习心得第四章 1.lambda表达式 1:什么是lambda表达式 为了简化简单函数的代码,选择使用lambda表达式 上面两个函数的表达式虽然不一样,但是本质是一样的,并且lamb ...

  10. vim编辑器详解

    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率. vi是“visual interface”的 ...