#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
//计算点到线段的最短距离
double PointToSegDist(double x, double y, double x1, double y1, double x2, double y2)
{
if (y1 == y2)
{
if (x1 > x2)
swap(x1, x2);
if (x < x1)
return sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
else if (x > x2)
return sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
else
return fabs(y - y1);
}
else if (x1 == x2)
{
if (y1 > y2)
swap(y1, y2);
if (y < y1)
return sqrt((x - x1) * (x - x1) + (y - y2) * (y - y2));
else if (y > y2)
return sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
else
return fabs(x - x1);
}
return 0;
}
//计算两点之间的距离
double PointToPointDist(double x1, double y1, double x2, double y2)
{
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int main()
{
int P;
cin >> P;
double x, y, r, x1, y1, x2, y2;
double d1, d2, d3, d4; //圆心和矩形4个顶点的距离
while (P--)
{
cin >> x >> y >> r >> x1 >> y1 >> x2 >> y2;
d1 = PointToPointDist(x, y, x1, y1);
d2 = PointToPointDist(x, y, x2, y2);
d3 = PointToPointDist(x, y, x1, y2);
d4 = PointToPointDist(x, y, x2, y1);
//矩形4个顶点都在圆内,不相交
if (d1 < r && d2 < r && d3 < r && d4 < r)
{
cout << "NO" << endl;
continue;
}
d1 = PointToSegDist(x, y, x1, y1, x1, y2);
d2 = PointToSegDist(x, y, x1, y1, x2, y1);
d3 = PointToSegDist(x, y, x1, y2, x2, y2);
d4 = PointToSegDist(x, y, x2, y1, x2, y2);
//圆心到矩形4条边的距离都大于半径,不相交
if (d1 > r && d2 > r && d3 > r && d4 > r)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}
HDU 1221(Rectangle and Circle)
猜你喜欢
转载自blog.csdn.net/Intelligence1028/article/details/104658139
今日推荐
周排行