码迷,mamicode.com
首页 > 其他好文 > 详细

51nod 1265 四点共面

时间:2018-11-11 16:29:25      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:fine   相同   math   向量   names   ==   latex   不为   nod   

给出三维空间上的四个点(点与点的位置均不相同),判断这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\n");
        else printf("No\n");
    }
}

 

51nod 1265 四点共面

标签:fine   相同   math   向量   names   ==   latex   不为   nod   

原文地址:https://www.cnblogs.com/8023spz/p/9942409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!