目录一、多边形的逼近二、凸包一、多边形的逼近findContours后的轮廓信息countours可能过于复杂不平滑,可以用approxPolyDP函数对该多边形曲线做适当近似,这就是轮廓的多边形逼近。apporxPolyDP就是以多边形去逼近轮廓,采用的是Douglas-Peucker算法(方法名中的DP)DP算法原理比较简单,核心就是不断去找多边形最远的点加入形成新的多边形,直到最短距离小于指定的精度(阈值)。approxPolyDP(curve,epsilon,closed[,approxCurvel])curve要逼近的轮廓epsilon即DP算法使用的阈值closed轮廓是否闭合阈值
我目前正在开发一个私有(private)项目,该项目依赖于使用BoostC++库对多边形进行的一些操作。我目前正在尝试使用内多边形/负多边形概念。我现在需要做的是连接三个多边形,其中两个具有正(逆时针)外多边形和负(顺时针)内多边形。第三个是负多边形,一个新的多边形对象,面积为负-指向顺时针方向。这就是我不确定如何处理这种情况的关键。这是这三个多边形的图片。连接左上多边形和右下多边形的中间一个是负多边形。现在我想做的是通过union函数连接所有三个多边形。我期望union做的是切掉多边形1和3的正部分(正多边形)并返回1和3的剩余两个多边形。我实际得到的是未触及的多边形1和3,因为不会
我正在寻找一种方法来找到面积最大的四边形。我已经计算了凸包的点并按顺时针方向对它们进行了排序。我尝试了蛮力,但当然它太慢了。所以我在这里找到了最大三角形的算法:Howtofindlargesttriangleinconvexhullasidefrombruteforcesearch它看起来非常好,所以我尝试重新制作它。我有一个函数可以通过将四边形分成两个三角形来计算任何四边形的面积(在这个函数中我对输入点进行排序以确保我正在计算直角三角形)。在这里:intn=convexHull.size();intA=0;intB=1;intC=2;intD=3;intbestA=A;intbest
我有一个约束delaunay三角剖分(CDT)算法,我有一个多边形(它可以是凹面或凸面)作为输入。如何在不引入新点的情况下使用该约束delaunay三角剖分算法将多边形分解为三角形?编辑:所有三角形的并集必须等于多边形。所以不能只将CDT连同边界作为约束边来生成三角形,因为无论输入是凹的还是凸的,这都会产生凸多边形。 最佳答案 由于您有一个多边形而不是点云,最简单的方法是简单地进行三角测量,然后访问每条边并使用简单的线-多边形相交测试来测试它是否在原始多边形之外。根据您的算法,您可以将此测试作为三角形segmentation的一部分
我已经实现了截锥体剔除并正在检查边界框与截锥体平面的交集。我添加了暂停视锥体更新的功能,这让我可以查看视锥体剔除是否正常工作。当我暂停后转身时,我身后以及左侧和右侧没有任何渲染,它们逐渐变细,正如您所期望的那样。在剪辑距离(远平面)之外,它们仍然呈现,我不确定这是否是我的平截头体更新或边界框检查代码的问题,或者我使用了错误的矩阵还是什么。当我将投影矩阵中的距离设置为3000.0f时,它仍然表示边界框远远超过了它仍在平截头体中,但事实并非如此。这里是我创建模型View矩阵的地方:projectionMatrix=glm::perspective(newFOV,4.0f/3.0f,0.1f
我正在使用GEOS库,并且正在尝试创建一个Polygon有一个洞。根据documentation,我必须传入LinearRing,代表外部“壳”,和一个std::vector,表示壳中的孔。第一个参数很简单,但第二个参数给我带来了麻烦。Polygon希望第二个参数中的元素是LineStrings(LineString是Geometry的子类);否则,它会抛出一个异常说明LineString孔需要s。如果我只是投LineStrings至Geometry,然后它抛出异常。如果我不转换它,我会得到一个编译错误,指出一种类型的指针不能转换为另一种类型的指针。我不知道该怎么做。这是演示错误的简短
我一直在程序中使用boost::geometry库,主要用于处理多边形对象。我现在正在尝试优化我的代码以更好地缩放更大的多边形。我的一个函数检查给定多边形和给定点(通常在多边形内部)点和多边形外环之间的最小和最大距离。我通过在多边形边上循环来实现:polygonpol;pointmyPoint;doublemin=9999999,max=0;for(autoit1=boost::begin(bg::exterior_ring(pol));it1!=boost::end(bg::exterior_ring(pol));++it1){doubledistance=bg::distance(
我有一个没有孔的简单多边形,需要将其三角化为凸多边形以便在物理引擎中使用,而且我可以使用这些凸多边形通过三角形带进行渲染。This维基百科文章展示了如何使用单调多边形对多边形进行三角剖分。它提供了它如何工作的简短描述,但不够详细,我无法理解。这种方法似乎非常适合我的需要,FlashDemo它链接到表明该算法非常适合我的需要。我一直在谷歌上搜索以寻找对算法的更好解释,但我只能找到进行三角剖分的库或源代码。我更愿意学习它是如何工作的并编写我自己的方法,但如果我需要使用预先编写的库,它就必须这样做。任何人都可以提供解释或资源来说明我如何了解这种三角测量的工作原理吗?
我想在openGLGlut中通过鼠标交互绘制一个多边形,每次左键单击都将是一个顶点,并且将在每个顶点之间绘制一条线。单击鼠标右键时,多边形将关闭从最后一个顶点到第一个顶点绘制一条线。我想到了这个,但它似乎不起作用。voiddraw_polygon(intbutton,intstate,intx,inty){boolright_pushed=0;glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POINTS);if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN){p1.x=x;p1.y=480-y;//ifrighti
下面的代码创建了2个方形多边形,红色和绿色。我想在绿色上方放置一个红色方block,但我做不到。声明深度缓冲区,必要时清理,正确配置正交系统。如果我指定一个超出范围(2;-2)的值,多边形就会消失。#includeconstexprautoFPS_RATE=120;intwindowHeight=600,windowWidth=600,windowDepth=600;voidinit();voididleFunction();voiddisplayFunction();doublegetTime();doublegetTime(){usingDuration=std::chrono::