题解 P4250 【[SCOI2015]小凸想跑步】
xgzc
2019-03-26 20:40:43
推波柿子:
![](https://i.loli.net/2019/03/26/5c9a1a46aef81.png)
设点$A(x_a, y_a), B(x_b, y_b), C(x_c, y_c), D(x_d, y_d), P(x, y)$
$\vec{a} = (x_b - x_a, y_b - y_a), \vec{b} = (x_d - x_c, y_d - y_c)$
$\overrightarrow{AP} = (x - x_a, y - y_a), \overrightarrow{CP} = (x - x_c, y - y_c)$
$\vec{a} \times \overrightarrow{AP} = (x_b - x_a)(y - y_a) - (y_b - y_a)(x - x_a)$
$\vec{b} \times \overrightarrow{CP} = (x_d - x_c)(y - y_c) - (y_d - y_c)(x - x_c)$
由题目,$\vec{a} \times \overrightarrow{AP} < \vec{b} \times \overrightarrow{CP}$,那么有
$$\begin{aligned}&(x_b - x_a)(y - y_a) - (y_b - y_a)(x - x_a) < (x_d - x_c)(y - y_c) - (y_d - y_c)(x - x_c) \\\Rightarrow & (x_b - x_a + x_d - x_c)y - (y_b - y_a - y_d + y_c)x + (y_b x_a - x_b y_a - y_d x_c + x_d y_c) < 0\end{aligned}$$
然后这个就是一个裸的半平面交了。
代码见[$\texttt{my blog}$](https://www.cnblogs.com/cj-xxz/p/10603286.html)