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

关于判断两个矩形是否相交

图1 最初的思路如下: 首先求出点`Pa1``Pb1`距离原点`(0,0)`更远的点(即x方向y方向坐标值较大的点),将其标记为`M`(图1的中粉色点); 然后求出`Pa2``Pb2`距离原点更近的点...(即x方向y方向坐标值较小的点),将其标记为`N`(图1中的橙色点); 判断:如果点`M`的x坐标值和y坐标值均比点`N`的x坐标和y坐标小(即,M点和N点可以构成一个新的矩形),则两个矩形相交...仔细观察上面列出的几种情况后,想到了一个新的思路:如果两个矩形相交,那么矩形A的中心点`Pa3(Xa3,Ya3)`矩形B的中心点`Pb3(Xb3,Yb3)`x方向上的距离和y方向的距离一定满足以下条件...: x方向:`Pa3`和`Pb3`的距离一定小于或等于矩形A的宽度+矩形B的宽度的一半; y方向:`Pa3`和`Pb3`的距离一定小于或等于矩形A的高度+矩形B的高度的一半; 只要满足以上两个条件...,那么需要取得相交区域的左上角顶点右下角坐标,有方法如下: 设相交区域的新矩形为c[(Xc1,Yc1), (Xc2,Yc2)] Xc1 = max(Xa1,Xb1) Yc1 = max(Ya1,Yb1

2K40

你被追尾了

转换为蓝色矩形和蓝色圆形之后,就可以使用 圆形无旋转矩形 相交的判定方法了....所以我们判定熊猫和竹子相交的方法是,先求出熊猫和竹子所在矩形的交集,如果该交集是空集,则显然熊猫和竹子不相交,如果不是空集,则势必也是一个矩形(记做P),所以我们只需要取出熊猫P中的像素点,和竹子P...其实上面将熊猫(竹子)离屏数据渲染出来只是为了效果直观一些,实际运用过程中,肯定不会将这些离屏数据屏幕上渲染出来,而是在内存中使用,因为内存中操作这些数据肯定远比屏幕上渲染出这些数据快的多....但是程序中遍历所有光源的角度是不现实的,那如何确定 投影 呢?其实投影的数量多边形的边数相等即可。 ?...这就是上述 getAxes 函数 投影(project) 通过将一个多边形上的每个顶点原点(0,0)组成的向量,投影某一投影上,然后维护该多边形该投影上所有投影中的最大值和最小值,这样即可表示一个多边形某投影上的投影了

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

计算几何算法概览

现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。...计算点到线段的最近点:   如果该线段平行于XY),则过点point作该线段所在直线的垂线,垂足很容易求得,然后计算出垂足,如果垂足在线段上则返回垂足,否则返回离垂足近的端点;如果该线段不平行于X...如果PO不平行于XY,则PO的斜率存在且不为0,这时直线PO斜率为k = ( P.y - O.y )/ ( P.x - O.x )。...另外,一开始就先利用矢量叉乘判断线段线段(或直线)是否相交,如果结果是相交,那么在后面就可以将线段全部看作直线来考虑。...如果L平行于X,做法L平行于Y的情况类似;   4. 如果L既不平行X也不平行Y,可以求出L的斜率K,然后列出L的点斜式方程,和圆方程联立即可求解出L和圆的两个交点;   5.

1.5K40

四旋翼姿态解算之理论推导

X正方向,取飞机向上的方向为Z正方向。...简单点来说,就是:绕Z旋转为偏航角(YAW)ψ,绕Y旋转为横滚角(ROLL)θ,绕X旋转为俯仰角(PITCH)φ。 绕Z旋转ψ角(YAW): ?...定义导航坐标系 n 中某一点的坐标为(xy,z),使用矩阵表示为: ? 。设该点在载体坐标系中坐标为(x’,y’,z’),使用矩阵表示为: ? 。...同理可得: 绕Y旋转θ角(ROLL): ? 两个坐标系下的转换关系: ? 绕X旋转φ角(PITCH): ? 两个坐标系下的转换关系: ?...对于i、j、k本身的几何意义可以理解为一种旋转,其中i旋转代表XY相交平面中X正向向Y正向的旋转,j旋转代表ZX相交平面中Z正向向X正向的旋转,k旋转代表YZ相交平面中Y正向向

1.2K20

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

