如何计算两个矩形相交部分的面积?

weakwater 2009-06-16 07:04:58
矩形1是一个正矩形,各边都是单位长度
矩形2是一个经过旋转后的矩形,但是仍然是一个矩形

如果快速判断这两个矩形是否相交
如果相交,如何计算出相交部分的大概面积呢?
所谓大概面积就是相交面积占矩形1的面积的1/2, 1/4, 1/8,大概的就可以
...全文
1942 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
梧桐168 2009-08-03
  • 打赏
  • 举报
回复
将相交的两个矩形顶点按照X,Y大小排序,应该就能很快求出交点的坐标
asideu 2009-06-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liumu1209 的回复:]
矩形相交必定有一个顶点落在另一个矩形内。(我无法证明。。。)

所以只需要判断点V是否在矩形A当中就行了。
A可以用四个条边线性函数表示{y <f(x),y <g(x),y>a(x),y>b(x)}
所以只需要判断点V是符合以上不等式。只要四个顶点符合,就表明两矩形相交。
[/Quote]
简单明了!呵呵
liumu1209 2009-06-20
  • 打赏
  • 举报
回复
矩形相交必定有一个顶点落在另一个矩形内。(我无法证明。。。)

所以只需要判断点V是否在矩形A当中就行了。
A可以用四个条边线性函数表示{y<f(x),y<g(x),y>a(x),y>b(x)}
所以只需要判断点V是符合以上不等式。只要四个顶点符合,就表明两矩形相交。

另外还有一方法就是通过矩阵变换,将坐标系的X轴与Y轴与矩形A的两边重合。(矩形任选三点V1,V2,V3组成向量a,b a.b=0,a,b就可以做为坐标系的两轴,a,b的公共点为原点 )
将此矩形A对X,Y轴垂直和平行投影得x1,x2,y1,y2,将点V也进行垂直和平行投影得x3,y3,只要x1<x3<x2且y1<y3<y2 那么就表明两矩形相交


矩形相交的公共面积,没有详细想过。只能给点意见了。
对矩形A,B分另作外接圆O1,O2。即然是求近似值,那我就求两面的公共面积了。(没有仔细想过误差会有多大)
已知条件是两圆半径r1,r2,以及两圆心的距离l,求它的公共面积还是很好求的。

或许可以用另一个模型然后用积分做出来吧,那样会很精确的噢。可惜早忘了。。。
weakwater 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 booklove 的回复:]
2楼的方法不错。
包含算不算相交啊?
[/Quote]

包含算相交,我就是想得到两个矩形公共区域的面积
逐像素计算是不是效率有点低?
我是在主频较低的嵌入式设备上计算的,计算结果也不用太精确
a396830 2009-06-19
  • 打赏
  • 举报
回复
帮顶
hendriclee 2009-06-19
  • 打赏
  • 举报
回复
用CRegion吧,想怎么求交就怎么求交……
booklove 2009-06-19
  • 打赏
  • 举报
回复
2楼的方法不错。
包含算不算相交啊?
wenqinwuhai 2009-06-17
  • 打赏
  • 举报
回复
mark
weakwater 2009-06-17
  • 打赏
  • 举报
回复
多谢大家的热心回复

这个算法要自己实现,不能用Windows API
dch4890164 2009-06-17
  • 打赏
  • 举报
回复
周培德 《计算几何 算法设计与分析》
aaaa3105563 2009-06-17
  • 打赏
  • 举报
回复
帮顶·
  • 打赏
  • 举报
回复
我觉得都可以分解为多个三角形,判断各个三角形是否有相交。
这样问题就简化为判断三角形相交的情况。


这个思路可行。

http://topic.csdn.net/t/20040919/08/3387364.html




用户 昵称 2009-06-16
  • 打赏
  • 举报
回复
相交好判断,相交部分的面积可以看成两个三角形,而且是可以精确解的。
tkminigame 2009-06-16
  • 打赏
  • 举报
回复
这个因为其中一个矩形是单位正交矩形,答案会简化很多啊。你可以把问题想象为把矩形2放在一个网格里,每个网格坐标都是矩形1的整数倍,很容易求出面积来啊。
bragi523 2009-06-16
  • 打赏
  • 举报
