我有两个2D矩形,分别定义为原点(x,y),大小(高度,宽度)和旋转角度(0-360°)。 我可以保证两个矩形的大小相同。

我需要计算这两个矩形的相交区域。

尽管可以,但计算不一定要精确。 我将结果与其他相交区域进行比较,以确定一组矩形中最大的相交区域,因此相对于同一算法的其他计算而言,它只需要准确即可。

我考虑过使用相交区域的边界框的面积,但是由于所有可能的情况,我都无法获取相交区域的顶点:

我正在用Cocoa框架在Objective-C中编写该程序,以了解它的价值,因此,如果有人知道使用NSBezierPath的任何快捷方式,也欢迎您提出建议。

我没有得到您确切需要的东西。 但是我认为最大交集面积总是等于其中一个矩形的面积,因为两个矩形都具有相同的面积。

@rain,他不想要最大可能的交点面积,但实际的交点是两个给定矩形的交点。

是的,你是对的。 但是在问题中他提到了"我可以保证两个矩形的大小相同"。 和"我将比较结果与其他相交区域以确定一组矩形中的最大相交区域"。 所以我怀疑到底需要什么。

@雨,Shahbaz是正确的; 我有一组矩形-在这个矩形中,我需要确定两个矩形之间的最大交集区域。 我提到它的唯一原因是提供上下文说明为什么我需要能够找到两个矩形的相交区域。

这本质上是stackoverflow.com/questions/8011267/的副本。

为了补充其他答案,您的问题是换行的一个实例,它是计算机图形学中一个被广泛研究的主题,并且有许多可用的算法。

如果旋转坐标系以使一个矩形具有水平边缘,那么问题就出在那儿。

您可以从有关该主题的Wikipedia文章开始,然后从那里进行调查。

一个可以给出近似答案的简单算法是采样。

将您的一个矩形划分为小正方形的网格。对于每个相交点,检查该点是否在另一个矩形内。位于另一个矩形内的点的数量将非常接近重叠区域的面积。增加点的密度将提高计算的准确性,但会降低性能。

因为在我的案例中,开发时间比效率或准确性更重要,所以我选择了这个答案。但是,请参阅其他答案以获得更有效/更准确的解决方案。

如果您有网格,则可以使用Picks定理en.wikipedia.org/wiki/Pick%27s_theorem

无论如何,计算两个凸多边形的精确相交多边形是一件容易的事,因为任何凸多边形都可以看作是半平面的交集。"顺序切割"可以完成任务。

选择一个矩形(任意)作为切割矩形。一次又一次地遍历切割矩形的侧面。用包含切割矩形当前边的线切割第二个矩形,并丢弃"外"半平面中的所有内容。

完成所有切削面的迭代后,剩下的就是另一个矩形。

您实际上可以计算出确切的面积。

从两个矩形中制作一个多边形。查看此问题(尤其是此答案),或使用gpc库。

找到该多边形的面积。看这里。

共享区域是

area of rectangle 1 + area of rectangle 2 - area of aggregated polygon

您提供的链接似乎并未完全说明如何实施步骤1?该问题没有可接受的答案。

@MarkByers,是的,但是该问题的OP中有30%的答案无法接受。那里有很多解决方案,肯定其中一种会起作用。病态搜索更多。

我很高兴我不是唯一的一个。我以为自己了解了,但是现在我试图实现它,但是仍然坚持试图形成两个矩形的结合。假设我可以找到交叉点,那么这些点按什么顺序排列?

@NateThorn,我更新了答案,引入了执行此操作的库。您也可以在Internet上搜索此特定子问题。

如果您要使用gpc库,则无需执行这三个步骤。它可以直接计算交点。"支持差异,相交,异或和联合剪辑操作。"

我不想支付商业上使用gpc库的费用;这确实是我程序的附带功能,不值得为整个图书馆付费而烦恼。

@NateThorn,请确保您查看我链接的答案。这个想法是找到相交点,潜水边缘,并使每个矩形成为一个更复杂的多边形。然后,您可以简单地删除完全在另一个矩形内的边,并合并边。

@NateThorn,如果您的程序不是商业性的,gpc也是免费的。

取每个矩形的每个线段,看看它们是否相交。将有几种可能性:

如果没有相交-共享区域为零-除非一个点的所有点都在另一个点内。在那种情况下,共享区域是较小的区域。

a如果一个矩形的两个连续边与另一个矩形的单个边相交,则形成一个三角形。计算其面积。

b。如果边缘不重要,则形成四边形。从四边形的两个相对角计算一条线,这将形成两个三角形。计算每个面积的总和。

如果一个的两条边与另一条的两条边相交,则您将具有四边形。按照2b计算。

如果一个边的每个边与另一个边的每个边相交,则将有一个八边形。将其分解为三角形(例如,从一个顶点到另一顶点绘制射线以形成4个三角形)

@edit:我有一个更通用的解决方案。

检查1中的特殊情况。

然后从任何相交的顶点开始,并沿其边缘到任何其他相交点,直到回到第一个相交的顶点。这形成一个凸多边形。从第一个顶点到每个相对的顶点绘制射线(例如,将顶点向左和向右跳过)。这会将其划分为一堆三角形。计算每个面积并求和。

"如果一个矩形的两个边缘与另一个矩形的单个边缘相交,则形成一个三角形。"或矩形。

呃。让我解决这个问题。

还有一种情况:"如果一个rectactangle的两个连续边缘与另一个矩形的单个边缘相交,则形成一个三角形"或五边形。

