四点共面

题目: 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面)。如果共面,输出”Yes”,否则输出”No”。

思路: 运用向量的方法,四个点构造出三个向量,行列式的方法计算.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;

struct point
{
int x,y,z;
}p[1001];

int main()
{
int t,i,ans;
point s1,s2,s3;
cin >> t;
while(t--)
{
for(i = 0; i < 4; i++) {
cin >> p[i].x >> p[i].y >> p[i].z;
}
s1.x=p[1].x-p[0].x;
s1.y=p[1].y-p[0].y;
s1.z=p[1].z-p[0].z;

s2.x=p[2].x-p[0].x;
s2.y=p[2].y-p[0].y;
s2.z=p[2].z-p[0].z;

s3.x=p[3].x-p[0].x;
s3.y=p[3].y-p[0].y;
s3.z=p[3].z-p[0].z;

ans = s1.x * s2.y * s3.z + s1.y * s2.z * s3.x + s1.z * s2.x * s3.y - s1.z * s2.y * s3.x - s1.x * s2.z * s3.y - s1.y * s2.x * s3.z;
ans == 0 ? cout << "Yes" : cout << "No";
}
return 0;
}
script>