51nod 1265 四点共面
用向量求四点共面,可知如果设四点为A,B,C,D,那么求出AB,AC,AD向量,如果三向量组成的体积为0,则四点共面。
这样的话,我们用两向量叉乘再点乘第三向量(俗称混合积)就能求体积。那么判断所求是否为0即可。
计算方法:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define MOD 1007
#define N 10001
int x[4],y[4],z[4];
int dx[4], dy[4], dz[4];
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
for(int i=0; i<4; i++)
scanf("%d%d%d",&x[i],&y[i],&z[i]);
for (int i=1; i<4; i++)
{
dx[i-1]=x[0]-x[i];
dy[i-1]=y[0]-y[i];
dz[i-1]=z[0]-z[i];
}
if(dx[0]*dy[1]*dz[2] + dy[0]*dz[1]*dx[2] + dz[0]*dx[1]*dy[2]
== dz[0]*dy[1]*dx[2] + dy[0]*dx[1]*dz[2] + dx[0]*dz[1]*dy[2])
puts("Yes\n");
else
puts("No\n");
}
}