xml version="1.0" encoding="utf-8" standalone="yes"12bet++博客-所有随笔http://www.fometaux.com/default.html?id=-18专注于12bet技术zh-cnMon, 24 Jun 2019 22:07:23 GMTMon, 24 Jun 2019 22:07:23 GMT6012bet++博客-所有随笔http://www.fometaux.com/eryar/archive/2019/06/24/rvmtranslator_linux.htmleryareryarMon, 24 Jun 2019 11:27:00 GMThttp://www.fometaux.com/eryar/archive/2019/06/24/rvmtranslator_linux.htmlhttp://www.fometaux.com/eryar/comments/216449.htmlhttp://www.fometaux.com/eryar/archive/2019/06/24/rvmtranslator_linux.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216449.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216449.htmlRvmTranslator for Linux
eryar@163.com

RvmTranslator can translate the RVM file exported by AVEVA Plant(PDMS)/AVEVA Marine to STEP, IGES, STL, DXF, 3D PDF, OBJ, 3DXML, IFC,.etc. So it can be used for exchanging model data between other CAD software, such as Autodesk AutoCAD, Plant3d, 3ds Max, CATIA, Solidworks, Pro/E, Unity3d, .etc.
RvmTranslator可以将AVEVA PDMS/Plant/Marine中导出的RVM文件进行可视化,以及将RVM转换成常见的三维文件格式。如STEP,IGES,STL,DXF, OBJ, 3DPDF, 3DXML, IFC等,便于与其他CAD系统进行数据交换,如Autodesk AutoCAD, Plant3d, 3ds Max, CATIA, Solidworks, Pro/E, Unity3d, Bentley等。

由于使用的是跨平台的Qt等开源库,现在将RvmTranslator移植到Linux系统中,如下图所示为RvmTranslator在Ubuntu系统中的界面:

支持RVM文件中的中文字符:


RVM是AVEVA的一个统一模型格式,包括其收购的船舶系统Tribon也可以导出RVM格式的文件。

上图为船体结构,


上图为船舶管路,因为船体空间相对狭小,船舶管路布置的密集些。

在Ubuntu系统上试了下开发环境,觉得还比较顺手。开发的IDE可以用Qt Creator,基本满足编码,调试的要求。使用Qt Creator还有一个好处就是方便代码的跨平台移植,在Ubuntu上的代码以Qt的*.pro形式保存,可以直接在Visual Studio中用Qt VS Addin打开编译。


为了方便大家在移动端也能看到我的博文和讨论交流,现已注册微信公众号,欢迎大家扫描下方二维码关注。
Shing Liu(eryar@163.com)


eryar 2019-06-24 19:27 发表评论
]]>
12bet++博客-所有随笔http://www.fometaux.com/prayer/archive/2019/06/24/216446.htmlPrayerPrayerMon, 24 Jun 2019 02:09:00 GMThttp://www.fometaux.com/prayer/archive/2019/06/24/216446.htmlhttp://www.fometaux.com/prayer/comments/216446.htmlhttp://www.fometaux.com/prayer/archive/2019/06/24/216446.html#Feedback0http://www.fometaux.com/prayer/comments/commentRss/216446.htmlhttp://www.fometaux.com/prayer/services/trackbacks/216446.htmlhttps://blog.csdn.net/liujinwei2005/article/details/8547190

DB2 缓冲池调优Bufferpools


