CGAL:线段和多边形之间的交点? [英] CGAL: Intersection between a segment and a polygon?...查看:422 发布时间:2020/9/30 21:04:15 computational-geometry cgal 本文介绍了CGAL:线段和多边形之间的交点?...点,线,线段,三角形,平面之间的交点确实存在。 多边形之间的交点也在那里。 我的问题是: 有这样的功能吗? 如果没有,这是否意味着我需要将多边形分解为多个部分,并在这些部分之间进行相交?...(我不愿意这样做的原因是,我认为CGAL实际上可能会使用这种方式在多边形之间进行相交。为什么没有这样的函数将线与多边形相交?)或者还有其他更好的方法吗?...doc_html/cgal_manual/Boolean_set_operations_2_ref/Class_Polygon_set_2.html 我希望清楚, Kiril 这篇关于CGAL:线段和多边形之间的交点
计算两条共线的线段的交点 计算线段或直线与线段的交点 求线段或直线与折线、矩形、多边形的交点 求线段或直线与圆的交点 凸包的概念 凸包的求法 三、算法介绍 矢量的概念: 如果一条线段的端点是有次序之分的...判断点是否在多边形中的这个算法的时间复杂度为O(n)。 另外还有一种算法是用带符号的三角形面积之和与多边形面积进行比较,这种算法由于使用浮点数运算所以会带来一定误差,不推荐大家使用。 ...线段和多边形交于线段的两端点并不会影响线段是否在多边形内;但是如果多边形的某个顶点和线段相交,还必须判断两相邻交点之间的线段是否包含于多边形内部(反例见图b)。 ...证明如下: 命题1: 如果线段和多边形的两相邻交点P1 ,P2的中点P' 也在多边形内,则P1, P2之间的所有点都在多边形内。 ...Q-P'完全连续,所以P1Q和QP'一定跨越多边形的边界,因此在P1,P'之间至少还有两个该线段和多边形的交点,这和P1P2是相邻两交点矛盾,故命题成立。
灰度图片: 高斯模糊图片: Canny Edges: 多边形截取后的图片: 生成左右两条线: 和原图结合的最终图片: Gray 通常的彩色图片是三通道的,简便起见...计算梯度的时候使用了卷积,相关计算如下(方向约成【0、45、90、135】之间): Non-maximum suppression 计算完梯度后,需要进行thin the edge。...原空间中的点可以映射到参数空间中的直线。A。 原空间中的点可以映射到参数空间中的直线,参数空间中直线的交点代表原空间中点的连线。C。...原空间中的直线可以映射到参数空间中的点,参数空间中两个点的连线代表原空间中两个直线的交点。A。...车道线 无论采用xy坐标还是极坐标,原空间的点都对应参数空间的曲线,原空间的直线都对应着参数空间中曲线的交点。如下图所示,可以根据在参数空间中每个grid相交点的出现次数寻找原空间中的直线。
w=400&h=339&f=gif&s=4560436] 多边形的合并是指将多个多边形合并为一个多边形,其前提条件是多边形之间有交叉区域或者共边。...w=400&h=291&f=gif&s=3868364] Turf.js 不难发现,多边形的拆分合并中会有大量且复杂的几何计算,包括点、线、面相互之间的相交、包含等计算。...不过我们并不需要造轮子,可以使用Turf.js完成大部分的基础计算。...可以发现用线B切线A时,实际上是先计算线B与线A的交点,再使用splitLineWithPoints方法用这些交点对线A进行切割。...这里先简单介绍一下判断点、线段关系的计算方法,用P表示点,S0和S1两点构成线段,那么首先判断向量P-S0和S1-S0的叉积(叉积表示其构成平行四边形的面积)是否为0,然后判断P是否在S0、S1两点之间
,则输出线段SP与裁剪线的交点和P ?...参数形式和隐函数形式都是精确的解析表示法,在图形学中,它们均使用较多; C)从描述复杂性和形状灵活性考虑,最常用的参数曲面是3次有理多项式的曲面; D)在曲线和曲面定义时,使用的基函数应有两个重要性质...( ) A)多边形被两条扫描线分割成许多梯形,梯形的底边在扫描线上,腰在多边形的边上,并且相间排列; B)多边形与某扫描线相交得到偶数个交点,这些交点间构成的线段分别在多边形内、外,且相间排列;...C)用射线法判断点是否在多边形内时,若该射线与多边形的交点数目为偶数即可认为在多边形内部,若为奇数则在多边形外部,而且不需考虑任何特殊情况; D)边的连贯性表明,多边形的某条边与当前扫描线相交时...(7分) 5.请用伪代码程序描述实现使用DDA算法扫描转换一条斜率介于45°和-45°(即|m|>1)之间的直线所需的步骤。(6分) ?
下面第一种函数的形式,是使用了一个Rect,只有当直线完全在指定的矩形范围外的时候,该函数才会返回false;第二种形式是用了一个Size,该Size表示的矩形范围是从(0,0)开始的,如下: bool...但是对于有自交点的多边形不能正常工作,pts中的点将被按顺序用直线段连接起来,第一个点和最后一个点之间也会连接起来。...,和fillConvexPoly()不同的是这个函数可以处理自交点的情况。...,可以处理包括有自交点的多边形在内的普通多边形。...,可以更灵活的处理直线上的像素值。
微卡智享 # 步骤 1 旋转矩形的点和上一步获取的最近点设置一个阈值距离,在距离内的都列入当前区域的直线拟合点,超过阈值的用最近点加上阈值重新算为计算点来进行拟合 2 根据不同区域计算直线拟合 3 求到的直线拟合点实现每两条求交点...4 得到的4个交点做为透视变换的坐标点 01 阈值范围内的直线拟合 ?...03 每两条直线拟合求交点 ? 直线拟合的函数,输出的参数line里面有说到了是Vec4f的类型,输出参数的前半部分给出的是直线的方向,而后半部分给出的是直线上的一点(即通常所说的点斜式直线)。...我们直线拟合的得到的4个Vec4f就需要每两个求交点最后得到上图中红圈的1,2,3,4的4个交点。...//根据最小矩形和多边形拟合的最大四个点计算透视变换矩阵 Point2f rectPoint[4]; //计算旋转矩形的宽和高 float rWidth
const { return std::fabs((*this) * _Off) < eps; } //两直线交点,参数:目标直线[_Off] point...n[即返回多边形的点数量]为0则不存在半平面交的多边形(不存在区域或区域面积无穷大) polygon& halfPanelCross(pVector _Off[], int ln) {...(注意不同直线形成的交点可能重合) if(top <= bot + 1) return (*this); for(i = bot; i < top...(ango - angp)); return std::make_pair(pVector(_Off, pl), pVector(_Off, pr)); } //计算直线和圆的两个交点...//参数:直线[_Off](两点式),返回两个交点,注意直线必须和圆有两个交点 std::pair cross(pVector _Off) const
1.多边形的扫描转换和区域填充 1.边缘填充算法 其基本思想是按任意顺序处理多边形的每条边。...在处理每条边时,首先求出该边与扫描线的交点,然后将每一条扫描线上交点右方的所有像素取补。多边形的所有边处理完毕之后,填充即完成。 ?...2.栅栏填充算法 栅栏指的是一条过多边形顶点且与扫描线垂直的直线。它把多边形分为两半。...在处理每条边与扫描线的交点时,将交点与栅栏之间的像素取补 2.多边形的扫描转换与区域填充算法小结 (1)基本思想不同 多边形扫描转换是指将多边形的顶点表示转化为点阵表示...填充一个定义的区域的选择包括: · 选择实区域颜色或图案填充方式 ·选择某种颜色和图案 这些填充选择可应用于多边形区域或用曲线边界定义的区域
,v为直线的方向向量) //点在直线上的投影 POINT proline(POINT a, POINT b, POINT p) {return a+(b-a)*(dot(b-a,p-a)/dot(b-a...//特判点在线段上 if(onseg(p1,p2,{x,y})) return true; //从点(x,y)向x反方向引出射线 //计算点射到的多边形的边数边数...POINT LLitesct; //直线与直线的交点 //返回交点个数 ll LineLineIntersection(LINE L1, LINE L2, POINT &p) { if(sgn...vector LCitesct; //直线与圆的交点 //解方程:(at+b)^2+(ct+d)^2 = r^2; //化简得:et^2+ft+g = 0 //返回交点个数 ll...POINT LLitesct; //直线与直线的交点 //返回交点个数 ll LineLineIntersection(LINE L1, LINE L2, POINT &p) { if(sgn
对于点A是否在多边形P内的判定, 一般有两种方法:射线法和转角法。 这里介绍一下射线法。...射线法:从点A出发作一条射线,计算这条射线与多边形P的边的交点数量N,如果N为奇数,则点A在多边形P内,否则在P外部。...(红心点为A,右边有3个点,说明在多边形内部) 射线法的原理:直线不可能从内部再次进入多边形,或从外部再次穿出多边形,即连续两次穿越边界的情况必然成对(大概就是这个意思,不是严格证明)。...两个向量a和b的叉积写作a^b = |a| |b|sinα (α为a,b向量之间的夹角) 叉积的几何意义: 对于向量AP1与向量AP2,如果叉积为0,说明夹角为0,也就是共线...= dcmp(P2.y - P.y) > 0); if (isUpDownLine) { //2、点在射线与线段交点的左边 //直线应该是
假设直线段两个端点M、N的编码为1000和1001(按TBRL顺序)( ) A)直接舍弃 B)直接保留 C)对MN再分割求交 D)不能判断 3.下面哪个不是齐次坐标的特点( ) A)用n+1...( ) A)3 B)6 C)7 D)8 5.扫描线消隐算法在何处利用了连贯性( ) (1)计算扫描线与边的交点;(2)计算多边形在其边界上的深度值;(3)计算多边形在视窗任意点处的深度值;(...4)检测点与多边形之间的包含性 A)仅在(1)(2)(3)处 B)仅在(1)(3)处 C)仅在(1)(2)处 D)仅在(1)(2)(3)(4)处 6.以下关于图形变换的论述哪些是错误的?...( ) A)平移变换不改变图形大小和形状,只改变图形位置; B)错切变换虽然可引起图形角度的改变,但不会发生图形畸变; C)旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变...(7分) 4.已知三角形ABC各顶点的坐标A(1,2)、B(5,2)、C(3,5),相对直线y-x-1=0作对称变换,请写出变换的步骤和每一步变换的矩阵。
视线与三角面相交 这是最常见的相交问题,需要用到之前提到的三角的重心坐标系概念 视线与三角面相交实际上是求解一个直线与平面交点的问题,类似球的相交,我们首先将直线方程代入到三角的平面方程中,这里使用之前重心坐标系的方程...,这样可以省去一些明显无用的计算 视线与多边形相交 视线与多边形的相交判断是个更加复杂的问题,因为多边形可能是凸多边形或凹多边形,平面交点可能刚好穿过多边形的空洞。...关键思路是计算射线在多边形平面的交点与投影到二维平面的多边形可以形成的交点数量 首先求解下面的式子,其中p=e+td,通过求解t得出射线与多边形所在平面相交的交点,这一步可以筛选掉多边形与射线平行的情况...然后我们将多边形和交点投影到某个轴面上,例如xoy面,在二维上让交点向着某个轴向例如x轴方向形成直线,接着计算与多边形产生的交点数量,如果交点数量是偶数个则代表交点在多边形外,如果交点数量是奇数则表示交点在多边形内...在这里算法取了个巧,通过比较法线与光照向量和视线之间的角平分线的角度来判断视线是否接近于光线的镜面反射,由此得到下面的式子。
id=1474 写这题的目的是看完了zzy的论文,写了半平面交,验证一下正确性,结果发现我写的问题还是很多的。 题目大意是问能不能放一个摄像机,使得摄像机能看到整个多边形内部。...这题和1279和3130差不多,过了这题再去对付那两题就简单多了。..._Off) < eps; } //两直线交点,参数:目标直线[_Off] point crossLPt(pVector _Off) { //注意先判断平行和重合...pVector dequeue[maxpn]; //获取半平面交的多边形 //参数:向量集合[l],向量数量[ln];(半平面方向在向量左边) polygon& halfPanelCross...(注意不同直线形成的交点可能重合) if(top <= bot + 1) return (*this); for(i = bot; i < top
Polygon Collider 2D(多边形碰撞器):创建一个自定义形状的碰撞器,可以通过添加多边形的顶点来定义一个复杂的碰撞形状。...要在对象上添加Collider组件,可以通过Unity编辑器的组件面板或使用代码进行手动添加。碰撞器通常与刚体(Rigidbody)组件一起使用,以实现物体之间的物理交互和碰撞检测。...Unity提供了多种方式来进行碰撞检测: 刚体碰撞检测:通过给物体添加刚体组件(Rigidbody),可以启用物体之间的物理交互和碰撞检测。...物理射线检测:使用物理射线(Physics.Raycast、Physics2D.Raycast)可以发射一条射线来检测是否与场景中的物体发生碰撞。根据射线与物体的交点,可以进行进一步的处理。...这些函数可以返回与指定区域重叠的物体列表,供开发者进一步处理。 物理材质和碰撞层:通过为物体设置不同的物理材质和碰撞层,可以控制物体之间的碰撞检测和行为。
主要涉及的问题有如下几点: 直线检测 直线聚类 直线筛选 交点计算 交点排序 ---- 1.直线检测 常规直线检测方法即是Hough。这里推荐使用一种比较新的直线检测算法LSD。...算法的具体使用请参考网站提供的源码。 图2和图3分别是Hough直线检测与LSD直线检测的结果示意图。...然后对相同标签号的线段对应的极坐标进行加权平均,即为对应直线。 算法如下: 由于身份证边缘长度是大于一定阈值的,此时,如果同类线段的长度和小于某阈值,则可以剔除掉该线段。 ...---- 4.交点计算 这里给出极坐标系下直线的求交点方法,这里主要注意两点:首先,两条直线不是平行的,其次,直线的交点在图像范围内。...---- 5.交点排序 得到四个交点,此时点的顺序可能是错乱的,需要对点进行排序,起点选择为左上角的点,并按逆时针方向对点排序。方法如下: 最后,检测结果如图8所示。 图8
导读 本期将介绍使用OpenCV用两种不同的方法实现快速查找计算直线/网格线交点坐标。...直线交点计算思路与常用方法 直线交点的计算这里列举几个比较常用的方法: ① 在知道直线方程的前提下(或知道直线上一点和直线角度),联立方程求解交点坐标(注意数学坐标系和图像坐标系的关系); ② 不知道直线方程...,通过检测直线的方法(例如霍夫变换)计算直线方程,然后联立方程求解交点坐标; ---- 第一种方法当然是最理想的情况,这样计算的交点也最准确。...---- 综上来看,前面两种方法并不是非常好用,下面来介绍两种简单实用的方法: ③ 利用角点检测方法粗定位角点,然后通过形态学操作计算出直线交点位置; ④ 利用直线交点出特征,使用形态学操作直接定位直线交点位置...本文使用方法③和方法④,设置合适的参数即可检测到直线交点位置。
按逆时针顺序给出n个点,求它们组成的多边形的最大内切圆半径。 二分这个半径,将所有直线向多边形中心平移r距离,如果半平面交不存在那么r大了,否则r小了。...平移直线就是对于向量ab,因为是逆时针的,向中心平移就是向向量左手边平移,求出长度为r方向指向向量左手边的向量p,a+p指向b+p就是平移后的向量。...半平面交就是对于每个半平面ax+by+c>0,将当前数组里的点(一开始是所有点)带入,如果满足条件,那么保留该点,否则,先看i-1号点是否满足条件,如果满足,那么将i-1和i点所在直线和直线ax+by...+c=0的交点加入数组,再看i+1号点如果满足条件,那么将i和i+1号点所在直线和直线ax+by+c=0的交点加入数组。...要注意一下向量方向,半平面的直线的方向。
我们管这个过程叫三角剖分,可见三角剖分是联系复杂多边形和三角形之间的桥梁。 复杂的多边形 如何定义多边形?在计算几何里面也是一个比较麻烦的问题,常见的多边形可以是下图这样的。...算法的关键在于求出边的“交点”和“交点的进出性”。“交点”相对比较容易理解,姑且不表。“进出性”可以用来表达交点和对应多边形的关系。...更快的数据结构 为了解决或者说部分解决 贝塞尔曲线的复杂度带来的性能损耗。可以使用多个矩形来表示一个复杂区域,但是要求矩形之间不能存在堆叠。...下图描述了如何剔除矩形之间的堆叠,只需要执行一次线扫描算法即可。 同样矩形非常容易就可以剖分成三角形,并不需要使用复杂的三角剖分的算法。所以可以快速构建对二维区域的描述。...同样基于“矩形集合”的二维区域描述非常容易构建出并交差等运算。而且相关的碰撞检测算法也非常容易实现,但是对于需要使用曲线包围的区域就显的比较乏力了。
在平面中,向量$v$和$w$的叉积等于$v$和$w$组成的三角形的有向面积的两倍 记$cross(v,w)$表示两向量的叉积,若$cross(v,w) > 0 $则说明$w$在$v$的左侧,否则$w$...(P1P0顺时针旋转到P1P2),0为共线 判断两直线的交点 尼玛看不懂 Point GetLineIntersection(Point P, Vector V, Point Q, Vector W)...tv,Q + tW)的交点(看不懂直接上y = kx + b吧) 计算点到直线的距离 利用叉积算出他们围城的平行四边形的面积,再除以底,高即为距离 double DistanceToLine(Point...求凸多边形的直径 定义:凸多边形的直径为多边形的上最远的点对的距离 很显然,直径一定是在对踵点处取得,直接枚举对踵点即可 double RotatingCaliper_diameter(Point Poly...int main() { return 0; } 参考资料 也许是史上最不良心的低阶计算几何讲解和习题集??
领取专属 10元无门槛券
手把手带您无忧上云