还有一个更通用的解决方案。简直就是个草图。

@RafaelBaptista,您也缺少6面形状(六边形)的情况:screenshoot.me/IMQZcV

一种蛮力的方式:

从[角的集合

矩形] + [边缘的交点]

删除两个矩形内部或边缘之外的点。

现在您有了相交的角落。请注意,交点是凸的。

根据集合中任意点,任意其他点和给定点之间的角度对其余点进行排序。

现在,您已经有了交点。

按常规方法计算面积(按叉积计算)

两个矩形相交的面积c语言,关于算法:两个旋转矩形的相交面积相关推荐

  1. php求圆的周长面积,c语言实现输入圆的半径计算圆的面积_后端开发

    php怎么实现聊天功能_后端开发 php实现聊天功能的方法:1.在前端使用Ajax定时轮询访问php脚本,php再进行查询聊天数据进行返回给前端,最后前端将其进行渲染:2.使用WebSocket和服务 ...

  2. c语言渐变算法,C绘制渐变矩形代码.doc

    C绘制渐变矩形代码 using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  3. [CV] Rotated IoU 计算旋转矩形之间的重叠面积

    [CV] Rotated IoU 计算旋转矩形之间的重叠面积 文章目录 [CV] Rotated IoU 计算旋转矩形之间的重叠面积 简介 旋转包围盒的编码方式 矢量的旋转公式 包围盒转化为角点 代码 ...

  4. 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...

    C语言问题,编写一个程序计算矩形的面积和周长 我是新手,很多不懂,初学 代码为: #include void main(){float x,y; printf("请输入长和宽:\n" ...

  5. 编写C语言代码,实现以下功能:输入平面上两个点P1(x1,y1)和P2(x2,y2)的坐标,以这两个点为左上角和右下角可以确定一个矩形,输出这个矩形的周长。要求平面上点的坐标和矩形都用结构体来表示。

    编写C语言代码,实现以下功能: 输入平面上两个点P1(x1,y1)和P2(x2,y2)的坐标,以这两个点为左上角和右下角可以确定一个矩形,输出这个矩形的周长.要求平面上点的坐标和矩形都用结构体来表示. ...

  6. c语言直方图最大矩形面积,利用枚举法求直方图中最大矩形面积的方法实例

    求直方图中的最大矩形面积: 例如给定直方图{2,3,1,2,4,2} 则直方图中最大矩形面积为x=(3,6),|x|=3,y=2,max面积=6 思考:利用枚举法 /*当前位置往前进行枚举法*/ pu ...

  7. 求长方形的周长和面积c语言两个函数_「长方形的周长」C语言初级-输入长方形的两边长a和b,求长方形的周长和面积 - 金橙教程网...

    长方形的周长 任务和代码/* *Copyright (c)2018,CSDN学院 *All rights reserved. *文件名称:main.c *作 者:解玉柱 *完成时间:2018年10月3 ...

  8. leetcode最小面积_Code Review Swift 算法题: 最小面积矩形  Leetcode 的动人之处

    题目描述: 939. 最小面积矩形 给定在 xy 平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴. 如果没有任何矩形,就返回 0. 示例 1: 输入:[[1,1 ...

  9. 【opencv】轮廓特征(质心,面积,周长,近似轮廓,凸包,凸度,边界矩形,直角矩形,旋转矩形,最小闭合圈,拟合椭圆、直线)

    4_9_2_轮廓特征 - OpenCV中文官方文档 找到轮廓的不同特征,例如面积,周长,质心,边界框等. 1. 特征矩 特征矩可以帮助您计算一些特征,例如物体的质心,物体的面积等.请查看特征矩上的维基 ...

最新文章

  1. linux 节点信,DOM 节点信息
  2. 【408预推免复习】计算机组成原理之CPU的结构和功能
  3. 为什么正则化可以起到对模型容量进行控制_论文解读 | 基于正则化图神经网络的脑电情绪识别...
  4. 山东工业职业学院计算机老师田彦,学院举办2019年第二期新教师岗前培训班
  5. MyBatis通过反射建立一个对象的过程。
  6. Yii 2.0 权威指南 (8) 配合数据库使用
  7. opencv ffmpeg推流
  8. 儿童“益”站线上课堂 战“疫”不停学
  9. (Network Analysis)graph centrality measures
  10. EDI REMADV报文详解
  11. OKR-Periods of Words - kmp
  12. spring-retry
  13. java压缩字符串_Java压缩字符串的方法收集
  14. js调用swift相册DEMO(网易新闻)
  15. Json解析后显示在listview控件上
  16. 婚姻出现危机最终做出妥协的多是女人
  17. 推荐2本普通人参悟的书
  18. 郑州大学微型计算机原理与接口技术,《微机原理及接口技术》第01章在线测试...
  19. 带你去华为看看(图)
  20. 分支限界法:求最小倍数

热门文章

  1. 我的世界服务器死亡延迟,2020年我的世界服务器怎么开死亡不掉落
  2. 安卓assets隐藏文件
  3. Postgres中计算时间差
  4. 亚马逊经典真题:三数之和
  5. 医学核心期刊《中国临床研究》期刊简介及投稿要求
  6. Ketos 笔记 -- 记 Go Hackathon 2017
  7. 关闭Win10自动更新工具
  8. HTML:一种标记语言而不是编程语言(9.0)
  9. 主板螺丝是机箱配还是主板配_主板尺寸不怕乱 螺丝孔距定规范_主板评测-中关村在线...
  10. 正能量----不肯努力,又不肯冒险,你活该屌丝一辈子