HDU5572 2015ICPC上海A计算几何
题目
无限大的平面上,有一个圆柱。圆柱外有两个点A、B,点A有个速度向量V,A撞到圆柱会发生完全弹性碰撞。问点A是否能经过点B。
解题思路
我们记A -> A+V的运动轨迹为直线 $l1$(射线在代码实现中并不好处理)。
共分以下几种情况:
一、 $l1$与圆不相交
判断A是否能直接经过B,即判断向量$\vec{V}、\vec{B-A}$是否同向。
二、 $l1$与圆相切
情况同一。
三、 $l1$与圆相交
记$l1$与圆距离较近的点为X。
- 判断是否是正向相交,即判断向量$\vec{V}、\vec{X1-A}$是否同向。如果不是,那么回到条件一。否则继续判断。
- 记圆心与X确定的直线为$l2$,并记A关于直线$l2$的对称点为$A_2$,则A和圆柱碰撞后会延$XA_2$运动。在这个过程中,有以下几种经过B的可能:①点B在线段AX上。②点B在XA的延长线上。
代码
1 |
|