如何以有效的方式传播两个向量u和v以填充矩形框

时间:2018-01-14 12:14:17

标签: python algorithm vector mathematical-lattices

为便于说明,请参见下图。

Image

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

  1. m> 0和n> 0
  2. m&gt; 0和n <0 0
  3. m&lt; 0和n> 0
  4. m&lt; 0和n <0 0
  5. 以下是案例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个套件的两个循环可以解决问题。

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

    我想也许还有其他简单而优雅的方法吗?

1 个答案:

答案 0 :(得分:0)

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