某好友近日初学程序设计语言时,问了我如题的问题,他的解法是直接暴力模拟所有的情况,然后再进行判定
思绪良久,其实可以直接判定两个矩形的中心距离,然后判断其是否皆小于两矩形长的和的一半 和 宽的和的一半 即可;
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x1,x2,x3,x4,y1,y2,y3,y4;
/*1 左右 2 左右 1 下上 2 下上*/
double length=0,x1length=0;
cin>>x1>>x2>>x3>>x4>>y1>>y2>>y3>>y4;
length = sqrt( ( abs(x1+x2-x3-x4)/2 * abs(x1+x2-x3-x4)/2 ) + ( abs(y1+y2-y3-y4)/2 * abs(y1+y2-y3-y4)/2 ) );
/* calculate length */
if( ( length<( abs(x2-x1)+abs(x4-x3) )/2 ) && ( length< ( abs(y2-y1) + abs(y4-y3) )/2 ) )
{
printf("相交\n");
}
else
{
printf("不相交\n");
}
return 0;
}