题解 P4894 【GodFly求解法向量】

· · 题解

这题没个题解,来补一篇。

直接输出两个向量的向量积(叉积)即可AC。

设三个轴上的单位向量分别为i,j,k,两个向量分别为\vec{a}=(x_1,y_1,z_1)\vec{b}=(x_2,y_2,z_2)。向量积即为\vec{n}=\vec{a}\times\vec{b}=\begin{vmatrix} i & j & k \\ x_1 & y_1 & z_1 \\ x_2 & y_2 & z_2 \end{vmatrix}

换成普通初高中生能看懂的:\vec{n}=(y_1z_2-y_2z_1,z_1x_2-z_2x_1,x_1y_2-x_2y_1)

这个东西的性质之一是可以作为法向量,不信可以带进去试试。三维计算几何经常用这个性质。另一个性质是模长等于|\vec{a}||\vec{b}|\sin<\vec{a},\vec{b}>,也就是这两个向量形成的平行四边形的面积,二维计算几何比较常用。数学考试做立体几何的时候,别人解方程求法向量,OIer、MOer和PhOer早就用这个口算出结果了。

#include<cstdio>
#define LL long long

int main()
{
    LL a,b,c,d,e,f;
    while(scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e,&f)!=EOF)
        printf("%lld %lld %lld\n",b*f-c*e,c*d-a*f,a*e-b*d);
    return 0;
}

是不是只有我沙雕地交了好几发才发现是多组数据