51nod1265 四点共面

时间:2024-04-27 17:34:44

题目链接:51nod 1265 四点共面

四个点构成的三个向量a,b,c共面的充要条件是存在不全为零的实数x,y,z满足x*a+y*b+z*c=0,然后想到线代了..

其实就是三个向量的混合积为0:(a,b,c)=(a×b)·c=

|ax ay az|

|bx by bz|  =  ax*by*cz+ay*bz*cx+bx*cy*az-az*by*cx-ay*bx*cz-ax*bz*cy = 0;

|cx cy cz|

看到行列式我就想到线性代数快考试了,然而我还没预习~~~(>_<)~~~

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Point{
int x,y,z;
}p[];
int main(){
int t, i, k;
int x,y,z;
int ax,ay,az,bx,by,bz,cx,cy,cz;
scanf("%d", &t);
for(k = ; k <= t; ++k){
scanf("%d%d%d",&x,&y,&z);
for(i = ; i < ; ++i)
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
ax=p[].x-x; ay=p[].y-y; az=p[].z-z;
bx=p[].x-x; by=p[].y-y; bz=p[].z-z;
cx=p[].x-x; cy=p[].y-y; cz=p[].z-z;
if(ax*by*cz+ay*bz*cx+bx*cy*az-az*by*cx-ay*bx*cz-ax*bz*cy == )
puts("Yes");
else puts("No");
}
return ;
}