题目链接:传送门
给出四个点,看看是否共面。
因为三个点能确定一个平面,所以先把前三个点构成一个平面,看看第四个在不在就行了
三点确定一个平面的公式如下:
a(x-x1)+b(y-y1)+c(z-z1)=0
a=(y2-y1)(z3-z1)-(y3-y1)(z2-z1)
b=(z2-z1)(x3-x1)-(z3-z1)(x2-x1)
c=(x3-x1)(y3-y1)-(x2-x1)(y2-y1)
代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int x[10],y[10],z[10];
int main(){
int t,i,j,n,m;
int x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4;
cin>>t;
while(t--){
cin>>x1>>y1>>z1;
cin>>x2>>y2>>z2;
cin>>x3>>y3>>z3;
cin>>x4>>y4>>z4;
int a=(y2-y1)*(z3-z1)-(y3-y1)*(z2-z1);
int b=(z2-z1)*(x3-x1)-(z3-z1)*(x2-x1);
int c=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1);
if(a*(x4-x1)+b*(y4-y1)+c*(z4-z1)==0) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}