新普金娱乐网址


浅薄哲学(5)根本我

顾人不相忘,思君如既往。

Visulalization Voronoi in OpenSceneGraph

  • 十月 13, 2018
  • 地理
  • 没有评论

咱俩今天若是说的故事来在巴尔干半岛达标。无论是中学地理课还是中学历史课,只要认真听讲的同学都非会见指向巴尔干半岛感觉陌生。否则欧洲那么稀一片地方深受誉为“半岛”会受丁觉得有点意外,但是要您俯瞰世界地图的言语,就发现这块地方实在是三照环海之:西面和南面是地中海,东面是黑海,确实可半岛的特点。

Visulalization Voronoi in
OpenSceneGraph

巴尔干半岛是欧洲东南角之大门,在特别出行大多靠走水路的年代,这块地方注定是消停不了的。巴尔干半岛基本上和我们的青海省扳平大,如今却发10单国家扎堆挤在岛屿及,比如今天要而干的克罗地亚、塞尔维亚、黑山、波斯尼亚同黑塞哥维那。需要专注的凡最终特别“波斯尼亚与黑塞哥维那”它不是片只邦而是一个国家,它的简称或许大家又熟识一些,那便是“波黑”。

eryar@163.com

(巴尔干半岛位置示意图)

Abstract. In mathematics a
Voronoi diagram is a way of dividing space into a number of regions. A
set of points, called seeds, sites, or generators is specified
beforehand and for each seed there will be a correspoinding region
consisting of all points closer to that seed than to any other. The
regions are called Voronoi cells. It is dual to the Delaunay
triangulation. It is named after Georgy Voronoy, and is also called a
Voronoi tessellation, a Voronoi decomposition, a Voronoi partition, or a
Dirichlet tessellation. Voronoi diagrams can be found in a large number
of fields in science and technology, even in art, and they have found
numerous practical and theoretical applications. The paper use
OpenSceneGraph to visualize the Voronoi diagram. 

因职务好所以这个地方总是于人盯在,也老有人在此间打架斗殴。历史及罗马帝国、奥匈帝国、奥斯曼帝国和差点成的纳粹帝国都曾于此动了手,最后一个每当这里留下起动手案底的要算南斯拉夫社会主义共和国了。之后时间到了二十一世纪,和平发展是时的主旋律,巴尔干半岛坐还没有发了仗逐渐就淡出了历史舞台,名气上就是败给了中东。

Key words. Voronoi, C++,
OpenSceneGraph, Visualization 

前几天一如既往各身材高大满脸花白胡须的先辈以海牙国际法庭上精神抖擞地游说:你们对本人之审判是地下的,我而为此生来藐视你们!说得了服毒自杀。他虽是我们今天的主人普拉利亚克。对客的审判算是在追讨一段落老债务,二十大抵年前波黑战发生在巴尔干半岛齐,而普拉利亚克的立即段旧债就是于当时会战火之间缺下的。

1. Introduction

二十大多年前世界较生之社会主义国家有三独:苏联、我国及南斯拉夫。论资排辈的说话,前苏联自是哥哥了,可是老大哥后来日渐失去了领导力,因为咱们日益不再听话,南斯拉夫吗开不放任老大哥的话,两皇家先后都提出了富含自身特点的社会主义理论,对苏联那套东西有点抛弃了之意思。到了八十年代末老大哥苏联崩溃的前夕,巴尔干路上上那些共和国们开闻风造反,今天底阳主角普拉利亚克能欠下债就是打南斯拉夫的暴动开始之。