背景知识
缓冲池是内存中的一块存储区域,用于临时读入和更改数据库页(包含表行或索引项)。缓冲池的用途是为了提高数据库系统的性能。从内存访问数据要比从磁盘访问数据快得多。因此,数据库管理器需要从磁盘读取或写入磁盘的次数越少,性能就越好。对一个或多个缓冲池进行配置之所以是调优的最重要方面,是因为连接至数据库的应用程序的大多数数据(不包括大对象和长字段数据)操作都在缓冲池中进行。
缺省情况下,应用程序使用缓冲池 IBMDEFAULTBP,它是在创建数据库时创建的。当 SYSCAT.BUFFERPOOLS 目录表中该缓冲池的 NPAGES 值为 -1 时,DB2 数据库配置参数 BUFFPAGE 控制着缓冲池的大小。否则会忽略 BUFFPAGE 参数,并且用 NPAGES 参数所指定的页数创建缓冲池。
建议
对于仅使用一个缓冲池的应用程序,将 NPAGES 更改成 -1,这样 BUFFPAGE 就可以控制该缓冲池的大小。这使得更新和报告缓冲池大小以及其它 DB2 数据库配置参数变得更加方便。
确保可以使用数据库配置中的 BUFFPAGE 参数来控制缓冲池大小之后,将该参数设置成合适的值。根据数据库的大小和应用程序的性质将该参数设置成一个合理的大值,这种做法很安全。通常,该参数的缺省值非常小,可能满足不了要求。请考虑下列情况:
一开始,如果您的机器上有足够大的内存,请将 BUFFPAGE 设置成 40000 个页(160 MB),或者等于机器总内存的 10%。 
对于大型 OLTP 数据库,在保持系统稳定的同时为缓冲池留出尽可能多的内存。一开始,先尝试使用 1.6 GB 的内存,然后尝试用更多内存。 
如何更改该参数
运行下面这个脚本,以便: 
验证目录值 
启用数据库配置参数 BUFFPAGE 
更新所有数据库的 BUFFPAGE 值。 
db2 -v connect to DB_NAME
db2 -v select * from syscat.bufferpools
db2 -v alter bufferpool IBMDEFAULTBP size -1
db2 -v connect reset
db2 -v update db cfg for dbname using BUFFPAGE bigger_value
db2 -v terminate
研究步骤
要确定数据库的缓冲池大小是否由 BUFFPAGE 参数所决定,请运行:
db2 -v connect to DB_NAME
db2 -v SELECT * from SYSCAT.BUFFERPOOLS
db2 -v connect reset
db2 -v terminate
检查结果。如果每个缓冲池都有一个为“-1”的 NPAGES 值,那么缓冲池大小是由数据库配置中的 BUFFPAGE 参数控制的。
要确定缓冲池大小是否足够大,请在运行应用程序时收集数据库和/或缓冲池的快照。类似于下面的脚本为您提供这些所需的信息:
db2 -v update monitor switches using bufferpool on
db2 -v get monitor switches
db2 -v reset monitor all
-- run your application --
db2 -v get snapshot for all databases > snap.out
db2 -v get snapshot for dbm >> snap.out
db2 -v get snapshot for all bufferpools >> snap.out
db2 -v reset monitor all
db2 -v terminate
请确保您在断开数据库连接之前发出“db2 -v get snapshot”。当最后一个应用程序与数据库断开连接时,该数据库停止运行,同时所有快照统计信息将会丢失。要确保一直存在使数据库处于正常运行状态的连接,请使用下列方法之一:
在收集快照的窗口中保持一个单独的连接。 
使用 DB2 ACTIVATE DATABASE 命令。
在数据库快照或缓冲池快照的快照输出中,查找下列“logical reads”和“physical reads”,这样就可以计算出缓冲池命中率,它可以帮助您调优缓冲池:
-- Related lines from a sample of bufferpool snapshots --
Buffer pool data logical reads = 702033
Buffer pool data physical reads = 0
Buffer pool data writes = 414
Buffer pool index logical reads = 168255
Buffer pool index physical reads = 0
缓冲池命中率表明数据库管理器不需要从磁盘装入页(即该页已经在缓冲池中)就能处理页请求的时间百分比。缓冲池的命中率越高,使用磁盘 I/O 的频率就越低。按如下计算缓冲池命中率:
(1 - ((buffer pool data physical reads + buffer pool index physical reads) /
(buffer pool data logical reads + pool index logical reads))
) * 100%
这个计算考虑了缓冲池高速缓存的所有页(索引和数据)。理想情况下,该比率应当超过 95%,并尽可能接近 100%。要提高缓冲池命中率,请尝试下面这些方法:
增加缓冲池大小。 
考虑分配多个缓冲池,如果可能的话,为每个经常被访问的大表所属的表空间分配一个缓冲池,为一组小表分配一个缓冲池,然后尝试一下使用不同大小的缓冲池以查看哪种组合会提供最佳性能。 
如果已分配的内存不能帮助提高性能,那么请避免给缓冲池分配过多的内存。应当根据取自测试环境的快照信息来决定缓冲池的大小。

缓冲池命中率

这个比率说明了为页面请求提供服务时,数据库管理器不需从磁盘装入页(即该页已经在缓冲池中)就能处理页请求的时间百分比。

计算:

