51nod1265 四点共面

题目链接: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|

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

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 struct Point{
 6     int x,y,z;
 7 }p[3];
 8 int main(){
 9     int t, i, k;
10     int x,y,z;
11     int ax,ay,az,bx,by,bz,cx,cy,cz;
12     scanf("%d", &t);
13     for(k = 1; k <= t; ++k){
14         scanf("%d%d%d",&x,&y,&z);
15         for(i = 0; i < 3; ++i)
16             scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
17         ax=p[0].x-x; ay=p[0].y-y; az=p[0].z-z;
18         bx=p[1].x-x; by=p[1].y-y; bz=p[1].z-z;
19         cx=p[2].x-x; cy=p[2].y-y; cz=p[2].z-z;
20         if(ax*by*cz+ay*bz*cx+bx*cy*az-az*by*cx-ay*bx*cz-ax*bz*cy == 0)
21             puts("Yes");
22         else puts("No");
23     }
24     return 0;
25 }
View Code
原文地址:https://www.cnblogs.com/GraceSkyer/p/6012103.html