码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5206 Four Inages Strategy(计算几何)

时间:2015-04-19 01:02:53      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

题意:给出空间中四个点的坐标 判断能否组成正方形

思路:这题需要注意的是 空间而不是平面

         就算是四边相等 对角线相等也不一定就是正方形

         还需要通过向量判断对边是否平行

 

#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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!