51nod 1265 四点共面

Posted 8023spz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1265 四点共面相关的知识,希望对你有一定的参考价值。

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

输入

第1行:一个数T,表示输入的测试数量(1 <= T <= 1000)
第2 - 4T + 1行:每行4行表示一组数据,每行3个数,x, y, z, 表示该点的位置坐标(-1000 <= x, y, z <= 1000)。

输出

输出共T行,如果共面输出"Yes",否则输出"No"。

输入样例

1
1 2 0
2 3 0
4 0 0
0 0 0

输出样例

Yes
证明四点共面只需要看看四个点能否组成一个四面体,如果能的话就是四点不共面即面积不为0,四个点组成三条边,通过向量行列式的值求体积,如果行列式值为0,就是共面的。
三阶行列式的值比较好求。
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define MAX 101
using namespace std;
int t,point[4][3],line[3][3];
int main() {
    scanf("%d",&t);
    while(t --) {
        for(int i = 0;i < 4;i ++) {
            for(int j = 0;j < 3;j ++) {
                scanf("%d",&point[i][j]);
                if(i > 0) {
                    line[i - 1][j] = point[i][j] - point[0][j];
                }
            }
        }
        int a = line[0][0] * (line[1][1] * line[2][2] - line[1][2] * line[2][1]);
        int b = line[0][1] * (line[1][2] * line[2][0] - line[1][0] * line[2][2]);
        int c = line[0][2] * (line[1][0] * line[2][1] - line[1][1] * line[2][0]);
        if(a + b + c == 0) printf("Yes
");
        else printf("No
");
    }
}

 

以上是关于51nod 1265 四点共面的主要内容,如果未能解决你的问题,请参考以下文章

51nod--1265 四点共面

51nod1265 四点共面

51Nod1265 四点共面

51nod_1265:四点共面(计算几何)

51nod 1265 四点共面

51 nod 1265 四点共面