51nod1265 四点共面

本文介绍了一种基于线性代数的四点共面判断算法,通过计算由四个点构成的三个向量的行列式来判断这四个点是否共面。详细解析了行列式的计算方法——沙路法,并提供了C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门: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 四点共面(计算几何)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值