zoukankan      html  css  js  c++  java
  • 1265 四点共面

    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

    先建立一个面,然后判断两一个点是否在该平面上.
     1 #include <iostream>
     2 using namespace std;
     3 
     4 struct Node{
     5     double x, y, z;
     6 }xn[5];
     7 int t;
     8 double A, B, C, D; 
     9 
    10 void ptofdist(){ //点是否在面上
    11     A = ((xn[2].y-xn[1].y)*(xn[3].z-xn[1].z)-(xn[2].z-xn[1].z)*(xn[3].y-xn[1].y));
    12     B = ((xn[2].z-xn[1].z)*(xn[3].x-xn[1].x)-(xn[2].x-xn[1].x)*(xn[3].z-xn[1].z));
    13     C = ((xn[2].x-xn[1].x)*(xn[3].y-xn[1].y)-(xn[2].y-xn[1].y)*(xn[3].x-xn[1].x));
    14     D = -(A * xn[1].x + B * xn[1].y + C * xn[1].z);
    15 }
    16 
    17 int main(){
    18     cin>>t;
    19     while(t--){
    20         for(int i = 1; i <= 4; i++){
    21             cin>>xn[i].x>>xn[i].y>>xn[i].z;
    22         }
    23         ptofdist();
    24         double ret = A*xn[4].x+B*xn[4].y+xn[4].z*C+D;
    25         if(ret == 0){
    26             puts("Yes");
    27         }else{
    28             puts("No");
    29         }
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    udev 禁止某些驱动自动加载
    AT91SAM9XEK ramdisk 启动笔记
    MTD 工具使用
    kmp问题
    野指针 空指针 通用指针
    manacher算法实现
    manacher算法
    strcpy和strlen
    冒泡排序
    C++的重载(overload)与重写(override
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/9924545.html
Copyright © 2011-2022 走看看