51 nod 1265 四点共面

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1265

思路 :

通过矩阵

AB=(x2-x1,y2-y1,z2-z1)
BC=(x3-x2,y3-y2,z3-z2)
AB=(x4-x3,y4-y3,z4-z3)

所以,只要考察矩阵:
x2-x1,y2-y1,z2-z1
x3-x2,y3-y2,z3-z2
x4-x3,y4-y3,z4-z3

如果行列式为0,说明4点共面。
如果行列式不为0,说明4点不共面。

AC代码:

#include<bits/stdc++.h>
using namespace std;
int t;
int x[5],y[5],z[5];
int a[10];
int main()
{
cin>>t;
while(t--)
{
int ans = 0;
for(int i=1;i<=4;i++)
{
cin>>x[i]>>y[i]>>z[i];
}
int k=1;
for(int i=1;i<=3;i++)
{
a[k++]=x[i+1]-x[i];
a[k++]=y[i+1]-y[i];
a[k++]=z[i+1]-z[i];
}
ans=a[1]*a[5]*a[9]+a[3]*a[4]*a[8]+a[2]*a[6]*a[7]-a[3]*a[5]*a[7]-a[1]*a[6]*a[8]-a[9]*a[2]*a[4];
if(ans==0)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}

原文地址:https://www.cnblogs.com/sortmin/p/7375427.html