首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

hover 背后的数学和图形学

hover 是跟 DOM 绑定的,常规 DOM 是一个个矩形(CSS 盒模型),鼠标移动时浏览器需要判断鼠标指针坐标是否在这个 DOM 的矩形范围之内,根本上是一个数学问题,即判断一个点是否位于一个矩形内...为解决这个问题, Canvas 提供了isPointInPath() API 来判断某个点是否位于某个闭合路径之内,不过这个 API 并不是很好用,这个方法时挂载到绘制上下文 context上的,只能判断某个点是否位于当前绘制的路径内...所以在 Canvas 2D 技术领域也通常会借鉴 WebGL 的实现方案,即通过数学方法判断一个点是否位于一个不规则多边形内。...WebGL 中实现某个图形的 hover 以及click、mouseover、mouseout等鼠标事件的根本就是上文提到的判断一个点是否位于一个不规则多边形内。...回顾上文提到的多边形顶点数据制备,多边形的边是由相邻两个顶点相连而成,顶点是有序的,也就是说多边形的每条边都是有向线段,所以判断两条线段是否相交这个问题准确的说发应该是:判断两个有模向量是否相交。

1.4K10

CGAL功能大纲

这个包提供了一个矩阵搜索框架,它是计算凸多边形顶点的所有最远邻居、内接到平面点集的最大k-gons和计算矩形p中心的基础技术。...此外,还描述了一些用于计算船体点的特定极值点和子序列的函数,如一组点的上、下船体。 三维凸包3D Convex Hulls 这个包提供了计算三维凸壳的函数,以及检查点集是否是强凸的函数。...[带洞多边形拓扑规定]一个有洞的二维多边形称之为外轮廓,在其有界区域内有零个或多个轮廓,称为内轮廓或洞或孔。外轮廓的有界区域与内轮廓的无界区域的交点是带孔多边形的内部。...二维可视域计算2D Visibility Computation 这个包提供了几个变量来计算二维多边形区域内一个点的可见面积。...点云形状检测Point Set Shape Detection 该组件实现了两种基本的形状检测算法:有效的RANSAC算法和区域增长算法。平面是用无向法线的点集来检测的。

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    WPF 基础 2D 图形学知识 判断点是否在任意几何内部方法

    中,可以使用 Geometry 表示几何,在这个类里面有提供特别的方法用来判断点是否在几何内 判断点在几何内 这个做法也叫命中测试,输入是一个 Geometry 和一个点,输出是判断点是否在闭合的 Geometry...题目的表述是 丘比特的箭,点是否在面内,对于点A是否在多边形P内的判定算法。...如果在几何上的所有顶点作出的两个向量,分别求出的叉积拿到的新向量,如果这些新向量的方向都相同,那么证明点在几何上的所有顶点分别连接的向量与要判断的点都在相同的方向。...为例_WilliamSun0122的博客-CSDN博客 丘比特的箭(点是否在面内)- HDU 1756 - 云+社区 - 腾讯云 HDU 1756 Cupid’s Arrow(判定点在多边形内) ACM...以及一个点,求这个点是否在旋转矩形内 定义给定的点是 M 点,而旋转矩形顶点是 A B C D 点。在旋转矩形没有经过旋转的顶点如下 ?

    1.5K20

    切呀切披萨——最优三角剖分

    图4-53美味披萨 问题分析 我们可以把披萨饼看作一个凸多边形,什么是凸多边形呢,就是多边形的任意两点的连线在均落在多边形的内部或边界上。 1.什么是凸多边形?...如果我们给定凸多边形及定义在边、弦上的权值,即任意两点之间定义一个数值作为权值。如图4-57所示。 ? 三角形上权值之和是指三角形的三条边上权值之和: ? ? 3.什么是凸多边形最优三角剖分?...最优三角剖分的各三角形权值之和实际上是凸多边形周长+2倍的弦值之和,在周长一定的情况下,各三角形权值之和最小,弦值之和一定最小,因此该问题可以归结为凸多边形的最优三角剖分问题。...凸多边形最优三角剖分的问题,首先判断该问题是否具有最优子结构性质,有了这个性质就可以使用动态规划,然后分析问题找最优解的递归式,根据递归式自底向上求解,最后根据最优决策表格,构造出最优解。...输入顶点数n,然后依次输入各个顶点之间的连接权值存储在二维数组g[][]中,令n=n-1(顶点标号从v0开始),m[i][i]=0,s[i][i]=0,其中i= 1,2,3,...,n。

    1.6K31

    判断点是否在多边形内的Python实现及小应用(射线法)

    判断一个点是否在多边形内是处理空间数据时经常面对的需求,例如GIS软件中的点选功能、根据多边形边界筛选出位于多边形内的点、求交集、筛选不在多边形内的点等等。...判断一个点是否在多边形内有几种不同的思路,相应的方法有: 射线法:从判断点向某个统一方向作射线,依交点个数的奇偶判断; 转角法:按照多边形顶点逆时针顺序,根据顶点和判断点连线的方向正负(设定角度逆时针为正...射线法的原理及实现 射线法就是以判断点开始,向右(或向左)的水平方向作一射线,计算该射线与多边形每条边的交点个数,如果交点个数为奇数,则点位于多边形内,偶数则在多边形外。...点在多边形内的应用 上面第一段已经描述了一些应用场景,下面给出一个应用的例子:有一堆点数据存在csv文件里,如何检索位于某个城市的点出来,检索出来之后的分析(例如加标签、改属性、做统计还是其他)这里不讨论...= [float(line[pindex[0]]), float(line[pindex][1])] if isPoiWithinPoly(point, polygon): #在多边形内

    9.8K40

    3D 可视化入门:渲染管线原理与实践

    一般来说,图元最多只有三角形,因为它们总是有相同的顶点数,而且三个顶点可以确定一个平面,后续可以方便地将其视为一个二维平面来处理。如果有四个点,就需要额外的方法保证其在同一平面,且不产生凹多边形。...每点一次鼠标,就在图元数组中添加一个顶点,完成整个渲染的流程后,在画布上绘制出了一个白色的点。 那么怎么画线和三角形呢?...前置知识:对于任意二维或三维空间上的点,我们都可以通过应用矩阵变换的方式,将其进行仿射(affine)变换,比如平移、缩放、拉伸 和 旋转。...视锥体剪裁:移除不在视锥体范围内以及近剪切面内、远剪切面外的多边形。 背面剔除:根据顶点顺序,移除背面(或正面)朝向我们的多边形。 遮挡剔除:如果多边形被另一个多边形完全遮挡,则剔除。...要注意的是,如果扫描到了顶点,需要用相邻的顶点是否在扫描线两侧来判断是不是进入或离开多边形。这个算法也可以进行优化。

    6.9K21

    使用 mesh 实现多边形裁剪图片!Cocos Creator!

    一个多边形可以分割成多个三角形,而顶点索引是告诉它如何去绘制这些三角形。 ? 如何将一个多边形切割成多个三角形?可以采用'耳切法'的方式。把多边形的一个耳朵切掉,然后再对剩下的多边形再次切割。 ?...方向根据右手法则确定,就是手掌立在a、b所在平面的向量a上,掌心由a转向b的过程中,大拇指的方向就是外积的方向。 ? 对于cc.Vec2的外积就是面积,有正负之分,也是根据右手法则确定。 ?...若多边形ABCDEF顶点以逆时针顺序排序的话,AB x BC > 0 表示B点是凸顶点。参考代码如下。...const v1 = p2.sub(p1); const v2 = p3.sub(p2); if (v1.cross(v2) >= 0) { // 是凸点 } 判断点D是否在三角形ABC内,可以通过外积计算点与线的位置关系判断出...// 判断一个点是否在三角形内 _testInTriangle(point, triA, triB, triC) { let AB = triB.sub(triA), AC = triC.sub

    2.2K40

    计算几何算法概览

    判断圆是否在多边形内 判断点是否在圆内 判断线段、折线、矩形、多边形是否在圆内 判断圆是否在圆内 计算点到线段的最近点 计算点到折线、矩形、多边形的最近点 计算点到圆的最近距离及交点坐标...具体情况可参照下图:   判断点是否在线段上:   设点为Q,线段为P1P2 ,判断点Q在该线段上的依据是:( Q - P1 ) ✖ ( P2 - P1 ) = 0 且 Q 在以 P1,P2为对角顶点的矩形内...线段和多边形交于线段的两端点并不会影响线段是否在多边形内;但是如果多边形的某个顶点和线段相交,还必须判断两相邻交点之间的线段是否包含于多边形内部(反例见图b)。   ...判断多边形是否在多边形内:   只要判断多边形的每条边是否都在多边形内即可。判断一个有m个顶点的多边形是否在一个有n个顶点的多边形内复杂度为O(m*n)。   ...判断线段、折线、矩形、多边形是否在圆内:   因为圆是凸集,所以只要判断是否每个顶点都在圆内即可。   判断圆是否在圆内:   设两圆为O1,O2,半径分别为r1, r2,要判断O2是否在O1内。

    1.6K40

    UE4Unity绘制地图基础元素-面和体

    面数据通常以离散点串形式存储,因此渲染时最关注的是如何将其展现为闭合的图形。 体可以理解为带有高度的面,在地图中代表各种建筑,通常是由其顶部面数据和高度数据处理得到。...顶面渲染流程和闭合区域面一致,侧面则是根据楼高进行绘制,在每两个相邻顶点间渲染一个矩形从而构成闭合体的侧面,为了减少绘制次数通常只绘制朝向外侧的侧面,底面在正常视角下看不到,也可以酌情选择是否绘制。...通过全链路的排查,才查出是多边形数据的问题。 三角剖分在使用时有一个前置条件:使用对象必须为简单多边形,即多边形中的任何两条边仅可以在顶点处相交。...下图(a)多边形为满足定义的简单多边形,图(b)多边形边01和23在非顶点处相交,因此是非简单多边形。...以上述的非简单多边形(b)为例,边12拔起生成矩形1245,边23拔起生成矩形2364,两个侧面矩形在面1245上完全重合,当外立面贴上不同的纹理后就会产生Z-Fighting现象。

    1.3K51

    判断点在多边形内算法的C++实现

    算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。...判断point(x,y)是否在side上,如果是,则返回true。 2). 判断line与side是否有交点,如果有则count++。...具体实现 在具体的实现过程中,其实还有一个极端情况需要注意:当射线line经过的是多边形的顶点时,判断就会出现异常情况。...407.98, 579.43)在多边形内" << endl; } else { cout 点(407.98, 579.43)在多边形外" << endl; } // if (Point_In_Polygon...改进空间 很多情况下在使用该算法之前,需要一个快速检测的功能:当点不在多边形的外包矩形的时候,那么点一定不在多边形内。

    6.1K30

    理论基础 - 十大GIS相关算法

    4、点在多边形内外的判断 ① 角度和法 首先,假如在一个二维平面上,有一个多边形和一点P,按顺时针或逆时针方向计算每两点与点P的角度求和,若角度和点P在多边形外;若角度和=360°...(2π),则点P在多边形内;若角度和=180°(π),则点P在多边形上; ?...② 射点法 首先,假如在一个二维平面上,有一个多边形和一点P,从该点处向某一方向做一条射线,若点P在多边形外,则该射线与多边形的交点个数必为偶数(包括0);若点P在多边形内,则该射线与多边形的交点个数必为奇数...③ 叉乘法 想象一个凸多边形,将凸多边形中每一个边AB,与被测点P,求PA×PB。判断结果的符号是否发生变化,如果没有变化,P在多边形内;反之点处于凸多边形外。但对于凹多边形不再适用。...泰森多边形是对空间平面的一种剖分,其特点是多边形内的任何位置离该多边形的样点(如居民点)的距离最近,离相邻多边形内样点的距离远,且每个多边形内含且仅包含一个样点。

    2.9K32

    用OpenGL绘制平滑着色的三角形与相交区域的混合着色

    一、三角形的绘制 在OpenGL中,面是由多边形构成的。三角形可能是最简单的多边形,它有三条边。可以使用GL_TRIANGLES模式通过把三个顶点连接到一起而绘出三角形。...二、绕法 在绘制三角形的过程中,三个顶点将三角形封闭的过程是有序的,即三角形的构成路径具有方向性,我们把指定顶点时顺序和方向的组合称为"绕法"。绕法是任何多边形图元的一个重要特征。...三、明暗处理 在绘制多边形时,我们常常指定绘制的颜色,而在OpenGL中,颜色实际上是对各个顶点而不是对各个多边形指定的。...应用平面明暗处理模式时,多边形内每个点的法向一致,其颜色也一致,OpenGL用指定多边形最后一个顶点时的颜色作为填充多边形的纯色。...Gourand明暗处理通常算法为:先用多边形顶点的光强线性插值出当前扫描线与多边形边交叉处的光强,然后再用交点的光强线插值处扫描线位于多边形内区段上每一像素处的光强值。

    2.2K110

    带你实现一个简单的多边形编辑器

    x, y } = this.toCanvasPos(e) this.dragPointIndex = this.checkPointIndex(x, y) }, // 检测是否在某个顶点内...,但是不影响我们支持,整体拖动的逻辑和拖动单个顶点差不多,先判断鼠标按下时是否在多边形内,然后在移动过程中更新所有顶点的位置,和拖动单个的区别是记录和应用的是移动的偏移量,这就需要先缓存一下鼠标按下的位置和此刻的顶点数据...检测是否在多边形内: export default{ onMousedown (e) { // ... // 记录按下的起始位置 this.startPos.x...另外除了吸附到顶点,还需要吸附到线段,也就是线段上离当前点最近的一个点上,也以拖动单个顶点为例来看一下。...,不过最后还需要判断一下这个点是否在线段上,也许是在直线的其他位置: getNearestPoint (x1, y1, x2, y2, x0, y0) { let k = (y2 - y1) /

    1.2K40

    3D图形渲染管线

    在称为眼空间(或视觉空间)的坐标系统里,眼睛位于坐标系统的原点。朝“上”的方向通常是轴正方向。遵循标准惯例,你可以确定场景的方向使眼睛是从z轴向下看。...只有在视线平截体中的多边形、线段和点背光栅化到一幅图形中时,才潜在的有可能被看得见。...这一步骤命名为视图变换,它为图形处理器的光栅器提供数据。然后光栅器从顶点组成点、线段或多边形,并生成决定最后图像的片段。...另一个被称为深度范围变换的变换,缩放顶点的z值到在深度缓冲中使用的深度缓存的范围内。...图6:形象化图形流水线 ---- 可编程图形流水线 当今图形硬件设计上最明显的趋势是在图形处理器内提供更多的可编程性。图7显示了一个可编程图形处理器的流水线中的顶点处理器和片元(像素)处理器。

    1.8K20

    模拟试题B

    在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,如图B.9所示,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的?...( ) A)S和P均在可见的一侧,则输出S和P B)S和P均在不可见的一侧,则输出0个顶点 C)S在可见一侧,P在不可见一侧,则输出线段SP与裁剪线的交点 D)S在不可见的一侧,P在可见的一侧...( ) A)多边形被两条扫描线分割成许多梯形,梯形的底边在扫描线上,腰在多边形的边上,并且相间排列; B)多边形与某扫描线相交得到偶数个交点,这些交点间构成的线段分别在多边形内、外,且相间排列;...C)用射线法判断点是否在多边形内时,若该射线与多边形的交点数目为偶数即可认为在多边形内部,若为奇数则在多边形外部,而且不需考虑任何特殊情况; D)边的连贯性表明,多边形的某条边与当前扫描线相交时...( ) 2.插值得到的函数严格经过所给定的数据点;逼近是在某种意义上的最佳近似。( ) 3.明暗处理方法中,Gouraud算法的计算量要比Phong算法小。

    4.3K10

    基于UE4Unity绘制地图基础元素-线(下篇)

    其中为了确定像素是否属于线帽构造了二次函数,实际上也可以构造其他类型的函数达到目的。...在实践中主要进行了以下探索: 1、提取变化点 可以看到描边线和填充线在绘制时的扩展方向是一样的,差别在于根据扩展向量扩展的线宽不同。...因此可以在冲突的面的高度值上增加一点儿偏移,通过改变局部坐标影响转换后的深度值,最终可以看到闪烁现象消失。...这种方案需要首先理解深度检测的概念。 深度检测在片元着色器之后进行,每个片元携带自身的深度值与深度缓冲内的深度值进行比较检测,若检测通过,深度缓冲内的值将被设为该深度值。若检测失败,则丢弃该片元。...,默认是当片元深度值小于等于深度缓冲内的深度值时通过深度检测(ZTest LEqual) 在绘制二维地图这一case中,不需要更改深度缓冲的写入策略,只需要将深度检测的策略改为全部通过即可: ZWrite

    1.1K42

    Mapinfo高阶-判断点是否位于多边形内

    笔者在工作过程中遇到一个场景,需要批量判断点是否位于某个多边形,搜索了几个算法,发现过于复杂,本身理解就有困难,编成代码就更难了。...如果测试点的两边点的个数都是奇数个则该测试点在多边形内,否则在多边形外。在这个例子中测试点的左边有5个交点,右边有三个交点,它们都是奇数,所以点在多边形内。 ?...Layer4G 是点图层 Buildings 是面图层 该查询的意思是获取“点位于多边形中的元素”,点击确定,查询完毕后返回一张表格; 4、表->导出,选择刚才的查询结果 query,保存类型选择...至此,便得到了点和多边形汇聚后的表,如果该点位于多边形内,则会出现一条记录,否则,不出现。 其实,我脑海里还有一个算法,只是无法用代码实现,如果你可以用代码实现,欢迎告诉我。...另外的算法: 1、将点设置为红色; 2、将多边形设置为黑色; 3、查询点的颜色,黑色则说明位于多边形内,红色则说明位于多边形外。

    1.8K20

    【从零学习OpenCV 4】轮廓外接多边形

    为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。...closed:逼近曲线是否为封闭曲线的标志, true表示曲线封闭,即最后一个顶点与第一个顶点相连。 该函数根据输入的轮廓得到最佳的逼近多边形。...第二个参数是多边形的逼近结果,以多边形顶点坐标的形式输出,是CV_32SC2类型的N×1的Mat类矩阵,可以通过输出结果的顶点数目初步判断轮廓的几何形状。...第三个参数是多边形逼近时的精度,即原始曲线和逼近曲线之间的最大距离。第四个参数是逼近曲线是否为封闭曲线的标志, true表示曲线封闭,即最后一个顶点与第一个顶点相连。...程序中首先提取了图像的边缘,然后对边缘进行腐蚀运算将靠近的边缘变成一个连通域,之后对边缘结果进行轮廓检测,并对每个轮廓进行多边形逼近,将逼近结果绘制在原图像中,并通过判断逼近多边形的顶点数目识别轮廓的形状

    3.8K00

    (一) 3D图形渲染管线

    在称为眼空间(或视觉空间)的坐标系统里,眼睛位于坐标系统的原点。朝“上”的方向通常是轴正方向。遵循标准惯例,你可以确定场景的方向使眼睛是从z轴向下看。...只有在视线平截体中的多边形、线段和点背光栅化到一幅图形中时,才潜在的有可能被看得见。...然后光栅器从顶点组成点、线段或多边形,并生成决定最后图像的片段。另一个被称为深度范围变换的变换,缩放顶点的z值到在深度缓冲中使用的深度缓存的范围内。...图6:形象化图形流水线 ---- 可编程图形流水线 当今图形硬件设计上最明显的趋势是在图形处理器内提供更多的可编程性。...网格由顶点和索引组成,这个阶段就是根据索引将顶点链接到一起,组成线、面单元,然后进行剪裁,如果一个三角形超出屏幕以外,例如两个顶点在屏幕内,一个顶点在屏幕外,这时我们在屏幕上看到的就是一个四边形,然后把这个四边形切成两个小的三角形

    1.4K30

    Google S2 是如何解决空间覆盖最优解问题的?

    Loop 循环 Loop 代表一个简单的球面多边形。它由一系列顶点组成,其中第一个顶点隐含地被认为是连接到最后一个顶点的。所有的 loop 被定义为具有 CCW 方向,即 loop 的内部在边的左侧。...这意味着包围一个小区域的顺时针 loop 被解释为包围非常大的区域的 CCW 的 loop。 loop 不允许有任何重复的顶点(不管是否相邻)。...它有一个 AddPoint 方法,可以方便地为一组点构造边界矩形,包括跨越180度子午线的点集。 5. Region 区域 区域表示单位球体上的二维区域。...这个接口的目的是让复杂的区域近似为更简单的区域。该接口仅限于计算近似值的方法。 S2 区域表示单位球体上的二维区域。...,并把结果存储在 result 内。

    3.4K31
    领券