题解 P4894 【GodFly求解法向量】

SuperJvRuo

2018-09-25 18:23:30

Solution

这题没个题解,来补一篇。 直接输出两个向量的向量积(叉积)即可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; } ``` ~~是不是只有我沙雕地交了好几发才发现是多组数据~~