思路:
a[1] a[2] a[3] a[4] 为四个点。
a1a2和a1a3所构成的面的法向量:point fa = ( a[2] - a[1] ) x ( a[3] - a[1] );
注意在通过三阶矩阵算法向量的时候,j的前边要乘一个负号。。我就是好久没学线代把矩阵的解法都忘了。。
#include <iostream>
#include <cmath>
#include <cstdio>
#include <string.h>
#include <algorithm>
#define pi acos(-1)
#define eps 1e-6
typedef long long int lli;
using namespace std;
struct point{
lli x,y,z;
point(){}
point(lli xx,lli yy,lli zz){x=xx,y=yy,z=zz;}
point operator * (point t){
return point(y*t.z-t.y*z,-x*t.z+t.x*z,x*t.y-y*t.x);
}
point operator - (point t){
return point(x-t.x,y-t.y,z-t.z);
}
}a[20];
lli dot(point a,point b){
return a.x*b.x+a.y*b.y+a.z*b.z;
}
bool gongmian(){
point fa = (a[2]-a[1])*(a[3]-a[1]);
if(dot(fa,a[4]-a[1]) == 0)
return true;
return false;
}
int main(){
int t;cin>>t;
while(t--){
for(int i = 1;i <= 4;i++){
scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
}
if(gongmian() == false){
printf("No\n");continue;
}
puts("Yes");
}
return 0;
}