标签:
题意:给出空间中四个点的坐标 判断能否组成正方形
思路:这题需要注意的是 空间而不是平面
就算是四边相等 对角线相等也不一定就是正方形
还需要通过向量判断对边是否平行
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll __int64
//#define ll long long
struct node
{
double x,y,z;
};
node a[10];
int cmp(node l,node r)
{
if(l.x==r.x&&l.y==r.y) return l.z<r.z;
if(l.x==r.x) return l.y<r.y;
return l.x<r.x;
}
double sum(node l,node r)
{
return (l.x-r.x)*(l.x-r.x)+(l.y-r.y)*(l.y-r.y)+(l.z-r.z)*(l.z-r.z);
}
bool xl()
{
double x1=a[0].x-a[2].x;
double y1=a[0].y-a[2].y;
double z1=a[0].z-a[2].z;
double x2=a[1].x-a[3].x;
double y2=a[1].y-a[3].y;
double z2=a[1].z-a[3].z;
if(x1*y2==y1*x2&&x1*z2==z1*x2&&y1*z2==z1*y2)
{
return true;
}
return false;
}
int main()
{
int t;
int cas=1;
scanf("%d",&t);
while(t--)
{
int ok=0;
scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&a[0].x,&a[0].y,&a[0].z,&a[1].x,&a[1].y,&a[1].z,&a[2].x,&a[2].y,&a[2].z,&a[3].x,&a[3].y,&a[3].z);
sort(a,a+4,cmp);
ll edge1,edge2;
ll edge3,edge4;
ll dui1,dui2;
edge1=sum(a[0],a[1]);
edge2=sum(a[0],a[2]);
edge3=sum(a[1],a[3]);
edge4=sum(a[2],a[3]);
dui1=sum(a[1],a[2]);
dui2=sum(a[0],a[3]);
if(edge1==edge2&&edge3==edge4&&edge2==edge3)
{
if(dui1==dui2)
{
if(xl())
{
ok=1;
}
}
}
if(ok) printf("Case #%d: Yes\n",cas++);
else printf("Case #%d: No\n",cas++);
}
return 0;
}
hdu 5206 Four Inages Strategy(计算几何)
标签:
原文地址:http://www.cnblogs.com/sola1994/p/4438433.html