• 51Nod 1265 四点共面(计算几何)


    1265 四点共面 

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

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

    Input

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

    Output

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

    Input示例

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

    Output示例

    Yes

    题解:A、B、C、D四点共面则三向量满足(AB×AC)*AD=0(AB×AC结果是该平面的法向量);

    向量a×向量b= 

    | i j k |

    |a1 b1 c1|

    |a2 b2 c2| 

    =(b1c2-b2c1,c1a2-a1c2,a1b2-a2b1) 

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    struct node{
            int x,y,z;
    }p[4];//向量
    int main()
    {
            int T;
            scanf("%d",&T);
            int a,b,c,x,y,z;
            while(T--)
            {
                    scanf("%d%d%d",&a,&b,&c);
                    for(int i=1;i<=3;i++){
                            scanf("%d%d%d",&x,&y,&z);
                            p[i].x=x-a;
                            p[i].y=y-b;
                            p[i].z=z-c;
                    }
                    x=p[1].y*p[2].z-p[1].z*p[2].y;
                    y=p[1].z*p[2].x-p[1].x*p[2].z;
                    z=p[1].x*p[2].y-p[1].y*p[2].x;//printf("%d*%d*%d
    ",x,y,z);
                    if((p[3].x*x+p[3].y*y+p[3].z*z)==0)
                            printf("Yes
    ");
                    else
                            printf("No
    ");
            }
            return 0;
    }
    
  • 相关阅读:
    兼容IE678浏览器的html5标签的几个方案
    CommonJS和AMD/CMD
    axios的使用
    自己写表单校验插件
    表单校验
    JS打开新窗口的2种方式
    mac 上使用移动硬盘
    Boostrap
    Web.config详解
    DataTable
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/9893101.html
Copyright © 2020-2023  润新知