我们判断选区矩形和图形的 AABB 包围盒是否相交时,其实就已经完成了 基于选区矩形对应的所有分离 的投影上是否相交的比较。 接下来我们只要再对图形的边对应的分离轴线投影,去对比就好了。...这样,图形的分离的投影也对比完了,所有的分离都对比了,就能判断出选区和图形的 OBB 包围盒是否碰撞了。 甚至都不用向量点乘。 OBB 相交判断代码实现 下面给出代码实现。...= Math.min(s1.x, s2.x, s3.x, s4.x); const rotatedSelectionY = Math.min(s1.y, s2.y, s3.y, s4.y)...结尾 矩形相交是分离定理相交算法的特殊情况。 我是前端西瓜哥,欢迎关注我,学习更图形编辑器知识。...---- 相关阅读, 几何算法:判断两条线段是否相交 图形编辑器开发:颜色 hex 标准化 图形编辑器开发:一些会用到的简单几何算法 几何算法:矩形碰撞和包含检测算法 容器内显示图片的五种方案

15430

挑战程序竞赛系列(89):3.6平面扫描(3)

思路参考: http://www.cnblogs.com/ZefengYao/p/7470984.html 平面扫描,按照x扫描可以获得所有竖边的长度和,按y的同理,先讨论x的情况,将点按照...按y扫描也是相同做法。其次还要判断是否有横竖边相交的情况以及是否有洞(图是否连通)即可。 讲的很清楚了,此题的trick在于如何实现水平线垂直线的相交判断,记录哪些信息可以检测出相交问题呢?...首先按照x扫描,不会出现相交的线,所以只需要把每条线段信息记录在一种数据结构即可,方便y扫描时判断相交。...显然,给定一条水平线的横坐标的两端,我们只需要比较该区间内是否有垂直线相交,采用TreeSet维护x垂直线的有序,接着只要在扫描y时,知道两个端点,就可以拿到该区间内的垂直线逐个判断即可。...o1.y - o2.y : o1.x - o2.x; } }); for (int i = 0; i < N; ++i) { //按y方向扫描

61550

碰撞检测的向量实现

