目测佳哥书上几何那的题,今天一看才知道没那么难,一做才知道没那么简单。
判断射线是否穿过矩形,可以采用这种办法:
求出所有可行的交点,其中矩形顶点要算2次,
对交点去重,如果剩下2个点,那么是穿过的。
另外必须注意的是,如果开始点在矩形内,需要当作一个“交点”,这里是一个易错点。
其实求得交点是用时间来表示的。
那么时间小的必然是穿入点,时间大的必然是穿出点。以此作为两个事件点,一个为+1,一个为-1。
求出所有射线与矩形相交的时间后,对事件按时间排序,然后扫描一遍求出最大值即可。
另外有两个小技巧,一个是代码中的,同一时间的事件点(有这样数据)需要求和,而不能一个一个计算。
另外一个技巧就是对时间相同的事件点,按照先出后进,就可以一个一个计算。
#include
#include
#include
#include