hdu 5206 Four Inages Strategy(计算几何)

本文介绍了一种用于判断空间中四个点是否能构成正方形的算法,涉及向量和几何原理,包括四边相等、对角线相等及向量平行的条件。

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

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

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

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

 

#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;
}

  

转载于:https://www.cnblogs.com/sola1994/p/4438433.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值