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

  

时间: 2024-10-27 11:46:15

hdu 5206 Four Inages Strategy(计算几何)的相关文章

hdu 5206 Four Inages Strategy

题目大意: 判断空间上4个点是否形成一个正方形 分析: 标称思想 : 在p2,p3,p4中枚举两个点作为p1的邻点,不妨设为pi,pj,然后判断p1pi与p1pj是否相等.互相垂直,然后由向量法,最后一个点坐标应该为pi+pj−p1,判断是否相等就好了. 我的思想 : 枚举了各种情况,4条边相等+有一个角是直角.后来想想,因为是在三维中,有可能4个点不共面,这点没想到,不过这道题AC了,估计数据水了 1 #include<cstdio> 2 #include<cstring> 3

hdu 5206 Four Inages Strategy (空间向量)

中文题目:<四象阵法> 判断空间四点能否组成正方形. 一次AC,好激动~ #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> typedef long long ll; using namespace std; struct point{ int x,y,z; }; bool isequal(poi

HDOJ 5206 Four Inages Strategy 暴力+几何

枚举两个点当做0号点的相邻两边,判断两边长度是否相等和垂直,然后用向量推最后一个点,比较是否相等 Four Inages Strategy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 375    Accepted Submission(s): 150 Problem Description Young F found a secr

HDU 5206

 Four Inages Strategy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 387    Accepted Submission(s): 155 Problem Description Young F found a secret record which inherited from ancient times i

HDU 3272 - Mission Impossible(计算几何)

HDU 3272 - Mission Impossible(计算几何) ACM 题目地址: HDU 3272 - Mission Impossible 题意: 在二维平面上,给你一个初始位置(hx,hy),你需要获得四种资源,A在x轴上任意位置,B在y轴上任意位置,C.D位置会告诉你.问获得四种资源后返回(hx,hy)最短要走多长. 分析: 三条线段与X.Y轴相交有三种情况: 与x,y都相交,此时最短距离为周长 仅与X或Y相交,这时枚举每条边,利用镜像对称算出距离,取最小值 与X和Y都不相交,这

hdu 2393:Higher Math(计算几何,水题)

Higher Math Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2219    Accepted Submission(s): 1219 Problem Description You are building a house. You'd prefer if all the walls have a precise right

HDU 4173 Party Location(计算几何,枚举)

HDU 4173 题意:已知n(n<=200)位参赛选手的住所坐标,现要邀请尽可能多的选手来参加一个party,而每个选手对于离住所超过2.5Km的party一律不去,求最多可以有多少个选手去参加party. 思路: 不妨先考虑party可能的位置,要尽可能多的邀请到选手参加,则只需考虑party所在位置在某两位住所连线的中点上或某选手住所所在位置,因为这是最大参加party选手数很有可能在的位置. 若其他位置能得到最大参加选手数,那么中点或选手住所也一定可得到.//反证法可得,试着画画就ok~

HDU 2438 Turn the corner (计算几何 + 三分)

Turn the corner Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2059    Accepted Submission(s): 785 Problem Description Mr. West bought a new car! So he is travelling around the city. One day h

Hdu 3365 New Ground(计算几何)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3365 思路: 以A[0]为原点,构造向量A[i]-A[0].先旋转(注意旋转方向),再伸缩,最后平移至终点. #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> #define debu using namespace st