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. js中array的join和concat的区别

    首先:concat方法定义:concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本.举例说明:1 /*concat()结果返回的是一个数组*/ 2 3 ...

  2. 64位系统如何导入excel

    1.运行C:\Windows\SysWOW64\odbcad32.exe,打开后如下图所示: 2.点击添加,选择如下图所示Microsoft Excel Driver(*.xls) 3.点击完成,在弹 ...

  3. 5、SQL Server数据库、T-SQL

    SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步- ...

  4. MATLAB处理信号得到频谱、相谱、功率谱

    (此帖引至网络资源,仅供参考学习)第一:频谱 一.调用方法 X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值 ...

  5. 关于angularJS绑定数据时自动转义html标签

    关于angularJS绑定数据时自动转义html标签 angularJS在进行数据绑定时默认是会以文本的形式输出,也就是对你数据中的html标签不进行转义照单全收,这样提高了安全性,防止了html标签 ...

  6. tomcat日志文件定时清理备份

    以下脚本主要备份的日志文件为tomcat的catalina.out.localhost_access_log.yyyy-mm-dd.log日志和项目的日志文件,其中项目的日志文件格式为"pr ...

  7. nginx的优化

    Nginx 优化 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/P ...

  8. 微信支付开发-当前页面的URL未注册

    微信支付的开发设置要求设置微信支付可以发起的目录. 当出现“当前页面的URL未注册”的错误时,检查你的授权目录(一般是未填写或填写有误),注意要二级或者三级目录完全匹配.

  9. golang中string以及slice之间的一些问题

    好记性不如烂笔头o_O slice切片不会开辟新的空间 a := []int{0,1,2,3} b := make([]int, 8) b = a[:] b[2] = 9 fmt.Println(a) ...

  10. web开发漫谈

    本文同步至微信公众号http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401950045&idx=1&sn=cec056 ...