一个正方形,左下角会放出射线,其他三个角分别有一个接收器,给出发射的角度的正切值,问这个射线最终会被几号接收器接受?
思路:初看此题,没有比较好的思路,暴力计算射线也显得非常麻烦,不妨我们把射线反射转换一下,变为扩展这个正方形。
图我就不画了,可以参见这里
https://www.cnblogs.com/grandyang/p/10646040.html
这里的解释我开始看不明白,感觉给了三个例子,就推出来了奇偶关系显得比较突兀。
这里的图实际上就是上面的图,只有纵向扩展。
这里就解释的较为明白了,实际上我们可以找到一组m, n的值,满足mp=nq
那么m实际上就是纵向扩展正方形的个数+1,n就是反射的次数+1。
可以发现,如果反射的次数是奇数,那么结果肯定是在左上角的接收器。这里我在想为什么不会是左下角,仔细思考了一下,其实是会的,但是一定也会到左上角或右上角的,不知道我猜想的对不对。
那么接下来就是反射次数是偶数的情况,这个时候就和我们扩展的正方形有关系了,如果m是偶数,那么结果是右下角,否则是左上角。
注意我们要初始化的时候,处理掉q和p都是偶数的情况,上面的分析才是有效的. 否则的话,想一下,其实我们可以使得m和n都乘以2,都变为偶数,实际上这样得到的就不是第一次接收器的位置了。
比如p =3, q = 2, 那么 m = 2, q = 3, 实际上是右上角,但是我们取到m = 4, q = 6, 这样结果就是左上角了,这是继续反射后的下一个位置了。