求两个矩形重叠部分的面积
#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;
}
相关文章:

session,cookie,sessionStorage,localStorage的区别及应用场景
浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互。 一、cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式。 区别: 1、保持状态:cookie保存在浏览器端&#x…

鱼眼镜头及其标定
1. 鱼眼镜头特性与镜头分类 普通镜头和针孔相机在数学模型上可以等价对待,都是射影变换(Perspective transform); 鱼眼镜头受到水下斯涅耳窗口现象的启发,采用不同的投影方式,来得到极大的视场角ÿ…

django -- url 的 name 属性
在html的form中使用给url定义的name值,可以在修改url时不用在修改form的src。 urls.py from django.conf.urls import url from mytest import viewsurlpatterns [# url(r^admin/, admin.site.urls),url(r^index/, views.index, namemysite), views.Index.as_view(…

两个矩形重叠部分面积
#include<stdio.h> #include<math.h> #define min(a,b) ( ((a)>(b)) ? (b):(a) ) #define max(a,b) ( ((a)>(b)) ? (a):(b) )typedef struct xy { int x; int y; }xy;void main() {xy a[4];int s,chang,kuang;while (true){printf("Please input 4 x,…

前百度面试官整理的——Java后端面试题(一)
2019独角兽企业重金招聘Python工程师标准>>> List 和 Set 的区别 List , Set 都是继承自 Collection 接口 List 特点:元素有放入顺序,元素可重复 , Set 特点:元素无放入顺序,元素不可重复,重复元…

vibe前景提取算法示例代码
//ViBe.h#pragma once #include <iostream> #include "opencv2/opencv.hpp"using namespace cv; using namespace std;#define NUM_SAMPLES 20 //每个像素点的样本个数 #define MIN_MATCHES 2 //#min指数 #define RADIUS 20 //Sqthere半径 #define SUBSAMPL…

Linux系统程序运行时加载动态库路径顺序
程序运行时加载动态库路径顺序(Linux) 在linux系统中,如果程序需要加载动态库,它会按照一定的顺序(优先级)去查找: 链接时路径(Link-time path)和运行时路径(Run-time path)不是一回…

浮动元素会引起的问题和你的解决办法
问题: (1)父元素的高度无法被撑开,影响与父元素同级的元素(2)与浮动元素同级的非浮动元素会跟随其后(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否…

Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(下)
下载Visual Paradigm最新试用版 已加入在线订购,现在抢购立享特别优惠>> 将构造型应用于模型元素 接下来,我们将构造型应用于模型元素。右键单击Customer,然后从弹出菜单中选择Stereotypes> External User。 从图形上看…

基于opencv的简单视频处理类示例
#include "opencv2/opencv.hpp" using namespace std; using namespace cv; class VideoProcessor { private: VideoCapture caputure; //图像处理函数指针 void (*process)(Mat &,Mat &); bool callIt; string WindowNameInput; string WindowNa…

flex数据绑定
2019独角兽企业重金招聘Python工程师标准>>> 1 、方法绑定 [Bindable(event"myFlagChanged")] private function isEnabled():String { if (myFlag)return true; else return ‘false; } <mx:TextArea id"myTA" text"{isEnabled()}&…

【error】error: field * has incomplete type
在编译程序是出现了如题错误, 类或结构体有前向声明的用法,编译到这里时还没有发现定义,不知道该类或者结构的内部成员,没有办法具体的构造一个对象,所以会报错。 两种解决方法: 方法一:将类成员…

Web前端学习笔记:Vue生命周期理解
一、感谢原创博主 示例代码出处vue2.0 探索之路——生命周期和钩子函数的一些理解 官方文档 二、生命周期简单描述 总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后。 创建前/后 在beforeCreated阶段,vue实例的挂载元素…

获取结构体中变量的偏移量
C/C获取结构体中变量的偏移量 1.某些特殊需求下,我们需要知道某个变量在其结构体中的偏移位置。 通常的做法就是定义一个宏变量,如下: #define OFFSET(structure, member) ((int64_t)&((structure*)0)->member) // 64位系统 #defin…

VS2010 CUDA 5.5 VA_X Win7 64位配置
一.安装CUDA5.5以及配置VS助手 1、安装之前必须确认自己电脑的GPU支持CUDA。在设备管理器中找到显示适配器(Display adapters),找到自己电脑的显卡型号,如果包含在http://www.nvidia.com/object/cuda_gpus.html的列表中,说明支持…

SmartRoute之大规模消息转发集群实现
为什么80%的码农都做不了架构师?>>> 消息转发的应用场景在现实中的应用非常普遍,我们常用的IM工具也是其中之一;现有很多云平台也提供了这种基础服务,可以让APP更容易集成相关功能而不必投入相应的开发成本。对于实现…

unity项目警告之 LF CRLF问题
unity中创建的脚本,以LF结尾。 Visual studio中创建的脚本,以 CRLF结尾。 当我们创建一个unity脚本后,再用VS打开编辑保存后,这个文件既有LF结尾符,也有CRLF结尾符。 解决办法:更改unity的代码生成模板&…

Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW
1.总结 对于基本数据类型和自定义类型,我们需要用预编译指令来保证栈内存的对齐,用重写operator new的方式保证堆内存对齐。对于嵌套的自定义类型,申请栈内存时会自动保证其内部数据类型的对齐,而申请堆内存时仍然需要重写operat…

c/c++文件遍历
//CBrowseDir.h#pragma once#include <stdlib.h> #include <direct.h> #include <string.h> #include <io.h> #include <stdio.h> #include <iostream> using namespace std; class CBrowseDir { protected: //存放初始目录的绝对…

优化应用启动时的体验
2019独角兽企业重金招聘Python工程师标准>>> 对于应用的启动时间,只能是尽量的避免一些耗时的、非必要性的操作在主线程中,这样相对减少一部分启动的耗时,同时在等待第一帧显示的时间里,可以加入一些配置用来增加用户体…

系列四、SpringMVC响应数据和结果视图
2019独角兽企业重金招聘Python工程师标准>>> 项目结构如下 一、返回值分类 一 返回字符串 Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址,根据字符串最后跳转到对应jsp页面 第一步、导入依赖坐标文件、配置…

numpy数组切片:一维/二维/数组
文章目录numpy数组切片操作一维数组(冒号:)1、一个参数:a[i]2、两个参数:ba[i:j]3、三个参数:格式b a[i:j:s]4、例子二维数组(逗号,)取元素 X[n0,n1]切片 X[s0:e0,s1:e1…

行列式求值、矩阵求逆
#include <iostream> #include <string> #include <assert.h> #include <malloc.h> #include <iostream> #include <stdlib.h> #include <memory.h> #include <time.h>using namespace std;//动态分配大小位size的一维数组 te…

IP 地址子网划分
1.你所选择的子网掩码将会产生多少个子网2的x次方-2(x代表网络位借用主机的位数,即2进制为1的部分,现在的网络中,已经不需要-2,已经可以全部使用,不过需要加上相应的配置命令,例如CISCO路由器需要加上ip su…

git rebase 和 git merger
& git merge 在上图中,每一个绿框均代表一个commit。除了c1,每一个commit都有一条有向边指向它在当前branch当中的上一个commit。 图中的项目,在c2之后就开了另外一个branch,名为experiment。在此之后,master下的修…

matplotlib绘制三维轨迹图
1. 绘制基本三维曲线 # import necessary module from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np# load data from file # you can replace this using with open data1 np.loadtxt("./pos.txt") # print (data1) n…

求一个矩阵的最大子矩阵
#include <iostream> #include <string> #include <assert.h> #include <malloc.h> #include <iostream> #include <stdlib.h> #include <memory.h> #include <time.h> #include <limits.h>using namespace std;//动态分…

tcpdump抓包文件提取http附加资源
2019独角兽企业重金招聘Python工程师标准>>> 前面几篇文章铺垫了一大批的协议讲解,主要是为了提取pcap文件中http协议附加的资源。 1、解析pcap文件,分为文件格式头,后面就是数据包头和包数据了 2、分析每个包数据,数据…

smobiler介绍(二)
类似开发WinForm的方式,使用C#开发Android和IOS的移动应用?听起来感觉不可思议,那么Smobiler平台到底是如何实现的呢,这里给大家介绍一下。客户端Smobiler分为两种客户端,一种是开发版,一种是打包版开发版&…

Matplotlib基本用法
Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具,熟悉 MATLAB 也可以很快的上手 Matplotlib。 1. 认识Matploblib 1.1 Figure 在任何绘图之前,我们需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。 import matplot…