题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=577&pid=1001
题面:
题意:
给定空间四个点,判断四个点是否组成了一个正方形。
解法:
比较笨的考虑了四个点的全部位置分布,不过比较安全。先判断对角线相等, 邻边相等,再加邻边垂直。
代码:
#include <iostream> #include <string> #include <cstring> int store[26],tmp[26]; using namespace std; int squared_dis(int a,int b,int c,int d,int e,int f) { return (a-d)*(a-d)+(b-e)*(b-e)+(c-f)*(c-f); } int main() { int n,x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4; cin>>n; for(int i=1;i<=n;i++) { bool flag=false; cin>>x1>>y1>>z1>>x2>>y2>>z2>>x3>>y3>>z3>>x4>>y4>>z4; if(squared_dis(x1,y1,z1,x3,y3,z3)==squared_dis(x2,y2,z2,x4,y4,z4)) { if(squared_dis(x2,y2,z2,x3,y3,z3)==squared_dis(x1,y1,z1,x2,y2,z2)) { if((x4-x1)*(x2-x1)+(y4-y1)*(y2-y1)+(z4-z1)*(z2-z1)==0) flag=true; } } if(squared_dis(x1,y1,z1,x2,y2,z2)==squared_dis(x3,y3,z3,x4,y4,z4)) { if(squared_dis(x2,y2,z2,x3,y3,z3)==squared_dis(x1,y1,z1,x3,y3,z3)) { if((x4-x1)*(x3-x1)+(y4-y1)*(y3-y1)+(z4-z1)*(z3-z1)==0) flag=true; } } if(squared_dis(x1,y1,z1,x4,y4,z4)==squared_dis(x2,y2,z2,x3,y3,z3)) { if(squared_dis(x2,y2,z2,x1,y1,z1)==squared_dis(x1,y1,z1,x3,y3,z3)) { if((x3-x1)*(x2-x1)+(y3-y1)*(y2-y1)+(z3-z1)*(z2-z1)==0) flag=true; } } cout<<"Case #"<<i<<": "; if(flag)cout<<"Yes\n"; else cout<<"No\n"; } return 0; }