回复
计算像素就行吧
Gothic_girl 2009-06-16
  • 打赏
  • 举报
回复
求任意两矩形的相交面积,矩形可以是倾斜的
http://topic.csdn.net/u/20071115/16/E7CDF666-0295-4CCB-995F-5F7204527C0B.html
Gothic_girl 2009-06-16
  • 打赏
  • 举报
回复
参考算法:

判断矩形相交,并求相交面积
class Point
{
private int x, y;

internal int X
{
get
{
return this.x;
}
set
{
this.x = value;
}
}

internal int Y
{
get
{
return this.y;
}
set
{
this.y = value;
}
}

public Point(int x,int y)
{
this.x = x;
this.y = y;
}
}

class Rectangle
{
private Point min = null;
internal Point Min
{
get
{
return this.min;
}
}

private Point max = null;
internal Point Max
{
get
{
return this.max;
}
}

public Rectangle(Point min, Point max)
{
this.min = min;
this.max = max;
}

public Rectangle()
{
this.min = new Point(0,0) ;
this.max = new Point(0, 0);
}
}

class TestRect
{
public static void Main(String[] args)
{
Rectangle rect1 = new Rectangle();
Rectangle rect2 = new Rectangle();
Rectangle rect = new Rectangle();
int s = 0;
rect.Min.X = System.Math.Max(rect1.Min.X, rect2.Min.X);
rect.Min.Y = System.Math.Max(rect1.Min.Y, rect2.Min.Y);
rect.Max.X = System.Math.Min(rect1.Max.X, rect2.Max.X);
rect.Max.Y = System.Math.Min(rect1.Max.Y, rect2.Max.Y);
if (rect.Min.X < rect.Max.X && rect.Min.Y < rect.Max.Y)
{
s = (rect.Max.X - rect.Min.X) * (rect.Max.Y - rect.Min.Y);
}
else
{
s = 0;
}
System.Console.WriteLine(rect.Min.X);
System.Console.WriteLine(rect.Min.Y);
System.Console.WriteLine(rect.Max.X);
System.Console.WriteLine(rect.Max.Y);

System.Console.WriteLine(s);
System.Console.ReadLine();
}
}
yangyang__ 2009-06-16
  • 打赏
  • 举报
回复
API函数:BOOL IntersectRect(LPRECT lprcDst,CONST RECT *lprcSrc1,CONST RECT *lprcSrc2)

形参lprcSrc1 与lprcSrc2为你要判断的两个矩形的RECT结构变量地址.
函数在形参lprcDst中返回两个矩形相交的区域(矩形)坐标.有了这个坐标,面积不愁.

如果两个矩形相交,函数返回非零值.否则返回0.
看不懂的话,看MSDN.
skyxie 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 weakwater 的帖子:]
矩形1是一个正矩形,各边都是单位长度
矩形2是一个经过旋转后的矩形,但是仍然是一个矩形

如果快速判断这两个矩形是否相交
如果相交,如何计算出相交部分的大概面积呢?
所谓大概面积就是相交面积占矩形1的面积的1/2, 1/4, 1/8,大概的就可以
[/Quote]

就用计算机算不规则图形面积的方法:

1. 生成一个包含包含这两个矩形的大矩形

2. 对大矩形中的任意一点, 如果它同时在两个小矩形内,则说明这个点属于相交的部分; 相交部分的面积就是所有这样的点的和.
不同时在两个小矩形内,则说明不属于相交部分.


这样求出来的相交面积是精确的.
如果相交面积为0,则说明不相交..
gyk120 2009-06-16
  • 打赏
  • 举报
回复
判断相交:
GBOOL IsIntersect(GRECT &rc)
{
if(IsEmpty(rc) || IsEmpty())
return FALSE;
if((left > rc.right) || (right < rc.left) || (top > rc.bottom) || (bottom < rc.top))
return FALSE;
return TRUE;
}
---------------------------------------------------------------