算算几何(Computational
Geometry)作为同帮派课,起源于20世纪70年份,经过近四十基本上年的前行,其研究内容不断扩大,涉及Voronoi图、三角剖分、凸包、直线与多方形求交、可见性、路径设计、多边形剖分等情节。据有关统计,在数以千计的连锁文章被,约来15%是有关Voronoi图及其对(dual)图Delaunay三角剖分(Delaunay
Triangulation)的研究。由于Voronoi图具有最近性、邻接性等重重特性与比较系统的理论体系,如今早已当微机图形学、机械工程、地理信息体系、机器人、图像处理、大数量解析和拍卖、生物计算和无线传感网络等领域取得了广泛应用,同时为是缓解碰撞检测、路径设计、可见性计算、骨架计算和凸包计算等计算几哪里所涉及的其他题目的行工具。 

(前南斯拉夫辖铁托与妻子布罗茨)

Voronoi图的来自最早好追溯至17世纪。1644年,Descartes用接近Voronoi图的结构显示太阳系中物质的分布。数学家G.L.
Dirichlet和M.G.Voronoi分别让1850年与1908年当她们之舆论中讨论了Voronoi图的定义,所以Voronoi图又让Dirichlet
tessellation。在另世界,这个概念呢曾经独立地冒出,如生物学和生理学中称之为中轴变换(Medial
Axis Transform)或架(Skeleton)。化学和物理学中谓Wigner-Seitz
Zones,气象学与地理学中称之为Thiessen多边形。Voronoi图最早由Thiessen应用叫气象观测站中肆意分布之研究。由于M.G.
Voronoi从再通用的n维情况对那进展研讨以及定义,所以Voronoi图这个称谓为绝大多数总人口所采用。 

服毒的阳主角普拉利亚克是旧的克罗地亚人,在巴尔干半岛那么一波混战始发前他是克罗地亚之名士。有些人的名士身份来家传,比如祖上是政要那么到他当时无异代可能啊是政要,普拉利亚克的爸爸是一样叫作南斯拉夫情报部的主任,不晓得竟不算是名流,但是普拉利亚克底巨星身份全是外协调拼命争取来的。他先后因为精彩的就从三所例外之高等学校以到了3独学位:电气工程学位,哲学学位与社会学以及戏剧艺术学位。看他立即学历我们就亮这号老兄在上地方那是纯属的文理通吃。

于路径设计、机械加工、模式识别、虚拟现实、生物计算相当于世界,将站点从离散点扩展及线圆弧等转移Voronoi图的主意也是充分常见的。 

学历搞到手以后,普拉利亚克举行了相同叫做自由艺术家兼导演,拍了大半总理影视电视剧以及纪录片。联想一下境内拍录像打得好的导演还是一样援手什么人吧,是休是发就是是胡在上层社会,不例外钱呢未例外装备的那种感觉吗!你说这么一个口怎么会于为种族清洗的罪过起诉为?这将干波黑大战了。波黑战争是如出一辙集市内战,发生在住户波黑以此国度里,在克罗地亚开导演的普拉利亚克怎么会跑去波黑将种族大涤也?这么多问题之暗必有故事之,故事如从克罗地亚的独自开始说自。

此时此刻可用于转移Voronoi图的库房发生一对,很多凡开源库。像CGAL库、boost中也供了生成Voronoi图的算法。本文根据Shane
O Sullivans1封闭装的Voronoi库,并为此OpenSceneGraph显示有分析瓜分结果。 

克罗地亚大凡起南斯拉夫独自出来的一个国家,有矣她的带头作用,南斯拉夫尚无几年即崩溃了,分裂成了概括波黑同克罗地亚在内的5单国家。解体前之南斯拉夫境内来过多独民族,这些民族之间基本上年来累积了诸多之恩仇,要是论恩怨的要紧程度,排在头里三底若再三塞尔维亚人数、克罗地亚人和穆斯林了。在南斯拉夫时代,有铁托这个听名字就是老大有力的政治家进行的强有力统治,这些恩怨被临时抑制或者闲置,大家一致对外。

2. Implementation

(法庭上怒的斯洛博丹·普拉亚克)

之所以Shane O
Sullivans封装的VoronoiDiagramGenerator可以生成点集的Voronoi图,得到剖分的线条。程序小巧,易于使。结合OpenSceneGraph将剖分得到的线显示出来。程序代码如下所示:

