[Notes] Timer Comparision when turn influence computing on/off
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的更多相关文章
- GPU Command Buffer
For Developers > Design Documents > GPU Command Buffer This are mostly just notes on the ...
- 【原】使用SQLite打开本地*.db文件
1.下载安装文件:官网下载地址:http://www.sqlite.org/download.html32位安装包:http://www.sqlite.org/2016/sqlite-tools-wi ...
- 【Android】Sqlite3命令详解
Sqlite3常用命令 Sqlite3命令有"."符合作为前缀. 基本操作 1.创建或者打开数据库 sqlite3 xxx.db 如果xxx.db存在则打开如果没有则新建此时执行创 ...
- Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 ...
- React 轮播图实现
接到项目, 用react和material-ui实现轮播图. 搜索了一些方法参考, 不论语言/框架的使用,大体上分为两种思路 超宽列表实现法 在原生JS或者JQuery中,轮播图的实现一般是这样子的 ...
- css3 翻转
参考资料: WEB骇客 : http://www.webhek.com/css-flip/ Demo : Demo(谷歌浏览器观看,没做兼容) Demo截图: 代码: <!DOCTYPE h ...
- [数据库]Sqlite使用入门
官网的文档结构十分恶劣,大概翻了一下,提供入门指引. 0. sqlite的安装 根据自身情况,在官网下载32位/64位的dll文件以及sqlite-tools-win32-x86-3240000.zi ...
- 如何使用 sqlite3 访问 Android 手机的数据库
如何设置Android手机的sqlite3命令环境 http://www.cnblogs.com/linjiqin/archive/2011/11/28/2266619.html SQLite3 为a ...
- sqlite3.exe 使用
1 下载sqlite3.exe 2 命令行cmd,进入到sqlite3.exe目录 3 >sqlite3.exe database.db 来打开sqlite数据库. 4 基本语法: > ...
随机推荐
- web开发以及分布式开发C/S B/S系统结构
分布式开发,由客户端发送请求给服务端,经服务端进行请求处理后返回处理结果(远程方法调用),在客户端发送请求,获取httpclient/okclient对象,传入参数(URL以及其余参数等),发送请求 ...
- VideoToolbox硬件编解码H.264视频流错误码
如果你不能找到在VTD中的错误代码我决定只包括他们在这里. (同样,所有这些错误,并更可以在里面VideoToolbox在Project Navigator中找到.本身). 您将获得无论是在VTD中 ...
- Python-lambda函数,map函数,filter函数
lambda函数主要理解: lambda 参数:操作(参数). lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值.lambda语句构建的其实是一个函数对象 map函数: ma ...
- xml对象的序列化和反序列化
对象序列化: /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <par ...
- MFC对话框中使用CHtmlEditCtrl
MFC对话框中使用CHtmlEditCtrl 感谢原帖作者: http://blog.csdn.net/tingya/article/details/2028172 我在VS2008校正了一些代码. ...
- sass揭秘之@mixin,%,@function
因为文章内含有很多sass代码,如需自己动手查看编译结果,推荐使用sassmeister这款在线编译工具,方便你阅读学习. 在阅读本文章之前,请先确认你已经阅读了上篇文章sass揭秘之变量,不然会给你 ...
- webpack配置备份
package.json: { "name": "webpackTest", "version": "1.0.0", & ...
- html信息提示框
1.span <span title="提示信息" data-container="body" data-toggle="inf" d ...
- python学习心得第四章
python 学习心得第四章 1.lambda表达式 1:什么是lambda表达式 为了简化简单函数的代码,选择使用lambda表达式 上面两个函数的表达式虽然不一样,但是本质是一样的,并且lamb ...
- vim编辑器详解
vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率. vi是“visual interface”的 ...