为便于说明,请参见下图。
给定一个点p
和两个向量u
和v
,我们可以得到u
和v
,t = m*u + n*v
的线性组合,m
和n
是整数,t应该在框内。解决这个问题并不太难。由于m
和n
可以是正面的,也可以是负面的。可以讨论:
以下是案例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个套件的两个循环可以解决问题。
另一种方法是生成太多的点,然后删除框外的点
我想也许还有其他简单而优雅的方法吗?
答案 0 :(得分:0)
将框变换为以p为原点定义的坐标系,u为轴的x方向,v为y轴的方向。结果将是平行四边形。找到平行四边形内的整数坐标就足够了。这可以通过找到平行四边形内的最小和最大m,并在n的最小和最大范围内搜索平行四边形内的每个m来完成。