bool IsHitting(RECT rcSour, RECT rcDest)
{
bool b_Result=true;

if(rcSour.left>rcDest.right && rcSour.right>rcDest.left) b_Result=false;
if(rcSour.left<rcDest.right && rcSour.right<rcDest.left) b_Result=false;
if(rcSour.top>rcDest.bottom && rcSour.bottom>rcDest.top) b_Result=false;
if(rcSour.top<rcDest.bottom && rcSour.bottom<rcDest.top) b_Result=false;

return b_Result;
}
求面积的话,个人觉得可以用RGN来求
ACM 很全的计算几何模板 基础部分 1.几何公式 5 1.1三角形 5 1.2四边形 5 1.3正n边形 5 1.4圆 5 1.5棱柱 6 1.6棱锥 6 1.7棱台 6 1.8圆柱 6 1.9圆锥 6 1.10圆台 7 1.11球 7 1.12球台 7 1.13球扇形 7 2.直线与线段 7 2.0预备函数 7 2.1判三点是否共线 8 2.2判点是否在线段上 9 2.3判断两点在线段的同一侧 9 2.4判断两点是否在线段的异侧 9 2.5求点关于直线的对称点 10 2.7判断两线段是否相交 10 2.7.1常用版 10 2.7.2不常用版 11 2.8 求两条直线的交点 11 2.9点到直线的最近距离 12 2.10点到线段的最近距离 12 3.多边形 12 3.0 预备浮点函数 12 3.1判定是否是凸多边形 13 3.2判定点是否在多边形内 14 3.3 判定一条线段是否在一个任意多边形内 15 4. 三角形 16 4.0预备函数 16 4.1求三角形的外心 17 4.2求三角形内心 17 4.3求三角形垂心 17 5. 圆 18 5.0预备函数 18 5.1判定直线是否与圆相交 19 5.2判定线段与圆相交 19 5.3判圆和圆相交 19 5.4计算圆上到点p最近点 19 5.5计算直线与圆的交点 20 5.6计算两个圆的交点 20 6. 球面 21 6.0给出地球经度纬度,计算圆心角 21 6.1已知经纬度,计算地球上两点直线距离 21 6.2已知经纬度,计算地球上两点球面距离 21 7. 三维几何的若干模板 22 7.0预备函数 22 7.1判定三点是否共线 23 7.2判定四点是否共面 23 7.1判定点是否在线段上 23 7.2判断点是否在空间三角形上 24 7.3判断两点是否在线段同侧 24 7.4判断两点是否在线段异侧 25 7.5判断两点是否在平面同侧 25 7.6判断两点是否在平面异侧 25 7.7判断两空间直线是否平行 25 7.8判断两平面是否平行 26 7.9判断直线是否与平面平行 26 7.10判断两直线是否垂直 26 7.11判断两平面是否垂直 26 7.12判断两条空间线段是否相交 27 7.13判断线段是否与空间三角形相交 27 7.14计算两条直线的交点 28 7.15计算直线与平面的交点 28 7.16计算两平面的交线 29 7.17点到直线的距离 29 7.18 计算点到平面的距离 29 7.19计算直线到直线的距离 30 7.20空间两直线夹角的cos值 30 7.21两平面夹角的cos值 30 7.22直线与平面夹角sin值 31 1.最远曼哈顿距离 31 2. 最近点对 32 3. 最近点对 34 4. 最小包围圆 36 5. 求两个圆的交点 39 6. 求三角形外接圆圆心 40 7. 求凸包 42 8.凸包卡壳旋转求出所有对踵点、最远点对 44 9. 凸包+旋转卡壳求平面面积最大三角 47 10. Pick定理 50 11. 求多边形面积和重心 51 12. 判断一个简单多边形是否有核 52 13. 模拟退火 54 14. 六边形坐标系 56 15. 用一个给定半径的圆覆盖最多的点 60 16. 不等大的圆的圆弧表示 62 17. 矩形面积并 62 18. 矩形的周长并 66 19. 最近圆对 70 20. 求两个圆的面积交 74
ACM Fighting! 2 1.计算几何 5 1.1 注意 5 1.2几何公式 6 1.3 多边形 8 1.4多边形切割 11 1.5 浮点函数 12 1.6 面积 18 1.7球面 18 1.8三角形 19 1.9三维几何 22 1.10 凸包 30 1.11 网格 32 1.12 圆 33 1.13 矢量运算求几何模板 35 1.14结构体表示几何图形 47 1.15四城部分几何模板 52 1.16 一些代码 54 1.16.1 最小圆覆盖_zju1450 54 1.16.2 直线旋转_两凸包的最短距离(poj3608) 58 1.16.3 扇形的重心 62 1.16.4 根据经度纬度求球面距离 62 1.16.5 多边形的重心 64 1.16.6 存不存在一个平面把两堆点分开(poj3643) 66 1.16.7 pku_3335_判断多边形的核是否存在 67 1.16.8 pku_2600_二分+圆的参数方程 74 1.16.9 pku_1151_矩形相交面积 76 1.16.10 pku_1118_共线最多的点的个数 78 1.16.11 pku2826_线段围成的区域可储水量 80 1.16.12 Pick公式 84 1.16.13 N点中三个点组成三角形面积最大 86 1.16.14 直线关于圆的反射 89 1.16.15 pku2002_3432_N个点最多组成多少个正方形(hao) 94 1.16.16 pku1981_单位圆覆盖最多点(poj1981)CircleandPoints 97 1.16.17 pku3668_GameofLine_N个点最多确定多少互不平行的直线(poj3668) 99 1.16.18 求凸多边形直径 100 2.组合 102 2.1 组合公式 102 2.2 排列组合生成 102 2.3 生成gray码 104 2.4 置换(polya) 104 2.5 字典序全排列 105 2.6 字典序组合 105 2.7 一些原理及其例子 106 3.数论 108 3.1 阶乘最后非0位 108 3.2 模线性方程组 108 3.3 素数 110 3.4 欧拉函数 114 3.6高精度 116 3.6.1平方根 116 3.6.2 高精度乘幂 117 3.7 高斯消元回代法 122 3.8 数值计算 124 3.8.1 定积分计算 124 3.8.2 多项式求根(牛顿法) 125 3.8.3 周期性方程(追赶法) 127 4.排序 128 4.1快速选择算法 128 4.2归并排序+逆序数的求取 128 5.字符串 130 5.1 KMP应用 130 5.2 后缀数组 131 5.3 中缀表达式转后缀表达式 134 5.4 Firefighters 表达式求值 135 6.博弈 139 6.1 博弈的AB剪枝 139 6.1.1 取石子 139 6.2 博弈 SG函数 局势分割 141 7.数据结构 142 7.1 TRIE 142 7.2 线段树 147 7.3 并查集 151 7.4 树状数组 152 7.5 点树 154 7.6 STL 156 7.7 离散化 157 8.图论 158 8.0 2-SAT 158 8.2 寻找Euler回路 163 8.3 拓扑排序 163 8.4 差分约束系统 164 8.5 笛卡尔树 165 8.6 LCA和RMQ 167 8.7 割和桥 171 8.8 最小生成树(kruskal) 172 8.9 最短路径 173 8.10 最大网络流 175 8.11 最小费用流 180 8.12 最大团问题 182 8.13 二分图匹配 184 8.14 带权的最优二分图匹配 184 9.搜索算法概略 187 9.1 迭代深搜+IDA* 187 9.2 分之界限法(深搜) 189 9.3 A* 8数码问题( pascal ) 192 9.4 优先队列广搜 194 10.应用 197 10.1 Joseph问题 197 10.2 N皇后构造解 197 10.3 布尔母函数 198 10.4 第k元素 199 10.5 幻方构造 199 10.6 模式匹配(kmp) 201 10.7 逆序对数 201 10.8 字符串最小表示 202 10.9 最长公共单调子序列 202 10.10 最长子序列 204 10.11 最大子串匹配 204 10.12 最大子段和 205 10.13 最大子阵和 206 11.其它 207 11.1 大数(只能处理正数) 207 11.2 分数 212 11.3 矩阵 214 11.4 线性方程组 216 11. 5 线性相关 218 11.6 日期 219 11.7 读入 220 11.8 函数 220

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