#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
/**
* @explanation 坐标点类
*/
class Coordinate
{
public:
double xCoordinate;
double yCoordinate;
Coordinate(double x = 0,double y = 0)
{
this->xCoordinate = x;
this->yCoordinate = y;
}
bool operator!=(Coordinate const &comp) const
{
return (this->xCoordinate != comp.xCoordinate ||
this->yCoordinate != comp.yCoordinate);
}
};
/**
* @explanation 判断是否为等腰直角三角形.
*/
bool Judge(Coordinate const x,Coordinate const y,Coordinate const z)
{
Coordinate *mVector = new Coordinate(x.xCoordinate - y.xCoordinate,
x.yCoordinate - y.yCoordinate);
Coordinate *nVector = new Coordinate(z.xCoordinate -
(x.xCoordinate + y.xCoordinate)/2,
z.yCoordinate -
(x.yCoordinate + y.yCoordinate)/2);
//判断是否为等腰三角形
bool result = ((mVector->xCoordinate * nVector->xCoordinate +
mVector->yCoordinate * nVector->yCoordinate) == 0);
//判断是否是直角三角形
if(result)
result = (mVector->xCoordinate * mVector->xCoordinate +
mVector->yCoordinate * mVector->yCoordinate)
== ((nVector->xCoordinate * nVector->xCoordinate +
nVector->yCoordinate * nVector->yCoordinate) * 4);
delete mVector;
delete nVector;
return result;
}
/**
* @explanation 给定四个坐标点,判断这四个坐标点是否为一个正方形上的四点.
* @algorithm 任意选定三点,判断是否为等腰直角三角形(确定直角的位置);
* 然后再利用另外一个点来验证.
*/
bool IsSquare(Coordinate *array,int length)
{
if(length != 4)
return false;
int a,b,c;
if(Judge(array[0],array[1],array[2]))
{
a = 0;
b = 1;
c = 2;
}
else if(Judge(array[0],array[2],array[1]))
{
a = 0;
b = 2;
c = 1;
}
else if(Judge(array[2],array[1],array[0]))
{
a = 1;
b = 2;
c = 0;
}
else
return false;
return (array[3] != array[c] && Judge(array[a],array[b],array[3]));
}
/**
* @explanation 应用程序入口main():仅限测试
*/
int main()
{
int length;
Coordinate array[345];
cin>>length;
while(length--)
{
int n;cin>>n;
if(n == 4){
for(int i = 0; i < 4; ++i)
cin>>array[i].xCoordinate>>array[i].yCoordinate;
cout<<(IsSquare(array,4) ? "YES" : "NO")<<endl;
}
else{
for(int i = 0; i < n; ++i)
cin>>array[i].xCoordinate>>array[i].yCoordinate;
cout<<"NO"<<endl;
}
}
return 0;
}
判定是否是正方形
最新推荐文章于 2024-03-26 23:24:59 发布