【发布时间】:2018-05-13 04:13:48
【问题描述】:
令 P = {P1(x1, y1), P2(x2, y2), . . . , Pn(xn, yn)} 是一组位于矩形内的 n 个点,使得没有一个点接触其边界。矩形的左上角位于原点 O(0, 0)。沿矩形的下边缘放置一个平面镜(如图所示)。点光源放置在 O 处。该光源可以以任意角度 θ 发出单光线。
编写一个算法(伪代码)来计算 θ 的值,对应的光线及其反射一起通过集合 P 的最大点数。
例如图中,角度为 θ1 的射线 R1(用实线表示)经过 3 个点,而角度为 θ2 的射线 R2(用虚线表示)仅经过 2 个点。只有当您的算法花费 O(n log n) 时间时,您才会获得完整的信用。
.................................................. .
如果要找到 θ 的值,使平面上的最大点数位于入射光线上,我会做这个问题。
那时我会通过将光线聚焦在每个点上来计算每个点的 θ 值,并将这些点的 θ 值存储在一个数组中。
那么我们的问题将简化为找到数组中重复元素的最大数量。这可以在 O(n) 时间内解决。
但我不知道如何处理反射光线。我在互联网上搜索但徒劳无功。请帮忙。
【问题讨论】:
-
主要技巧是通过反射复制点。然后数相等的角度。
标签: algorithm computational-geometry point