BPHR = (1 - ((缓冲池数据物理读 + 缓冲池索引物理读) /

(缓冲池数据逻辑读 + 缓冲池索引逻辑读) ) ) * 100%

索引命中率

这个比率表明了可以在缓冲池中找到的页面能够满足的对索引页的所有读请求所占的百分比。

计算:

IHR = (1 - (缓冲池索引物理读 / 缓冲池索引逻辑读) ) ) * 100%

数据命中率

这个比率说明了可以在缓冲池中找到的页面能够满足的对数据页的所有读请求所占的百分比。

计算:

DHR = (1 - (缓冲池数据物理读 / 缓冲池数据逻辑读) ) ) * 100%

结论

缓冲池命中率大于 80% 被认为是理想的。对于 OLTP 系统来说,该值的理想情况是尽可能接近于 100% (索引命中率更是如此)。

要提高缓冲池的命中率,可以增加缓冲池的大小,也可以考虑分配多个缓冲池,可以为每个经常访问的具有自己的表空间的大型表使用一个缓冲池,也可以为一组小型表使用一个缓冲池。



Prayer 2019-06-24 10:09 发表评论
]]>
12bet++博客-所有随笔http://www.fometaux.com/jack-wang/archive/2019/06/21/216440.html小王小王Fri, 21 Jun 2019 08:33:00 GMThttp://www.fometaux.com/jack-wang/archive/2019/06/21/216440.htmlhttp://www.fometaux.com/jack-wang/comments/216440.htmlhttp://www.fometaux.com/jack-wang/archive/2019/06/21/216440.html#Feedback0http://www.fometaux.com/jack-wang/comments/commentRss/216440.htmlhttp://www.fometaux.com/jack-wang/services/trackbacks/216440.html

小王 2019-06-21 16:33 发表评论
]]>
12bet++博客-所有随笔http://www.fometaux.com/guijie/archive/2019/06/20/216430.html杰哥杰哥Wed, 19 Jun 2019 17:44:00 GMThttp://www.fometaux.com/guijie/archive/2019/06/20/216430.htmlhttp://www.fometaux.com/guijie/comments/216430.htmlhttp://www.fometaux.com/guijie/archive/2019/06/20/216430.html#Feedback0http://www.fometaux.com/guijie/comments/commentRss/216430.htmlhttp://www.fometaux.com/guijie/services/trackbacks/216430.htmlhttps://www.mathworks.com/matlabcentral/fileexchange/20689-jensen-shannon-divergence

杰哥 2019-06-20 01:44 发表评论
]]>
12bet++博客-所有随笔http://www.fometaux.com/guijie/archive/2019/06/19/216424.html杰哥杰哥Tue, 18 Jun 2019 17:01:00 GMThttp://www.fometaux.com/guijie/archive/2019/06/19/216424.htmlhttp://www.fometaux.com/guijie/comments/216424.htmlhttp://www.fometaux.com/guijie/archive/2019/06/19/216424.html#Feedback0http://www.fometaux.com/guijie/comments/commentRss/216424.htmlhttp://www.fometaux.com/guijie/services/trackbacks/216424.html图像的频率:灰度值变化剧烈程度的指标,是灰度在平面空间上的梯度。

(1)什么是低频?
      低频就是颜色缓慢地变化,也就是灰度缓慢地变化,就代表着那是连续渐变的一块区域,这部分就是低频. 对于一幅图像来说,除去高频的就是低频了,也就是边缘以内的内容为低频,而边缘内的内容就是图像的大部分信息,即图像的大致概貌和轮廓,是图像的近似信息。

(2)什么是高频?

     反过来, 高频就是频率变化快.图像中什么时候灰度变化快?就是相邻区域之间灰度相差很大,这就是变化得快.图像中,一个影像与背景的边缘部位,通常会有明显的差别,也就是说变化那条边线那里,灰度变化很快,也即是变化频率高的部位.因此,图像边缘的灰度值变化快,就对应着频率高,即高频显示图像边缘。图像的细节处也是属于灰度值急剧变化的区域,正是因为灰度值的急剧变化,才会出现细节。
      另外噪声(即噪点)也是这样,在一个像素所在的位置,之所以是噪点,就是因为它与正常的点颜色不一样了,也就是说该像素点灰度值明显不一样了,,也就是灰度有快速地变化了,所以是高频部分,因此有噪声在高频这么一说。

      其实归根到底,是因为我们人眼识别物体就是这样的.假如你穿一个红衣服在红色背景布前拍照,你能很好地识别么?不能,因为衣服与背景融为一体了,没有变化,所以看不出来,除非有灯光从某解度照在人物身上,这样边缘处会出现高亮和阴影,这样我们就能看到一些轮廓线,这些线就是颜色(即灰度)很不一样的地方.
