#include<stdio.h>
#include<math.h>#define areaFile "area.txt"
#define perportionFile "perportion.txt"#define min(a,b) ( ((a)>(b)) ? (b):(a) )
#define max(a,b) ( ((a)>(b)) ? (a):(b) )typedef struct xy
{
int x;
int y;
}Point;bool saveValueToFile(const char *fileName, double g[][22], int rows);void main()
{//每一行的两个点分表表示一个矩形的左上角和右下角坐标Point A[] = {{73, 130}, {1498, 130},{303, 205}, {1269, 346},{275, 381}, {1304, 408},{139, 466}, {1434, 692},{140, 732}, {1212, 754},{436, 777}, {1138, 799},{75, 855}, {314, 878},{75, 902}, {769, 958},{73, 963}, {770, 1232},{73, 1237}, {770, 1537},{73, 1542}, {770, 1782},{74, 1841}, {770, 1907},{74, 1910}, {770, 1988},{73, 2001}, {768, 2043},{73, 2051}, {440, 2073},{73, 2076}, {770, 2124},{803, 901}, {1500, 1172},{803, 1177}, {1501, 1508},{803, 1515}, {1501, 1909},{803, 1913}, {1500, 2125},{655, 2150}, {914, 2166}};//每一行的两个点分表表示一个矩形的左上角和右下角坐标Point B[] = {{75, 72}, {1499, 90},{256, 147}, {1314, 275},{551, 333}, {1022, 362},{139, 424}, {1420, 560},{140, 567}, {1432, 731},{140, 771}, {1112, 793},{436, 814}, {1137, 836},{75, 889}, {318, 913},{74, 938}, {768, 995},{74, 1003}, {769, 1201},{74, 1287}, {769, 1760},{74, 1806}, {769, 1853},{107, 1878}, {644, 1905},{73, 1919}, {768, 1991},{73, 1994}, {769, 2067},{803, 937}, {1500, 1630},{837, 1633}, {1499, 1662},{804, 1666}, {1499, 1725},{938, 1762}, {1498, 1794},{803, 1825}, {1499, 1985},{946, 2018}, {1498, 2046},{200, 2087}, {1372, 2121}};double value[sizeof(A) / (2 * sizeof(A[0]))][sizeof(B) / (2 * sizeof(B[0]))];double perportion[sizeof(A) / (2 * sizeof(A[0]))][sizeof(B) / (2 * sizeof(B[0]))];int s, i, j, count = 0;//int chang, kuang;int width1, height1, width2, height2;Point a[4] = {0};printf("A rows: %d\n", sizeof(A)/(2 * sizeof(A[0])));printf("B rows: %d\n", sizeof(B)/(2 * sizeof(B[0])));for (i = 0; i < sizeof(A)/(sizeof(A[0])); i += 2){a[0].x = A[i].x;a[0].y = A[i].y;a[1].x = A[i + 1].x;a[1].y = A[i + 1].y;width1 = abs(a[1].x - a[0].x);height1 = abs(a[1].y - a[0].y);for (j = 0; j < sizeof(B)/(sizeof(B[0])); j += 2){a[2].x = B[j].x;a[2].y = B[j].y;a[3].x = B[j + 1].x;a[3].y = B[j + 1].y;width2 = abs(a[3].x - a[2].x);height2 = abs(a[3].y - a[2].y);s = 0;if (a[1].x < a[2].x || a[3].x < a[0].x || a[3].y < a[0].y || a[2].y > a[1].y){s = 0; //没有重叠区域}else{s = (min(a[3].y , a[1].y) - max(a[0].y , a[2].y)) * (min(a[3].x , a[1].x) - max(a[0].x , a[2].x));}/*chang=min(abs(a[1].x-a[0].x),abs(a[3].x-a[2].x));kuang=min(abs(a[1].y-a[0].y),abs(a[3].y-a[2].y));if(min(a[2].x,a[3].x)>max(a[0].x,a[1].x)||max(a[2].x,a[3].x)<min(a[0].x,a[1].x)||min(a[2].y,a[3].y)>max(a[0].y,a[1].y)||max(a[2].y,a[3].y)<min(a[0].y,a[1].y)){s=0;}else{s=min(min(abs(a[2].x-a[1].x),abs(a[3].x-a[0].x)),chang)*min(min(abs(a[2].y-a[1].y),abs(a[3].y-a[0].y)),kuang);printf("%d: A[%d] 与 B[%d]有重叠,面积%d\n", ++count, i / 2, j / 2, s);}*/value[i/2][j/2] = (double)s;perportion[i/2][j/2] = 1.0 - 2.0 * value[i/2][j/2] / (width1 * height1 + width2 * height2);}}saveValueToFile(areaFile, value, sizeof(A)/(2 * sizeof(A[0])));saveValueToFile(perportionFile, perportion, sizeof(A)/(2 * sizeof(A[0])));#if 0while(true){printf("Please input 4 x,y:for example 1,2\n");for(int i=0;i<4;i++){scanf("%d %d",&a[i].x,&a[i].y);}chang=min(abs(a[1].x-a[0].x),abs(a[3].x-a[2].x));kuang=min(abs(a[1].y-a[0].y),abs(a[3].y-a[2].y));if(min(a[2].x,a[3].x)>max(a[0].x,a[1].x)||max(a[2].x,a[3].x)<min(a[0].x,a[1].x)||min(a[2].y,a[3].y)>max(a[0].y,a[1].y)||max(a[2].y,a[3].y)<min(a[0].y,a[1].y)){s=0;}else{s=min(min(abs(a[2].x-a[1].x),abs(a[3].x-a[0].x)),chang)*min(min(abs(a[2].y-a[1].y),abs(a[3].y-a[0].y)),kuang);}printf("%d\n",s);}
#endif/*while(true){printf("Please input 4 x,y:for example 1,2\n");//注意我选取的坐标系和我们平时在数学里面遇到的一样,和你昨天晚上讨论的坐标系有点细微区别,如果映射到你的坐标系的话//将点的x与y坐标互换即可,在我的这个测试程序中输入左下角和右上角两个点的坐标确定一个矩形for(int i=0;i<4;i++){scanf("%d %d",&a[i].x,&a[i].y);}*第一个矩形左下角x1,y1,右上角x2,y2,第二个左下x3,y3,右上x4,y4*1 当x2<x3 or x4<x1 or y4<y1 or y3>y2 没有交集*2 除去1的情况后交集为  (min(y4,y2)-max(y1,y3))*(min(x4,x2)-max(x1,x3))if (a[1].x < a[2].x || a[3].x < a[0].x || a[3].y < a[0].y || a[2].y > a[1].y){s = 0; //没有重叠区域}else{s = (min(a[3].y , a[1].y) - max(a[0].y , a[2].y)) * (min(a[3].x , a[1].x) - max(a[0].x , a[2].x));}printf("Overlapping area is: %d\n", s);}*/}bool saveValueToFile(const char *fileName, double g[][22], int rows)
{FILE *fp = NULL;int i, j;fp = fopen(fileName, "w");for (i = 0; i < rows; i++){for (j = 0; j < 22; j++){fprintf(fp, "%8.7lf ", g[i][j]);}fprintf(fp, "%s", "\n");}fflush(fp);fclose(fp);return true;
}

求两个矩形重叠部分的面积相关推荐

  1. C语言 有两个矩形 求重叠面积,计算两个矩形重叠面积的简单方法

    实验需要,需要计算两个矩形重叠面积 想来想去觉得挺复杂,搜了下,看见一个超给力的方法 这里分享下: function D = DecideOberlap(Reframe,GTframe) x1 = R ...

  2. 计算两个矩形重叠面积的简单方法

    实验需要,需要计算两个矩形重叠面积 想来想去觉得挺复杂,搜了下,看见一个超给力的方法 这里分享下: function D = DecideOberlap(Reframe,GTframe)x1 = Re ...

  3. ACMNO.47 矩形面积交(有图) 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

    题目描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴. 对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中, ...

  4. 平面上有两个圆相交,求两个圆相交部分的面积

    平面上有两个圆相交,求两个圆相交部分的面积 又学习了一遍算法,感触颇深,也对算法有了更进一步的认识,记录一下这次的学习,希望能帮到有需要的人. 输入:六个参数:第一个圆的圆心坐标,半径,第二个圆的圆心 ...

  5. python输入矩形的长和宽、求周长_输入矩形的长和宽,求出该矩形的周长和面积...

    01.1.上机内容:C++程序的编写和运行 02. 03.上机目的:编程序,输入数值,输出星期. 04. 05.我的程序:/*输入矩形的长和宽,求出该矩形的周长和面积*/ 06. 07.2./* 08 ...

  6. java 矩形重叠问题_两个矩形重叠的问题

    问:如何判断两个矩形是否重叠? 当满足以下条件时,两个矩形不是重叠的 1.一个矩形在另一个的上面 2.一个矩形在另一个的左边 一个矩形可以被表示为两个点,分别是左上和右下. 我们定义下面四个变量来表示 ...

  7. 两个矩形重叠部分面积

    #include<stdio.h> #include<math.h> #define min(a,b) ( ((a)>(b)) ? (b):(a) ) #define m ...

  8. 算法分析课设(一)平面上有两个圆相交,求两个圆相交部分的面积

    写出算法的文字描述 第一步:输入两个圆的参数 x1. y1. r1. x2. y2. r2. 第二步:计算两圆的距离d,然后分以下四种情况判断: 1.相离或相切.若d>=(r1+r2),则 s= ...

  9. 接上篇,通过接口实现多态,求三角形,矩形,圆周长面积

    /*通过接口实现多态. */ public class GraphTest {public static void main(String[] args) {GraphTest e = new Gra ...

最新文章

  1. springboot 事务_原创002 | 搭上SpringBoot事务源码分析专车
  2. matlab积分与绘图
  3. 01.05第六周周总结
  4. Bagging(bootstrap aggregating)
  5. LeetCode 190. Reverse Bits (算32次即可)
  6. python启动多个进程_Python程序中的进程操作--—--开启多进程
  7. 计算机网络之数据链路层:13、令牌传递协议、轮询协议-轮询访问介质访问控制
  8. Java 8实战 第一章笔记
  9. Python AutoCAD 图层
  10. 敏捷需求描述:用户故事
  11. l2范数求导_向量的L2范数求导
  12. ModelCoder模块系列:PID模块介绍
  13. 微信小程序 table表格 PC版本
  14. pandas read_excel 和 to_excel 读写Excel的参数详解
  15. OpenMP学习笔记之常用指令parallel/sections/critical 其余待续
  16. Kaggle泰坦尼克号船难--逻辑回归预测生存率
  17. dump文件深度分析
  18. oracle11g ins208022,解决重装 Oracle 出现的 INS-32025 问题,完全卸载 Oracle11g
  19. 第十周博文作业:项目1 求个人所得税
  20. c语言最优树的构造,哈夫曼树的构造及编码 Haffman树的构造及其编码

热门文章

  1. (C++)1018 锤子剪刀布
  2. Python中的类、模块和包究竟是什么?
  3. python和c++的相互调用教程
  4. 90 后 CTO 创业 6 年,做了一件改变互联网的“小事”
  5. 初级Java程序员所面临的4大挑战
  6. PHP引擎php.ini 和fastcti优化
  7. mcDropdown使用方法
  8. 常用Linux路由命令(route、ip、ifconfig等等)
  9. Ubuntu安装Beyond-Compare 4
  10. 统计csv词频_中文词频统计