社区
数据结构与算法
帖子详情
如何确定直线穿越的格子?
lovezypj
2010-08-22 02:40:08
如图,这是个格子,用二维数组来表示,如何找出其中2点之间连线所经过的所有格子呢?
大家有没有什么好的方法?想了一天实在没有头绪
目前已知的一个办法,求出直线方程,然后代入每个格子的边界x、y值计算在不在直线上,在的话再判断在不在线段范围内,方形的四个顶点在直线的同一侧,否定经过。不在同一侧,只要有一点不和其他点不在同一侧,就肯定经过。
如果格子数很多的话上面效率肯定不高,格子都是有边长的正方形,还要计算每个格子四个顶点,大家有没有类似问题比较好的解决办法呢?
...全文
925
14
打赏
收藏
如何确定直线穿越的格子?
如图,这是个格子,用二维数组来表示,如何找出其中2点之间连线所经过的所有格子呢? 大家有没有什么好的方法?想了一天实在没有头绪 目前已知的一个办法,求出直线方程,然后代入每个格子的边界x、y值计算在不在直线上,在的话再判断在不在线段范围内,方形的四个顶点在直线的同一侧,否定经过。不在同一侧,只要有一点不和其他点不在同一侧,就肯定经过。 如果格子数很多的话上面效率肯定不高,格子都是有边长的正方形,还要计算每个格子四个顶点,大家有没有类似问题比较好的解决办法呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
没有好办法么
02_递归-小游戏1
因此你决定编写一个小游戏• 游戏在一个分割成 w * h 个正方
格子
的矩形板上进行• 每个正方
格子
上可以有一张游戏卡片, 当然也可以没有小游戏问题描述• 当下面
外汇技术分析.pptx
外汇技术分析.pptx
机器人导航:使用启发式技术在2D阵列中导航机器人。 从初始状态开始,
穿越
障碍物并进入目标状态
机器人导航 使用启发式技术在2D阵列中导航机器人。 从初始状态开始,
穿越
障碍物并进入目标状态
电脑鼠开发指南——基于ARM
所谓“电脑鼠” ,英文名叫做 MicroMouse,是使用嵌入式微控制器、传感器和机电运动部件构成的一种智能行走装置的俗称,它可以在“迷宫”中自动记忆和选择路径,寻找出口,最终达到所设定的目的地。国际电工和电子工程学会(IEEE)每年都要举办一次国际性的电脑鼠走迷宫竞赛,自举办以来参加国踊跃,为此许多大学还开设了“电脑鼠原理和制作”选修课程。
Asuanfa.zip_A星算法_启发式算法_搜索最优路径_障碍最短路径
建立一个30*30带障碍的小地图,包括起点和终点。寻找最短路径。
数据结构与算法
33,025
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章