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

图形编辑器开发:基于相交策略选中图形

因为上面实现,只做了大的 AABB 包围盒的相交检测,没有做小的 OBB 包围盒的相交检测。 对于发生旋转的图形,selection 如果和包裹图形的空白区域相交了,图形也被选中。...方案 1:线段相交判断 直接一点,判断 selection 的边和图形的边是否有相交的。...我们在判断选区矩形和图形的 AABB 包围盒是否相交时,其实就已经完成了 基于选区矩形对应的所有分离轴 的投影上是否相交的比较。 接下来我们只要再对图形的边对应的分离轴线投影,去对比就好了。...这样,图形的分离轴的投影也对比完了,所有的分离轴都对比了,就能判断出选区和图形的 OBB 包围盒是否碰撞了。 甚至都不用向量点乘。 OBB 相交判断代码实现 下面给出代码实现。...---- 相关阅读, 几何算法:判断两条线段是否相交 图形编辑器开发:颜色 hex 标准化 图形编辑器开发:一些会用到的简单几何算法 几何算法:矩形碰撞和包含检测算法 在容器内显示图片的五种方案

18330

图形编辑器开发:一些会用到的简单几何算法

常见使用场景: 使用选择工具框选图形(框选策略除了相交,还可以用相交或其他方案); 遍历图形,通过判断视口矩形和图形包围盒的矩形碰撞,剔除掉视口外的图形渲染操作,提高性能。...计算旋转后的点是很常见的需求。 常见使用场景: 计算包围盒旋转后的坐标,绘制缩放控制点; 计算光标位置是否落在一个旋转的矩形上,因为旋转的矩形并不是一个正交的矩形,计算出来后判断有点复杂。...}; } 点是否在矩形中 常见使用场景: 用于实现图形拾取,判断矩形图形或包围盒是否在光标位置上。...计算向量夹角 通过旋转控制点旋转图形时,需要通过向量的点积公式来计算移动的夹角,去更新图形的旋转角度。...相关阅读, 几何算法:矩形碰撞和包含检测算法 在容器内显示图片的五种方案:contain、cover、fill、none、scale-down 计算机图形学:变换矩阵 求向量的角度 图形编辑器开发

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

    相贯线的绘制_cad怎么画相贯线

    而水平投影a、b、c和d均在直立圆柱面的水平投影的圆上。由c、d和c″、d″即可求得正面投影上的c′和(d′)。 一、概述 两立体表面的交线称为相贯线,见图5-14a和b所示的三通管和盖。...而水平投影a、b、c和d均在直立圆柱面的水平投影的圆上。由c、d和c″、d″即可求得正面投影上的c′和(d′)。...(二)辅助平面法 1.辅助平面法 假设作一辅助平面,使与相贯线的两回转体相交,先求出辅助平面与两回转体的截交线,则两回转体上截交线的交点必为相贯线上的点。如图5-19所示。...2.辅助平面选择原则 为了便于作图,辅助平面应为特殊位置平面并作在两回转面的相交范围内,同时应使辅助平面与两回转面的截交线的投影都是最简单易画的图形(多边形多圆)。...水平投影3、4可过圆柱轴线作水平面P求出(P与圆柱和圆锥台的截交线在水平投影上的交点),由3、4和3″、4″可求得正面投影3′、(4′)。 (2)求一般点 做辅助水平面P。

    1.1K40

    Canvas 性能优化:脏矩形渲染

    画布该如何更新? 这里我们假设这么一个场景,画布上绘制了随机位置大量的绿球,然后顶层再绘制一个红球。 现在我们希望红球跟着光标进行移动,底层的绿球保存不动,该怎么做更新?...因为矩形的碰撞检测的算法是简单高效的,而复杂图形的碰撞检测是复杂且低效的。...脏矩形渲染简单来说,就是计算被改变的目标图形两帧所产生的包围盒(脏矩形),将该区域清空,然后将和脏矩形发生相交的所有图形在这个区域内重绘。...- x, height: y2 - y, }; } (2)多个矩形是否相交(碰撞) 该算法用于找出和脏矩形碰撞的绿球。...找出所有和脏矩形相交的图形,将它们在这个区域内进行更新。 我是前端西瓜哥,欢迎关注我,学习更多前端知识。 ----

    1.4K10

    图形编辑器开发:最基础但却复杂的选择工具

    如果你对图形拾取的细节感兴趣,可以看我的这篇文章: 《如何在 Canvas 上实现图形拾取?》 隐藏和锁定的图形会被忽略,如果点的是组下的一个元素,要将整个组的所有元素都选中。...碰撞检测有三种方案: 选区矩形和选中图形的包围盒属于 包含(contain)关系; 选区矩形和选中图形的包围盒属于 相交(intersect)关系; 不使用包围盒,精准判断是否有真正的 像素上的相交;...要点: 拖拽的中途从没按住 Shift 到按住,要立即响应,代码实现上要补一个键盘事件监听,而不是靠鼠标移动事件,因为你不移动鼠标,被选中元素就不会更新。 比较 dx 和 dy 的大小。...常见的有: 缩放控制点,在图形选中框的 4 个角上; 旋转控制点,拖拽它设置图形的旋转,旋转控制点; 给图形设置渐变填充色,需要指定两种颜色的颜色和位置,需要的 渐变色控制点; 下面是 figma 的缩放和旋转演示...所以选择工具模块在设计上,要提供 注册各种类型图形控制点逻辑 的能力。 在 “图形拾取” 时,要把控制点也考虑进来,光标是否点在控制点上。

    37230

    几何算法:判断两条线段是否相交

    如何判断两条线段(注意不是直线)是否有交点? 传统几何算法的局限 上过一点学的西瓜哥我,只用高中学过的知识,还是可以解这个问题的。...然后判断这个点是否在其中一条线段上。如果在,说明两线段相交,否则不相交。 看起来不错,但这里要考虑直线垂直或水平于坐标轴的特殊情况,还有两条直线平行导致没有唯一解的情况,除数不能为 0 的情况。...考虑点在线段上或重合 如果你需要考虑线段的端点刚好在另一条线段上的情况,需要额外在叉乘为 0 的情况下,再判断一下线段 1 的端点是否在另一个线段的 x 和 y 范围内。...---- 相关阅读, 几何算法:矩形碰撞和包含检测算法 在容器内显示图片的五种方案:contain、cover、fill、none、scale-down 计算机图形学:变换矩阵 求向量的角度 图形编辑器开发...:以光标为中心缩放画布 图形编辑器开发:参考线吸附效功能,让图形自动对齐

    93030

    关于包围盒,你需要知道的那些事

    在图形界面上,绘制图形的包围盒,让用户感知到拾取图形成功。 剔除不在视口内的图形,避免不必要的渲染。 包围盒的表达 我们使用左上角和右下角两个点表达包围盒。...width 和 height 纯属多余,本身不会用到,却要在每次碰撞运算时,通过 x + width 和 y + height 得到 maxX 和 maxY 再运算。...它是一个矩形,且它的边是和轴线(比如 x 轴和 y 轴)对齐的。 这个 AABB 刚好紧密包裹住椭圆,所以这个包围盒同时也是 MBR(最小外接矩形)。...该包围盒也是矩形,但是因为有旋转,边不一定和轴线对齐,但能 更紧凑地包围目标图形。 包围盒需要补充一个旋转属性。...此时进行框选,如果框选到描边的部分区域,理论上也算选中图形了,所以要把描边的宽度考虑上,将包围盒子往外扩展描边宽度的二分之一。

    52010

    YbtOJ 824「计算几何初探」圆与连线

    YbtOJ 824「计算几何初探」圆与连线 题目链接:YbtOJ #824 小 A 有一个平面直角坐标系,其中有一个圆心在原点的半径为 r 的圆(即它的方程为 x^2+y^2=r^2)和 n...小 A 想知道最多能够留下多少个特殊点,满足任意两点连线不与圆相交。 1\le n\le 2\times10^3,r,x_i,y_i\le5\times10^3。...Tutorial 求出每个点与圆的两条切线,那么在这两条切线之间的其他点与该点的连线都会与圆相交,而切线外的点则不会。...实际上,我们把每个点与圆的两个切点看成一个区间(具体实现中,方便起见我们我们用 角度 来表示这个区间),那么点 A 与其两条切线间的点 B,对应的区间必然包含(两点在圆的同侧)或是相离(两点在圆的异侧)...求角度的区间还是比较简单的,首先我们求出当前点的角度 g,然后求出当前点与圆心的连线和圆心向切线的垂线的夹角 d(\cos d=\frac{\sqrt{x^2+y^2}}{R}),则 [g-d,g+d]

    84320

    R语言绘图001-基础参数

    取负值时对齐位置在文本左边的地方;如果给出两个值(例如c(0, 0)),第二个只控制关于文字基线的垂直调整 axes 是否画坐标轴;注意只会影响到是否画出坐标轴线和刻度,不会影响坐标轴标题 asp 图形纵横比...oma 设置外边界(Outer Margin)宽度;类似mar,默认为c(0, 0, 0,0),当一页上只放一张图时,该参数与mar不好区分,但在一页多图的情况下就容易可以看出与mar的区别3仔细观察图...左下方小图中分别旋转30 _和120 _的字符串 sub 副标题 segments(x0, y0,x1, y1)从(x0,y0)各点到(x1,y1)各点画线段 srt,字符串旋转度数,只支持函数text...tck 指定轴上刻度长度的值,单位是百分比,取值为与图形宽高的比例值(0到1之间)以图形宽、高中最小一个作为基数; 如果tck=1则绘制grid坐标轴刻度线的高度;正值表示向内画刻度线,负值表示向外;默认为不使用它...title()添加标题,也可添加一个副标题 usr 作图区域的范围限制,取值长度为4的数值向量c(x1, x2, y1, y2),分别表示作图区域内x轴的左右极限和y轴的下上极限;注意,如果采用的对数刻度

    2.2K20

    如何用JS实现网页上通过鼠标移动批量选择元素?

    如下: GIF 在线查看 https://nicen.cn/collect/demo 基本思路 监测外部容器的mousedown、mousemove、mouseup事件来进行选择判断,大致dom...鼠标移动,将选择框的大小(height、width)设置为鼠标移动的距离(起始点和终点的差) 鼠标抬起,停止选择框大小跟随鼠标移动,计算与选择框发生重叠的元素。...情形分析 网页上的元素重叠,存在多种不同的情况,针对每一种情况有不同的检测方法。...角重叠 可以通过对选择框和元素进行相互检测,来判断元素是否选中,如图,判断一个点是否在方形内的算法如下: 图例 //简单的判断 if ( X > X1 && X X2 &&...相交也分横向和纵向相交 相对应的算法可以解释为 x3 x1  && x2 x4 && Y3 > Y1 && Y4 Y2(纵向相交算法同理),两个图形的坐标反过来即可。

    4.4K60

    (数据科学学习手札84)基于geopandas的空间数据分析——空间计算篇(上)

    图5 simplify()   当原始的矢量数据因为形状复杂,包含的点较多时,会导致其文件体积较大,如果我们需要在在线地图上叠加它们,太大体积的矢量数据不仅会拖慢网络传输速度,也会给图形的渲染带来更大的压力...图11 translate() translate()用于实现矢量对象的平移操作,其主要参数有xoff和yoff,分别控制在x维度和y维度上的平移距离(与对应的投影单位保持一致): ?...图16   在how='union'下,叠加分析的结果会包含所有存在相交的部分,以及df1与df2各自剩下的不相交的部分,如图中蓝色部分即为df1与df2相交从而不存在缺失值的部分,而剩余的灰色部分因为没有相交...图17   这时返回的结果中不再带有缺失值,因为intersection只保留df1和df2彼此相交的部分: ax = overlay_result.plot() ax.set_xlim((-1, 10...图24   从图24中可以看出,在how='identity'条件下,所有df1中不与df2相交的部分,以及两者相交的部分作为返回结果,且每个相交的部分都变为单独的要素带上所有涉及的属性字段,而df1中不涉及相交的部分则仍然以

    4K31

    基于geopandas的空间数据分析——空间计算篇(上)

    =缓冲区距离的圆,而Polygon类型始终是由有限个点所构成的,因此需要近似拼接出圆形的轮廓,resolution参数就用于决定每个四分之一圆弧上使用多少段连续的线段来近似拼接以表示圆的形状,默认参数值为...,包含的点较多时,会导致其文件体积较大,如果我们需要在在线地图上叠加它们,太大体积的矢量数据不仅会拖慢网络传输速度,也会给图形的渲染带来更大的压力。...,其主要参数有xoff和yoff,分别控制在x维度和y维度上的平移距离(与对应的投影单位保持一致): 图12 2.3 叠加分析 geopandas基于shapely中的overlay(),为GeoDataFrame...,以及df1与df2各自剩下的不相交的部分,如图中蓝色部分即为df1与df2相交从而不存在缺失值的部分,而剩余的灰色部分因为没有相交,无法获得来自另一个GeoDataFrame的属性值,所以返回出来的结果会在对应的字段下填充为缺失值...,因为intersection只保留df1和df2彼此相交的部分: ax = overlay_result.plot() ax.set_xlim((-1, 10)) ax.set_ylim((0, 10

    3.3K30

    不相交集类

    对于不相交集类,我们重点关注以下三个操作: 1.makeSet(x),建立一个新的只含有元素 x的集合。...2.union(x,y),将 x、y所在的子集(Sx和 Sy)合并成一个新的子集,并为了保证新集合的子集不相交性,消除原来集合中的 Sx和 Sy。 3.find(x),返回元素 x所在的集合的代表。...图 4 含有 10个单元素子集的根树表示和存储结构 同样地,现在来考虑操作是如何完成的和其时间复杂度如何。 1.makeSet(x),令 x成为只含有根节点的树,并且令 s[x] = -1。...简单的做法是将 y的父链连接到 x节点上,比如 union(6,7),图 4变成了下面图 5所示的情形....路径压缩与按大小求并是完全兼容的,这就使得两个例程可以同时实现。时间复杂度如何? 而按高度求并不完全与路径压缩兼容,因为路径压缩会改变树的高度,而计算新的高度并不容易。怎么办呢?

    1.6K50

    万物皆数 数学的本质在于它的自由 --- 康托尔

    (增强的平行公理)设直线aa和其外一点AA确定平面αα,则αα上有且仅有一条过AA且不与aa相交的直线。   上一篇的非阿基米德几何比这里多了合同公理,那里可以为平面内的点线建立解析方程。...其实可以很容易将定义扩展到空间中,用3个线段(x,y,z)(x,y,z)定义点,用4个线段的比例(u,v,w,r)(u,v,w,r)定义面。方程(1)即表示点在面上,而两个方程的公共点定义为直线。...但如果只为建立坐标和方程,可以用平行线的特性做简化的迁移。具体来说,先选择两条相交于OO的直线做“坐标轴”(以下左图),以下只讨论坐标轴上以OO为端点的线段的计算。...首先在平面上(以上右图),把空间任意一点PP在两轴的投影定义为它的坐标(x,y)(x,y),假设PP所在直线ll截yy轴的线段为mm,以及ll的“斜率”为kk。...在空间上,同样用三个线段(x,y,z)(x,y,z)定义点,用方程(1)定义平面,以平面的公共点定义直线。

    72100

    canvas进阶——实现Undo和Redo

    , 我举个例子: 图形相交 首先看上面这张图,如果我只改变了圆形的颜色, 那我去做裁剪的时候,首先我的裁剪路径肯定是是这个圆, 但是同时又包含了 黑色矩形的一部分, 如果我只对圆做颜色变化的, 你会发现黑色矩形少了一部分...因为2d图形都是由点组成的,所以只要获得每一个图形的离散点集合, 然后对这些点,去获得一个2d空间的boundBox。 实现box2 「box2」 这个类的属性其实就有一个min, max。...) return this } 「其实就是比较两个点的x 和y 不断地去比较。」...map 记录, 重画这个方法 主要是区域裁剪, 但是裁剪我们要去判断 当前图形是不是和其他图形有相交的,如果有相交的,我们需要扩大裁剪区域, 并且重画多个图形。...这是在50个图形的基础上,如果换成100个呢, 对吧,优化可能就是比较明显的了。 好了,今天的分享就到这里了,如果文章对你有帮助,你也可以点赞 + 转发, 鼓励作者持续创作。

    86140

    egret 学习笔记

    bin-debug:项目调试时,所产生的文件存放于此目录。 libs:库文件,包括 Egret 核心库和其他扩展库存放于此目录。 resource:项目资源文件存放于此目录。...X轴坐标值 y:Y轴坐标值 anchorOffsetX:对象绝对锚点X anchorOffsetY:对象绝对锚点Y 核心显示类 类 描述 DisplayObject 显示对象基类,所有显示对象均继承自此类...); 矩形碰撞检测,是判断显示对象的包围盒是否与一点相交;而像素碰撞检测,是判断显示对象的图案(非透明区域)是否与一点相交。...(例如,用手指触摸配有触摸屏的移动电话或平板电脑)触发 TOUCH_CANCEL:由于某个事件取消了触摸时触发 TOUCH_END:当用户移除与启用触摸的设备的接触时(例如,将手指从配有触摸屏的移动电话或平板电脑上抬起...)触发 TOUCH_MOVE:当用户触碰设备并移动时进行触发,而且会连续触发,直到接触点被删除 TOUCH_TAP:当用户在触摸设备上与开始触摸的同一 DisplayObject 实例上抬起接触点时触发

    1.8K20

    克莱因瓶莫比乌斯带_克莱因瓶剪莫比乌斯带

    但是克莱因瓶却不同,我们很容易想象,一只爬在“瓶外”的蚂蚁,可以轻松地通过瓶颈而爬到“瓶内”去——事实上克莱因瓶并无内外之分!...如果我们观察克莱因瓶的图片,有一点似乎令人困惑——克莱因瓶的瓶颈和瓶身是相交的,换句话说,瓶颈上的某些点和瓶壁上的某些点占据了三维空间中的同一个位置。但是事实却非如此。...看上面这个图形,如果我们把它看作平面上的曲线的话,那么它似乎自身相交,再一看似乎又断成了三截。但其实很容易明白,这个图形其实是三维空间中的曲线,它并不和自己相交,而且是连续不断的一条曲线。...在平面上一条曲线自然做不到这样,但是如果有第三维的话,它就可以穿过第三维来避开和自己相交。只是因为我们要把它画在二维平面上时,只好将就一点,把它画成相交或者断裂了的样子。...· 从拓扑学角度上看,克莱因瓶可以定义为矩阵[0 ,1] × [0 ,1] ,边定义为 (0 ,y) ~ (1 ,y) 条件 0 ≤y ≤ 1 和 (x ,0) ~ (1-x ,1)

    32820

    一篇文章带你玩转PostGIS空间数据库

    以点(Point)数据类型为例,一个点可以由它在某一坐标参考系下的X、Y坐标值来表示,如“POINT(116.4074 39.9042)”表示了一个位于北京市中心的点。...但是这个哥们只表示了二维,而PostGIS扩展了3维、4维的表示。 说人话,就是可以表示:点、线串、多边形、图形集合(Collection)。 举一个图形集合的例子。...,将其替换为点将强制它位于一侧或另一侧,而不是与两侧的多边形都相交 ST_Centroid(geometry) —— 返回大约位于输入几何图形的质心上的点。...关于它们的交集的DE9IM矩阵如下: 请注意,以上两个要素的边界实际上根本不相交(线的端点与多边形的内部相交,而不是与多边形的边界相交,反之亦然),因此B/B单元用"F"填充。...9. 3-D 到目前为止,我们一直在处理2-D几何图形(二维几何图形),只有X和Y坐标。

    7.5K50

    「动画中的数学与物理基础」点和直线

    本篇文章先从最基础的点和直线开始介绍,主要涉及以下内容: 坐标系和点 直线及计算直线的斜率 检测直线是否相交及计算交点 在网页上绘制直线和箭头 文末电子书福利 本篇文章阅读时间预计8分钟。...一般来说,我们开发人员是通过使用笛卡尔坐标系确定物体的具体位置,笛卡尔坐标系由一个水平轴x和一个垂直轴y组成,每个点都可以写成类似(x,y),其中x和y分别为该点在x轴和y轴上的坐标值。...02 直线及计算直线的斜率 直线的定义 我们都知道两点确定一条直线,在数学中我们一般用类似y=2x这样的函数方程表示直线,而方程的全解则是满足该方程的点。 如何根据一个函数方程画一条直线呢?...直线在游戏或动画里可以代表建筑的边界、地面或者物体路径,因此需要思考如何判断两直线是否相交以及直线在哪里。其实计算交点,就相当两个方程组求解,计算出同时满足两个方程中的(x,y)的点而已。...目前,他专注于计算机图形学,视觉和机器学习的交叉点的技术解决方案。他热衷于哲学,数学,代码和设计。当他不工作时,赛车和吃中国的火锅则是他最大的爱好。

    1.4K30

    Python之pygame学习矩形区域(5)

    这四个分别对应矩形区域的四个边的中间点坐标。 ? 分别返回矩形区域的中心点坐标(元祖),中心x轴,中心y轴 ? 分别返回矩形区域的宽高(元祖),宽,高 ?...move() 移动矩形 move(x,y) - > Rect 返回由给定偏移量移动的新矩形。x和y参数可以是任何整数值,正数或负数。...collidepoint() 测试一个点是否在矩形内 collidepoint(x,y) - > bool collidepoint((x,y)) - > bool 如果给定的点在矩形内,则返回true...= 0) - >(键,值) collidedict(dict,use_values = 0) - >无 返回与调用Rect对象相交的第一个键和值对。...返回与调用Rect对象相交的所有键和值对的列表。如果未找到冲突,则返回空列表。如果use_values为0(默认值),则dict的键将用于碰撞检测,否则将使用dict的值。

    3.2K30
    领券