如何定义跨越尽可能多的矩形的直线?

时间:2017-06-23 11:09:02

标签: algorithm

我正在寻找一种算法来解决这个问题,而不是强化学习和需要很长时间才能运行的算法。

在x-y平面上放置n个矩形。一条直线最多可以通过多少个矩形?

输入

矩形的数量是n。
数字i矩形的左上坐标由x [i],y [i]给出 其宽度和高度由w [i],h [i]。

给出

实施例

n
x[0] y[0] w[0] h[0]
x[1] y[1] w[1] h[1]
・
・
x[n-1] y[n-1] w[n-1] h[n-1]

规则

  • 0&lt; n <= 1000
  • 每个矩形放置在0 <= x <= 10000,0 <= y <= 10000。
  • 坐标必须为整数。
  • 宽度和高度也必须大于1和整数。
  • 矩形可以重叠。
  • 直线可以传递矩形的顶点。
  • 直线不必通过(0,0)。

提示

情况1:

Input
4
0    0    1    1
9999 0    1    1
0    9999 1    1
9999 9999 1    1

Output
2

情况2:

Input
6
2    1    4    3
1   10    1    3
5    7    5    4
8    8    3    2
13   4    3    1
17   1    1   14

Output
5

1 个答案:

答案 0 :(得分:0)

我将与您分享一种方法。您可以做的是可以计算每个矩形的中心。您将获得与矩形一样多的中心。例如。对于100个矩形,您将在xy平面上获得100个中心(点)。

现在有了这100个点,您就可以构建一条最合适的线。您可以了解最佳拟合线herehere

这样获得的线将穿过大多数矩形。