zoukankan      html  css  js  c++  java
  • 51nod1265(判断四个点是否共面)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1265

    题意:中文题诶~

    思路:假设现有a, b, c, d四个点,若直线 ab, ac, ad线性相关,那么有a, b, c, d共线;

    那么我们如何判断其是否线性相关呢? 答案很简单,分别以ab, ac, ad的向量坐标作为一个行列式的行(列)元素,得到一个3阶行式,如果其值为0,则ab, ac, ad线性相关;

    这点很好证明,若ab, ac, ad线性相关则有 ab=k1*ac+k2*ad;

    又因为行列式的性质1:将某行(列)的元素*k,再加到其他行(列)对应元素上行列式的值不变;

           性质2:若行列式有两行(列)的元素相同,那么该行列式的值为0;

    那么很显然我们刚才的结论是正确的啦;

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 struct point{
     5     int x, y, z;
     6 };
     7 
     8 int is_coplanar(point a, point b, point c, point d){
     9     point ab, ac, ad;
    10     ab.x=a.x-b.x, ab.y=a.y-b.y, ab.z=a.z-b.z;
    11     ac.x=a.x-c.x, ac.y=a.y-c.y, ac.z=a.z-c.z;
    12     ad.x=a.x-d.x, ad.y=a.y-d.y, ad.z=a.z-d.z;
    13     int gg=ab.x*ac.y*ad.z+ab.y*ac.z*ad.x+ac.x*ad.y*ab.z;
    14     gg-=ab.z*ac.y*ad.x+ab.x*ac.z*ad.y+ab.y*ac.x*ad.z;
    15     return gg;
    16 }
    17 
    18 int main(void){
    19     int t;
    20     cin >> t;
    21     while(t--){
    22         point a, b, c, d;
    23         cin >> a.x >> a.y >> a.z >> b.x >> b.y >> b.z >> c.x >> c.y >> c.z >> d.x >> d.y >> d.z;
    24         if(!is_coplanar(a, b, c, d)){
    25             cout << "Yes" << endl;
    26         }else{
    27             cout << "No" << endl;
    28         }
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    记忆力训练今天早上有了点小进步
    刻意练习
    12.12周计划
    12.6周总结
    The Power of Reading Insights
    Storytelling with Data
    nexus私服和快照正式版本etc
    springboot启动流程分析
    容器启动getBean的流程分析
    canal简介
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6242913.html
Copyright © 2011-2022 走看看