交了1980年铁托与世长辞之后,这些民族恩怨就以尚未人无论起来冒头了,之后以经济的凋敝而快激化,矛盾攒到1991年时时到底爆发。爆发的抵触首先集中在使无设分家各自生活这个题材上,三分外中华民族之观无统一。塞尔维亚人口表示必须不分开家,而且准备注销各地之权杖自己当好;那克罗地亚人和穆斯林们同样听肯定就未干了,三小出口不拢的景象下克罗地亚简直首先发布独立。他二话没说同一独立塞尔维亚人随即出兵试图取回克罗地亚,于是举在摄影机的导演普拉利亚克就傻眼住了,因为他看出塞族人的铁骑踏入了温馨之家园。

/*
*    Copyright (c) 2014 eryar All Rights Reserved.
*
*        File    : Main.cpp
*        Author  : eryar@163.com
*        Date    : 2014-04-30 18:28
*        Version : V1.0
*
*    Description : VoronoiViewer for voronoi library visulization.
*
*/

#include "VoronoiDiagramGenerator.h"

// OpenSceneGraph library.
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgGA/StateSetManipulator>
#include <osgViewer/ViewerEventHandlers>

#pragma comment(lib, "osgd.lib")
#pragma comment(lib, "osgDBd.lib")
#pragma comment(lib, "osgGAd.lib")
#pragma comment(lib, "osgViewerd.lib")


osg::Node* BuildVoronoi(void)
{
    osg::ref_ptr<osg::Geode> theGeode = new osg::Geode();
    osg::ref_ptr<osg::Geometry> theLines = new osg::Geometry();
    osg::ref_ptr<osg::Vec3Array> theVertices = new osg::Vec3Array();

    const long thePointCount = 10;
    float *xValues = new float[thePointCount] ();
    float *yValues = new float[thePointCount] ();

    float theMin = 0.0;
    float theMax = 100.0;

    float x1 = 0.0;
    float y1 = 0.0;
    float x2 = 0.0;
    float y2 = 0.0;

    // Draw the boundary box.
    theVertices->push_back(osg::Vec3(theMin, 0.0, theMin));
    theVertices->push_back(osg::Vec3(theMin, 0.0, theMax));

    theVertices->push_back(osg::Vec3(theMin, 0.0, theMin));
    theVertices->push_back(osg::Vec3(theMax, 0.0, theMin));

    theVertices->push_back(osg::Vec3(theMin, 0.0, theMax));
    theVertices->push_back(osg::Vec3(theMax, 0.0, theMax));

    theVertices->push_back(osg::Vec3(theMax, 0.0, theMin));
    theVertices->push_back(osg::Vec3(theMax, 0.0, theMax));

    // initialize random seed:
    srand(time(NULL));

    // Sites of the Voronoi.
    for (int i = 0; i < thePointCount; ++i)
    {
        xValues[i] = rand() % 100;
        yValues[i] = rand() % 100;

        // Draw the site.
        theVertices->push_back(osg::Vec3(xValues[i] - 1.0, 0.0, yValues[i]));
        theVertices->push_back(osg::Vec3(xValues[i] + 1.0, 0.0, yValues[i]));

        theVertices->push_back(osg::Vec3(xValues[i], 0.0, yValues[i] - 1.0));
        theVertices->push_back(osg::Vec3(xValues[i], 0.0, yValues[i] + 1.0));
    }

    // Generate Voronoi Diagram.
    VoronoiDiagramGenerator vdg;
    vdg.generateVoronoi(xValues, yValues, thePointCount, theMin, theMax, theMin, theMax);
    vdg.resetIterator();

    while (vdg.getNext(x1, y1, x2, y2))
    {
        theVertices->push_back(osg::Vec3(x1, 0.0, y1));
        theVertices->push_back(osg::Vec3(x2, 0.0, y2));
    }

    theLines->setVertexArray(theVertices);

    // Set the colors.
    osg::ref_ptr<osg::Vec4Array> theColors = new osg::Vec4Array();
    theColors->push_back(osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f));

    theLines->setColorArray(theColors);
    theLines->setColorBinding(osg::Geometry::BIND_OVERALL);

    // Set the normal.
    osg::ref_ptr<osg::Vec3Array> theNormals = new osg::Vec3Array();
    theNormals->push_back(osg::Vec3(0.0f, -1.0f, 0.0f));

    theLines->setNormalArray(theNormals);
    theLines->setNormalBinding(osg::Geometry::BIND_OVERALL);

    theLines->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES, 0, theVertices->size()));

    theGeode->addDrawable(theLines);

    // Free the meomry.
    delete [] xValues;
    delete [] yValues;

    return theGeode.release();
}


