求矩形交集的面积
来源:互联网 发布:淘宝紫檀手串真假 编辑:程序博客网 时间:2024/04/28 01:51
- 一道C++笔试题,求矩形交集的面积:
在一个平面坐标系上,有两个矩形,它们的边分别平行于X和Y轴。
其中,矩形A已知, ax1(左边), ax2(右边), ay1(top的纵坐标), ay2(bottom纵坐标). 矩形B,类似,就是 bx1, bx2, by1, by2。这些值都是整数就OK了。
要求是,如果矩形没有交集,返回-1, 有交集,返回交集的面积。
int area(rect const& a, rect const& b)
{
...
}
点评:
healer_kx:
补齐代码,最好是简洁的,别用库。你可以写你的辅助函数,宏定义,代码风格也很重要。
ri_aje:下面是一个简短的证明。- struct rect
- {
- // axis alignment assumed
- // bottom left is (x[0],y[0]), top right is (x[1],y[1])
- double x [2];
- double y [2];
- };
- template <typename T> T const& min (T const& x, T const& y) { return x<y ? x : y; }
- template <typename T> T const& max (T const& x, T const& y) { return x>y ? x : y; }
- // return type changed to handle non-integer rects
- double area (rect const& a, rect const& b)
- {
- // perfectly adjacent rects are considered having an intersection of 0 area
- double const dx = min(a.x[1],b.x[1]) - max(a.x[0],b.x[0]);
- double const dy = min(a.y[1],b.y[1]) - max(a.y[0],b.y[0]);
- return dx>=0&&dy>=0 ? dx*dy : -1;
- }
对于平行于坐标轴的矩形 r,假设其左下角点坐标为 (rx0,ry0),右上角点坐标为 (rx1,ry1),那么由 r 定义的无限有界点集为:{(x,y)|x in [rx0,rx1] && y in [ry0,ry1]}。
根据交集的定义,则任意二维点 (x,y) 在矩形 a,b 的交集内等价于
{(x,y)|(x,y) in a 并且 (x,y) in b} <==>
{(x,y)|x in [ax0,ax1] && x in [bx0,bx1] 并且 y in [ay0,ay1] && y in [by0,by1]} <==>
{(x,y)|x in [max(ax0,bx0),min(ax1,bx1)] 并且 y in [max(ay0,by0),min(ay1,by1)]}
因此,交集矩形的边长分别为 min(ax1,bx1)-max(ax0,bx0) 和 min(ay1,by1)-max(ay0,by0)。注意当交集为空时(a,b 不相交),则经此法计算出来的交集边长为负值,此事实可用于验证 a,b 的相交性。
鉴于笛卡尔积各个维度上的不相关性,此方法可扩展到任意有限维线性空间,比如,三维空间中平行于坐标轴的长方体的交集体积可以用类似的方法计算。
来源:http://topic.csdn.net/u/20120913/18/bc669d60-b70a-4008-be65-7c342789b925.html。
0 0
- 求矩形交集的面积
- 求矩形交集的面积
- 如何求两个向交矩形的交集的面积?
- 如何求两个向交矩形的交集的面积?
- 求矩形并的面积
- 求矩形并的面积
- 矩形交集和并集的面积-离散化
- 上机项目--求矩形的周长面积
- hdu 1542 求矩形并的面积
- 求矩形的周长和面积【Java】
- 求三角形、矩形、圆的面积
- 求矩形与圆形的面积 JAVA
- 2056--求两矩形的交叉面积
- 用构造方法求矩形的面积
- URAL Goat in the Garden(圆与矩形求交集面积)
- c++求圆的面积和矩形的面积
- 求最大矩形面积
- 矩形面积求并
- Android四种Activity的加载模式
- linux常用命令
- FusionCharts参数说明
- STM32(Cortex-M3)启动过程(入口地址)
- PHP缩略图的生成
- 求矩形交集的面积
- Jquery实现拖拽
- 解决runtime error R6025
- WCF发布遇到权限问题及解决
- PCL VS2010 配置
- 编译移动端服务器jetty3.1步骤和编译错误解决
- IPv4 和 IPv6 头部结构主要区别
- Android PackageManager 详解
- GCD的一些分析-1