给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面)。如果共面,输出"Yes",否则输出"No"。
输入
第1行:一个数T,表示输入的测试数量(1 <= T <= 1000)
第2 - 4T + 1行:每行4行表示一组数据,每行3个数,x, y, z, 表示该点的位置坐标(-1000 <= x, y, z <= 1000)。
输出
输出共T行,如果共面输出"Yes",否则输出"No"。
输入样例
1
1 2 0
2 3 0
4 0 0
0 0 0
输出样例
Yes
#include <iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int x[4],y[4],z[4];
for(int i=0;i<4;i++)
{
cin>>x[i]>>y[i]>>z[i];
}
int a,b,c;//ax+by+cz=0
a=(y[1]-y[0])*(z[2]-z[0])-(z[1]-z[0])*(y[2]-y[0]);
b=(z[1]-z[0])*(x[2]-x[0])-(x[1]-x[0])*(z[2]-z[0]);
c=(x[1]-x[0])*(y[2]-y[0])-(y[1]-y[0])*(x[2]-x[0]);
if(a*(x[3]-x[0])+b*(y[3]-y[0])+c*(z[3]-z[0])==0)
{
cout<<"Yes"<<endl;
}
else cout<<"No"<<endl;
}
return 0;
}