51nod1265 四点共面

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37275680/article/details/82946954

传送门:51nod1265 四点共面

Input示例

1
1 2 0
2 3 0
4 0 0
0 0 0

Output示例

Yes
/*根据所学的线代可知:可以由4个点构成3个向量, 3个向量共面的充要条件是向量为x, y, z, 
存在实数a,b,c不全为零,使得ax+by+cz=0, 转化为线性代数的3个向量线性相关的行列式为0。
如下,计算三阶行列式——沙路法 
|x[0] y[0] z[0]|
|x[1] y[1] z[1]|
|x[2] y[2] z[2]| = x[0]*y[1]*z[2]+y[0]*z[1]*x[2]+z[0]*x[1]*y[2]-x[0]*z[1]*y[2]-y[0]*x[1]*z[2]-z[0]*y[1]*x[2].
*/

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll; 
const int maxn=4;
int a[maxn],b[maxn],c[maxn];
int x[maxn],y[maxn],z[maxn];

int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		for(int i=0;i<4;i++){
			scanf("%d%d%d",&a[i],&b[i],&c[i]);
			if(i>0){
				x[i-1]=a[i]-a[i-1];
				y[i-1]=b[i]-b[i-1];
				z[i-1]=c[i]-c[i-1];
			}
		}
		ll det=x[0]*y[1]*z[2]+y[0]*z[1]*x[2]+z[0]*x[1]*y[2]-x[0]*z[1]*y[2]-y[0]*x[1]*z[2]-z[0]*y[1]*x[2];
		if(det==0) puts("Yes");
		else puts("No"); 
	}
	return 0;
}

 参考: 1265 四点共面(计算几何)

猜你喜欢

转载自blog.csdn.net/qq_37275680/article/details/82946954
今日推荐