如何确定直线穿越的格子?

lovezypj 2010-08-22 02:40:08


如图,这是个格子,用二维数组来表示,如何找出其中2点之间连线所经过的所有格子呢?

大家有没有什么好的方法?想了一天实在没有头绪

目前已知的一个办法,求出直线方程,然后代入每个格子的边界x、y值计算在不在直线上,在的话再判断在不在线段范围内,方形的四个顶点在直线的同一侧,否定经过。不在同一侧,只要有一点不和其他点不在同一侧,就肯定经过。

如果格子数很多的话上面效率肯定不高,格子都是有边长的正方形,还要计算每个格子四个顶点,大家有没有类似问题比较好的解决办法呢?
...全文
925 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
day111111 2011-05-07
  • 打赏
  • 举报
回复
此间的X和Y是什么?GCD是哪两个数的?[Quote=引用 2 楼 litaoye 的回复:]
X + Y - GCD就可以了
[/Quote]
Dolphin_001 2010-08-23
  • 打赏
  • 举报
回复
这是图形学的画线,4楼的想法没错
Dolphin_001 2010-08-23
  • 打赏
  • 举报
回复
两点是格子中心?
lovezypj 2010-08-23
  • 打赏
  • 举报
回复
因为是正方形的格子,应该是格子中心吧,4楼的方法我没有正确理解,不知道哪里错了
lovezypj 2010-08-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 litaoye 的回复:]
不知道LZ想要多快的效率,总之根据线段的斜率,从第一个格子开始,只有可能穿过周围的几个格子(从斜率几乎可以直接判断),如果是求所有格子的话,这样的效率还不够高么?所谓穿过格子,就是同几条直线的交点(X和Y方向),知道了交点,可以直接算出在哪个格子。
[/Quote]

能不能详细说明一下呢?
lovezypj 2010-08-22
  • 打赏
  • 举报
回复
4 楼 cug_fish_2009

我实际实验下好像不对啊,比如拿图中说,两个点,红点是2,10绿点是13,4,然后求出斜率是-0.545454545454。。。。。,根据cug_fish_2009说的累加,x是1 y就是1,可是1,1并没有经过线段啊
lovezypj 2010-08-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cug_fish_2009 的回复:]
这其实是图形学里面的内容,在屏幕上画直线的算法。楼主自己可以找找。
我就简单说下思路吧!
假设线段为(x0,y0)-(x1,y1)。
我们可以求出斜率k,利用斜率,以X轴方向增量为(x1-x0)/|x1-x0|开始累加,
而Y方向以斜率k累加,然后为y值取整就是经过格子的y坐标,x坐标很自然是
每次累加为1或者为-1,很显然,就是格子的x坐标。
楼主自己在把代码组织一下咯。
祝好运!……
[/Quote]


貌似这个好像有点道理,我去试试看
huochai2008 2010-08-22
  • 打赏
  • 举报
回复
你看看,这个是pick定理
绿色夹克衫 2010-08-22
  • 打赏
  • 举报
回复
不知道LZ想要多快的效率,总之根据线段的斜率,从第一个格子开始,只有可能穿过周围的几个格子(从斜率几乎可以直接判断),如果是求所有格子的话,这样的效率还不够高么?所谓穿过格子,就是同几条直线的交点(X和Y方向),知道了交点,可以直接算出在哪个格子。
michael122 2010-08-22
  • 打赏
  • 举报
回复
分治行不行啊?
按照y方向,一次截成2段,这样可以把线段所在的大范围一点一点缩小
绿色夹克衫 2010-08-22
  • 打赏
  • 举报
回复
GCD是最大公约数,不过我说的是统计穿过了多少个格子。因为如果穿过的点在格子的交点上,旁边的两个格子就不必走了。

[Quote=引用 3 楼 lovezypj 的回复:]

楼上的朋友能不能说下,GCD是什么东西?
[/Quote]
cug_fish_2009 2010-08-22
  • 打赏
  • 举报
回复
这其实是图形学里面的内容,在屏幕上画直线的算法。楼主自己可以找找。
我就简单说下思路吧!
假设线段为(x0,y0)-(x1,y1)。
我们可以求出斜率k,利用斜率,以X轴方向增量为(x1-x0)/|x1-x0|开始累加,
而Y方向以斜率k累加,然后为y值取整就是经过格子的y坐标,x坐标很自然是
每次累加为1或者为-1,很显然,就是格子的x坐标。
楼主自己在把代码组织一下咯。
祝好运!
lovezypj 2010-08-22
  • 打赏
  • 举报
回复
楼上的朋友能不能说下,GCD是什么东西?
lovezypj 2010-08-22
  • 打赏
  • 举报
回复
没有好办法么

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