0

出于说明目的,请参见下图。

图片

给定一个点p和两个向量uand v,我们可以得到 and 的线性组合uv, and是整数t = m*u + n*v,并且 t 应该在框内。解决这个问题并不太难。As和可以是正面的也可以是负面的。可以讨论:mnmn

  1. m > 0 和 n > 0
  2. m > 0 和 n < 0
  3. m < 0 和 n > 0
  4. m < 0 和 n < 0

这是案例1的python代码:

m = 0 
n = 0 
t = m*u+n*v
x = t[0]
y = t[1]
l = []
while (x>0 and x < 1024 and y > 0 and y < 1024):
    l.append(t)
    m  = m + 1
    t = m*u+n*v
    x = t[0]
    y = t[1]
    while (x>0 and x < 1024 and y > 0 and y < 1024):
        l.append(t)
        n = n +1
        t = m*u+n*v
        x = t[0]
        y = t[1]

使用两个循环进行 4 组可能会解决问题。

另一种方法是生成太多点,然后删除框外的点

我想也许还有其他简单而优雅的方式来做到这一点?

4

1 回答 1

0

将 box 转换为以 p 为原点,u 为轴的 x 方向,v 为 y 轴的方向定义的坐标系。结果将是平行四边形。找到该平行四边形内的整数坐标就足够了。这可以通过找到平行四边形内的最小和最大 m 来完成,并在最小和最大之间搜索每个 m,n 的范围在平行四边形内。

于 2018-01-14T13:53:36.237 回答