2、本文讨论圆形圆形,矩形矩形、圆形矩形碰撞检测的向量实现 前言 2D游戏中,通常使用矩形、圆形等来代替复杂图形的相交检测。因为这两种形状的碰撞检测速度是最快的。...AABBOBB的区别在于,AABB中的矩形的其中一条边和坐标平行,OBB的计算复杂度要高于AABB。根据不同的使用场景,可以用不同的方案。 ?...具体的,两向量相加还是一个向量,分别是xy两个分量的相加。 ?...方法是计算圆心矩形的最短距离 u,若 u 的长度小于 r 则两者相交。 首先利用绝对值把 p - c 转移到第一象限,下图显示不同象限的圆心也能映射至第一象限,这不影响相交测试的结果: ?...下面我用js实现一下: 其中矩形的四个顶点命名为A1,A2,A3,A4,矩形第一象限的半長h等于CA3 class Rect{ // x,y是矩形中心的坐标 w是宽 h是高 rotation是角度单位

1.4K10

「前端动画数学物理基础」点和直线

一般来说,我们开发人员是通过使用笛卡尔坐标系确定物体的具体位置,笛卡尔坐标系由一个水平x和一个垂直y组成,每个点都可以写成类似(x,y),其中xy分别为该点在xy上的坐标值。...坐标系的原点(0,0)是量相交的地方。从原点出发,向右是x的正方向,向左是x的负方向;同样,y的正方向向上,y的负方向向下。...50m/s沿垂直方向上升,以速度100m/s沿水平方向运动,该斜面的斜率是通过垂直上升的速度水平运动的速度比率来确定的,该图的比率就是50/100,或50%。...游戏和动画编程中,我们经常要判断两条直线是否相交,如果相交的话交点在哪里?...直线游戏或动画里可以代表建筑的边界、地面或者物体路径,因此需要思考如何判断两直线是否相交以及直线在哪里。其实计算交点,就相当两个方程组求解,计算出满足两个方程中的(x,y)的点而已。

99760

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

等等类似的问题,解决这些问题,肯定少不了数学物理基础知识的应用,从本系列文章起,笔者将介绍一些基础的数学物理知识,希望对你有所帮助。...一般来说,我们开发人员是通过使用笛卡尔坐标系确定物体的具体位置,笛卡尔坐标系由一个水平x和一个垂直y组成,每个点都可以写成类似(x,y),其中xy分别为该点在xy上的坐标值。...坐标系的原点(0,0)是量相交的地方。从原点出发,向右是x的正方向,向左是x的负方向;同样,y的正方向向上,y的负方向向下。...游戏和动画编程中,我们经常要判断两条直线是否相交,如果相交的话交点在哪里?...直线游戏或动画里可以代表建筑的边界、地面或者物体路径,因此需要思考如何判断两直线是否相交以及直线在哪里。其实计算交点,就相当两个方程组求解,计算出同时满足两个方程中的(x,y)的点而已。

1.3K30

JAVA智能设备基于OpenGL的3D开发技术 之AABB碰撞检测算法论述

和MIDP2.0中使用。...图1-1 此涉及到坐标平行(Axially-aligned)这个概念,坐标平行不仅指盒体世界坐标平行,同时也指盒体的每个面都和一条坐标垂直,这样 一个基本信息就能减少转换盒体时操作的次数。...返回Y坐标点    float zSize() {     return (max[2] - min[2]);} 返回Z坐标点 当添加一个顶点到包装盒时,需要先这两个顶点进行比较。...,它是一种布尔测试,测试结果只相交或者不相交。...换句话说,希望找到m11x+m12y+m13z+m14的最小值。其中[XY,Z]是原8个顶点的任意一个。 变换的目的是找出这些点经过变换后哪一个的X坐标最小。

1.1K100

53-R可视化-二-基础包绘图的入门功夫

坐标 title(),有以下参数: main # 标题 col.main # 标题颜色 sub # 副标题 col.sub # 副标题颜色 xlab # x ylab # y col.lab # 坐标名字颜色...at # 数值向量,自定义坐标的刻度。 labels # 字符型向量,指定刻度线上的文字标签,默认下使用at 的数字直接注释。 pos # 坐标轴线绘制位置的坐标(即另一条坐标相交位置的值)。...(side = 1, tck = 1, las = 2) image.png 参考线 abline(),可以指定的xy 位置添加参考线,其中h 添加水平实线,v 添加竖直实线: > plot(...图例 legend(),常用选项包括: x,y # 指定图例所在的坐标位置,坐标可以通过locator 函数获取。...获取位置坐标 如果你是具有图形界面的系统中使用R,则可以通过下面的函数,图形界面上选择某个点,获取其坐标: > locator(1) # 点一下你的绘图Quartz界面 $x [1] 1.634064

1.3K30

投影矩阵推导_矩阵投影变换

而透视投影比较符合人类的眼睛感知,平行线远处会相交于一点。 投影是通过一个4×4的矩阵来完成的,将视锥映射成标准观察体(齐次裁剪空间)。...正交投影 OpenGL OpenGL采用的是右手坐标系,z朝屏幕向外,因此观察方向是朝着z负方向的,那么将x,y,z坐标从区间[l, r], [b,t], [-n, -f]映射到[-1, 1]的函数为...DirectX DirectX则是采用左手坐标系,z和观察方向是一致的,因此只需要将z坐标从[n, f]映射到[0, 1],xy则和OpenGL是一样的。...透视投影 OpenGL 设P(Px, Py, Pz, 1)是视锥体内的一点,那么它在近平面z=-n上的投影点,利用相似三角形原则,可以得到: 类似于正交投影,将x,y坐标映射到[-1, 1]...,可以得到A,B的值 这样就得到了z上的映射函数: 3D点(x, y, z)等价于齐次坐标(-xPz, -yPz, -zPz, -Pz),因此x,y,z分量都乘以-Pz得到:

98730

Ray-AABB交叉检测算法

2D空间中slab可以理解为平行于坐标的两条直线间的区域,3D空间中为平行于xy平面(或者yz面,xz面)的两个平面之间的区域。...性质二:如果一条射线和AABB相交,那么这条射线和3个slab的相交部分必定有重合部分。 性质三:当射线这三个候选面中的一个发生交叉之后,射线Ray的原点到这个面的距离要比到其他几个面的距离要长。...在上图中,我们的射线右下角,向左上角发射,射线经过一个A点,其中候选面是y1面和x2面。   ...根据上述性质,可以看到A点同时2D空间中的2个slab中;此外,根据性质二,因为射线平面相交,那么这条射线slab的相交部分必有重合部分,因为A点在射线上,且平面中,那么可以得到max(t1,t2...如何对交叉点是否AABB盒上进行判断。根据性质二判断,即射线AABB碰撞的条件是max(t1,t2,t3)<=min(t4,t5,t6)。

4.8K70

双目视觉理论篇

当我们有了P(x,y)图像坐标系上的坐标以后就可以得到像素坐标系的坐标,转换关系如下 \(u={x\over dx}+u_0\) \(v={y\over dy}+v_0\) 上式中xy是P点在图像坐标系中的坐标...\(P(x_c,y_c,z_c)\)是真实世界的一个点在相机坐标系中的坐标, \(PO_c\)像平面相交于P',A是P点在\(X_cZ_c\)平面上的投影,其坐标即为\(A(x_c,0,z_c)\)...,\(AO_c\)像平面相交于B,P'B=y,那么很明显 \(△PO_cA∽△P'O_cB\) (三角形\(PO_cA\)三角形\(P'O_cB\)相似) => \({y_c\over y}={PO_c...\over P'O_c}={AO_c\over BO_c}\) C是P点在\(Y_cZ_c\)平面上的投影,其坐标即为\(C(0,y_c,z_c)\),\(CO_c\)像平面相交于E,P'E=x,那么很明显...(0,0,z_c)\),\(DO_c\)像平面相交于像平面坐标系原点\(O_I\),\(O_cO_I=f\),\(EO_I=y\),这个f我们称为焦距,那么很明显 \(△DO_cC∽△O_IO_cE\

6510

粗略的物体碰撞预测及检测

一维坐标中,两线段A和B相交的条件是: 线段A坐标上的最大值Amax不小于线段B坐标上的最小值Bmin; 线段B坐标上的最大值Bmax...sub>min)>0   基于上述事实,二维场景中AABB碰撞检测原理: [70742987.jpg]   在上图中,分别做物体A物体BX,Y方向的投影,物体A的Y方向最大点坐标为Y1...,最小点坐标Y2,X方向最小点坐标X1,最大点坐标X2,物体B同理。...二维场景中AABB碰撞检测具有如下规则:物体A物体B分别沿两个坐标做投影,只有两个坐标都发生重叠的情况下,两个物体才意味着发生了碰撞。   ...即,若Y方向上(Y1-Y4)*(Y3-Y2)>0,X方向上(X4-X1)*(X2-X3)>0,那么证明物体A物体B发生重合,否则证明物体A和B并未发生重合。

1.8K60

粗略的物体碰撞预测及检测

坐标平行(Axially-aligned)不仅指盒体世界坐标平行,同时也指盒体的每个面都和一条坐标垂直,这样一个基本信息就能减少转换盒体时操作的次数。...一维坐标中,两线段A和B相交的条件是: 线段A坐标上的最大值Amax不小于线段B坐标上的最小值Bmin; 线段B坐标上的最大值Bmax不小于线段A坐标上的最小值Amin; 即 (Amax-Bmin...在上图中,分别做物体A物体BX,Y方向的投影,物体A的Y方向最大点坐标为Y1,最小点坐标Y2,X方向最小点坐标X1,最大点坐标X2,物体B同理。...图中红色区域为物体A物体B投影的重叠部分。 二维场景中AABB碰撞检测具有如下规则:物体A物体B分别沿两个坐标做投影,只有两个坐标都发生重叠的情况下,两个物体才意味着发生了碰撞。   ...即,若Y方向上(Y1-Y4)*(Y3-Y2)>0,X方向上(X4-X1)*(X2-X3)>0,那么证明物体A物体B发生重合,否则证明物体A和B并未发生重合。

2.7K81

FOC电机算法设计基础知识.1

4.应用场合不同:交流电机适用于高功率、高速、低载荷的场合,空调、电冰箱、电风扇等。直流电机适用于需要调速和反转控制的场合,电动汽车、电动工具等。...Park变换算法的主要思想是将三相交流信号转换为两个正交上的信号,即d和q信号。其中d信号磁场旋转轴对齐,q信号d信号垂直。...通常的情况下,我们选择d和q构成的坐标系电机的永磁体磁场方向对齐,因此q方向就是永磁体磁场方向的垂直方向。...旋转坐标系中,一个点的坐标通常表示为(x,y),其中xy分别表示点在原始坐标系中的水平和垂直坐标。...通过旋转坐标系,可以将点的坐标变换为(x',y'),其中x'和y'分别表示点在旋转后的坐标系中的水平和垂直坐标。这种变换可以使用矩阵乘法来实现,其中矩阵包含旋转角度和旋转中心的信息。

97930

机器视觉 —— 成像

我们开始分析一张图像之前,我们必须知道它是如何形成的。图像是一个二维的亮度模式。这个亮度模式是如何在一个光学成像系 统中生成的?...尽管这种选择有一些缺陷,我们仍然使用这个约定,因为,这个约定使得我们可以方便地建立右手坐标系(即:x 指向右方:y 指向上方)。...令r=(x,y,z)^T表示:由O指向P的向量:令 r’=(x’,y’,f’) ^ T 表示:由O指向P’的向量。...对于物体平面上的一个小的有向线段 (δxy,0)^ T , 如果在像平面上该线段对应的小的有向线段为(δx’,δy’,0) ^T ,那么,我们可以得到: image.png 其中,-z...在这种情况下,投影方程可以被简化为: x^{\prime}=-m x \quad \quad y^{\prime}=-m y 该模型被称为正射投影。

1.5K20
领券