int main(int argc, char* argv[])
{
    osgViewer::Viewer myViewer;

    myViewer.setSceneData(BuildVoronoi());

    myViewer.addEventHandler(new osgGA::StateSetManipulator(myViewer.getCamera()->getOrCreateStateSet()));
    myViewer.addEventHandler(new osgViewer::StatsHandler);
    myViewer.addEventHandler(new osgViewer::WindowSizeHandler);

    return myViewer.run();
}

1991年普拉利亚克虚岁47,一般男人在斯岁数还以操心子女的就业和已婚问题,操结束这个心后过几年专心等正抱孙子就是得了。可是普拉利亚克注定不是形似人,他坚决抛下上流社会的生和手里的摄像机,决定在国家要他的时上前方保卫家庭。这管年这种身份去部队自然不是于战士做打,老普注定是要是当主任的食指。他树立了同样开发由知识分子和艺术家结合的战斗部队,忙的时刻大家端起武器冲锋陷阵,闲的时候作为文工团来慰问演出,用平等种植乐观的计面世于沙场上。

 上述顺序生成结果如下所示: 

(波黑内战)

图片 1

犹如普拉利亚克念书时的学霸基因在应征后叫还激活了,他当当下段时日涉及得慌顺畅,不久即让予以了少将军衔,官至国防部高级代表,主要负责克罗地亚同驻本土联合国捍卫部队的牵连工作,算是打枪林弹雨的一模一样丝下落了下来。可是落实日子没过多久,波黑内战爆发了,这波黑内乱按道理和克罗地亚没什么啊,问题是波黑国内发出克罗地亚族的亲生,同胞被人凌虐不能不管吧!普拉利亚克很快奉命担任了克罗地亚驻扎波黑之防务代表,正式涉足到了波黑内乱中。如果说他的人生是毁誉参半的,那么坏的那有些就是是于这时上马的。

Figure 2.1 Voronoi Diagram in OpenSceneGraph 

单独后的国家大多都起同一段相似之阅历,那就是一致开始好大概率会时有发生军阀混战,波黑啊不殊。波黑如克罗地亚那样从南斯拉夫单独后,国内的矛盾很快为激化,这个矛盾仍是塞尔维亚人口、克罗地亚人和穆斯林三者之间的龃龉,和通南斯拉夫的民族矛盾是均等的。矛盾激化后一样开始穆斯林和克罗地亚人联合起来攻打塞尔维亚总人口,因为赛族人未允独立想如果和谐举行特别嘛。可是塞族人出塞尔维亚跟黑山鲜独邦的支持,不但久攻不下而且人家雷同打二毫不管压力,很快赛族就决定了波黑傍70%之版图。

改站点的数目,生成的Voronoi图如下所示: 

(1995年赛族军队总司令视察部队)

改范围时为只要修改生成范围中点之自由函数的取余操作,避免生成点超出范围。 

