凹凸多边形快速识别和智能剖分技术研究
- 格式:pdf
- 大小:584.69 KB
- 文档页数:6
识别多边形中心点的方法全文共四篇示例,供读者参考第一篇示例:多边形是一个平面图形,由若干个线段组成,每个线段都相邻接且不相交,而且首尾相连,形成一个封闭图形。
多边形的中心点是指多边形的质心,也是多边形的重心。
识别多边形中心点是在计算机视觉和图像处理中一个重要的问题,可以帮助我们进行图像分析、目标定位等相关任务。
本文将介绍几种常用的方法来识别多边形的中心点。
方法一:几何中心法在数学几何中,多边形中心点通常是指多边形的“几何中心”,也称几何质心。
几何中心法是最简单直观的方法,通过计算多边形的顶点坐标的平均值来得到多边形的中心点。
具体步骤如下:1. 对多边形的所有顶点坐标进行求和,并除以顶点的个数,得到一个平均坐标作为中心点的坐标。
2. 将得到的中心点坐标绘制在多边形的内部,即可得到多边形的中心点。
这种方法简单易行,适用于正规的凸多边形。
但对于不规则的凸多边形或凹多边形,可能会得到与我们期望不同的结果。
重心法也是一种常用的计算多边形中心点的方法。
重心是一个物理学和工程学概念,是指一个图形的“平均质量点”。
在数学上,一个多边形的重心定义为其所有小面积的中点的平均。
计算多边形的重心的方法是将多边形分解成多个三角形,计算每个三角形的重心,最后取所有三角形重心的平均值作为多边形的重心。
具体步骤如下:1. 将多边形分解成若干个三角形,可以采用三角剖分算法进行分解。
2. 计算每个三角形的重心,即三个顶点坐标的平均值。
通过重心法计算多边形中心点,可以更准确地反映多边形的形状和结构。
但对于复杂的多边形,计算过程可能比较复杂。
方法三:最小外接矩形法最小外接矩形法是另一种计算多边形中心点的方法。
这种方法不需要对多边形进行三角剖分,而是根据多边形的外包矩形来确定多边形的中心点。
计算多边形的最小外接矩形的步骤如下:1. 找到多边形的外包矩形,即包含多边形的最小矩阵。
最小外接矩形法适用于不规则多边形的中心点计算,并且计算效率高,较为简单。
CN43-1258TP I SSN1007-130X计算机工程与科学COMP UTER ENG I NEER I NG&SC I ENCE2006年第28卷第9期Vol.289No.992006:::::::::::::::::::::::::::::::::::::::::::::::::文章编号!1007-130X(2006)09-0097-03多个凹凸形多面体的深度优先消隐算法研究Research on t he D e p t h O r der~i dden A l g orit h mf or M ulti p l e Concavo-Convex Pol y hedr ons袁超YUAN ChaO"四川理工学院计算机科学技术系#四川自贡643000$"D e P art m ent Of CO m P uter S cience#S ichuan Univers it y Of S cience and En g i neeri n g#Z i g On g643000#Chi na$摘要!为了对多个凹凸形多面体进行消隐处理!应首先对单个凹凸形多面体进行可见性测试"对多个凹凸形多面体间可能出现的遮蔽进行屏幕投影多边形的重叠排除验证!对可能出现重叠的多边形边进行交点计算#包容性测试和深度检查"本文指出!凹凸形多面体在可见性测试及投影多边形包容性测试方面应采用不同的处理方法"实践结果表明!此算法可以取得较好的效果"Abstract I In or der t o p erf or m hi dden-surf ace p r ocessi n g on multi p le concavo-convex p ol y hedr ons9visi bl e test shoul d be m ade f or a si n g le concavo-convex p ol y hedr on.A s f or t he p ossi ble ca moufla g e bet Ween multi p le concavo-convex p ol y hed-r ons9We shoul d g i ve an overl a p re moval verificati on on screen p r o ecti on p ol y hedr ons;as f or t he p ossi bl e overl a pp i n g be-t Ween t he ed g es of p ol yg ons9We carr y out i ntersecti on p oi nt co m p utati on9contai ni n g test and de p t h i ns p ecti on.The articl e p oi nts out t he concavo-convex p ol y hedr on shoul d use diff erent p r ocessi n g m et hods i n t he visi bl e test and t he p r o ecti on p ol y-g on contai ni n g test.The p ractice i ndicates t his al g orit h m m a y obtai n a better eff ect.关键词!多面体$深度优先$消隐算法$真实感图形K e y wOrds I p ol y hedr on;de p t h first;hi dden surf ace al g orit h m;realistic g ra p h中图分类号!TP391.41文献标识码!Al引言在多个三维凹凸形多面体的消隐处理过程中9由于凹形多边形与凸形多边形在面的外法向矢量的计算上不同9以及多边形顶点是否被包容于凸形多边形区域与凹形多边形区域内的计算方法上的不同9因此应将两者进行分别处理O对于三维凸形多面体面的可见性测试较为简单9只需要根据面外法向量7和视线向量l的点积是否大于0就可以进行判断9若7.l>09则为可见面;否则为隐藏面O对于三维凹形多面体面的可见性测试9则是一个较为复杂的问题9凸形多边形表面的外法向矢量计算方法不能用于这种场合;此外9对于可能穿过多面体的棱9需要对棱与物体进行单独遮蔽测试O为了对多个凹凸形多面体间可能出现的遮蔽进行消隐处理9下面将深入研究单个凹形多面体的可见性测试及多个多面体间的消隐算法问题O 2单个凹形多面体的可见性测试2.l单位外法向矢量对于三维凹形多面体可见性测试按下面方法计算单位外法线向量9并用外法线向量与视线向量的点积是否大于0来区别向前面或向后面O7-=Z nk=3V1V h-----1>V1V h-----1Z nk=3V1V h-----1>V1V h-----12.2棱边的分类对棱边进行分类如图1所示O根据棱边的分类情况可以判断一定不可见的棱以及可能可见\也可能不可见的潜在的可见棱O收稿日期!2006-04-11;修订日期!2006-06-13作者简介!袁超(1956)9男9四川自贡人9讲师9研究方向为软件工程和计算机图形O通讯地址!643000四川省自贡市四川理工学院计算机科学技术系;T el I137****6037;E-m ail I y uanchao_Z gg Z@163.co m Address I D e p art m ent of Co m p ut er S ci ence9S i chuan Uni versit y of S ci ence and En g i neeri n g9Z i g on g9S i chuan6430009P.R.Chi na图1凹多面体棱的分类凹多面体棱的分类如下:(1)~FF棱:两个向前面的公共棱3(2)~BB棱:两个向后面相交形成的棱3(3)~FB棱:当向前面比向后面更接近观察点时9一个向前面与一个向后面相交形成的棱3(4)~BF棱:当向后面比向前面更接近观察点时9一个向后面与一个向前面相交形成的棱其中9~BB 和~BF是一定不可见的9消隐处理时应首先找出9把它们舍弃3而~FF 和~FB是可能可见也可能不可见的潜在的可见棱9对它们还要做进一步的处理2.3凹形面棱的可见性凹形面棱的可见性判断方法如下:(1)n为凹形面的单位外法向矢量9l为视见矢量9根据n l>0和n l<0确定各个面是向前面或是向后面(2)确定棱所在的两个面的面号9根据面号得出这两个面是向前面还是后向面(3)若为~BB则棱不可见9若为~FF则对凸形多面体为可见9对凹形多面体为潜在可见棱(4)当一个为向前面9另一个为向后面时9则根据棱上一个顶点判断两个所在面的深度9为此计算屏幕坐标Z s的值:D对多边形1:Z s=-(a1x x+b1y s+d1) c13D对多边形2:Z s=-(a2x x+b2y s+d2) c2比较Z s的值9Z s值较小的多边形离观察者较近(5)若向前面的Z s小于向后面的Z s9则为~FB棱9对于凸形多面体是可见棱9对于凹形多面体则是潜在可见棱3若向前面的Z s大于向后面的Z s9则为~BF棱9对于凹形多面体和凸形多面体则都是不可见棱对于不相贯潜在可见棱的处理9只要求出此棱的投影与多面体落影区是否有交集如果有交集9可任取其中一点9对应于棱边上的点与平面上的点做深度测试如果在这点棱比多面体更靠近观察点9则棱不被多面体遮蔽9否则棱被多面体遮蔽如果棱的投影与落影区边界有交点则求出所有交点9从而可得出此棱的被遮蔽部分与不被遮蔽部分当棱用参数A的方程表示时9这些不可见部分与可见部分都可以用一些参数A的小区间来表示对于可能穿过多面体的棱9在对棱与物体进行遮蔽测试时9必须求出棱与多面体各面的遮蔽关系9并找出不被遮蔽的部分设棱的起点为p1(x19y19Z1)9终点为p2(x29y29Z2)9取平面方程为:A x+B$+C Z+D=0若点(x9y9Z)在面的前面时9有A x+B$+C Z+D>0令Ei=A x i+B$i+C Z i+D 9i=1929则当E19E220且E1E2不同时为0时9V1V2均在面的前面9而且不同时在面上此时9V1V2不被遮蔽当E1=09E2=0时9V1V2均在面上9此时棱的可见性由与该棱相连的其它棱在面的前后决定当E1与E2符号不同时9该棱一端在面的前面9一端在面的后面令X=\E1(E1+E2)9则当E1>0时9参数值在A91部分的棱在面的后面3而E1<0时9参数值在091部分的棱在面的后面对在面的后面的部分棱9应该求出其投影是否和面的投影边界相交如果相交9还要求出可见的部分线段当E1<09E2<0时9棱的两个端点均在面的后面当棱在面的后面时9要在投影面上求出棱与面的边界交点9从而确定被遮蔽的部分棱边最终可见部分的求取:在每一潜在可见棱与所有有关的多面体做遮蔽测试后9可得到一系列不被遮蔽的参数区间9棱边最终可见部分应该是这些区间的交集求取交集的方法是:置每个小区间左端的特征为G-79右端特征为G+79将两列A值合并后9由小到大排序从最左的负特征端点开始9置I N=-19取下一个端点9若特征为G+79则I N=I N+13若特征为G-79则I N=I N-19反复进行9直到端点用完为止最后9每个从I N=-2到I N=-1的端点就是可见的区间段这个算法可以推广到n列区间的求交问题3多个凹凸形多面体的可见性测试对于由多个凹凸形多面体组成的组合体如图2所示9除了要确定每个多面体的可见部分外9还要指出多面体间的几何关系中被较近的多面体所遮蔽的那些部分图2多个凹凸形多面体组成的组合体在由多个凹凸形多面体组成的组合体中9对于每一个多边形存在三种可能性:两个多边形相交3一个多边形完全包围着另一个多边形3两个多边形完全不重叠为此9需要进行最大最小测试相交测试深度测试和包容测试等这些关系测试是在图像空间中进行的3.l最大最小测试最大最小测试的目的是找出不可能重叠的一对多边形在屏幕坐标系中9考虑两个闭合多边形A和B9它们是三维物体两个面屏幕坐标系Xs Y s平面上的投影对于每个多边形9分别求出X坐标的最大值和最小值9以及Y坐标的最大值和最小值若下列语句中至少有一个为真9则多边形A和B就不可能重叠m ax(x A)<m i n(x B)m ax(x B)<m i n(x A)m ax($A)<m i n($B)m ax($B)<m i n($A)若上述关系不满足9则不能排除两个多边形发生重叠的可能O为此9要进一步进行相交测试O 32相交测试设线段G1由两个端点(x19$1)和(xZ9$Z)给定9线段G由端点(x1,9$1,)和(x Z,9$Z,)给定9它们的斜率分别为m 和m,O求边的交点方法如下:(1)计算斜率:m=($2-$1)/(x2-x1)9m,=($2,-$1,)/(x2,-x1,)O(2)若m-m I=09则这两条边平行9转到(6);否则9转到(3)O(3)若m/m I=1=(y1-mx1)/(y1I-m I x1I)9则两条边重合9转到(6);否则9转到(4)O(4)计算交点:x i=(y1-y1I)-(mx1-m I x1I)]/(m I-m)9y i=(y1-m1)m I-(y1I-m I x1I)m]/(m I-m)O(5)如果满足下列条件之一9则两条线段G和G I就不在I点处相交Ox i<m i7(x19x2)9x i>m ax(x19x2)9x i<m i7(x1I9x2I)9x i>m ax(x1I9x2I)y i<m i7(y19y2)9y i>m ax(y19y2)9y i<m i7(y1I9y2I)9y i>m ax(y1I9y2I)如果不满足上述所有条件9则相交O(6)从多边形B中选择另一条边9并且重复这个过程O如果已经没有要比较的边9则停止O3.3深度测试通过交点计算9若存在交点(xi 9yi)9就需要进一步根据交点来确定哪个多边形是可见的9哪个多边形是隐藏的O 若通过交点计算不存在交点9则有两种可能:它们是一对重叠的多边形9即一个多边形完全包围另一个多边形;或者它们完全不重叠O对于完全不重叠的情况9它们不发生遮蔽关系9不影响彼此的可见性O对于重叠的多边形9也需要从视图的一个特定的点上确定哪个多边形是可见的9哪个是隐藏的O 总之9对于有交点或发生重叠的情况9都需要判断两个面的深度O为此9根据交点或选定的点来计算屏幕坐标Zs 的值:D对多边形1:Z s=-(a1x x+b1y s+d1)/c1;D对多边形2:Z s=-(a2x x+b2y s+d2)/c2O其中9ai ~bi~ci~di表示两个多边形所在平面的平面方程系数O比较Zs 的值9Zs值较小的多边形离观察者较近O3.4包容性测试为了测试一个多边形是否包围另一个多边形9需要测试一个多边形的每个顶点是否包含在另一个多边形中O 对于凸多边形可采用半平面方法测试9算法简便易行;半平面方法对非凸多边形却不适用9后者则只能通过计算角度总和的方法来测试O3.4.1凸多边形的包容性测试半平面方法测试的过程如下:多边形的顶点按逆时针方向进行编号9设p1(a9b)~p2(c9d)为多边形B的顶点9pt(e9f)为待测试的点9若(e-a)(d-b)>(f-b)(c-a)9则pt 包含在线p1p2的左半平面;若(e-a)(d-b)<(f-b)(c-a)9则pt 包含在线p1p2的右半平面O对多边形B的每一条边重复这个过程9如果pt处于多边形B的每一条边的左半平面9则pt包含在多边形B之内;如果pt 处于多边形B的至少一条边的右半平面9则pt包含在多边形B之外O 3.4.2非凸多边形的包容性测试对于非凸多边形的包容性测试9只能通过计算角度总和的方法来进行O要求多边形B按逆时针方向对其顶点编号9P=(x9 y)表示多边形B的第个顶点9其中=19 9n9并且P n= P1O令P t是将要测试的一个点9即测试P t是否包含在多边形B中O设p1(a9b)~p2(c9d)为多边形B的顶点9pt(e9f)为待测试的点9P t P l=(a-e9b-f)P t P2=(c-e9d-f)P t P l=(a-e)2+(b-f)2P t P2=(c-e)2+(f d-f)2P l P t P2=(a-e)(c-e)+(b-f)(d-f)0=cos-1(P t P l P t P2/(P t P l P t P2))其中90是有正负号的9如果向量Pt P l到向量Pt P2为逆时针时90为正号;如果向量Pt P l到向量Pt P2为顺时针时90为负号O对多边形B所有的顶点计算0j9并且计算20j9若20j =09则点P t在多边形B之外;若20j=3609则点P t在多边形B之内O4算法实现算法中所用各个消隐测试处理的逻辑关系如图3所示O图3消除隐藏线中所用测试的逻辑关系5结束语为了进行多个凹凸形多面体的深度优先消隐处理9区别对待单个凸形多面体和单个凹形多面体的可见性测试9在进行多个三维物体的消隐处理之前9根据向前面或向后面的区别以及棱的分类和深度计算判断出潜在的可见棱9完成单个凹形多面体的可见性测试;对多个凹凸形多面体可能出现的遮蔽9进行投影多边形的重叠排除验证9对多边形边进行交点计算和深度检查;对包容性测试9完成了多个凹凸形多面体消隐算法O!下转第102页"4性能分析和实验结果4.l性能分析由处理器的存储空间和运行时间分析算法性能O处理器的存储空间为O(27/2-m>算法性能主要取决于求子集和~处理器间的通信和数据比较时间O子集和生成过程的第一步处理器间的通信时间复杂度是O(2m-1>求和时间复杂度为O(2m>9第二步中由于处理器都是处理本地数据所以没有处理器间的通信开销求和时间复杂度是O (27/2-m>因此其总的时间复杂度是O(2m+27/2-m>O由文献7I可得子集和排序算法中的P MFS排序时间复杂度是O(m>2m-1+72>27/2-m>其中处理器间的通信时间复杂度是O(27/2-m+(m-1>>2m-1>数据比较时间复杂度为O ((m-1>>27/2-m+2m-1>O搜索过程的第一步P0P1P P/2-1都要与P P/2P P/2+1P P-1进行比较以确定有解的处理器对故最多需要O(2m>的通信~数据比较和求和时间9第二步中每对处理器都执行单向的顺序搜索因此最坏通信~求和及比较时间均为O(27/2-m>O由此搜索时间复杂度是O(2m+27/2-m>O因此可得算法总的时间复杂度为O(m>2m+72>27/2-m>O4.2实验结果采用C语言和MPI并行编程接口在I B M P690高性能计算机上以阻塞通信方式实现了算法O随机生成的背包实例的并行算法和串行二表算法的实验结果如表1所示O 表l算法在I B MP6 0上的实验结果!时间单位"秒#维数(7>处理器数(P>并行计算时间串行计算时间加速比效率(%>2040.05444080.383685161.622112325.5110160.1988983.65491.350.5186.480.1230.770.030.113040.24993780.930597161.930013329.0693470.8751553.50187.530.94011.760.4532.830.0960.3040430.186220812.636239167.049582328.02289174.9286042.48262.065.93074.1210.62966.439.33929.195046866.86510481784.90793916905.95995932554.08872712630.4601311.84045.987.07688.4513.9487.1322.7971.23实验结果表明2随着处理器数的增加处理器间的通信时间也增大对较小规模的背包实例其并行执行时间上升但较大规模的背包实例的并行计算时间明显减少因此需根据背包实例的规模选择适当的处理器数9算法比较适合计算较大规模的背包问题(7240>其并行效率可达60%以上O 5结束语理论分析和实验结果表明2算法在一定数量的处理器时具有较小的通信开销和很好的负载平衡9算法可在共享存储和分布式存储的可扩放并行机上实现因此可利用它求解维数的7240背包问题O由于背包问题是NP完全问题所以若要在合理时间内求解更大规模的背包问题则所需要的处理器数也会增加O但是随着处理器数的增大通信开销也会随之上升因此利用本并行算法求解维数为80以上的背包问题无疑是值得进一步研究的工作O参考文献"1I M R Gare y D S Johnson.Co m p ut ers and i ntract abilit y2A Gui de t o t he Theor y of NP-Co m p l et eness M I.S an Franci s-co2W~Free m an and Co1979.2I B Chor R L R i vest.A Kna p sack-T yp e Publi c Ke y C r yp t o-s y st e m Based on A rit h m eti c i n F i nit e F i el ds J I.I EEE T ranson I nf or m ati on Theor y198834(5>2901-909.3I李庆华李肯立蒋盛益等.背包问题的最优并行算法J I.软件学报200314(5>2891-896.4I Ken-L i L i Ren-Fa L i@i n g-~ua L i.O p ti m al Parall el A l g o-rit h m f or t he Kna p sack Pr obl e m W it hout M e mor y Confli ctsJ I.Jour nal of Co m p ut er S ci ence and T echnol o gy200419(6>2760-768.5I Lou DC Chan g C C.A Parall el TWo-L i st A l g orit h m f or t he Kna p sack Pr obl e m J I.Parall el Co m p uti n g199722(14>2 1985-1996.6I陈国良.并行计算2结构算法编程M I.北京2高等教育出版社2003.7I丁卫群计永昶陈国良.一种基于M PP的并行归并算法J I.计算机研究与发展199936(1>252-56.8I X i aobo L i Paul Lu Jonat han S chaeff er et al.On t he Versa-tilit y of Parall el Sorti n g b y Re g ul ar S a m p li n g J I.Parall elCo m p uti n g199319(10>21079-1103.!上接第99页"参考文献"1I潘云鹤董金祥.计算机图形学-原理~方法及应用M I.北京2高等教育出版社2003.2I陈传波陆枫.计算机图形学基础M I.北京2电子工业出版社2005.3I李春生邱道尹谭同德等.计算机图形学理论与实践M I.北京2北京航空航天大学出版社2004.4I Donal d~ear n M Pauli ne Baker.计算机图形学.第二版M I.北京2电子工业出版社2003.5I金廷赞.计算机图形学M I.杭州2浙江大学出版社2000.6I李陶深.计算机图形技术基础M I.重庆2重庆大学出版社1997.7I江涛姜永林谢美森.计算机绘图与辅助设计基础M I.上海2复旦大学出版社1994.8I孙家广许隆文.计算机图形学M I.北京2清华大学出版社1986.。
基于Mapx组件的凹多边形快速分解算法的实现程琳;孟志军;梁明;杨晓艳【摘要】在精准农业作业过程中,需要对农田地块多边形进行复杂的空间分析,如路径优化.空间分析一般是基于凸多边形,所以需要将凹多边形分解成凸多边形来处理,数目尽量最少,效率尽量高.为此,提出了一种凹多边形的分解算法,通过各凹点连接其他顶点连线的交点等信息进行判断,采用递归算法,利用Visual C++语言和Mapx 组件实现该算法的实现与显示.该算法简明实用,效率高,生成凸多边形数量少.【期刊名称】《农机化研究》【年(卷),期】2010(032)007【总页数】4页(P26-29)【关键词】凹凸判断;凹多边形;分解算法;矢量叉积;Mapx【作者】程琳;孟志军;梁明;杨晓艳【作者单位】西安科技大学测绘科学与技术学院,西安,710054;国家农业信息化工程技术研究中心,精准农业部,北京,100097;西安科技大学测绘科学与技术学院,西安,710054;西安科技大学电气与控制工程学院,西安,710054【正文语种】中文【中图分类】TP301.60 引言随着以信息化技术为核心的农业兴起,针对地块的路径优化研究也随之兴起,路径优化在交通运输、精准农机作业等方面都已得到了较好的应用。
而多数的路径优化算法是针对凸多边形地块的算法,而实际农田作业中地块的形状比较复杂,因此就需要将地块多边形进行分解,分解为最少数目的凸多边形再执行凸多边形算法,即凹多边形的最佳剖分。
如何剖分任意多边形是计算几何、图形、图像处理等领域的一个经典问题。
多边形剖分,从目前提出的算法来看,主要有两大类:一是将多边形剖分为三角形,主要应用于计算机图形处理、有限元网格的自动生成等;二是将凹多边形剖分为特殊形状的子多边形。
为此,本文提出了一种示基于凹多边形的凹顶点与其他顶点相交,得出交点数与剖分凹点数来判断并进行剖分凹多边形的方法,通过基于Mapx组件的实现与显示,直观的得到分解结果,实现了凹多边形的最佳剖分[1]。
基于表面凹凸度的未知物体分割识别方法周改云;张国平;梁明阶;吕琼帅;马丽【摘要】为了使机器人在人们的生活中更加普及和大众化,并从一定程度上优化机器人对周围环境的认知功能,设计了一种利用目标物体表面凹凸度对该物体进行分割识别的方法.该方法对目标物体局部表面凹凸性的两类判定方法展开了系统性的探讨和分析,将连续局部表面凹凸度对布尔型判定进行替换,利用表面凹凸度和法方向信息这两个要素设计了一类全新的分割权重运算方法,进而为输入场景构造相应的无向带权图,在这之后结合快速图分割算法获得相应的目标物体.实验结果表明,本文方法与基于凹凸性的判定方式相比,基于凹凸度的量化衡量在针对测量噪声和计算误差中具有的鲁棒性更好,实际分割结果比单一结合了法方向的实验结果好,更符合实践需求.【期刊名称】《四川大学学报(自然科学版)》【年(卷),期】2016(053)005【总页数】10页(P1001-1010)【关键词】机器人;认知能力;表面凹凸度;分割识别;鲁棒性【作者】周改云;张国平;梁明阶;吕琼帅;马丽【作者单位】平顶山学院软件学院,平顶山467000;平顶山学院软件学院,平顶山467000;华南理工大学计算机科学与工程学院,广州510006;广州市机器人软件及复杂信息处理重点实验室,广州510006;平顶山学院软件学院,平顶山467000;平顶山学院软件学院,平顶山467000【正文语种】中文【中图分类】TP242.6随着科学技术的不断发展,机器人渐渐地步入纷繁复杂的现实世界,其对现实场景的认知能力和诸多语义信息的获取能力十分关键.其中一个非常突出的问题是:机器人怎样发现周围环境中存在的物体和相应的信息[1].机器人要具备从周围环境中利用自身配置的传感器获取目标物体信息的能力,对传感器获取的信息进行科学的分割对机器人认知功能的实现十分重要.针对机器人的处理器视觉与图像分析领域而言,图像分割经过了一段非常久的发展历史,已经具备了比较完善的、性能突出的分割方法.按照工作思路上的区别,业内把分割方法系统性的划分为两大类,分别是基于模型的分割与无模型分割.针对前者而言,比较具有典型意义的是Rusu等[2] 研究的通过 RANSAC分割场景平面的方法.通过每次非定向选择三个非共线点来对既定的平面参数展开系统性的运算;然后,根据点和平面之间存在的距离来探究点和模型的一致性程度;最后,获得其中一致点数最大的平面模型.此类方法通用性比较良好,而且鲁棒性也十分出色,其不足之处在于对大量点云展开运算的时候其运算量过于庞大.Schnabel 等[3]学者出通过八叉树来构建各个点之间的近似空间关系,然后通过局部采样来增加RANSAC 的实际效率.针对无模型分割方法而言,并不会对分割目标进行模型假设,而是结合数据之间的相似性划分多个区域.另外,业内比较具有代表性的方法有Klasing 等[4]提出的直接通过点间的实际距离对点云展开分割的方案.此类方法一般情况下只对分割在空间上具有较大间隔的目标适用.Tribel 等[5]为待分割的点云运算三角网格,并通过连接节点对应的法向量的乘积来运算具体的边权重,在这之后通过基于图的快速分割算法对点云进行系统性的分割.此类方法可以有效地分割场景里面表面凹凸程度较低的物体.但是,现实中大部分物体并非具有平滑的表面,如零食袋、书包、柜子等.针对上述问题,本文将RGB-D感知数据作为探讨和分析对象,并根据可靠、高效等设计目标,创设了一种结合表面凹凸度进行室内场景分割的方法.首先,我们深入地探讨了局部表面凹凸性的判定方法,并结合该方法提出通过表面凹凸度来测量局部表面凹凸情况的整体思路.另外,基于表面凹凸度和法方向信息,设计了一种全新的分割权重计算机制;在这之后,我们设计了集合表面凹凸度进行目标物体分割的方法.以点云代表的场景为输入,在滤波、表面法方向估计等环节之后调整为无向带权图,然后结合图分割来获得目标物体.2.1 表面凹凸关系从几何计算的角度来分析,凸与凹是用于反映曲线的属性.Moosann 等[6]在经过长期的探讨和分析之后对凸概念的界定进行了拓宽,并提出凹与凸是用于体现两个局部表面连接的实际情况.通过si 与sj代表两个互相关联的局部表面,pi 与pj 分别代表si 与sj 的中心点,ni 和nj 分别代表pi 与pj 的实际法向量.除此之外,假定:1) pi 和pj 两者位于某一个坐标系当中;2) ni 与nj 都为单位向量,即∥ni∥=∥nj∥=1;3) 法方向是表面朝外.Moosann 等[6]利用表面中心点对应的向量差在法方向上的投影对局部凸关系的概念进行界定,同时这也被称作 Moosann 局部凸关系.与 Moosann 等有明显区别,Stein 等[7]利用向量间的夹角关系对局部凸关系的概念进行界定,称作 Stein 局部凸关系.下文将对凸关系展开详尽的论述.定义1 Moosann局部凸关系. 假定si和sj可以分别结合pi与pj及其ni和nj 展开具体的描述,在这里记dij=pj-pi.另外,dji=-dij,假如符合条件如下式所示. ni·dij≤0∧njdji≤0则si与sj就具有局部凸关系.定义2 Stein局部凸关系. 假定si和sj两者可以分别结合pi与pj及其ni与nj展开相应的描述,记.另外,,假如符合如下式条件.α-γ≥0则si与sj具有局部凸关系.同理,也可以对凹关系(比如假定α-γ≤0 )展开定义,然后判定给定的局部表面存在的具体关系.在实际应用案例中,为对点云数据展开准确的分割,先将所有的点视为局部表面的中心,最后对各个点相应的法方向展开计算,然后利用上文所述的概念对邻近点存在的关系凹凸展开判定.针对物体分割而言,表面凹凸性发挥着十分关键的作用,然而通常使用的二值划分技术不能用于噪声数据的处理,其鲁棒性不理想.因此,本文结合凹凸度度量,利用连续实值属性对布尔判定进行替代,不断扩宽它的应用范围,使其和分割环节有所关联,并运用此类方法增强其抗噪性能.2.2 凹凸度度量通常使用的场景分割法是把局部表面的凹凸性作为基础,但存在下述两个缺点:1) 一般是通过阈值来展开相应的划分,但是这个数值的设置和数据噪声互相关联;2) 在进行分割的过程中,无法对复杂多变的凹凸状况展开区分.结合文献[6,7]提出的概念,本文拟采用凹凸度来对该概念进行科学的度量,以解决上述问题.下面将对凹凸度展开具体的描述,并把它拓展到局部表面.定义3 表面间具有的凹凸度. 假定si与sj可以分别利用pi与pj及其ni 与nj来展开相应的描述,记dij=pj-pi∥pj-pi∥.另外,dji = -dij,此处,假如将si 和 sj 具有的凹凸度视为,则由式(3)可知,在[-1,1]中.k<0时,si和sj为局部凸关系;k>0时,Si和Sj为局部凹关系.k绝对值代表具体的凹凸情况,这个数值越高,则凹凸程度越突出.如果si 与sj位于一样的平面,k=0,此类情况说明凹凸程度为0.定义4 表面凹凸度. 假定和si关联的局部表面构成了,关联的,si和sj具有的凹凸度为,在这里,假如把si的凹凸度记作,则式(4)中,ωij代表影响权重,描述si与sj具有的对的实际贡献.因此,我们可以运算给定点云里面所有点的具体凹凸度.与表面法具有很高的相似性,在这里将凹凸度视为对应点的属性,利用它来展开点云分割.如图1所示,图1(b)~(d) 分别为图1(a) 的深度图、法方向图和凹凸度图.图1 (e)提供了运算之后的表面曲率.针对图2而言,指代的是图1中计算后得到的统计分布,图2(a)指代所有凹凸度的统计,图2(b)为绝对值> 0.1 的凹凸度的具体情况.3.1 方法框架基本框架涵盖3个主要内容,依次为预处理、分割以及后处理.(1) 在初始时期,恰当地对输入图像展开规范的平滑操作,利用此类方式把噪声消除,通过 He 等[8]研究人员提出的引导滤波法.另外,还一定要对分割时采用的特征展开求解操作.这些特征可以对分割发挥十分重要的作用,因此,如何获得良好的特征是重点关注的一个方面;(2) 从分割的角度来分析,在本文中结合快速分割法进行一系列的操作,图构造和边权重是十分关键的要素.而且充分体现出点云的特性,图构造应结合像素邻域来展开,并且还应该考虑深度的具体情况,以此避免连接前景与背景.在边权重的整个运算过程中,重点结合表面凹凸度与法方向等展开具体的运算,在获得了平滑区域之后,避免分割为多个部分;(3) 在后处理的整个过程当中,优化分割是其中十分关键的操作,涉及到合并一部分特定的噪声区域,同时还涉及到对边缘进行一系列的优化.所以,能够进行良好的分割就基本决定了分割的实际效果.深度图与组织化点云可以很容易地展开变换,为了便于分析和研究,本文将采用专业术语来展开后续的论述.组织化点云表示的方式为,把深度图简要的描述为,u与v依次代表行与列.本文主要利用代表特定点.3.2 估计局部表面法方向作为区域十分重要的特点,一部分分割法中引入表面法方向的一些特定的数据 [6,7, 9-13].利用组织化点云能够对邻域具有的特性展开访问,用像素近邻替换空间近邻,以此对领域展开相应的构造,以期能够大幅度减少搜索开销.法方向运算进程中,我们按照 Holz 等研究人员[14]的方法,重点利用特定点的2条切向量的外积展开相应的运算.针对组织化点云来讲,上述的切向量可以结合点相应像素的邻域展开具体的计算.用代表给定点,p(u-1,v) 与、p(u,v-1)与四者依次表示像素的上、下、左、右4个邻域,基于这个情况,经过该点的切向量可以用下式展开运算.v(u,v)=p(u+1,v)-p(u-1,v)h(u,v)=p(u,v+1)-p(u,v-1)通过上式,可对p(u,v)的法向量进行求解.n(u,v)=v(u,v)×h(u,v)因此,我们利用上述的方法来运算所有点的局部表面法向量.但需重点分析这个问题:真实世界中具有或多或少的观测噪声,因此,估算结果将受到比较严重的负面影响.鉴于此,笔者先通过箱式滤波来平滑切向量,然后再对法方向展开运算.为了让处理质量得到优化,应提前解出积分图像,即先后对横、纵向切向量v的所有通道运算出1张积分图像.这样,在四次存储访问之后就可以求解所有窗口包含数据的平均数,完成所有的平滑过程 [15].3.3 图构造与权重计算3.3.1 图构造在整个过程中,重点运用快速分割算法来展开相应的运算,此类方法的实际效率很高.另外,把进行分割的点视为一个图节点,然后,通过邻域构建所有节点之间的具体联系.但是,为避免连接能够较好的区分前景与背景信息,还一定要考虑到深度改变的情况.我们以给定深度图D中的点 , 假如它的邻域,u∈{u-1,u+1},v∈{v-1,v+1}满足下述的约束|D(u,v)-D(u,v)|<δd式(8)中,在和中间添加连接边.并行运用距离与夹角充当约束展开对比[14],利用深度差法展开相应的操作,可以获得较好的效率.但是,假如约束十分苛刻,就有较大的几率在边缘形成孤立点,使最终结果的实际成效降低.本文通过深度变化划分就可以准确的把前景与背景进行区分,并以此完成有效的分割.3.3.2 权重计算文献[16]在探究和分析的过程中,先判断临近表面的实际凹凸程度,然后,根据获得的结果,抉择具体的方法对权重进行运算.此处,假定pi和pj有边连接,并且pi与pj两者的单位法向量分别用ni与nj来进行相应的描述,则下式就可运算pi和pj中间边的实际权重wij.式(9)中,dij=pj-pi表示点的具体向量差.在运算的整个过程中,1-ni·nj的作用是判定平滑度,以此获得相应的平滑区域.表面的平滑程度越高,ni·nj的数值也相对比较高,式(9) 中的wij也越小.为了防止凸的表面分割更为严重化,文献[16]通过一系列的方法降低权重,以此降低在凸表面展开分割的概率.然而,研究结果表明,此方法不能够始终确保有效.如果pi和pj 成凸直角时,ni·nj的实际数值趋向于零,凸关系就会对权重形成比较较小的作用(即取平方后数值往往会保持不变),不能良好避免在边缘位置的分割.另外,ni和nj的夹角为钝角时,ni·nj的实际数值小于0,取平方后权重得到了一定程度的提升,所以,这个位置进行分割的几率有明显增加.权重随法方向乘积变化的关系以及凹凸性对权重计算的影响如图4.本文设计了根据凹凸度对边权重展开整改的方案.假定pi和pj存在边连接,si和sj分别为pi和pj的局部表面,针对pi和pj具有的连接边权重,可用下式进行求解.ωij=exp(k(si,sj)/σ)·(1-ni·nj)其中,表示凹凸度;σ>0代表影响系数.假如对基于平滑程度的权重(1-ni·nj)展开运算,式(10) 中进行的调整的具体特征如下.(1) 假如pi和pj都位于平面上,结合=0,算出,即权值为固定;(2) 假如pi和pj位于凸表面上,结合<0,可以分析出/σ)<1,所以,权值有一定程度的降低,此时, |愈大,则权值就越小;(3) 假如 pi和pj位于凹表面上,结合>0,算出/σ)>1,所以,权值有一定程度的提升,此时,|愈高,则相应的权值就越大.综上所述,本文论述的方法通过凹凸度对权重展开一定的调整,使其渐渐的把凹边缘进行划分,并且把凸边缘进行留存.另外,可对式(10)中的σ展开调整,通过此方式调节凹凸度的影响.图5为σ 不同取值时对在 [-1,+1]上取值的影响.从图5可知,σ 的实际数值越小, k 对权值的影响就越明显.但是,当σ 趋于无穷时,无论值为多少,/σ)趋于 1,这种条件下,式(10)就转化为 wij=1-ni·nj.所以,利用法方向差异展开运算,是此类方法的一个特例.在下文中笔者会结合实验展开详尽的探讨,明晰σ 的具体作用,另外,还将该方法和文献[16]设计的方法进行系统性的对比.3.4 分割和优化本文结合基于图的快速分割算法[17]来展开分割操作.假定表示的是输入的无向带权图,V,E以此代表的是节点集与边集,详细的分割步骤如算法1.从步骤1)到步骤6),对分割区域展开初始化,步骤7)根据权重对边以不断增加的趋势排列,从步骤8)到步骤17),以此选择权重最小的边,在这之后对其展开相应的处理.步骤9)和步骤10),FIND_CLUSTER 返回给定点所在的区域.本文利用不相交集代表点构建的区域,这样就可以在较短的时间中发现给定点所处的具体区域.我们可以对k展开调整,最终可以较好的掌控分割粒度.算法1:无向图分割优化算法输入:G=(V,E) ,k输出:分割部件Bengin1) Initialize S=φ;2) for all v∉V do3) C.Nodes={v};4) C.Int=k;5) S=S∪{C};6) end for7) E=SORT_WEIGHT(E);8) for all e∈E do9) CL=FIND_CLUSTER(S,e.v1);10) CR=FIND_CLUSTER(S,e.v2);11) if CL≠CR and e.w≤min(CL.Int,CR.Int) then12) CN.Nodes=CL.Nodes∪CR.Nodes;13) CN.Int=e.14) S=S\{CL,CR};15) S=S∪{CN};16) end if17) end for18) return S;End4.1 数据和评价指标本文借鉴了文献[18]在探讨过程中列出的数据集.针对所有数据而言,桌面和桌面以上的各个物品充当场景的主体.此处,我们根据具体的复杂程度,将系统性的划分为六个子类,然后结合表1对所有子类进行展示.我们将数据集整体划分为两类,分别是测试集与训练集.这里运用的分割法从本质上讲属于非监督的,结合测试集进行后续实验,然后,对其产生的效果展开科学性的评估.为了精准地获得评估效果,本文首先整体介绍其中关联到的所有指标.对于不定向选择而获得的1张测试图像,通过代表m个人为标注的分割区,用代表获得的n 个分割区域.需要关注的一个问题是,n和m的实际数值或许会有所区别.针对Gi∈G,我们运算和它重叠率最高的区域如下式.,i=1,2,...,m其中,∩ 和∪ 分别表示交、并操作;|·| 表示的是集合的实际大小,这里用来代表点数.因此,我们就可以获得目标分割区域.针对各个Gi及其Si,用TPi=Gi∩Si 表示它的重叠区域,即准确分割点组成的集合;用FPi=Si\Gi 表示涵盖在Si中却不涵盖在Gi中的标注部分,即错误分割点的集合;用 FNi=Gi\Si表示涵盖在Gi中却不涵盖在Si中的区域,即漏划分点组成的集合.这里需要兼顾下述指标[11].,其中,tp,fp依次代表真、假阳性率;fn代表假阴性率;tp的具体数值越大,fp和fn的实际数值越小,那么其产生的效果也更加理想.在评估的整个进程中,主要结合 TPR 和 FPR 来进行,但是,这里应考虑到超、欠分割率 (OSR和USR),两者分别结合Fos和Fus展开相应的描述[19]:与依次表示的是准确和错误分割的实际点数,而代表的是标注的点数.一般而言,假如Fos与Fus都比较小,这就表明得到了比较理想的分割结果.但是, Stein 等[7]提出,在某些条件下,超分割可得到十分理想的效果,例如把有手柄的水杯划分为手柄与杯子主体结构两个部分,在自动物体抓起中可以发挥十分良好的效果. 针对各个待测试图像而言,都可以按照上面的概念来运算其评估指标.针对测试集而言,本文重点通过平均数展开评估.4.2 实验结果4.2.1 参数影响本文论述的运算方法涵盖2个重要的指标,分别是σ与k,主要通过实验对其产生的分割效果展开研究和分析.首先探究 k的具体作用,k可以对分割粒度形成或强或弱的作用,详细来讲,即k的实际取值越大,则分割偏大区域的几率就越大,假如其具体取值偏小,就有较大的几率分割出较多的区域.为了使选择参数的过程更加简单,并便于对结果展开评估,首先要归一化边的权重,即让wij=wij/∑wij.获得处理完成后的图形,研究在[5e-5,5e-4]范围中选择不同k值时的实际结果.如图6所示,Simnor_Diff. 指单一的运用法方向差异展开运算的方法[11],OBconv_vsa 指根据表面凹凸关系进行选择的方法[16],和式 (9)是一样的;OBconv_clsi.指本文论述的新方法,即式 (10),在这里,σ的实际取值大小固定为 0.14.图6(a)显示了k对 TPR与FPR的具体作用,而图6(6)显示了k对OSR与USR的实际作用.对图(6)进行分析,我们不难发现伴随k的递增,所有的TPR和FPR都持续递增.从本质上讲,因为当k值不大时,就比较容易产生超分割的情况,另外,一般欠分割(详细情况见图6(b)).图7展示了k数值递增的整个过程,图7(a)为输入,(b)~(d)分别为超、恰、欠分割.另外,还可利用表格的形式显示k=2e-4时所有方法具体的TPR和FPR值(详见表2).从图6可知,当FPR的数值相当时,本文论述方法的TPR值就比较大,此类现象当k比较小的时候表现得更加明显.这是因为:一些错误分割的像素大多聚拢在交界部位,因此所有的方法并未产生明显的差异;Simnor_Diff.重点按照法方向进行,通常情况下会划分为多个部分,导致TPR的数值较小;OBconv_vsa重点结合凹凸性来展开分割,并能够良好地区分表面边缘,如此就一定程度上降低了超分割,使TPR有所提升;本文方法利用凹凸度来替代凹凸性,让区分性能得到一定的优化,因此,其TPR有所增加.图8是描述方法时对应的实际ROC曲线.经对比分析,我们可以看出本文方法具有十分出色的效果.为探讨和分析σ的具体作用,维持k=1.5e-4不发生改变,在这个前提条件下,不断调整σ,进而探究其作用.图9为我们描述σ在持续改变的过程中,对TPR和FPR的具体作用.我们不难发现TPR 和 FPR 都和σ数值呈负相关性,并且在区间中,能够获得比较理想的效果.除此之外,需要重视的一个问题是,不管σ的数值如何改变,在相对比较复杂的环境中 TPR 都会小于总体TPR,并且前者的TPR超出后者.从某个角度来讲,主要是由于超分割的表现非常良好,同时,在后者中,位置靠前的物体一般而言会截断位于后面的物体,使TPR值增加的难度偏大.图10中详尽的描述了σ处于(σ∈[1e-1,1e3])区间内的分割作用.在σ>1时,σ的改变不会对 TPR 和 FPR 形成比较突出的作用.这和k值具有一定程度的关联(k 值得实际范围是[1,+1]).当σ 比较大而且k变化相对较小时,对/σ)不会形成较大的影响,因此,式(10) 中前项并不会对总权重形成比较明显的影响.但是,σ取值趋于无穷时,k数值细微的改变对权重不会产生影响,接近0.4.2.2 性能评估为对本文方法展开验证,我们将对其进行对比分析,如表3所示. 从表3可知,本文方法和其它比较繁琐复杂的方法的性能十分接近.但是,本文方法具有诸多优点,例如实现的难度较低,可以十分方便地通过参数来展开调控.表3中,σ 是 0.12,取值保持不变,P1 与P2依次和 k=1.5e-4,k=2.5e-4对应. 对图11进行分析,我们发现本文所方法均能够进行有效分割.针对第3行遮挡情况比较严重的问题,由于此类新方法无法将一个物体分离的两个区域划分到一个区域里面,进而导致产生超分割问题.另外,对于场景中的杯子和碗,他们并未充分获得凸表面的约束条件,因此凹的区域一样会获得分割.另外,只是通过凹凸性不能够准确的分割差异化比较突出的物体.但是,针对水杯类型的物体来讲,通常情况下它会被系统性的区分为手柄与杯体,这里运用的技术一样能够区别所有的组成部分.通过对凹凸性在人类识别物体中的功能展开验证.发现此类方法能够使机器人能够完成自动抓取物体的操作[7].但是,现实中,一些物体表面结构比较复杂,并不能仅仅通过凸、凹就可以对其进行判定,例如,一些物体表现出“鞍型”.当表面连接位置为此类结构的时候,通过本文研究的技术依然不能够展开100%有效分割.图12描述的是表面结构由于过于复杂导致出现超分割问题.此类问题的解决和分析是业界人士研究和发展的一个方向,并且也是本文算法进行优化的重要方向.本文系统地探讨和分析了从环境中寻找物体的方法.深入研究了怎样在室内场景里面分割出未知的物体.首先,本文系统论述了局部表面凹凸性的判定方式,然后,提出通过表面凹凸度来测量局部表面的凹凸程度.另外,利用表面凹凸度和法方向信息,设计了一类全新的分割权重运算方法;此类方法可以准确的区分物体表面边缘和物体与场景的交界.另外,本文设计了新型的基于表面凹凸度的目标物体分割方法.用点云代表的场景为输入,通过滤波、表面法方向估计、权重运算等方式得到相应的无向带权图,在这之后利用图分割得到未知物体.此类方法并不复杂,并且高效,不用进行专门的训练.实验结果表明,本文方法要比结合法方向及局部表面凹凸性展开分割操作的方法更为优良.和另外的基于系统性的学习及推理方法进行对比,此类方法十分优秀,最后,物体发现应用成功的结果检验了本文方法的可行性及高效性.【相关文献】[1] Vasudevan S, Gächter S, Nguyen V, et al. Cognitive maps for mobile robots——an object based approach[J]. Rob Autonom Syst, 2007, 55(5):359.[2] Rusu R B, Cousins S. 3D is here: point cloud library (PCL)[C]//Proceedings of 2011。
凸多边形碰撞检测的分离轴算法(SAT) 碰撞检测可分为 Broad Phase (粗略检测)与 Narrow Phase (精细检测)两个阶段。
粗略检测阶段可直接⽐较两个物体的AABB包围框是否碰撞以节省计算量和时间。
在精细检测中,SAT(Separating Axis Theorem,分离轴定理)碰撞检测算法直观且⾼效,它的原理清晰易懂,即若两个物体没有发⽣碰撞,则总会存在⼀条直线,能将两个物体分离。
分离轴适⽤的是凸多边形之间的检测,不适⽤于凹多边形,凹多边形的检测,可以通过算法将凹多边形分割成多个凸多边形再进⾏计算。
算法步骤如下: 步骤⼀:从需要检测的多边形中取出⼀条边,并找出它的法向量,这个向量将会是我们的⼀个“投影轴”。
步骤⼆:循环获取第⼀个多边形的每个点,并将它们投影到这个轴上。
步骤三:对第⼆个多边形做同样的处理。
步骤四:分别得到这两个多边形的投影,并检测这两段投影是否重叠。
如果你发现了这两个投影到轴上的“阴影”有间隙,那么这两个图形⼀定没有相交。
但如果没有间隙,那么它们则可能接触,你需要继续检测直到把两个多边形的每条边都检测完。
如果你检测完每条边后,都没有发现任何间隙,那么它们是相互碰撞的。
根据上⾯步骤两个凸多边形之间碰撞检测的关键代码如下(参考):1def flatten_points_on(points, normal, result):2 minpoint = math.inf3 maxpoint = -math.inf45for i in range(len(points)):6 dot = points[i].dot(normal)7if dot < minpoint:8 minpoint = dot9if dot > maxpoint:10 maxpoint = dot1112 result[0] = minpoint13 result[1] = maxpoint141516def is_separating_axis(a_pos, b_pos, a_points, b_points, axis):17 range_a = [0, 0]18 range_b = [0, 0]1920 offset_v = b_pos-a_pos2122 projected_offset = offset_v.dot(axis)2324 flatten_points_on(a_points, axis, range_a)25 flatten_points_on(b_points, axis, range_b)2627 range_b[0] += projected_offset28 range_b[1] += projected_offset2930if range_a[0] > range_b[1] or range_b[0] > range_a[1]:31return True3233return False343536def test_aabb(b1,b2):37return b1[0][0] <= b2[1][0] and b2[0][0] <= b1[1][0] and b1[0][1] <= b2[2][1] and b2[0][1] <= b1[2][1]383940def test_poly_poly(a, b):41 a_points = a.rel_points42 b_points = b.rel_points43 a_pos = a.pos44 b_pos = b.pos4546for n in a.normals:47if is_separating_axis(a_pos, b_pos, a_points, b_points, n):48return False4950for n in b.normals:51if is_separating_axis(a_pos, b_pos, a_points, b_points, n):52return False5354return True555657def collide(a, b):58if not test_aabb(a.aabb, b.aabb):59return False6061return test_poly_poly(a, b) 对于参数指定的两个凸多边形,碰撞检测函数collide先调⽤test_aabb来判断其AABB包围框是否相交,若外包围框不相交则证明两个多边形之间不可能发⽣碰撞,函数值返回False,反之则使⽤分离轴算法进⾏精细检测。
多边形三角剖分算法python多边形三角剖分算法是计算机图形学中的一个重要技术,用于将一个复杂的多边形分解成若干个三角形,以便于进行图形渲染、碰撞检测等操作。
在本文中,我们将介绍一种基于Python语言实现的多边形三角剖分算法。
1. 算法原理多边形三角剖分算法的基本思路是将原始的多边形不断地划分成小的三角形,直到所有的三角形都符合某些规则。
常见的划分方法有两种:耳朵剖分和三角化剖分。
耳朵剖分是指在多边形中找到一个凸耳朵(即凸多边形中任意一条对角线所连接的两个点不会在凸多边形外部),然后将这个凸耳朵与相邻两个顶点组成一个三角形,并将这个凸耳朵从原来的多边形中删除。
重复执行这个过程,直到所有顶点都被删除为止。
三角化剖分则是通过不断地添加对角线来将多边形划分成若干个不相交的三角形。
具体来说,可以先选择一条对角线并将其添加到多边形中,然后将多边形分成两个子多边形,并对这两个子多边形分别进行递归处理,直到所有的三角形都被分割出来。
2. 算法实现下面我们将介绍一种基于Python语言实现的三角化剖分算法。
具体来说,我们可以采用以下步骤:(1)定义一个函数isDiagonal(polygon, i, j),用于判断线段(i,j)是否为多边形polygon的一条对角线。
该函数的实现可以采用射线法或者三角形法。
(2)定义一个函数triangulate(polygon),用于将多边形polygon进行三角化剖分。
具体来说,该函数可以采用以下步骤:(a)如果多边形polygon只有三个顶点,则直接返回该三角形。
(b)在多边形polygon中找到一条对角线(i,j),使得其满足以下条件:(i,j)是polygon的一条对角线,并且(i,j)不与任何其他对角线相交。
(c)将(i,j)添加到结果中,并将多边形polygon划分成两个子多边形:一个包含顶点i、j以及从i开始顺时针遍历到j之间的所有顶点;另一个包含顶点j、i以及从j开始顺时针遍历到i之间的所有顶点。
简单多边形顶点凸凹性的线性识别
王义章;曹弘
【期刊名称】《计算机应用研究》
【年(卷),期】1996(013)006
【摘要】本文提出了一种简单多边形顶点的凸凹性识别算法,算法是基于对多边形顶点的遍历,其复杂性为0(n),(n多边形顶点数)可在计算机上快速有效的实现简单多边形顶点凸凹性的自动识别,本算法也可用于解决其它几何复杂性的问题。
【总页数】2页(P40-41)
【作者】王义章;曹弘
【作者单位】贵州省科委计算中心;贵州省科委计算中心
【正文语种】中文
【中图分类】TP391.4
【相关文献】
1.基于边向量斜率比较的简单多边形顶点凸凹性快速判别算法 [J], 庞明勇;卢章平
2.基于八区域的简单多边形顶点凸凹性识别算法 [J], 薛理;杨树文;王中辉;张珊;马吉晶
3.基于象限划分的简单多边形方向与顶点凸凹性快速判别算法 [J], 庞明勇;卢章平
4.简单多边形顶点凸凹性的快速确定算法 [J], 金文华;唐卫清
5.简单多边形方向与顶点凸凹性的本质联系 [J], 金文华;唐荣锡;何涛;唐卫清
因版权原因,仅展示原文概要,查看原文内容请购买。
面向快速制造扫描分区的凹多边形凸分解算法
卞宏友;刘伟军;王天然;赵吉宾
【期刊名称】《计算机应用》
【年(卷),期】2005(025)009
【摘要】提出了一个面向快速成型扫描路径规划的凹多边形凸分解算法.首先应用所提出的基于正负法搜索凹点对应的可见点的新算法来找出凹点的可见点串,然后结合所提出的适用于快速制造中扫描分区的剖分准则,利用权函数选择最佳剖分点,并合理使用辅助点,保证了剖分所得凸多边形的形态质量.该算法作为快速成形选区环形扫描路径规划软件的底层算法,在对待扫描的层面轮廓进行分区时得到了应用.【总页数】3页(P2143-2145)
【作者】卞宏友;刘伟军;王天然;赵吉宾
【作者单位】中国科学院,沈阳自动化研究所,辽宁,沈阳,110016;中国科学院,研究生院,北京,100039;中国科学院,沈阳自动化研究所,辽宁,沈阳,110016;中国科学院,沈阳自动化研究所,辽宁,沈阳,110016;中国科学院,沈阳自动化研究所,辽宁,沈
阳,110016
【正文语种】中文
【中图分类】TP391.72
【相关文献】
1.模腔快速制造的分区扫描算法研究 [J], 葛红宇;张建华
2.激光快速成型矩形分区扫描算法的实现 [J], 陈光霞
3.凹多边形凸分解算法在快速原型中的应用 [J], 朱传敏;唐珺n;许田贵
4.面向数控加工系统的3D打印切片算法与分区扫描策略 [J], 来旭辉;魏正英
5.基于顶点可见性的凹多边形快速凸分解算法 [J], 金文华;饶上荣;唐卫清;刘慎权因版权原因,仅展示原文概要,查看原文内容请购买。
适用于凹多边形的Cyrus-Beck改进算法
陈涛
【期刊名称】《计算机科学》
【年(卷),期】2006(33)12
【摘要】本文对目前常用的二维线段裁剪算法进行分析,提出了一种基于Cyrus-Beck算法的改进算法,使其能够扩展到对凹多边形的处理,通过对线段与裁剪窗口位置关系的严格判断将求交次数减到最少,并且通过对交点性质的判断来识别出线段的可见部分.理论分析和实验结果均表明该算法优于目前处理任意多边形裁剪框的算法.
【总页数】5页(P217-220,224)
【作者】陈涛
【作者单位】南京大学计算机科学与技术系,南京,210093
【正文语种】中文
【中图分类】TP3
【相关文献】
1.一种凹多边形凸分解的全局剖分算法 [J], 贺怀清;杨鹏
2.凹多边形剖分算法在快速成形中的应用 [J], 章琦;周惠群;王秀婷
3.适用于信息融合算法性能评估的DS改进算法 [J], 杜思伟; 林家骏
4.基于改进粒子群算法的凹多边形食堂布局优化 [J], 徐泽宇;蒋南云
5.一种凹多边形区域的无人机覆盖路径规划算法 [J], 王红星;马学娇;张长森
因版权原因,仅展示原文概要,查看原文内容请购买。