zoukankan      html  css  js  c++  java
  • (四点共面) 51nod1265 四点共面

    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

    C++代码:
    #include<iostream>
    #include<cstdio>
    using namespace std;
    struct point{
        double x,y,z;
    }p[4];
    bool cmp(point a,point b,point c,point d){
        double x1 = a.x - b.x;
        double y1 = a.y - b.y;
        double z1 = a.z - b.z;
        double x2 = a.x - c.x;
        double y2 = a.y - c.y;
        double z2 = a.z - c.z;
        double x3 = a.x - d.x;
        double y3 = a.y - d.y;
        double z3 = a.z - d.z;
        if(x1*y2*z3 + x3*y1*z2 + x2*y3*z1 == x3*y2*z1 + x2*y1*z3 + x1*y3*z2){
            return true;
        }
        else
            return false;
    }
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            for(int i = 0; i < 4; i++)
                cin>>p[i].x>>p[i].y>>p[i].z;
            if(cmp(p[0],p[1],p[2],p[3])){
                printf("Yes
    ");
            }
            else{
                printf("No
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    行为模式-模板方法
    行为模式-策略模式
    行为模式-观察者 模式
    行为模式-责任链模式
    python-json
    mongo资料
    用with管理lock锁
    枚举类使用
    db2常见操作命令
    trancate immediate reuse storage
  • 原文地址:https://www.cnblogs.com/Weixu-Liu/p/10603374.html
Copyright © 2011-2022 走看看