题目连接 :http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=577&pid=1001
题目大意:在三维空间中,给你四个点,判断是否可以组成一个正方形:
解题思路:首先判断四条边是否相等,判断方法取三个边如果两边相等且平方和相加等于第三边平方和即可,在判断是否有一个角为直角,判断方法取三点叉乘为0就为直角。
ac代码:
#include
#include
#include<string.h>
#include
#include
#include
using namespace std;
struct point
{int x;int y;int z;
}p[5];
int dis(point a,point b)
{return (a.x-b.x)*(a.x-b.x) (a.y-b.y)*(a.y-b.y) (a.z-b.z)*(a.z-b.z);
}
int cheng(point a,point b,point c)
{return (a.x-b.x)*(c.x-a.x) (a.y-b.y)*(c.y-a.y) (a.z-b.z)*(c.z-a.z);
}
int fun(int a,int b,int c)
{if((a==b&&a b==c)||(a==c&&a c==b)||(c==b&&c b==a)) return 1;else return 0;
}
int judge()
{int a,b,c,a2,b2,c2,a3,b3,c3,t;a=dis(p[0],p[1]),b=dis(p[0],p[2]),c=dis(p[0],p[3]);a2=dis(p[1],p[0]),b2=dis(p[1],p[2]),c2=dis(p[1],p[3]);a3=dis(p[2],p[0]),b3=dis(p[2],p[1]),c3=dis(p[2],p[3]);if(fun(a,b,c)&&fun(a2,b2,c2)&&fun(a3,b3,c3)){int ab,bc,ac;ab=cheng(p[0],p[1],p[2]);bc=cheng(p[1],p[2],p[0]);ac=cheng(p[2],p[0],p[1]);if(ab==0||bc==0||ac==0) return 1;}return 0;
}
int main()
{int i,k,tcase;scanf("%d",&tcase);for(k=1;k<=tcase;k ){for(i=0;i<4;i ) scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);printf("case #%d: %s\n",k,(judge())?"yes":"no");}return 0;
}
转载于:https://www.cnblogs.com/gaojupeng/p/4438039.html
总结
以上是尊龙游戏旗舰厅官网为你收集整理的[bc]four inages strategy(三维空间判断正方形)的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。