51Nod - 1265 四点共面 (叉积判断)

思路:

a[1] a[2] a[3] a[4] 为四个点。
a1a2和a1a3所构成的面的法向量:point fa = ( a[2] - a[1] ) x ( a[3] - a[1] );
注意在通过三阶矩阵算法向量的时候,j的前边要乘一个负号。。我就是好久没学线代把矩阵的解法都忘了。。

#include <iostream>
#include <cmath>
#include <cstdio>
#include <string.h>
#include <algorithm>
#define pi acos(-1)
#define eps 1e-6
typedef long long int lli;
using namespace std;

struct point{
    lli x,y,z;
    point(){}
    point(lli xx,lli yy,lli zz){x=xx,y=yy,z=zz;}
    point operator * (point t){
        return point(y*t.z-t.y*z,-x*t.z+t.x*z,x*t.y-y*t.x);
    }
    point operator - (point t){
        return point(x-t.x,y-t.y,z-t.z);
    }
}a[20];
lli dot(point a,point b){
    return a.x*b.x+a.y*b.y+a.z*b.z;
}
bool gongmian(){
    point fa = (a[2]-a[1])*(a[3]-a[1]);
    if(dot(fa,a[4]-a[1]) == 0)
        return true;
    return false;
}
int main(){
    int t;cin>>t;
    while(t--){
        for(int i = 1;i <= 4;i++){
            scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
        }
        if(gongmian() == false){
            printf("No\n");continue;
        }
        puts("Yes");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值