经合以大战的进行过程中冒出了问题,原来穆斯林和克罗地亚人的联盟逐渐解体,三着次开始互殴。当普拉利亚克因波黑克罗地亚族参谋长的地位上波黑之时光,局面就改成了塞尔维亚口跟克罗地亚人一起围殴穆斯林了。那后就突发了塞尔维亚人数对斯雷布雷尼察穆斯林聚居区的屠杀事件,塞尔维亚口几乎杀光了之区之具备男性穆斯林,同时女性同少儿被强奸。而普拉利亚克为不禁做了片狠之事体,比如炸毁了当穆斯林精神寄托的莫斯塔尔古桥,还成立了羁押穆斯林的集中营,他手下的精兵为做了诸多勿同房的政工。

图片 2

烟尘结束之后,普拉利亚克脱掉军装转行做工作,生意做得一定成,据估算资产至少上亿冠。对于一般的克罗地亚人而言,普拉利亚克的一生一世到底一个传奇,很值得在努力的青少年向外修。由于当抵御塞尔维亚之侵入和波黑内战中的孝敬,他自己还被了现任总统的赏。但是对一个兵而言,成就越怪勤也表示造成的危越老,战争这种从非是得了了即了的,如果战争时期手段不荣欠了血债的话,国际法庭秋后一经算账的。

Figure 2.2 Less Sites of the Voronoi Diagram 

(斯雷布雷尼察大屠杀的遇难者)

图片 3

因为当前边南斯拉夫分裂的战争中来了酷的种族清洗行为,所以联合国特地建立了前方南斯拉夫国际法庭,对就犯下战争罪的战犯们来了传票。生意做得顺风顺水的普拉利亚克当然为收了法院的传票,于是他吃2004年往法庭自首并被了扣。针对他的审判从2006年便曾初步,持续到今年一度发矣11只新春了。法庭最初对他的控多上九项,比如故意杀人、破坏非军队目标、侵占财产、残忍监禁、非法攻击贫民、种族迫害和保洁等等,所有的这些指控加在一起判了外20年有期徒刑。

Figure 2.3 More Sites of the Voronoi Diagram 

当一个终生还特别优秀并且因为好之大好为荣誉之人,作为一个苍生心中的奋不顾身,普拉利亚克当然是无法接受这个真相的,于是他当审理后底1个月提出了上诉。上诉后他直接叫拉在牢狱里等待国际法庭的查,二审在今年底11月29日裁判,这次宣判并没有为他平反,虽然针对他的有些指控于推翻,但是法官认为他犯下的罪恶依旧值那么20年。听了这个裁定结果后,早生准备的普拉利亚范围喝下了随身携带的毒药,医务人员第一时间将他送于医院,但是他仍旧不治身亡,享年72东。

3. Conclusion

(普拉利亚克当庭服毒)

Shane O
Sullivans封装的堆栈小巧,使用方便,速度还大快。也不怎么欠缺,如非可知获得一个站点对应的多方面形,即有点属于哪个区域。不克获取带权点集的Voronoi剖分。 

如果从普拉利亚克2004年失去人身自由开始算打,他现已当监里呆了13年了,即便接受20年之刑期他绝多又呆上7年就足以释放。不过盖客的影响力以及能力,把实际期限继续压缩甚至来只保外就医都未是题材。但是于72夏的普拉利亚克吧,刑期是多久都不重大了,自己究竟是见义勇为还是罪犯才是无限重点的。

源程序小巧,借助程序代码来针对Voronoi的定义进行掌握要不错的。 

4. References

  1. Shane O Sullivans, http://www.skynet.ie/~sos/mapviewer/voronoi.php

  2. http://ect.bell-labs.com/who/sjf/

  3. 汪嘉业, 王文平, 屠长河, 杨承磊. 计算几何及应用. 科学出版社. 2011 

  4. 杨承磊, 吕琳, 杨义军, 孟祥旭. Voronoi图及其应用. 清华大学出版社. 2013

PDF Version and Source code: Visualization Voronoi in
OpenSceneGraph

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图