--------------------- 
作者:charlene_bo 
来源:CSDN 
原文:https://blog.csdn.net/charlene_bo/article/details/70877999 
版权声明:本文为博主原创文章,转载请附上博文链接!


杰哥 2019-06-19 01:01 发表评论
]]>
12bet++博客-所有随笔http://www.fometaux.com/guijie/archive/2019/06/19/216423.html杰哥杰哥Tue, 18 Jun 2019 16:01:00 GMThttp://www.fometaux.com/guijie/archive/2019/06/19/216423.htmlhttp://www.fometaux.com/guijie/comments/216423.htmlhttp://www.fometaux.com/guijie/archive/2019/06/19/216423.html#Feedback0http://www.fometaux.com/guijie/comments/commentRss/216423.htmlhttp://www.fometaux.com/guijie/services/trackbacks/216423.htmlhttps://www.zhihu.com/question/265609875

杰哥 2019-06-19 00:01 发表评论
]]>
12bet++博客-所有随笔http://www.fometaux.com/gaimor/archive/2019/06/18/216419.htmlccsdu2009ccsdu2009Tue, 18 Jun 2019 01:35:00 GMThttp://www.fometaux.com/gaimor/archive/2019/06/18/216419.htmlhttp://www.fometaux.com/gaimor/comments/216419.htmlhttp://www.fometaux.com/gaimor/archive/2019/06/18/216419.html#Feedback0http://www.fometaux.com/gaimor/comments/commentRss/216419.htmlhttp://www.fometaux.com/gaimor/services/trackbacks/216419.html最近考虑开发一款兵棋软件,名字都想好了,叫犀牛兵棋,打算支持四边形地图和六边形地图。

前者比较好说,后者在根据屏幕坐标计算格子坐标的时候,稍微有点麻烦。

先说下我们的坐标系是x轴向右,y轴向上,原点在左下角。

格子地图坐标如下



根据格子坐标计算出对应世界坐标系的函数如下




QPointF GridCell6Manager::getWorldPosByCellCoordinate(
int x,int y)

{

if (x % 2 == 0)

return QPointF(1.5f*res*(x+1),

(
0.5*R3+R3*y)*res);

return QPointF(1.5f*res*(x + 1),

(R3 
+ y * R3)*res);

}



QPoint GridCell6Manager::getCellCoordinateByWorldPos(
int x,int y)

{

QPoint point(
-1,-1);

float xpos = x-res*0.5f;

float ypos = y/(R3*res) - 0.5f;

int yset[2= {std::floorf(ypos),std::ceilf(ypos)};

xpos 
/= (1.5*World::getInstance().getWorldResolution());

int xset[2= { std::floorf(xpos),std::ceilf(xpos)};

auto p00 
= getWorldPosByCellCoordinate(xset[0],yset[0]);

auto p01 
= getWorldPosByCellCoordinate(xset[0],yset[1]);

auto p10 
= getWorldPosByCellCoordinate(xset[1],yset[0]);

auto p11 
= getWorldPosByCellCoordinate(xset[1],yset[1]);

float d00 = distance2<float>(x,y,p00.x(),p00.y());

float d01 = distance2<float>(x,y,p01.x(),p01.y());

float d10 = distance2<float>(x,y,p10.x(),p10.y());

float d11 = distance2<float>(x,y,p11.x(),p11.y());

int i,j;

if(d00 < d01 && d00 < d10 && d00 < d11)

{

= xset[0];

= yset[0];

}

else if(d00 > d01 && d01 < d10 && d01 < d11)

{

= xset[0];

= yset[1];

}

else if(d10 < d00 && d10 < d01 && d10 < d11)

{

= xset[1];

= yset[0];

}

else

{

= xset[1];

= yset[1];

}

return QPoint(i,j);

}
其中res为格子边长,R3为sqrt(3)常量

在这个基础上就可以计算从世界坐标到格子坐标的转换了





ccsdu2009 2019-06-18 09:35 发表评论
]]>