51nod:1265-四点共面

(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦

题意:传送门

 判断四点是否共面。


思路:

 若三点共线,则ab,ac线性相关,其二阶行列式值为0.
 若四点共面,则直线ab,ac,ad线性相关。其三阶行列式值为0.

AC代码:

#include <bits/stdc++.h>
using namespace std;
struct lp{
    int x, y, z;
};
int is_coplanar(lp a, lp b, lp c, lp d){
    lp ab, ac, ad;
    ab.x=a.x-b.x, ab.y=a.y-b.y, ab.z=a.z-b.z;
    ac.x=a.x-c.x, ac.y=a.y-c.y, ac.z=a.z-c.z;
    ad.x=a.x-d.x, ad.y=a.y-d.y, ad.z=a.z-d.z;
    int gg=ab.x*ac.y*ad.z+ab.y*ac.z*ad.x+ac.x*ad.y*ab.z;
    gg-=ab.z*ac.y*ad.x+ab.x*ac.z*ad.y+ab.y*ac.x*ad.z;
    return !gg;
}
int main(){
    int tim;
    cin >> tim;
    while(tim--){
        lp a, b, c, d;
        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;
        if(is_coplanar(a, b, c, d)){
            cout << "Yes" << "\n";
        }else{
            cout << "No" << "\n";
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39599067/article/details/81134373
今日推荐