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(point p1,point p2,point p3,point p4){
	int a=pow(p2.x-p1.x , 2)+pow(p2.y-p1.y,2)+pow(p2.z-p1.z,2);
	int b=pow(p4.x-p3.x , 2)+pow(p4.y-p3.y,2)+pow(p4.z-p3.z,2);
	return a==b;
}
bool isvertical(point p1,point p2,point p3,point p4){
	p1.x=p2.x-p1.x;
	p1.y=p2.y-p1.y;
	p1.z=p2.z-p1.z;
	p3.x=p4.x-p3.x;
	p3.y=p4.y-p3.y;
	p3.z=p4.z-p3.z;
	int a=p1.x*p3.x+p1.y*p3.y+p1.z*p3.z;
	return a==0;
}
bool istar(point p1,point p2,point p3,point p4){
	if(p2.x+p3.x-p1.x != p4.x)return false;
	if(p2.y+p3.y-p1.y != p4.y)return false;
	if(p2.z+p3.z-p1.z != p4.z)return false;
	return true;
}

int main()
{	
	point p[5];
	int t;
	scanf("%d",&t);
	for(int cs=1;cs<=t;cs++){
		printf("Case #%d: ",cs );

		for(int i=1;i<=4;++i){
			scanf("%d",&p[i].x);
			scanf("%d",&p[i].y);
			scanf("%d",&p[i].z);
		}
		if(  isequal(p[1],p[2],p[1],p[3]) && isvertical(p[1],p[2],p[1],p[3]) ){
			if( istar(p[1],p[2],p[3],p[4]) )printf("Yes\n");
		}else if( isequal(p[1],p[2],p[1],p[4]) && isvertical(p[1],p[2],p[1],p[4]) ){
			if( istar(p[1],p[2],p[4],p[3]) )printf("Yes\n");
		}else if( isequal(p[1],p[3],p[1],p[4]) && isvertical(p[1],p[3],p[1],p[4]) ){
			if( istar(p[1],p[3],p[4],p[2]) )printf("Yes\n");
		}else{
			printf("No\n");
		}

	}
	return 0;
}

  

转载于:https://www.cnblogs.com/bruce27/p/4780368.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值