解题思路:四个点表示成三个向量ab,ac,ad,将这三个向量表示成3*3的矩阵,其中第一行为ab.x,ab.y,ab.z,
第二行为 ac.x,ac.y,ac.z;第三行为ad.x,ad.y,ad.z。三个向量共面的充要条件为行列式的值为0。
源码附上:
#include <iostream>
using namespace std;
struct point
{
int x,y,z;
};
int judge()
{
point a,b,c,d;
cin>>a.x>>a.y>>a.z>>b.x>>b.y>>b.z>>c.x>>c.y>>c.z>>d.x>>d.y>>d.z;
point ab,ac,ad;
ab.x=a.x-b.x;ab.y=a.y-b.y;ab.z=a.z-b.z;
ac.x=a.x-c.x;ab.y=a.y-c.y;ac.z=a.z-c.z;
ad.x=a.x-d.x;ad.y=a.y-d.y;ad.z=a.z-d.z;
int flag=ab.x*ac.y*ad.z+ab.y*ac.z*ad.x+ab.z*ac.x*ad.y-ab.z*ac.y*ad.x-ac.z*ad.y*ab.x-ad.z*ac.x*ab.y;
return flag;
}
int main()
{
int T;
cin>>T;
while(T>0)
{
if(judge()==0)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
T--;
}
return 0;
}